四、CXF WebService整合Spring
2013-07-25 16:22
411 查看
四、CXF WebService整合Spring
首先,CXF和spring整合需要准备如下jar包文件:这边我是用Spring的jar包是Spring官方提供的,并没有使用CXF中的Spring的jar文件。
添加这么多文件后,首先在web.xml中添加如下配置:
<!-- 加载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>
然后在src目录中,新建一个applicationContext-server.xml文件,文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="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
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd[/code]http://www.springframework.org/schema/context[/code]http://www.springframework.org/schema/context/spring-context-3.0.xsd[/code]http://cxf.apache.org/jaxwshttp://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"/>
下面开始写服务器端代码,首先定制服务器端的接口,代码如下:package com.hoo.service;import javax.jws.WebParam;import javax.jws.WebService;import javax.jws.soap.SOAPBinding;import javax.jws.soap.SOAPBinding.Style;import com.hoo.entity.User;import com.hoo.entity.Users;/*** <b>function:</b>定制客户端请求WebService所需要的接口* @author hoojo* @createDate 2011-3-18 上午08:22:55* @file ComplexUserService.java* @package com.hoo.service* @project CXFWebService* @blog http://blog.csdn.net/IBM_hoojo[/code]* @email hoojo_@126.com* @version 1.0*/@WebService@SOAPBinding(style = Style.RPC)public interface IComplexUserService {public User getUserByName(@WebParam(name = "name") String name);public void setUser(User user);}
下面编写WebService的实现类,服务器端实现代码如下:package com.hoo.service;import java.util.ArrayList;import java.util.Date;import java.util.HashMap;import java.util.List;import javax.jws.WebParam;import javax.jws.WebService;import javax.jws.soap.SOAPBinding;import javax.jws.soap.SOAPBinding.Style;import com.hoo.entity.User;import com.hoo.entity.Users;/*** <b>function:</b> WebService传递复杂对象,如JavaBean、Array、List、Map等* @author hoojo* @createDate 2011-3-18 上午08:22:55* @file ComplexUserService.java* @package com.hoo.service* @project CXFWebService* @blog http://blog.csdn.net/IBM_hoojo[/code]* @email hoojo_@126.com* @version 1.0*/@WebService@SOAPBinding(style = Style.RPC)@SuppressWarnings("deprecation")public class ComplexUserService implements IComplexUserService {public User getUserByName(@WebParam(name = "name") String name) {User user = new User();user.setId(new Date().getSeconds());user.setName(name);user.setAddress("china");user.setEmail(name + "@hoo.com");return user;}public void setUser(User user) {System.out.println("############Server setUser###########");System.out.println("setUser:" + user);}}
注意的是和Spring集成,这里一定要完成接口实现,如果没有接口的话会有错误的。
下面要在applicationContext-server.xml文件中添加如下配置:<bean id="userServiceBean" class="com.hoo.service.ComplexUserService"/><bean id="inMessageInterceptor" class="com.hoo.interceptor.MessageInterceptor"><constructor-arg value="receive"/></bean><bean id="outLoggingInterceptor" class="org.apache.cxf.interceptor.LoggingOutInterceptor"/><!-- 注意下面的address,这里的address的名称就是访问的WebService的name --><jaxws:server id="userService" serviceClass="com.hoo.service.IComplexUserService" address="/Users"><jaxws:serviceBean><!-- 要暴露的 bean 的引用 --><ref bean="userServiceBean"/></jaxws:serviceBean><jaxws:inInterceptors><ref bean="inMessageInterceptor"/></jaxws:inInterceptors><jaxws:outInterceptors><ref bean="outLoggingInterceptor"/></jaxws:outInterceptors></jaxws:server>
下面启动tomcat服务器后,在WebBrowser中请求:
http://localhost:8080/CXFWebService/Users?wsdl
如果你能看到wsdl的xml文件的内容,就说明你成功了,注意的是上面地址的Users就是上面xml配置中的address的名称,是一一对应的。
下面编写客户端请求的代码,代码如下:package com.hoo.client;import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;import com.hoo.entity.User;import com.hoo.service.IComplexUserService;/*** <b>function:</b>请求Spring整合CXF的WebService客户端* @author hoojo* @createDate 2011-3-28 下午03:20:35* @file SpringUsersWsClient.java* @package com.hoo.client* @project CXFWebService* @blog http://blog.csdn.net/IBM_hoojo[/code]* @email hoojo_@126.com* @version 1.0*/public class SpringUsersWsClient {public static void main(String[] args) {//调用WebServiceJaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();factory.setServiceClass(IComplexUserService.class);factory.setAddress("http://localhost:8080/CXFWebService/Users");IComplexUserService service = (IComplexUserService) factory.create();System.out.println("#############Client getUserByName##############");User user = service.getUserByName("hoojo");System.out.println(user);user.setAddress("China-Guangzhou");service.setUser(user);}}
运行后,可以在控制台中看到log4j:WARN No appenders could be found for logger (org.apache.cxf.bus.spring.BusApplicationContext). log4j:WARN Please initialize the log4j system properly. log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. 2011-3-28 18:12:26 org.apache.cxf.service.factory.ReflectionServiceFactoryBean buildServiceFromClass 信息: Creating Service {http://service.hoo.com/}IComplexUserServiceService from class com.hoo.service.IComplexUserService #############Client getUserByName############## 27#hoojo#hoojo@hoo.com#china Tomcat控制台
这个server端是通过Spring整合配置的,下面我们将Client端也通过Spring配置完成整合。
首先增加applicationContext-client.xml配置文件,文件内容如下:<?xml version="1.0" encoding="UTF-8"?><beans xmlns="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/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsd[/code]http://www.springframework.org/schema/context[/code]http://www.springframework.org/schema/context/spring-context-3.0.xsd[/code]http://cxf.apache.org/jaxwshttp://cxf.apache.org/schemas/jaxws.xsd"[/code]><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"/><jaxws:client id="userWsClient" serviceClass="com.hoo.service.IComplexUserService"address="http://localhost:8080/CXFWebService/Users"/></beans>
客户端请求代码如下:package com.hoo.client;import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.hoo.entity.User;import com.hoo.service.IComplexUserService;/*** <b>function:</b>请求Spring整合CXF的WebService客户端* @author hoojo* @createDate 2011-3-28 下午03:20:35* @file SpringUsersWsClient.java* @package com.hoo.client* @project CXFWebService* @blog http://blog.csdn.net/IBM_hoojo[/code]* @email hoojo_@126.com* @version 1.0*/public class SpringUsersWsClient {public static void main(String[] args) {ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext-client.xml");IComplexUserService service = ctx.getBean("userWsClient", IComplexUserService.class);System.out.println("#############Client getUserByName##############");User user = service.getUserByName("hoojo");System.out.println(user);user.setAddress("China-Guangzhou");service.setUser(user);}}
运行后结果如下:#############Client getUserByName############## 45#hoojo#hoojo@hoo.com#china ############Server setUser########### setUser:45#hoojo#hoojo@hoo.com#China-Guangzhou
相关文章推荐
- CXF WebService整合Spring
- webservice之cxf实现[web项目中基于maven与spring整合]
- Spring整合CXF webservice restful 实例
- cxf整合spring实现webservice
- springboot整合cxf发布webservice以及调用
- 五、CXF WebService整合Spring
- Maven+SpringMVC+CXF整合实现webservice服务的发布与调用
- CXF WebService整合Spring
- Android开发中调用Spring CXF整合发布的WebService接口为什么抛出异常错误?
- WebService --- Spring整合CXF --- WS
- Spring整合CXF,发布RSETful 风格WebService
- spring整合cxf方式发布的rest webservice,调用接口
- springboot整合webService CXF时出错
- webservice学习之cxf与spring的整合
- CXF创建WebService实例,与maven和spring整合
- cxf整合spring发布webservice
- WebService之CXF与Spring的整合
- [Java代码] 【WebService】——CXF整合Spring
- CXF和spring整合实现webservice实例(二)
- WebService --- Spring整合CXF --- RS