基于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方法和方法重载,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • Java 超详细讲解类的定义方式和对象的实例化

    Java 超详细讲解类的定义方式和对象的实例化

    Java是一门纯面向对象的语言(Object Oriented Program,继承OOP),在面对对象的世界里面,一切皆为对象。面向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情
    2022-03-03
  • Java 使用JdbcTemplate 中的queryForList发生错误解决办法

    Java 使用JdbcTemplate 中的queryForList发生错误解决办法

    这篇文章主要介绍了Java 使用JdbcTemplate 中的queryForList发生错误解决办法的相关资料,需要的朋友可以参考下
    2017-07-07
  • SpringBoot项目部署到腾讯云的实现步骤

    SpringBoot项目部署到腾讯云的实现步骤

    本文主要介绍了SpringBoot项目部署到腾讯云的实现步骤,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • JavaWeb入门:HttpResponse和HttpRequest详解

    JavaWeb入门:HttpResponse和HttpRequest详解

    这篇文章主要介绍了Django的HttpRequest和HttpResponse对象,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2021-07-07
  • java正则替换sql中的参数实例代码

    java正则替换sql中的参数实例代码

    这篇文章主要给大家介绍了关于java正则替换sql中参数的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-10-10
  • Java 中的CharArrayReader 介绍_动力节点Java学院整理

    Java 中的CharArrayReader 介绍_动力节点Java学院整理

    CharArrayReader 是字符数组输入流。它和ByteArrayInputStream类似,只不过ByteArrayInputStream是字节数组输入流,而CharArray是字符数组输入流。CharArrayReader 是用于读取字符数组,它继承于Reader
    2017-05-05
  • Java logback日志的简单使用

    Java logback日志的简单使用

    这篇文章主要介绍了Java logback日志的使用详解,帮助大家更好的理解和学习使用Java,感兴趣的朋友可以了解下
    2021-03-03
  • Java实现非对称加密的三种方法

    Java实现非对称加密的三种方法

    本文主要介绍了Java实现非对称加密的三种方法,主要包括非对称加密算法--DH(密钥交换),非对称加密算法--RSA,非对称加密算法--EIGamal,具有一定的参考价值,感兴趣的可以了解一下
    2023-12-12
  • myBatis实现三级嵌套复杂对象的赋值问题

    myBatis实现三级嵌套复杂对象的赋值问题

    这篇文章主要介绍了myBatis实现三级嵌套复杂对象的赋值问题,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11

最新评论