`
danwind
  • 浏览: 232685 次
  • 性别: Icon_minigender_1
  • 来自: 广东
社区版块
存档分类
最新评论

将CXF整合到SSH项目

 
阅读更多


在ssh项目已开发中,嵌套使用CXF
 

1 http://www.apache.org/网站下载CXF项目。准备以下JAR包

 

 

 

2 编写服务端 
2.1 新建一个空的WEB工程,我这里命名为ws_test,将其放置于TOMCAT的webapps目录; 
2.2 然后在ws_test下面建立WEB-INF文件夹,并在WEB-INF文件夹中建立目录lib; 
2.3 将上面提到的JAR包都拷贝到lib目录中; 
2.4 在WEB-INF目录中新建web.xml文件,并将如下内容放于其中:

 

[html] view plaincopy
  1. <?xml version="1.0" encoding="ISO-8859-1"?>  
  2. <web-app xmlns="http://java.sun.com/xml/ns/javaee"  
  3.    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"  
  5.    version="2.5">   
  6.     <description>  
  7.       Web Service Test.  
  8.     </description>      
  9.     <display-name>Web Service Test</display-name>      
  10.         <listener>  
  11.             <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  12.         </listener>  
  13.         <context-param>  
  14.             <param-name>contextConfigLocation</param-name>  
  15.             <param-value>classpath*:applicationContext-server.xml</param-value>  
  16.         </context-param>        
  17.         <listener>  
  18.             <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>  
  19.         </listener>         
  20.         <servlet>  
  21.             <servlet-name>CXFService</servlet-name>  
  22.             <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>  
  23.         </servlet>          
  24.         <servlet-mapping>  
  25.             <servlet-name>CXFService</servlet-name>  
  26.             <url-pattern>/*</url-pattern>  
  27.         </servlet-mapping>  
  28. </web-app>  


这个配置文件是WEB应用的核心配置文件,如Listener的配置,servlet请求的映射等,这里并配置了启动的时候加载SPRING,并初使化我们的WEBSERVICE服务端配置文件。 
2.5 在ECLIPSE中新建JAVA工程,并在工程中新建lib目录,将上面提到的JAR包全部放到lib目录,并将他们全部加入到classpath中; 
2.6 增加服务端的JAVA类:

 

 

[java] view plaincopy
  1. package com.use.test.ws.entity;  
  2. public class User {  
  3.     int id ;  
  4.     String name = null;  
  5.     String address = null;    
  6.     String email = null;  
  7.     public int getId() {  
  8.         return id;  
  9.     }  
  10.     public void setId(int id) {  
  11.         this.id = id;  
  12.     }  
  13.     public String getName() {  
  14.         return name;  
  15.     }  
  16.     public void setName(String name) {  
  17.         this.name = name;  
  18.     }     
  19.     public String getAddress() {  
  20.         return address;  
  21.     }  
  22.     public void setAddress(String address) {  
  23.         this.address = address;  
  24.     }     
  25.     public String getEmail() {  
  26.         return email;  
  27.     }  
  28.     public void setEmail(String email) {  
  29.         this.email = email;  
  30.     }         
  31. }  

 

[java] view plaincopy
  1. package com.use.test.ws.server;  
  2.    
  3. import javax.jws.WebParam;  
  4.    
  5. import javax.jws.WebService;  
  6.    
  7. import javax.jws.soap.SOAPBinding;  
  8.    
  9. import javax.jws.soap.SOAPBinding.Style;  
  10.    
  11. import com.use.test.ws.entity.User;  
  12.    
  13. /** 
  14.  * <b>function:</b>定制客户端请求WebService所需要的接口 
  15.  */  
  16.    
  17. @WebService  
  18.    
  19. @SOAPBinding(style = Style.RPC)  
  20.    
  21. public interface IService {  
  22.     public User getUserByName(@WebParam(name = "name") String name);  
  23.     public void setUser(User user);  
  24. }  

 

 

 

[java] view plaincopy
  1. package com.use.test.ws.server;  
  2.    
  3. import java.util.Date;  
  4. import javax.jws.WebParam;  
  5. import javax.jws.WebService;  
  6. import javax.jws.soap.SOAPBinding;  
  7. import javax.jws.soap.SOAPBinding.Style;  
  8. import com.use.test.ws.entity.User;  
  9.    
  10. /** 
  11.  * <b>function:</b> WebService传递复杂对象,如JavaBean、Array、List、Map等 
  12.  */  
  13. @WebService  
  14. @SOAPBinding(style = Style.RPC)  
  15. @SuppressWarnings("deprecation")  
  16. public class TestService implements IService {  
  17.     public User getUserByName(@WebParam(name = "name") String name) {  
  18.         User user = new User();  
  19.         user.setId(new Date().getSeconds());  
  20.         user.setName(name);  
  21.         user.setAddress("china");  
  22.         user.setEmail(name + "@test.com");  
  23.         return user;  
  24.     }  
  25.     public void setUser(User user) {  
  26.         System.out.println("############Server setUser###########");  
  27.         System.out.println("setUser:" + user);  
  28.     }  
  29. }  


2.7 在src目录下建立applicationContext-client.xml,并放入以下内容:

 

 

  1. <span xmlns="http://www.w3.org/1999/xhtml" style=""><span xmlns="http://www.w3.org/1999/xhtml" style=""><?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:context="http://www.springframework.org/schema/context"  
  4.     xmlns:jaxws="http://cxf.apache.org/jaxws"  
  5.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  6.     xsi:schemaLocation="http://www.springframework.org/schema/beans  
  7.     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
  8.     http://www.springframework.org/schema/context  
  9.     http://www.springframework.org/schema/context/spring-context-3.0.xsd  
  10.     http://cxf.apache.org/jaxws   
  11.     http://cxf.apache.org/schemas/jaxws.xsd">      
  12.     <import resource="classpath:META-INF/cxf/cxf.xml"/>  
  13.     <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/>  
  14.     <import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>     
  15.     <bean id="userServiceBean" class="com.use.test.ws.server.TestService"/>         
  16.     <bean id="inMessageInterceptor" class="org.apache.cxf.interceptor.LoggingInInterceptor"/>    
  17.     <bean id="outLoggingInterceptor" class="org.apache.cxf.interceptor.LoggingOutInterceptor"/>  
  18.     <jaxws:server id="userService" serviceClass="com.use.test.ws.server.IService" address="/Users">  
  19.         <jaxws:serviceBean>  
  20.             <ref bean="userServiceBean"/>  
  21.         </jaxws:serviceBean>  
  22.         <jaxws:inInterceptors>  
  23.             <ref bean="inMessageInterceptor"/>  
  24.         </jaxws:inInterceptors>  
  25.         <jaxws:outInterceptors>  
  26.             <ref bean="outLoggingInterceptor"/>  
  27.         </jaxws:outInterceptors>  
  28.     </jaxws:server>  
  29. </beans>  
  30. </span></span><span style="color:#099000;"><span style="color:#000000;font-weight: bold;"><span style="color:#000000;font-weight: bold;"></span></span></span>  

 

2.8 将建立的JAVA工程导出jar包,只导出src下面的内容即,并将这个jar包放到上面的TOMCAT工程中的ws_test/WEB-INF/lib目录下,并启动TOMCAT服务器; 
2.9 启动成功后,此时访问URL:http://localhost:8080/ws_test/Users?wsdl,应该会看到WSDL的输出。

3 编写客户端 
3.1 独立的客户端请求类

 

[java] view plaincopy
  1. package com.use.test.ws.client;  
  2. import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;  
  3. import com.use.test.ws.entity.User;  
  4. import com.use.test.ws.server.IService;  
  5. public class TestClient {  
  6.     public static void main(String[] args) {  
  7.         JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();  
  8.         factory.setServiceClass(IService.class);  
  9.         factory.setAddress("http://localhost:8080/ws_test/Users");  
  10.         IService service = (IService) factory.create();  
  11.         System.out.println("#############Client getUserByName##############");  
  12.         User user = service.getUserByName("hoojo");  
  13.         System.out.println(user);  
  14.         user.setAddress("China-Guangzhou");  
  15.         service.setUser(user);  
  16.     }  
  17. }  


点击右键就可以运行这个类。 
3.2 与SPRING的集成,首先需要在src下面建立配置文件applicationContext-client.xml,将输入以下内容:

 

 

[html] view plaincopy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:context="http://www.springframework.org/schema/context"  
  4.     xmlns:jaxws="http://cxf.apache.org/jaxws"  
  5.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  6.     xsi:schemaLocation="http://www.springframework.org/schema/beans  
  7.     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
  8.     http://www.springframework.org/schema/context  
  9.     http://www.springframework.org/schema/context/spring-context-3.0.xsd  
  10.     http://cxf.apache.org/jaxws  
  11.     http://cxf.apache.org/schemas/jaxws.xsd">  
  12.     <import resource="classpath:META-INF/cxf/cxf.xml"/>  
  13.     <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/>  
  14.     <import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>  
  15.     <jaxws:client id="userWsClient" serviceClass="com.use.test.ws.server.IService" address="http://localhost:8080/ws_test/Users"/>  
  16. </beans>  


3.3 建立JAVA类

 

 

[java] view plaincopy
  1. package com.use.test.ws.client;  
  2.    
  3. import org.springframework.context.ApplicationContext;  
  4. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  5. import com.use.test.ws.entity.User;  
  6. import com.use.test.ws.server.IService;  
  7.    
  8. /** 
  9.  * <b>function:</b>请求Spring整合CXF的WebService客户端 
  10.  */  
  11.    
  12. public class SpringUsersWsClient {  
  13.     public static void main(String[] args) {  
  14.         ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext-client.xml");  
  15.         IService service = ctx.getBean("userWsClient", IService.class);  
  16.         System.out.println("#############Client getUserByName##############");  
  17.         User user = service.getUserByName("hoojo");  
  18.         System.out.println(user);  
  19.         user.setAddress("China-Guangzhou");  
  20.         service.setUser(user);  
  21.     }  
  22. }  

 

 

直接运行这个类就OK了。

 

 

原文转载自:http://blog.csdn.net/fenglibing/article/details/16842587

 

 

在此基础上使用遇到了一些问题(很多是由于包未导入,因为cxf的包实在太多)

1.The prefix "jaxws" for element "jaxws:server" is not bound.

解决方法:首先导入cxf的包,然后在头部增加xmlns:jaxws="http://cxf.apache.org/jaxws"

且将http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd插入xsi:schemaLocation中去。

2.加载配置文件失败cxf.xml

解决方法:首先导入cxf的包,然后使用<import resource="classpath*:META-INF/cxf/cxf.xml"/> 

注意classpath后面需要加入*。

3.关掉 available soap services page

这个坑爹的问题由于缺少stax2-api-3.1.4.jar包,启动没异常,调用出异常。

再则是匹配路径导致的:例如 <jaxws:server id="userService" serviceClass="org.service.IUserService" address="/webservice/user">  配置了一个地址,在web-xml文件的匹配地址/webservice/*

导致输出这个available soap services page。

CXF应该是web-xml文件的匹配地址/webservice/*在这里找到servlet类,然后地址配置这个就可以address="user"> 找到

 

分享到:
评论

相关推荐

    ssh+cxf整合发布webservice实例

    SSH+CXF整合发布Web服务...总结,本实例提供了SSH+CXF整合发布Web服务的详细步骤,从项目构建到配置,再到测试运行,覆盖了整个流程。通过学习和实践这个例子,开发者可以更好地理解和掌握企业级Web服务的开发技巧。

    ssh+cxf整合及单个cxf测试样例

    在SSH+CXF整合中,Struts的Action可以通过Spring的依赖注入获取到由CXF发布的服务,调用服务接口实现业务功能。为了使Struts能够与Spring无缝集成,通常会使用Spring-Struts插件,它使得Struts的Action可以直接声明...

    ssh整合cxf(webservice)

    ssh框架整合cxf(webservice),ssh案例(增、删、改、查),发布webservice,客户端调用,该工程自带jar包,mysql连接池,自动建库、建表。 ①直接解压,导入ssh2cxf项目 ②用tomcat启动ssh2cxf项目 ③在浏览器输入...

    CXF WebServices整合SSH2和Uploadify上传控件

    本项目主要涉及了三个核心技术:CXF WebServices、SSH2以及Uploadify上传控件,这三者在IT领域都有重要的应用价值。这里我们将深入探讨这些技术及其整合过程。 **CXF WebServices** CXF(CXF - The Apache CXF ...

    SSH整合cxf webservice实例

    将SSH与CXF整合,可以实现高效、灵活的Web服务开发。下面我们将详细探讨如何在SSH框架下整合CXF,创建一个完整的Webservice实例。 1. **Spring整合CXF** Spring是SSH中的核心,负责管理整个应用的依赖注入。整合...

    slf4j-all-log4j12-1.4.3.jar.zip CXF整合SSH你可能需要它

    6. **测试与部署**:通过单元测试和集成测试验证整合是否成功,然后将应用打包部署到服务器。 整合SLF4J和Log4j 1.2的目的是为了获得更灵活的日志控制,而CXF与SSH的整合则有助于构建一个完整的、基于Web服务的后端...

    slf4j-api.jar.zip CXF整合SSH你可能需要它

    总的来说,SLF4J-api.jar.zip中的内容是用于Java项目中日志记录的基础,而CXF的整合需要考虑如何将它与SSH框架协同工作,以便构建一个功能完善的、可维护的企业级应用。在实际开发中,正确理解和使用这些组件可以极...

    SSH+CXF(含jar包和数据库),决对可用

    解压后,开发者可以查看和学习如何整合SSH和CXF来实现数据库操作的服务化。 **\no.txt**: 这个文件名没有明确的上下文,但通常在项目中可能是用来标记或者记录某些信息的文本文件,例如说明、日志或者版本信息等。...

    Spring整合CXF,发布RSETful 风格WebService

    在本文中,我们将探讨如何将Spring与Apache CXF框架整合,以发布RESTful风格的Web服务。RESTful Web服务是一种轻量级的架构风格,它基于HTTP协议,使用URI(Uniform Resource Identifier)来定位资源,通过HTTP方法...

    CXF创建Webservice接口与Spring整合实例

    5. **整合SSH框架**:在上述示例中,我们已经使用了Spring来配置CXF。接下来,可以利用Spring的AOP(面向切面编程)来处理用户认证。创建一个切面类,使用`@Before`注解拦截登录请求,检查用户凭证。同时,可以利用...

    ssh-dwr.rar_cxf_dwr_dwr stru_spring dwr_ssh购物车

    综上所述,这个“ssh-dwr.rar”压缩包包含了一个使用SSH(Spring、Struts、Hibernate)架构,并整合DWR的购物车应用示例。开发者可以通过学习这些代码来理解如何在实际项目中集成这些技术,实现一个完整的前后端交互...

    xfire ssh+delphi

    标题中的“xfire ssh+delphi”表明这是一个关于在Delphi开发环境中整合XFire库与SSH(Secure Shell)服务的项目。XFire是一款用于创建Web服务的开源Java库,而SSH则是一种网络协议,用于安全地远程登录和传输数据。...

    cxf-spring 服务端and客户端

    同时,“2个工程都是与SSH结合使用”表明项目不仅涉及到CXF和Spring,还整合了Struts、Hibernate和Spring(SSH)这三个经典的Java EE开发框架。SSH组合常用于构建MVC架构的企业级应用,其中Struts处理表现层,...

    java_webservice_JAX-RS.zip_cxf_jax_jax-rs_spring cxf

    本教程将深入探讨如何在SSH(Spring、Struts、Hibernate)架构中集成Web服务,以及如何利用CXF和Spring框架发布这些服务。 **1. SSH架构** SSH(Spring、Struts、Hibernate)是Java开发中的经典MVC(Model-View-...

    webservice整合spring+xfire+Hibernate(包含代码+配置手册 测试通过)

    一步一步详细的配置说明。外加代码。jar包太大只好截图相送。解决一下问题:1.在网上找到的资料大多是低版本,遇到的问题是读取xml失败 2.网上资料大多是只有spring+xfire 含有Hibernate的少 3.... 4.... 5....

    s2sh框架+cxf接口.rar

    【标题】"s2sh框架+cxf接口"指的是一个整合了Struts2、Spring和Hibernate三个框架,并且集成了CXF服务接口的项目压缩包。这个压缩文件包含了进行相关开发所需的依赖库,对于想要在Java Web环境中使用这些技术栈的人...

    CXF2.7.10 ftp资源上传

    3. **CXF与FTP集成**:CXF通过提供FTP客户端库,使开发人员能够将FTP服务整合进他们的应用程序中。这样,用户可以通过CXF接口执行FTP命令,比如上传文件。 4. **FTP客户端编程**:在CXF中实现FTP上传,需要使用FTP...

    业余框架整合-SSHD-(1)-整体概述(2011-12-03更新)

    这篇教程可能是2011年12月3日更新的,旨在帮助开发者理解如何在他们的项目中整合这两个不同的技术栈。 描述中提到的“博文链接:https://littleant.iteye.com/blog/904309”表明该内容可能是在iteye这个技术社区...

    struts2+spring2.5+hibernate3.1整合包

    该整合包是我做的视频系统,资源管理系统,及考场系统项目中lib里打包出来的,应用中还有别的包我给选出来了,由于整个整合包太大,我只抽取了ssh2的相关包打包发布了,如果有别的应用整合包的需求可以联系我。...

    hibernate_spring_struts框架资料

    描述中提到的“详细分析hibernate,spring,struts的集成和相关技术”,意味着这些资料会涵盖如何将这三个框架组合在一起,以及在实际项目中如何使用它们。"快来拍砖"是一种网络用语,意味着欢迎读者提出批评和建议...

Global site tag (gtag.js) - Google Analytics