Spring整合CXF
来源:互联网 发布:charles游戏修改数据 编辑:程序博客网 时间:2024/06/05 13:27
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.jarspring-beans-4.0.0.RELEASE.jarspring-context-4.0.0.RELEASE.jarspring-core-4.0.0.RELEASE.jarspring-expression-4.0.0.RELEASE.jarspring-web-4.0.0.RELEASE.jar
2.1.2 添加CXF需要的JAR包
asm-3.3.jarcom.springsource.org.apache.commons.httpclient-3.1.0.jarcxf-2.4.2.jarjetty-continuation-7.4.5.v20110725.jarjetty-http-7.4.5.v20110725.jarjetty-io-7.4.5.v20110725.jarjetty-security-7.4.5.v20110725.jarjetty-server-7.4.5.v20110725.jarjetty-util-7.4.5.v20110725.jarneethi-3.0.1.jarwsdl4j-1.6.2.jarxmlschema-core-2.0.jarcommons-codec-1.3.jarcommons-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注解,才能将服务发布出去.
- 五、CXF整合Spring
- CXF整合Spring
- CXF WebService整合Spring
- Spring 整合 CXF
- CXF整合Spring入门教程
- CXF WebService整合Spring
- CXF WebService整合Spring
- cxf和spring整合
- spring+cxf+bonecp整合
- CXF WebService整合Spring
- CXF Spring整合案例
- CXF WebService整合Spring
- cxf和spring整合
- CXF WebService整合Spring
- CXF WebService整合Spring
- CXF WebService整合Spring
- cxf 与 spring整合
- CXF整合spring
- 内存溢出和内存泄漏的区别
- 用clearfix:after消除(DIV块因内部浮动而高度收缩的问题)
- 多线程同步器AQS
- POJ.1222 EXTENDED LIGHTS OUT(高斯消元 异或方程组)
- 选择子序列
- Spring整合CXF
- 清除浮动的作用
- 在 Linux 系统中安装 MySQL 数据库
- C++面试题(1)
- Convert BST to Greater Tree
- HDU
- MySQL字段的增删查改
- 百度之星 1005寻找母串
- 德州扑克 Base 1