`
shuai1234
  • 浏览: 971811 次
  • 性别: Icon_minigender_1
  • 来自: 山西
社区版块
存档分类
最新评论

WebService之XFire和SOAP实例(基于JAVA)

    博客分类:
  • java
 
阅读更多

开发环境:jdk1.6 + Tomcat7 + MyEclipse10 
源码下载地址张贴在文章最后面:
首先是使用WSDL协议实现:这里使用XFire 
XFire一个免费、开源的SOAP框架,它构建了POJO和SOA之间的桥梁,主要特性就是支持将POJO通过非常简单的方式发布成Web服务,其原理是以接口反射机制自动取得远程方法的 
WSDL是一个用来描述Web服务和说明如何与Web服务通信的XML语言 

准备:开发之前请先下载xfire-distribution-1.2.6.zip并解压缩 

(1)、新建一个Web项目(服务端),名称为XFireWebService,其目的是为了测试WebService服务端 
为工程添加XFire支持的类库,把xfire-1.2.6里lib所有jar和xfire-all-1.2.6.jar拷贝到工程lib里 

(2)、把XFire加载到系统中来,增加web.xml的配置信息 

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee     
  3.   
  4. http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
  5.   <servlet>  
  6.     <servlet-name>XFireServlet</servlet-name>  
  7.     <servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class>  
  8.     <load-on-startup>0</load-on-startup>  
  9.   </servlet>  
  10.   <servlet-mapping>  
  11.     <servlet-name>XFireServlet</servlet-name>  
  12.     <url-pattern>/servlet/XFireServlet/*</url-pattern>  
  13.   </servlet-mapping>  
  14.   <servlet-mapping>  
  15.     <servlet-name>XFireServlet</servlet-name>  
  16.     <url-pattern>/services/*</url-pattern>  
  17.   </servlet-mapping>  
  18.   <welcome-file-list>  
  19.     <welcome-file>index.jsp</welcome-file>  
  20.   </welcome-file-list>  
  21. </web-app>  



(3)、创建Web服务接口,声明该Web服务对外暴露的接口 

  1. package com.test.ws;  
  2. import java.util.List;  
  3. /** 
  4.  * <p>Title: IHelloService</p> 
  5.  * <p>Description: 定义接口</p> 
  6.  */  
  7. public interface IHelloService {      
  8.     public String getTestString(String str);      
  9.     public ExceedVO getTestObject(EnterVO vo);    
  10.     public List getTestList(List list);  
  11. }  



(4)、创建Web服务实现类,为Web服务接口提供实现 

  1. package com.test.ws;  
  2. import java.util.ArrayList;  
  3. import java.util.List;  
  4. /** 
  5.  * <p>Title: HelloServiceImpl</p> 
  6.  * <p>Description: 接口实现</p> 
  7.  */  
  8. public class HelloServiceImpl implements IHelloService {  
  9.       
  10.     @Override  
  11.     public String getTestString(String str) {  
  12.         return "Hello" + str;  
  13.     }  
  14.       
  15.     @Override  
  16.     public ExceedVO getTestObject(EnterVO vo) {  
  17.         ExceedVO revo = new ExceedVO();  
  18.         revo.setDescStr("名称:"+vo.getName()+"年龄:"+vo.getAge());  
  19.         return revo;  
  20.     }  
  21.       
  22.     @Override  
  23.     public List getTestList(List list) {      
  24.         List<EnterVO> users = new ArrayList<EnterVO>();       
  25.         for(int i=0; i<9; i++){  
  26.             EnterVO user = new EnterVO("姓名"+i, i);  
  27.             users.add(user);  
  28.         }  
  29.         return users;  
  30.     }  
  31. }  



(5)、这两个类是具体的业务实现类,对业务方法的具体实现放在里面 

  1. package com.test.ws;  
  2. import java.io.Serializable;  
  3. /** 
  4.  * <p>Title: EnterVO</p> 
  5.  * <p>Description: 入参对象</p> 
  6.  */  
  7. public class EnterVO implements Serializable {  
  8.     private static final long serialVersionUID = 1L;      
  9.     private String name;      
  10.         private int age;     
  11.     public String getName() {  
  12.         return name;  
  13.     }     
  14.     public void setName(String name) {  
  15.         this.name = name;  
  16.     }     
  17.     public int getAge() {  
  18.         return age;  
  19.     }     
  20.     public void setAge(int age) {  
  21.         this.age = age;  
  22.     }     
  23.     public EnterVO(String name, int age) {  
  24.         this.name = name;  
  25.         this.age = age;  
  26.     }     
  27.     public EnterVO() { }  
  28. }  
  29.   
  30. package com.test.ws;  
  31. import java.io.Serializable;  
  32. /** 
  33.  * <p>Title: ExceedVO</p> 
  34.  * <p>Description: 出参对象</p> 
  35.  */  
  36. public class ExceedVO implements Serializable {  
  37.     private static final long serialVersionUID = 1L;      
  38.     private String descStr;  
  39.     public String getDescStr() {  
  40.         return descStr;  
  41.     }  
  42.     public void setDescStr(String descStr) {  
  43.         this.descStr = descStr;  
  44.     }  
  45. }  



(6)、在src目录下新建一个META-INF/xfire/services.xml,该文件是XFire框架的服务发布文件 

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!-- 服务发布文件 -->  
  3. <beans xmlns="http://xfire.codehaus.org/config/1.0">  
  4.     <service> <!-- service标签和它所包含的xml内容为发布成Web服务的POJO提供完整的描述 -->  
  5.         <name>HelloService</name> <!-- Web服务被发布时所采用的唯一名称 -->  
  6.         <namespace>http://test/HelloService</namespace> <!-- Web服务发布时所使用的命名空间 -->  
  7.         <serviceClass>com.test.ws.IHelloService</serviceClass> <!-- Web服务接口类的全名 -->  
  8.         <implementationClass>com.test.ws.HelloServiceImpl</implementationClass> <!-- Web服务实现类的全名 -->  
  9.         <!-- 不需要接口时,把业务写在serviceClass标签中 -->  
  10.     </service>  
  11. </beans>  



(7)、注意:当用到List等集合类型时,需要定义Mapping关系 
必须与接口同名后缀.aegis.xml,而且要与接口同一位置 

  1. <mappings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  2.   xsi:schemaLocation="http://xfire.codehaus.org/schemas/1.0/mapping.xsd">  
  3.     <!-- XFire可以支持基本类型,但针对集合类型时需要特殊配置 -->  
  4.     <mapping>  
  5.          <method name="getTestList"> <!-- 需要配置的方法名 -->  
  6.             <!-- index="0"代表方法的参数的序号0即第一个参数,componentType属性代表集合参数内包含的类型 -->  
  7.             <parameter index="0" componentType="java.lang.String" />   
  8.             <!-- 配置返回类型,componentType属性代表返回的集合中所包含的类 -->  
  9.             <return-type componentType="com.test.ws.EnterVO" />   
  10.         </method>          
  11.    </mapping>     
  12. </mappings>  

    
web.xml和service.xml都可以通过IDE自动生成,也可以手写 

(8)、到这步webService服务端就基本完成 
部署项目,启动Tomcat,测试一下wsdl,访问http://localhost:8080/XFireWebService/services/HelloService?wsdl 
如果能正确显示wsdl文件,说明刚才的部署成功了!!! 


(9)、再建一个Web项目(客户端),名称为XFireWebClient,其目的是用来调用一个webService服务 
将XFire的库文件拷贝到Web项目的WEB-INF\lib目录下,同时需要将服务器端发布的服务打包发布给客户端,发布给客户端的代码只需要打包接口和参数类即可,实现类不必打包到客户端 
这里发布的jar包名称为IHelloService.jar,里面包含IHelloService、EnterVO、ExceedVO这三个类 

(10)、在这个Web项目里面新建一个Servlet作为测试的Servlet,名称为ClientTestServlet.java 
在web.xml里面配置好这个Servlet后,就可以在Servlet里面写webService调用的代码了 

  1. package com.test.ws;  
  2. import java.io.IOException;  
  3. import java.net.MalformedURLException;  
  4. import java.util.ArrayList;  
  5. import java.util.List;  
  6. import javax.servlet.ServletException;  
  7. import javax.servlet.http.HttpServlet;  
  8. import javax.servlet.http.HttpServletRequest;  
  9. import javax.servlet.http.HttpServletResponse;  
  10. import org.codehaus.xfire.XFire;  
  11. import org.codehaus.xfire.XFireFactory;  
  12. import org.codehaus.xfire.client.XFireProxyFactory;  
  13. import org.codehaus.xfire.service.Service;  
  14. import org.codehaus.xfire.service.binding.ObjectServiceFactory;  
  15. /** 
  16.  * <p>Title: ClientTestServlet</p> 
  17.  * <p>Description: 测试Servlet</p> 
  18.  */  
  19. public class ClientTestServlet extends HttpServlet {  
  20.   
  21.     private static final long serialVersionUID = 1L;  
  22.   
  23.     public void doGet(HttpServletRequest request, HttpServletResponse response)  
  24.             throws ServletException, IOException {  
  25.           
  26.         request.setCharacterEncoding("UTF-8");    
  27.         Service serviceModel = new ObjectServiceFactory().create(IHelloService.class);         
  28.         XFire xfire = XFireFactory.newInstance().getXFire();  
  29.         XFireProxyFactory factory = new XFireProxyFactory(xfire);       
  30.         String serviceUrl = "http://localhost:8080/XFireWebService/services/HelloService";  
  31.         IHelloService client = null;  
  32.         try {  
  33.             client = (IHelloService) factory.create(serviceModel, serviceUrl);  
  34.         } catch (MalformedURLException e) {  
  35.             e.printStackTrace();  
  36.         }      
  37.           
  38.         String str = client.getTestString("Beijing");  
  39.         request.setAttribute("str", str);  
  40.           
  41.         EnterVO enterVO = new EnterVO();  
  42.         enterVO.setName("Yaodi");  
  43.         enterVO.setAge(26);  
  44.         ExceedVO vo = client.getTestObject(enterVO);  
  45.         request.setAttribute("vo", vo);  
  46.           
  47.         List<String> al = new ArrayList<String>();   
  48.         al.add("111");   
  49.         al.add("222");  
  50.         al.add("333");  
  51.         List list = client.getTestList(al);  
  52.         request.setAttribute("list", list);       
  53.           
  54.         request.getRequestDispatcher("/result.jsp").forward(request, response);  
  55.     }  
  56.   
  57.     public void doPost(HttpServletRequest request, HttpServletResponse response)  
  58.             throws ServletException, IOException {  
  59.         doGet(request,response);  
  60.     }  
  61.       
  62. }  



客户端的web.xml如下所示: 

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="2.5"   
  3.     xmlns="http://java.sun.com/xml/ns/javaee"   
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  5.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
  6.     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
  7.   <servlet>  
  8.     <servlet-name>ClientTestServlet</servlet-name>  
  9.     <servlet-class>com.test.ws.ClientTestServlet</servlet-class>  
  10.   </servlet>  
  11.   <servlet-mapping>  
  12.     <servlet-name>ClientTestServlet</servlet-name>  
  13.     <url-pattern>/ClientTest.do</url-pattern>  
  14.   </servlet-mapping>  
  15.   <welcome-file-list>  
  16.     <welcome-file>ClientTest.do</welcome-file>  
  17.   </welcome-file-list>  
  18. </web-app>  



(11)、注意:XFireWebService项目里的IHelloService.aegis.xml文件,也要放到XFireWebClient项目中来,位置与ClientTestServlet.java同级 

(12)、Servlet返回的结果页面:result.jsp 

  1. <%@ page language="java" pageEncoding="UTF-8"%>  
  2. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>  
  3. <%@ page isELIgnored="false"%>  
  4. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  5. <html>  
  6.   <head>  
  7.     <title>测试客户端</title>  
  8.   </head>    
  9.   <body>  
  10.     测试客户端!!!<br>  
  11.     String:${str} <br>  
  12.     Object:${vo.descStr} <br>  
  13.     List:<br>  
  14.     <c:forEach items="${list}" var="list">  
  15.         ${list.name} --- ${list.age} <br>  
  16.     </c:forEach>  
  17.   </body>  
  18. </html>  



(13)、同样将这个Web项目发布,同时启动XFireWebService和XFireWebClient这两个应用,然后在地址栏里面输入http://localhost:8080/XFireWebClient/ 
此时会调用客户端的Servlet,然后调用其doGet方法,如果正常的话,可以看到页面输出结果了(*^__^*) 

 

注:参考文章地址http://di201yao.iteye.com/blog/310292

源码下载地址(测试通过,下载时需要修改tomcat服务器的端口,我用的端口是18080):http://download.csdn.net/detail/carboncomputer/8445449

分享到:
评论

相关推荐

    java webservice基于xfire实例

    总结,Java WebService基于XFire的实例是一个很好的起点,让你了解如何在Java中构建和使用Web服务。通过这个实例,你可以学习到Web服务的基本概念,XFire的使用,以及如何创建和调用Web服务。随着对Web服务的深入...

    xfire实现webservice实例

    XFire通过简化编程模型和强大的注解支持,使得开发者能够快速地将Java接口转换为符合SOAP标准的Web服务。 二、Web服务基础 Web服务基于WS-I(Web Services Interoperability Organization)的标准,如SOAP(Simple ...

    使用XFire实现SOAP的webservice数据传输源码(java)

    描述中提到了"WebService之WSDL和SOAP实例",这进一步说明了我们不仅在谈论SOAP,还涉及到WSDL(Web Services Description Language)。WSDL是XML格式的文档,用于描述Web服务及其接口。当创建一个SOAP服务时,通常...

    webservice Soap和XFire2种方式代码列子

    综上所述,"webservice Soap和XFire2种方式代码列子"的压缩包可能包含使用SOAP协议和XFire框架创建Web服务的示例代码。通过学习这些代码,开发者可以更好地理解如何在Java环境中构建和消费SOAP服务,以及XFire在其中...

    webservice spring xfire的实例

    2. **XFire简介**:XFire是基于Java的SOAP服务器,它简化了Web服务的开发过程,提供了动态WSDL生成、自动数据绑定等功能。XFire的亮点在于其轻量级和对Spring的深度集成,使得开发者可以利用Spring的依赖注入和配置...

    webservice(XFire)实例

    在Java开发中,Webservice是一种常见的用于系统间通信的技术,它基于标准的SOAP(Simple Object Access Protocol)协议。XFire是早期流行的一款开源Java SOAP框架,它提供了轻量级的信息处理机制,利用STAX...

    JAVAEE利用XFIRE创建WEBSERVICE实例

    Xfire是基于Java的SOAP(简单对象访问协议)框架,支持WS-I(Web服务互操作性)标准,使得不同平台和语言之间的服务调用变得可能。它包括了代码生成工具、服务容器和客户端代理生成等功能,简化了Web服务的开发流程...

    xfire webservice 完整实例下载

    XFire Webservice是一个基于Java的开源工具,它简化了创建、部署和消费Web服务的过程。在深入探讨这个完整实例之前,我们首先需要了解Web服务的基本概念。Web服务是一种通过网络进行通信的应用程序接口(API)。它们...

    webservice服务端开发xfire简单实例.rar

    XFire是Java环境中一个轻量级的、高性能的Web Service实现库,它简化了创建和部署Web Service的过程。 首先,我们需要了解WebService的基本概念。WebService是一种基于SOAP(Simple Object Access Protocol)协议的...

    使用xfire实现webservice实例

    XFire是Apache CXF项目的前身,其主要目标是提供一种简单、高性能的方式来实现基于SOAP的Web服务。它支持多种Web服务标准,如WS-I Basic Profile、WS-Security等,并且集成了Spring框架,使得与企业级应用的集成变得...

    用xfire开发webservice实例(原稿)

    XFire是早期流行的一个用于构建SOAP Web服务的Java库,它提供了轻量级且高效的解决方案。由于描述中提到“不包含xfire相关jar包”,这意味着用户在运行此项目时需要自行获取并添加这些依赖库。此外,博文链接指向了...

    webservice xfire spring2.0完整实例

    在这个“webservice xfire spring2.0完整实例”中,我们将会探讨如何结合XFire 1.2.6和Spring 2.0来创建和消费Web服务。首先,我们需要理解Spring 2.0中的Web服务抽象层,即Spring Web Services模块。这个模块提供了...

    xfire webservice 实例

    【xfire webservice 实例】是一个综合性的项目,它整合了xfire、Spring和Hibernate三大技术,用于构建高效、灵活的Web服务。Xfire是一款强大的Java Web服务框架,它简化了创建、部署和消费Web服务的过程。Spring是...

    xfire开发WebService实例

    XFire是早期流行的Java Web服务框架之一,它提供了一种简单的方式来创建和消费Web服务。本篇将深入探讨如何使用XFire开发Web服务实例。 一、XFire简介 XFire是Apache CXF项目的前身,是一个快速、灵活且轻量级的Web...

    xfire-webservice实例(下载即可运行)

    Xfire是基于Apache CXF的早期版本,它提供了一个轻量级、高效的框架,用于构建SOAP和RESTful Web服务。Xfire的主要优势在于它的简洁性,开发者可以快速地创建和调试Web服务,而无需深入理解底层的WS-I标准或WSDL规范...

    Xfire开发webservice与javaweb集成实例

    Xfire基于Java API for XML Processing (JAXP) 和Java API for XML Binding (JAXB),使得开发者能够轻松地将Java对象转换为XML消息,反之亦然。Xfire支持SOAP、WSDL和UDDI等Web服务标准,同时还提供了与Spring框架的...

    webservice_XFire开发相关jar包

    XFire是早期流行的Java Web服务框架之一,它简化了构建和部署Web服务的过程。这个压缩包"webservice_XFire开发相关jar包"包含了XFire开发所需的库文件,解压后可以用于Java项目中实现Web服务的开发。 XFire的核心...

    用XFire开发Webservice简单实例

    XFire(后被整合到 CXF 中)是一款基于Java的Web服务框架,它支持SOAP 1.1/1.2、WSDL 1.1、WS-Security等多种Web服务标准。XFire以其简单易用、高性能和低内存消耗的特点,受到了开发者们的欢迎。它允许开发者使用...

    XFIRE webservice 开发实例

    **XFIRE Webservice 开发实例详解** 在信息技术领域,Webservice是一种基于互联网的、平台无关的交互方式,它允许不同的应用程序之间进行数据交换和功能共享。而XFIRE是一款专为游戏社区设计的软件,它提供了丰富的...

    webservice (xfire,axis2)

    在给定的标题“webservice (xfire,axis2)”中,我们关注的是两个知名的Java WebService框架:Xfire和Axis2。 Xfire是一个早期的Java WebService框架,它提供了一个轻量级、快速且易于使用的解决方案,使得开发人员...

Global site tag (gtag.js) - Google Analytics