Spring整合CXF

1. 为什么要整合Spring

原因很简单,我们不能每次发布项目的时候都在Main函数中创建对象,交给Spring的IOC来管理是一个好的选择,况且CXF本身就提供了对Spring的支持.

2. 开始整合

2.0 需要的类的创建

这里做一个类似的员工管理的WebService的服务接口
Employee.java

/**
 * 员工类
 */
public class Employee {

    private String name;
    private int age;
    private int id;

    // ... 省略 get/set 方法
}

EmployeeService.java<接口>

/**
 * 员工管理的Service接口
 */
@WebService(name="employeeService")
public interface EmployeeService {
    public void add(@WebParam(name="employee")Employee employee);
    public @WebResult(name="employeeList")List<Employee> findAll();
}

EmployeeServiceImpl.java<实现类>

public class EmployeeServiceImpl implements EmployeeService {

    private List<Employee>employeeList = new ArrayList<Employee>();

    @Override
    public void add(Employee employee) {
        employeeList.add(employee);
    }

    @Override
    public List<Employee> findAll() {
        return employeeList;
    }

}

2.1 添加JAR包

2.1.1 添加Spring的jar包

spring-aop-4.0.0.RELEASE.jar
spring-beans-4.0.0.RELEASE.jar
spring-context-4.0.0.RELEASE.jar
spring-core-4.0.0.RELEASE.jar
spring-expression-4.0.0.RELEASE.jar
spring-web-4.0.0.RELEASE.jar

2.1.2 添加CXF需要的JAR包

asm-3.3.jar
com.springsource.org.apache.commons.httpclient-3.1.0.jar
cxf-2.4.2.jar
jetty-continuation-7.4.5.v20110725.jar
jetty-http-7.4.5.v20110725.jar
jetty-io-7.4.5.v20110725.jar
jetty-security-7.4.5.v20110725.jar
jetty-server-7.4.5.v20110725.jar
jetty-util-7.4.5.v20110725.jar
neethi-3.0.1.jar
wsdl4j-1.6.2.jar
xmlschema-core-2.0.jar
commons-codec-1.3.jar
commons-logging-1.1.1.jar

2.2 配置web.xml

既然交给Spring来管理,当然要配置Spring的ContextLocationListener了
还得配置CXF的CXFServlet

  <!-- 配置Spring的核心监听器 -->
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring.xml</param-value>
  </context-param>

  <!-- 配置CXF框架的Servlet -->
  <servlet>
    <servlet-name>cxf</servlet-name>
    <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
    <!-- 表示服务器启动就加载 -->
    <load-on-startup>0</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>cxf</servlet-name>
    <url-pattern>/ws/*</url-pattern>
  </servlet-mapping>

2.3 spring.xml 配置
记得要在<beans ... >中配置
xmlns:jaxws="http://cxf.apache.org/jaxws"命名空间
http://cxf.apache.org/jaxws
http://cxf.apache.org/schemas/jaxws.xsd

<?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:p="http://www.springframework.org/schema/p"
    xmlns:jaxws="http://cxf.apache.org/jaxws"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
        http://cxf.apache.org/jaxws 
        http://cxf.apache.org/schemas/jaxws.xsd">

    <!-- 配置要暴露的服务的Bean -->
    <bean id="employeeService" class="com.service.cxfspring.EmployeeServiceImpl" />

    <!-- 配置CXF框架的 Bean -->
    <!-- 配置cxf 地址: http://192.168.114.10:8080/CXF_Server/ws/employeeManager 
        组成 : http://192.168.114.10:8080 +CXF_Server( 项目名)+ws(过滤的路径)+/employeeManager(自定义部分) 
        服务类 : 服务的实现类: 拦截器 -->
    <jaxws:server address="/employeeService" serviceClass="com.service.cxfspring.EmployeeService">

        <!-- 服务的实现类 -->
        <jaxws:serviceBean>
            <ref bean="employeeService" />
        </jaxws:serviceBean>

        <!-- 配置输入显示日志信息的拦截器 -->
        <jaxws:inInterceptors>
            <bean class="org.apache.cxf.interceptor.LoggingInInterceptor"></bean>
        </jaxws:inInterceptors>
        <jaxws:outInterceptors>
            <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"></bean>
        </jaxws:outInterceptors>
    </jaxws:server>

</beans>

2.4 发布
1. 启动服务器,Spring会自动配置XML中注册的信息,并发布.
2. 输入URL地址测试
http://localhost:9090/web-service/ws/employeeService?wsdl
3. 得到WSDL描述文件,说明发布成功了

<?xml version="1.0" ?><wsdl:definitions name="EmployeeServiceService" targetNamespace="http://cxfspring.service.com/" xmlns:ns1="http://schemas.xmlsoap.org/soap/http" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://cxfspring.service.com/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <wsdl:types>
<xs:schema elementFormDefault="unqualified" targetNamespace="http://cxfspring.service.com/" version="1.0" xmlns:tns="http://cxfspring.service.com/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="add" type="tns:add"></xs:element>
<xs:element name="addResponse" type="tns:addResponse"></xs:element>
<xs:element name="findAll" type="tns:findAll"></xs:element>
<xs:element name="findAllResponse" type="tns:findAllResponse"></xs:element>
<xs:complexType name="add">
    <xs:sequence>
      <xs:element minOccurs="0" name="employee" type="tns:employee"></xs:element>
    </xs:sequence>
  </xs:complexType>
<xs:complexType name="employee">
    <xs:sequence>
      <xs:element name="age" type="xs:int"></xs:element>
      <xs:element name="id" type="xs:int"></xs:element>
      <xs:element minOccurs="0" name="name" type="xs:string"></xs:element>
    </xs:sequence>
  </xs:complexType>
<xs:complexType name="addResponse">
    <xs:sequence></xs:sequence>
  </xs:complexType>
<xs:complexType name="findAll">
    <xs:sequence></xs:sequence>
  </xs:complexType>
<xs:complexType name="findAllResponse">
    <xs:sequence>
      <xs:element maxOccurs="unbounded" minOccurs="0" name="employeeList" type="tns:employee"></xs:element>
    </xs:sequence>
  </xs:complexType>
</xs:schema>
  </wsdl:types>
  <wsdl:message name="add">
    <wsdl:part element="tns:add" name="parameters">
    </wsdl:part>
  </wsdl:message>
  <wsdl:message name="addResponse">
    <wsdl:part element="tns:addResponse" name="parameters">
    </wsdl:part>
  </wsdl:message>
  <wsdl:message name="findAllResponse">
    <wsdl:part element="tns:findAllResponse" name="parameters">
    </wsdl:part>
  </wsdl:message>
  <wsdl:message name="findAll">
    <wsdl:part element="tns:findAll" name="parameters">
    </wsdl:part>
  </wsdl:message>
  <wsdl:portType name="employeeService">
    <wsdl:operation name="add">
      <wsdl:input message="tns:add" name="add">
    </wsdl:input>
      <wsdl:output message="tns:addResponse" name="addResponse">
    </wsdl:output>
    </wsdl:operation>
    <wsdl:operation name="findAll">
      <wsdl:input message="tns:findAll" name="findAll">
    </wsdl:input>
      <wsdl:output message="tns:findAllResponse" name="findAllResponse">
    </wsdl:output>
    </wsdl:operation>
  </wsdl:portType>
  <wsdl:binding name="EmployeeServiceServiceSoapBinding" type="tns:employeeService">
    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"></soap:binding>
    <wsdl:operation name="add">
      <soap:operation soapAction="" style="document"></soap:operation>
      <wsdl:input name="add">
        <soap:body use="literal"></soap:body>
      </wsdl:input>
      <wsdl:output name="addResponse">
        <soap:body use="literal"></soap:body>
      </wsdl:output>
    </wsdl:operation>
    <wsdl:operation name="findAll">
      <soap:operation soapAction="" style="document"></soap:operation>
      <wsdl:input name="findAll">
        <soap:body use="literal"></soap:body>
      </wsdl:input>
      <wsdl:output name="findAllResponse">
        <soap:body use="literal"></soap:body>
      </wsdl:output>
    </wsdl:operation>
  </wsdl:binding>
  <wsdl:service name="EmployeeServiceService">
    <wsdl:port binding="tns:EmployeeServiceServiceSoapBinding" name="employeeServicePort">
      <soap:address location="http://localhost:9090/web-service/ws/employeeService"></soap:address>
    </wsdl:port>
  </wsdl:service>
</wsdl:definitions>

关于WSDL文件的描述解析,在上篇博客中已经说明,这里便不再赘述了.

2.5 总结

使用Spring整合CXF框架之后是的服务的发布变得更加的方便快捷.
配置也比较简单.需要注意的是Spring来管理的时候默认使用的JaxWsServerFactoryBean来发布的
所以,我们在EmloyeeService处要使用@WebService注解,才能将服务发布出去.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值