温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何基于CXF搭建webService

发布时间:2021-07-13 14:31:37 来源:亿速云 阅读:133 作者:小新 栏目:编程语言

这篇文章将为大家详细讲解有关如何基于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”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI