CXF与Spring 2.5整合
1.1资源下载
CXF :http://cxf.apache.org (apache-cxf-2.2.10)
?????? Spring:http://www.springsource.com/download(spring2.5.5)
?
1.2系统环境
????????????? JDK版本? :1.6.0_18
????????????? Tomcat版本:6.0?
?
1.3项目构建
第一步:导入CXF相关的类库
?
?
接着导入Spring 依赖的包
?
第二步:配置WEB-INF文件
?
<context-param><param-name>contextConfigLocation</param-name><param-value>WEB-INF/classes/applicationContext.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><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>/ws/*</url-pattern></servlet-mapping>
?
?
?
第三步:编写接口及其实现类
接口类:@WebService public interface IHelloWorld {//@WebParam给参数命名,提高可代码可读性。此项可选public String sayHi(@WebParam(name="text") String text);}实现类:@WebService(endpointInterface = "com.ce.IHelloWorld") public class HelloWorldImpl implements IHelloWorld {public String sayHi(String text) {// TODO Auto-generated method stubSystem.out.println("sayHello is called by " + text);return text;}}
?
?
第四步:对Spring进行配置,向外发布接口
?
?
?
<?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:jaxws="http://cxf.apache.org/jaxws"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.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" /><bean id="jaxWsServiceFactoryBean"value="true" /><property name="dataBinding" ref="aegisBean" /></bean><bean id="aegisBean"/><jaxws:endpoint id="CollectiveServices"implementor="com.ce.impl.HelloWorldImpl" address="/HelloWorld"><jaxws:serviceFactory><ref bean="jaxWsServiceFactoryBean" /></jaxws:serviceFactory></jaxws:endpoint></beans>
?
第五步:服务器端测试
启动tomcat,在浏览器地址栏输入http://localhost:8080/cxf-spring/ws/HelloWorld?wsdl,验证是否配置正确。
?
?
<wsdl:import Lo location="http://localhost:8080/cxf-spring/ws/HelloWorld?wsdl=IHelloWo world.wsdl" namespace="http://ce.com/" /> - <<wsdl:binding name="HelloWorldImplServiceSoapBinding" Ty type="ns1:IHelloWorld"> < <soap:binding style="document" Tr transport="http://schemas.xmlsoap.org/soap/http" /> - < <wsdl:operation name="sayHi"> < <soap:operation soapAction="" style="document" /> - < <wsdl:input name="sayHi"> < <soap:body use="literal" /> </wsdl:input>- < <wsdl:output name="sayHiResponse"> < <soap:body use="literal" /> </wsdl:output> </wsdl:operation> </wsdl:binding>- < <wsdl:service name="HelloWorldImplService">- <<wsdl:port binding="tns:HelloWorldImplServiceSoapBinding" Na name="HelloWorldImplPort"> <soap:address location="http://localhost:8080/cxf-spring/ws/HelloWorld" />
??
?
第六步:编写客户端程序进行测试
private static ClassPathXmlApplicationContext context; @BeforeClass public static void beforeClass() { context = new ClassPathXmlApplicationContext( new String[] { "classpath:client_beans.xml" }); } @AfterClass public static void afterClass() { context = null; } @Test public void testSayHiWithSpringConfig() throws Exception { IHelloWorld client = (IHelloWorld) context.getBean("client"); String response = client.sayHi("Joe"); assertEquals("Joe", response); } @Test public void testSayHiByCode() throws Exception { JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); factory.getInInterceptors().add(new LoggingInInterceptor()); factory.getOutInterceptors().add(new LoggingOutInterceptor()); factory.setServiceClass(IHelloWorld.class); factory.setAddress("http://localhost:8080/cxf-spring/ws/HelloWorld"); IHelloWorld service = (IHelloWorld)factory.create(); assertEquals("Joe", service.sayHi("Joe"));}
?
?