五、CXF WebService整合Spring
2011-03-30 10:50
465 查看
首先,CXF和spring整合需要准备如下jar包文件:
这边我是用Spring的jar包是Spring官方提供的,并没有使用CXF中的Spring的jar文件。
添加这么多文件后,首先在web.xml中添加如下配置:
[/code]
然后在src目录中,新建一个applicationContext-server.xml文件,文件内容如下:
这边我是用Spring的jar包是Spring官方提供的,并没有使用CXF中的Spring的jar文件。
添加这么多文件后,首先在web.xml中添加如下配置:
[code]<!--加载Spring容器配置-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--设置Spring容器加载配置文件路径-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:applicationContext-server.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
</listener>
<servlet>
<servlet-name>CXFService</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CXFService</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
[/code]
然后在src目录中,新建一个applicationContext-server.xml文件,文件内容如下:
[code]<?xmlversion="1.0"encoding="UTF-8"?>
<beansxmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans>
'target='_blank'>http://www.springframework.org/schema/beans/spring-beans-3.0.xsd[/code] 'target='_blank'>http://www.springframework.org/schema/context[/code] 'target='_blank'>http://www.springframework.org/schema/context/spring-context-3.0.xsd[/code] http://cxf.apache.org/jaxwshttp://cxf.apache.org/schemas/jaxws.xsd"
[/code]
注意上面的带下划线加粗部分,这个很重要的哦!不能写错或是遗漏了。
添加完这个文件后,还需要在这个文件中导入这么几个文件。文件内容如下:
[code]<importresource="classpath:META-INF/cxf/cxf.xml"/><importresource="classpath:META-INF/cxf/cxf-extension-soap.xml"/><importresource="classpath:META-INF/cxf/cxf-servlet.xml"/>
[/code]
下面开始写服务器端代码,首先定制服务器端的接口,代码如下:
[code]packagecom.hoo.service;importjavax.jws.WebParam;importjavax.jws.WebService;importjavax.jws.soap.SOAPBinding;importjavax.jws.soap.SOAPBinding.Style;importcom.hoo.entity.User;importcom.hoo.entity.Users;/***<b>function:</b>定制客户端请求WebService所需要的接口*@authorhoojo*@createDate2011-3-18上午08:22:55*@fileComplexUserService.java*@packagecom.hoo.service*@projectCXFWebService*@blog'target='_blank'>http://blog.csdn.net/IBM_hoojo[/code] *@emailhoojo_@126.com*@version1.0*/@WebService@SOAPBinding(style=Style.RPC)publicinterfaceIComplexUserService{publicUsergetUserByName(@WebParam(name="name")Stringname);publicvoidsetUser(Useruser);}
[/code]
下面编写WebService的实现类,服务器端实现代码如下:
[code]packagecom.hoo.service;importjava.util.ArrayList;importjava.util.Date;importjava.util.HashMap;importjava.util.List;importjavax.jws.WebParam;importjavax.jws.WebService;importjavax.jws.soap.SOAPBinding;importjavax.jws.soap.SOAPBinding.Style;importcom.hoo.entity.User;importcom.hoo.entity.Users;/***<b>function:</b>WebService传递复杂对象,如JavaBean、Array、List、Map等*@authorhoojo*@createDate2011-3-18上午08:22:55*@fileComplexUserService.java*@packagecom.hoo.service*@projectCXFWebService*@blog'target='_blank'>http://blog.csdn.net/IBM_hoojo[/code] *@emailhoojo_@126.com*@version1.0*/@WebService@SOAPBinding(style=Style.RPC)@SuppressWarnings("deprecation")publicclassComplexUserServiceimplementsIComplexUserService{publicUsergetUserByName(@WebParam(name="name")Stringname){Useruser=newUser();user.setId(newDate().getSeconds());user.setName(name);user.setAddress("china");user.setEmail(name+"@hoo.com");returnuser;}publicvoidsetUser(Useruser){System.out.println("############ServersetUser###########");System.out.println("setUser:"+user);}}
[/code]
注意的是和Spring集成,这里一定要完成接口实现,如果没有接口的话会有错误的。
下面要在applicationContext-server.xml文件中添加如下配置:
[code]<beanid="userServiceBean"class="com.hoo.service.ComplexUserService"/><beanid="inMessageInterceptor"class="com.hoo.interceptor.MessageInterceptor"><constructor-argvalue="receive"/></bean><beanid="outLoggingInterceptor"class="org.apache.cxf.interceptor.LoggingOutInterceptor"/><!--注意下面的address,这里的address的名称就是访问的WebService的name--><jaxws:serverid="userService"serviceClass="com.hoo.service.IComplexUserService"address="/Users"><jaxws:serviceBean><!--要暴露的bean的引用--><refbean="userServiceBean"/></jaxws:serviceBean><jaxws:inInterceptors><refbean="inMessageInterceptor"/></jaxws:inInterceptors><jaxws:outInterceptors><refbean="outLoggingInterceptor"/></jaxws:outInterceptors></jaxws:server>
[/code]
下面启动tomcat服务器后,在WebBrowser中请求:http://localhost:8080/CXFWebService/Users?wsdl
如果你能看到wsdl的xml文件的内容,就说明你成功了,注意的是上面地址的Users就是上面xml配置中的address的名称,是一一对应的。
下面编写客户端请求的代码,代码如下:
[code]packagecom.hoo.client;importorg.apache.cxf.jaxws.JaxWsProxyFactoryBean;importcom.hoo.entity.User;importcom.hoo.service.IComplexUserService;/***<b>function:</b>请求Spring整合CXF的WebService客户端*@authorhoojo*@createDate2011-3-28下午03:20:35*@fileSpringUsersWsClient.java*@packagecom.hoo.client*@projectCXFWebService*@blog'target='_blank'>http://blog.csdn.net/IBM_hoojo[/code] *@emailhoojo_@126.com*@version1.0*/publicclassSpringUsersWsClient{publicstaticvoidmain(String[]args){//调用WebServiceJaxWsProxyFactoryBeanfactory=newJaxWsProxyFactoryBean();factory.setServiceClass(IComplexUserService.class);factory.setAddress("http://localhost:8080/CXFWebService/Users");IComplexUserServiceservice=(IComplexUserService)factory.create();System.out.println("#############ClientgetUserByName##############");Useruser=service.getUserByName("hoojo");System.out.println(user);user.setAddress("China-Guangzhou");service.setUser(user);}}
[/code]
运行后,可以在控制台中看到log4j:WARNNoappenderscouldbefoundforlogger(org.apache.cxf.bus.spring.BusApplicationContext).
log4j:WARNPleaseinitializethelog4jsystemproperly.
log4j:WARNSeehttp://logging.apache.org/log4j/1.2/faq.html#noconfigformoreinfo.
2011-3-2818:12:26org.apache.cxf.service.factory.ReflectionServiceFactoryBeanbuildServiceFromClass
信息:CreatingService{http://service.hoo.com/}IComplexUserServiceServicefromclasscom.hoo.service.IComplexUserService
#############ClientgetUserByName##############
27#hoojo#hoojo@hoo.com#china
Tomcat控制台
这个server端是通过Spring整合配置的,下面我们将Client端也通过Spring配置完成整合。
首先增加applicationContext-client.xml配置文件,文件内容如下:
[code]<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:context="http://www.springframework.org/schema/context"xmlns:jaxws="http://cxf.apache.org/jaxws"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans>'target='_blank'>http://www.springframework.org/schema/beans/spring-beans-3.0.xsd[/code] 'target='_blank'>http://www.springframework.org/schema/context[/code] 'target='_blank'>http://www.springframework.org/schema/context/spring-context-3.0.xsd[/code] http://cxf.apache.org/jaxws 'target='_blank'>http://cxf.apache.org/schemas/jaxws.xsd"[/code] <importresource="classpath:META-INF/cxf/cxf.xml"/><importresource="classpath:META-INF/cxf/cxf-extension-soap.xml"/><importresource="classpath:META-INF/cxf/cxf-servlet.xml"/><jaxws:clientid="userWsClient"serviceClass="com.hoo.service.IComplexUserService"address="http://localhost:8080/CXFWebService/Users"/></beans>
[/code]
客户端请求代码如下:
[code]packagecom.hoo.client;importorg.apache.cxf.jaxws.JaxWsProxyFactoryBean;importorg.springframework.context.ApplicationContext;importorg.springframework.context.support.ClassPathXmlApplicationContext;importcom.hoo.entity.User;importcom.hoo.service.IComplexUserService;/***<b>function:</b>请求Spring整合CXF的WebService客户端*@authorhoojo*@createDate2011-3-28下午03:20:35*@fileSpringUsersWsClient.java*@packagecom.hoo.client*@projectCXFWebService*@blog'target='_blank'>http://blog.csdn.net/IBM_hoojo[/code] *@emailhoojo_@126.com*@version1.0*/publicclassSpringUsersWsClient{publicstaticvoidmain(String[]args){ApplicationContextctx=newClassPathXmlApplicationContext("applicationContext-client.xml");IComplexUserServiceservice=ctx.getBean("userWsClient",IComplexUserService.class);System.out.println("#############ClientgetUserByName##############");Useruser=service.getUserByName("hoojo");System.out.println(user);user.setAddress("China-Guangzhou");service.setUser(user);}}
[/code]
运行后结果如下:#############ClientgetUserByName##############
45#hoojo#hoojo@hoo.com#china
############ServersetUser###########
setUser:45#hoojo#hoojo@hoo.com#China-Guangzhou
相关文章推荐
- Web Service学习-CXF与Spring整合为JavaEE应用发布WebService(三)
- WebService简单例子--cxf整合spring
- Spring boot 整合CXF开发webService
- CXF整合spring实现webservice
- Spring整合CXF,发布RSETful 风格WebService
- Spring+CXF整合来管理webservice
- CXF WebService整合Spring
- webservice之cxf及整合spring自学结果
- Spring整合CXF发布WebService
- WebService(CXF发布WebService服务与Spring整合)(2)
- CXF开发webservice与Spring的整合1…
- Spring整合CXF配置WebService服务发布
- WebService学习之三:spring+cxf整合
- webservice-cxf-与spring整合
- 五、CXF WebService整合Spring
- CXF3.0.1以后版本 webService 整合Spring 提示找不到cxf-extension-soap.xml
- 框架 day64 WebService(注解),CXF框架(jax-ws,Jax-rs,与spring整合)
- Spring整合CXF发布WebService
- CXF和Spring整合实现WebService服务端、客户端
- httpclient4.x调用cxf发布的webservice的某个方法(有参数,有返回值)(未整合spring)