基于CXF搭建webService的实例讲解

 更新时间:2017年11月12日 10:46:32   作者:水波粼粼  
下面小编就为大家带来一篇基于CXF搭建webService的实例讲解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

1.导入相关jar包,具体哪些包我记不太清了

2.在applicationContext中加入相关配置信息,如下所示:

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:jaxws="http://cxf.apache.org/jaxws" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
              http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
              http://www.springframework.org/schema/context 
              http://www.springframework.org/schema/context/spring-context-3.0.xsd 
              http://cxf.apache.org/jaxws 
              http://cxf.apache.org/schemas/jaxws.xsd"> 
 
    <context:component-scan base-package="com.cxf.bo"/> 
   
    <import resource="classpath:META-INF/cxf/cxf.xml"/> 
    <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/> 
    <import resource="classpath:META-INF/cxf/cxf-servlet.xml"/> 
    
    <jaxws:endpoint 
      id="OrderWS" 
      implementor="com.cxf.spring.ws.OrderWSImpl"//类所在地址或者#+对应bean的id
      address="/OrderWS" > //随意命名
      <jaxws:features> 
       <bean class="org.apache.cxf.feature.LoggingFeature" /> 
      </jaxws:features> 
    </jaxws:endpoint> 
</beans>

3.在web.xml文件中加入:

<!-- cxf配置 -->
   <servlet> 
    <servlet-name>CXFServlet</servlet-name> 
    <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
  </servlet> 
  <servlet-mapping> 
    <servlet-name>CXFServlet</servlet-name> 
    <url-pattern>/CXFServlet/*</url-pattern> 
  </servlet-mapping>

4.在service层加入:

@WebService
public interface OrderWS {
  @WebMethod
  public Order getOrderById(int id);
}

5.若存在struts2,会发生冲突,则重写过滤器

5.1 写一个类ExtendStrutsFilter:

package com.nbu.retailer.filter;

import java.io.IOException;

import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 

import org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter;

public class ExtendStrutsFilter extends StrutsPrepareAndExecuteFilter{
  private static Logger log = LoggerFactory.getLogger(ExtendStrutsFilter.class); 
  @Override 
  public void doFilter(ServletRequest req, ServletResponse res,FilterChain chain) 
      throws IOException, ServletException { 
      try { 
        HttpServletRequest request = (HttpServletRequest) req; 
        // 判断是否是向WebService发出的请求 
        if (request.getRequestURI().contains("/CXFServlet")) { 
           // 如果是来自向CXFService发出的请求 
           chain.doFilter(req, res); 
         } 
         else { 
           // 默认action请求 
            super.doFilter(req, res, chain); 
         } 
       } 
      catch (Exception e) { 
         log.error(e.getMessage()); 
         e.printStackTrace(); 
      } 
  } 

}

5.2 在web.xml中改变过滤器的地址:

<!-- struts2的过滤器-->
   <filter>
    <filter-name>struts2</filter-name>
    <!--
      <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    -->
    <!-- 自定义struts2过虑器类 用于解决struts2把cxf的请求当action处理的问题-->
    <filter-class>com.nbu.retailer.filter.ExtendStrutsFilter</filter-class>
  </filter>

5.3 注意,CXF的url和struts2的url不能相同。之前就这个问题困扰了我好久才发现的。

以上这篇基于CXF搭建webService的实例讲解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 详解Java的位运算

    详解Java的位运算

    这篇文章主要介绍了详解Java的位运算,程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算就是直接对整数在内存中的二进制位进行操作,需要的朋友可以参考下
    2023-04-04
  • Java集合框架迭代器Iterator实现原理解析

    Java集合框架迭代器Iterator实现原理解析

    这篇文章主要介绍了Java集合框架迭代器Iterator实现原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • java 中冒泡、二分、快速算法详解

    java 中冒泡、二分、快速算法详解

    这篇文章主要介绍了java 中冒泡、二分、快速算法详解的相关资料,需要的朋友可以参考下
    2017-06-06
  • Open-Feign整合hystrix降级熔断实战记录

    Open-Feign整合hystrix降级熔断实战记录

    这篇文章主要介绍了Open-Feign整合hystrix降级熔断实战记录,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • SpringBoot + Shiro前后端分离权限

    SpringBoot + Shiro前后端分离权限

    这篇文章主要为大家详细介绍了SpringBoot + Shiro前后端分离权限,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-12-12
  • SpringBoot使用JUL实现日志记录功能

    SpringBoot使用JUL实现日志记录功能

    在SpringBoot中,我们可以使用多种日志框架进行日志记录,其中,JUL(Java Util Logging)是Java平台自带的日志框架,它提供了简单的 API 和配置,可以轻松地进行日志记录,本文将介绍如何在 SpringBoot中使用JUL进行日志记录,并提供示例代码
    2023-06-06
  • Spring 中使用Quartz实现任务调度

    Spring 中使用Quartz实现任务调度

    这篇文章主要介绍了Spring 中使用Quartz实现任务调度,Spring中使用Quartz 有两种方式,感兴趣的小伙伴们可以参考一下。
    2017-02-02
  • 基于java构造方法Vector修改元素源码分析

    基于java构造方法Vector修改元素源码分析

    本篇文章是关于ava构造方法Vector源码分析系列文章,本文主要介绍了Vector修改元素的源码分析,有需要的朋友可以借鉴参考下,希望可以有所帮助
    2021-09-09
  • SpringBoot入门之集成Druid的方法示例

    SpringBoot入门之集成Druid的方法示例

    这篇文章主要介绍了SpringBoot入门之集成Druid的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • 关于SpringCloud中Ribbon的7种负载均衡策略解析

    关于SpringCloud中Ribbon的7种负载均衡策略解析

    这篇文章主要介绍了关于SpringCloud中Ribbon的7种负载均衡策略解析,服务端负载均衡器的问题是,它提供了更强的流量控制权,但无法满足不同的消费者希望使用不同负载均衡策略的需求,而使用不同负载均衡策略的场景确实是存在的,需要的朋友可以参考下
    2023-07-07

最新评论