当前位置 : 主页 > 网页制作 > Nodejs >

【WebService框架-CXF】——CXF+Spring+自定义拦截器构建WebService服务端

来源:互联网 收集:自由互联 发布时间:2021-06-24
在传统的SSH项目中,我们可以添加一层Web Service。这样就可以允许任何平台,任何语言编写的程序来调用这些对外发布的服务。 在传统的SSH项目中添加WebService层的关键步骤为:如何把

  在传统的SSH项目中,我们可以添加一层Web Service。这样就可以允许任何平台,任何语言编写的程序来调用这些对外发布的服务。

  在传统的SSH项目中添加WebService层的关键步骤为:如何把WebService的类添加到Spring容器中进行管理,如何发布服务。即如何在applicationContext.xml中进行配置。

步骤

1.新建Java Web Project,引入CXFjar包(不包括Jetty和Servlet)

这里我们使用Tomcat服务器,因为Tomcat中自带Servlet的jar包,所以这里我们不再添加Jetty服务器相关Jar包和Servlet的Jar包。

2.引入Springjar包(如果已经是SSH项目,此步可略过)

3.编写web.xml文件,配置监听器

<context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/wsContext.xml /WEB-INF/applicationContext.xml</param-value>
  </context-param>

  <!--在Web应用启动时加载Spring容器 -->
  <listener>
      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

4.在applicationContext.xml中配置shema

需要找到CXF所在的“包”——targetNamespace

http://cxf.apache.org/jaxws

以及CXF约束定义的物理文件
cxf-2.4.0.jar\META-INF

http://cxf.apache.org/schemas/jaxws.xsd=schemas/jaxws.xsd

<beans xmlns="http://www.springframework.org/schema/beans"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns:aop="http://www.springframework.org/schema/aop"
         xmlns:tx="http://www.springframework.org/schema/tx"
         xmlns:jaxws="http://cxf.apache.org/jaxws" 
         xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
           http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"
           >

5.在applicationContext.xml中引入CXF的一些xml。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jaxws="http://cxf.apache.org/jaxws" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd" >


  <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"/>
</beans>

6.在applicationContext.xml配置文件中配置bean和发布的终结点地址以及拦截器

<bean id="userService" class="com.tgb.service.impl.UserServiceImpl"/>
  <bean id="HelloWorldWS" class="com.tgb.ws.impl.HelloWorldWS" >  
    <property name="userService" ref="userService"></property>
  </bean>
 <jaxws:endpoint  implementor="#HelloWorldWS" address="/HelloWorldWS">    
    <jaxws:inInterceptors>
        <bean class="org.apache.cxf.interceptor.LoggingInInterceptor"></bean>
        <bean class="com.tgb.ws.auth.AuthInterceptor"></bean>
    </jaxws:inInterceptors>
 </jaxws:endpoint>

这里注意implementor的名称可以为类的全称,也可以是配置到容器中的bean的id名称,前面加个“#”。
address前省略了项目的地址。

7.在web.xml中配置CXF的Servlet和访问路径

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <display-name></display-name> 
  <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/applicationContext.xml</param-value>
  </context-param>

  <!--在Web应用启动时加载Spring容器 -->
  <listener>
      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

    <servlet>
        <servlet-name>CXF</servlet-name>
        <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>CXF</servlet-name>
        <url-pattern>/webservice/*</url-pattern>
    </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

8.在Tomcat中部署项目并启动,访问http://localhost:8080/CXF_Spring/webservice

我们可以访问http://localhost:8080/CXF_Spring/webservice/HelloWorldWS?wsdl来查看wsdl文档。

总结

在SSH中添加CXF,关键性的两步:

一是在web.xml中配置CXF的核心Servlet 二是在applicationContext.xml中配置Endpoint

网友评论