`
BabyDuncan
  • 浏览: 584142 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Eclipse下使用Xfire创建WebService入门示例(转)

    博客分类:
  • J2SE
 
阅读更多

什么是Web Service

       Web Service 是能够基于网络 ,尤其是基于万维网(World Wide Web )直接调用的能够处理离散任务或连续任务的软件 模型。目前较为流行的应用是,由一家公司对其专有数据进行封装,提供Web Service ,然后其它公司就可以通过Internet 来动态使用这些在线服务。这为未来全球的电子商务发展提供了新的标准和架构。

Web Service 架构

Web Service 是独立的、模块化的应用,能够通过因特网来描述、发布、定位以及调用。在Web Service 的体系架构中包括三个角色:服务提供者(Service Provider) 、服务请求者(Service Requestor) 、服务注册器(Service Registry) 。角色间主要有三个操作:发布(Publish) 、查找(Find) 、绑定(Bind)

下图清楚的描述了三种角色,以及角色之间的作用关系。

图示一:

图示二:

这个流程图显示了Web Services中的核心技术是如何工作的。

  这里,Provider是提供服务的应用程序组件,Requester是使用服务的客户端程序。很多其他技术也会参与到交互中,但是这个图只显示了在Web Services环境中必需的核心技术组件。

Web Service 协议标准

简单对象访问协议(SOAP

       SOAPSimple Object Access Protocol 的缩写,是一种基于XML 的不依赖传输协议的表示层协议,用来在分散或分布式的应用程序 之间方便地以对象的形式交换数据。在SOAP 的下层,可以是HTTP/HTTP ,也可以是SMTP/POP3 ,还可以是为一些应用而专门设计的特殊的通信协议。

       SOAP 包括三个主要部分:

²        SOAP 封装结构:定义了一个整体框架,以表示消息中包含什么内容 ,谁来处理这些内容 以及这些内容 是可选的或是必需的。

²        SOAP 编码规则:定义了用以交换应用程序 定义的数据类型的实例的一系列机制。

²        SOAP RPC 表示:定义了一个用来表示远程过程调用和应答的协定。

Web Service 描述语言(WSDL

       WSDLWeb Service Des cription Language 的缩写,该语言将网络 服务定义成一个能交换消息的通信端点集,为分布式系统 提供了帮助文档,同时也可作为自动实现应用间通信的解决方案。

统一描述、发现和集成协议(UDDI

       UDDI 是一套基于Web 的、分布式的、为Web Service 提供的、信息注册中心的实现标准规范,同时也包含一组使企业能将自身提供的Web Service 注册,以使别的企业能够发现的访问协议的实现标准。

以上概念转自http://www.itlove.net/Article/203/207/2005/2005082532541.html

XFire

XFire是一个免费的开源SOAP框架,它不仅可以极大方便地实现这样一个环境,并且可以提供许多Web Services规范中高级特征,这些特征在多数的商业或者开源工具都没有提供。http://xfire.codehaus.org/Download 是它的官方网站下载区,同时你也可以了解关于它的更多内容。

创建过程示例

下面我们就来使用Java构建一个WebService并且构建一个客户端来测试访问它。

   首先请确保你的JDK和Tomcat在Eclipse环境中是可用的,配置方法不做赘述。并且你了解一些java编程技术和tomcat的发布常识。

版本信息:MyEclipse6.0.0M1;Tomcat6.0;JDK1.5;Xfire1.2

1、打开MyEclipse新建一个WebService Project,为你的项目命名,我选择了Java EE5.0,项目在你的WorkSpace目录下。下一步:看到了这个界面

在这里Eclipse为你创建了webService的配置文件services.xml(主意文件名是有“s”的),并进行了Xfire的 Servlet基本配置告诉项目你使用了Xfire改信息将体现在项目的web.xml文件中。继续下一步,加载Xfire相关的jar包,你看到了

在这个项目里我勾选了Xfire1.2 Core Libraries;HTTP Client Libraries;XML Beans Libraries。主要是确保引入了这些包包:

  •   • activation-1.0.2.jar
  •   • commons-codec-1.3.jar
  •   • commons-httpclient-3.0.jar
  •   • commons-logging-1.0.4.jar
  •   • jaxen-1.1-beta-8.jar
  •   • jdom-1.0.jar
  •   • log4j-1.2.x.jar
  •   • mail-1.3.3_01.jar
  •   • spring-1.2.x.jar
  •   • stax-api-1.0.jar
  •   • wsdl4j-1.5.2.jar
  •   • wstx-asl-2.9.jar
  •   • xbean-2.1.0.jar
  •   • xbean-spring-2.2.jar
  •   • xfire-all-1.0.jar
  •   • XmlSchema-1.0.jar

    如果你好奇其他的包包是做什么用的就有待于我们在今后的学习中继续探究了~点击“Finish”完成了项目创建。目录结构如下图所示:

    打开web.xml我们可以看到如下片断:

    xml 代码
    1. < servlet >   
    2.      < servlet-name > XFireServlet </ servlet-name >   
    3.      < servlet-class > org.codehaus.xfire.transport.http.XFireConfigurableServlet </ servlet-class >   
    4.      < load-on-startup > 0 </ load-on-startup >   
    5.    </ servlet >   
    6.    < servlet-mapping >   
    7.      < servlet-name > XFireServlet </ servlet-name >   
    8.      < url-pattern > /services/* </ url-pattern >   
    9.    </ servlet-mapping >   
    10.    < welcome-file-list >   
    11.      < welcome-file > index.jsp </ welcome-file >   
    12.    </ welcome-file-list >   
    13.   

    接下来的工作是开始编写java类接下来我们要写一个服务端java类。模拟应用是一个银行转账应用,从账户A转账到账户B并需要给出金额和货币种类。我们先来实现一个接口IBankingService .java代码全文如下:

    java 代码
    1. package  com.mybank.xfire .example;   
    2.   
    3. public   interface  IBankingService  {   
    4.   
    5.    public  String transferFunds(   
    6.           String fromAccount, String toAccount,  double  amount, String currency);   
    7.   
    8. }   
    9.   

    然后编写一个普通的Java类BankingService 包含了一个叫做transferFunds()的方法来为我们完成这项工作。它需要四个输入参数:

      代码如下:

    java 代码
    1. package  com.mybank.xfire .example;   
    2.   
    3. import  java.text.NumberFormat;   
    4. import  java.text.DecimalFormat;   
    5.   
    6. public   class  BankingService   implements  IBankingService  {   
    7.   
    8.   //Default constructor.   
    9.      public  BankingService (){       
    10.     }   
    11.        
    12.      /** Transfers fund from one account to another.  
    13.     */   
    14.      public  String transferFunds(   
    15.         String fromAccount, String toAccount,  double  amount, String currency){   
    16.            
    17.         String statusMessage =  "" ;   
    18.                          
    19.          //调用业务逻辑执行操作.   
    20.          //建立并返回状态信息.   
    21.          try  {   
    22.             NumberFormat formatter =  new  DecimalFormat( "###,###,###,###.00" );          
    23.             statusMessage =  "COMPLETED: "  + currency +  " "  + formatter.format(amount)+    
    24.              " was successfully transferred from A/C# "  + fromAccount +  " to A/C# "  + toAccount;   
    25.         }  catch  (Exception e){   
    26.             statusMessage =  "BankingService .transferFunds(): EXCEPTION: "  + e.toString();   
    27.         }   
    28.          return  statusMessage;   
    29.     }   
    30.   
    31. }   
    32.   

    你可以看到BankingService 是一个普通的Java类,没有任何代码告诉我们它将会在Web Service s中使用。只是要有默认的构造函数,类型是public。这是必须的。否则,XFire 不能够初始化这个类。好的,这里我们不需要增加任何东西。我们所有的工作都在部署描述符里完成。

    Web 应用的部署描述符

      在Java中,Web 应用程序通常需要至少一个部署描述符(叫做web .xml)对其进行配置。XFire 本身是一个基于servlet的应用程序。因此,我们需要增加必要的引用到描述符文件中。然后我们还必须配置将要创建的Web Service s。我们使用一个称为service s.xml的新文件来完成这件事。在使用Eclipse工具构建工程的时候我们已经完成了这项配置(参见(上)文)。

    service s.xml

      现在我们不得不说一下我们的Web Service s的由什么组成的了。这由一个叫做service s.xml的文件完成,当这个项目在tomcat发布后,它存放在WEB -INF/classes/META-INF/xfire 目录下,它在Web 应用程序的标准类路径中。而在Eclipse环境中我们可以清除的看到Eclipse已经为我们把它清楚的列在项目路径中。这里是service s.xml中的基本配置条目:

    xml 代码
    1. < beans   xmlns = "http://xfire .codehaus.org/config/1.0" >   
    2.      
    3.    < service >   
    4.      < name > Banking </ name >   
    5.      < namespace > mybank </ namespace >   
    6.      < service Class > com.mybank.xfire .example.IBankingService </ service Class >   
    7.      < implementationClass > com.mybank.xfire .example.BankingService </ implementationClass >   
    8.    </ service >      
    9.      
    10. </ beans >   

    Web Service s的定义包含在元素中,它还含有一些子元素。

    第一个子元素是Banking,它可以是你提供任何的合法名字。这将会被客户端程序和其它需要定位你的服务的组件用到。例如,在服务准备好以后,你将在浏览器上使用这个名字来查看WSDL。

    下一个子元素是。任何合法的XML名字都是可以的。用来唯一标识你的服务的各个参数。(注释@)

    注释@:Namespace派什么用?namespace的作用是要避免命名冲突。如果我建立一项Web
    Service ,其中的WSDL文件包含一个名为"foo"的元素,而你想要使用我的服务与 另一项服务连接作为补充,这样的话另一项服务的WSDL文件就不能包含名为"foo"的元素。两个服务器程序只有在它们在两个事例中表示完全相同的东西 时,才可以取相同的名字。如果有了表示区别的namespace,我的网络服务里的"foo"就可以表示完全不同于另一个网络服务里"foo"的含义。在 你的客户端里,你只要加以限制就可以引用我的"foo"。


    元素包含了Java类的名字,它指定了方法签名。在我们的例子中,它是接口IBankingService 。如果Java类没有实现任何接口,你就需要把类的名字放在这里。在你的Java类或者接口中可能有几个方法。只需要一个入口把它们全部发布为Web Service s。

      保存了实现方法的Java类名。这是一个可选元素。如果上一个元素包含了一个接口,那么相应的实现类必须在这里指定。

      就是这样。我们的Web Service s配置完成了

    我们如何知道Web Service 正在工作呢?

      为了了解Web Service 是否正在工作,我们需要测试。首先,我们测试来看WSDL是否可用。我们在浏览器中输入URL。哪个URL?因为我们的应用程序的war文件是aa.war,并且在service s.xml中给出的服务名是Banking,WSDL的URL应该是:http://localhost:8080/aa/service s/Banking?wsdl。

      请注意:URL的第一部分,例如,http://localhost:8080 ,可能会根据你的应用服务器不同而不同。无论怎样,当你输入URL后,将会看到一个XML文档,这个文档叫做服务的WSDL。如果你看到了,这就是你的应用作为Web Service 已经可用的第一个证明。

    正确的执行情况:

    在这个WSDL中我们可以看到< xsd:element name =" transferFunds " >的服务方法明以及他的四个参数描述等信息。 但是这个测试是不够的。可能会发生这种情况,可以看到WSDL,但是从客户端程序可能会访问不到服务。因此为了核实服务是否可以访问了,我们必须使用一个客户端进行服务的实际调用来进行一个真正的测试。

    开发一个客户端

    编写BankClient.java

    java 代码
    1. package  com.mybank.xfire .client;   
    2.   
    3. import  java.net.MalformedURLException;   
    4. import  org.codehaus.xfire .XFire ;   
    5. import  org.codehaus.xfire .XFire Factory;   
    6. import  org.codehaus.xfire .client.XFire ProxyFactory;   
    7. import  org.codehaus.xfire .service .Service ;   
    8. import  org.codehaus.xfire .service .binding.ObjectService Factory;   
    9.   
    10. import  com.mybank.xfire .example.IBankingService ;   
    11. /**  
    12.  * @author AdminiDD  
    13.  *  
    14.  */   
    15. public   class  BankClient {   
    16.   
    17.   /**  
    18.   * @param args  
    19.   */   
    20.   public   static   void  main(String[] args) {   
    21.    // TODO Auto-generated method stub   
    22.   
    23.  }   
    24.   /* Call the Web  service  
    25.     *  
    26.     */   
    27.      public  String callWeb Service (   
    28.         String fromAccount, String toAccount,  double  amount, String currency)    
    29.          throws  MalformedURLException, Exception {   
    30.            
    31.          //Create a metadata of the service   创建一个service 的元数据       
    32.         Service  service Model =  new  ObjectService Factory().create(IBankingService . class );           
    33.         System.out.println( "callSoapService Local(): got service  model."  );   
    34.       
    35.          //Create a proxy for the deployed service  为XFire 获得一个代理工厂对象   
    36.         XFire  xfire  = XFire Factory.newInstance().getXFire ();   
    37.         XFire ProxyFactory factory =  new  XFire ProxyFactory(xfire );         
    38.          //得到一个服务的本地代理   
    39.         String service Url =  "http://127.0.0.1:8080/wstest/service s/Banking" ;   
    40.            
    41.         IBankingService  client =  null ;   
    42.          try  {   
    43.             client = (IBankingService ) factory.create(service Model, service Url);   
    44.         }  catch  (MalformedURLException e) {   
    45.          System.out.println( "WsClient.callWeb Service (): EXCEPTION: "  + e.toString());   
    46.         }       
    47.                   
    48.          //Invoke the service  调用服务 返回状态结果信息   
    49.         String service Response =  "" ;   
    50.          try  {    
    51.             service Response = client.transferFunds(fromAccount, toAccount, amount, currency);   
    52.        }  catch  (Exception e){   
    53.         System.out.println( "WsClient.callWeb Service (): EXCEPTION: "  + e.toString());                    
    54.             service Response = e.toString();   
    55.         }           
    56.        System.out.println( "WsClient.callWeb Service (): status="  + service Response);                 
    57.   
    58.          //Return the response   
    59.          return  service Response;   
    60.     }    
    61.   
    62. }   
    63.   

    编写两个JSP页来模拟请求和响应

    index.jsp;发送请求

     

    java 代码
    1.   
    2.   
    3.   
    4. "-//W3C//DTD HTML 4.01 Transitional//EN" >   
    5.   
    6.      
    7.     "" >   
    8.        
    9.        
    10.  "pragma"  content= "no-cache" >   
    11.  "cache-control"  content= "no-cache" >   
    12.  "expires"  content= "0" >       
    13.  "keywords"  content= "keyword1,keyword2,keyword3" >   
    14.  "description"  content= "This is my page" >   
    15.     
    16.      
    17.      
    18.      
    19.     


      Welcomle to Web Service


        
    20.     
        
    21.     Bank test : give my money to you!   
    22.      "form1"  action= "say.jsp"  method= "POST" >   
    23.       your account ID:"toAcc"  type= "text" />
        
    24.       How much  do  you want:"amount"  type= "text"  />
        
    25.       "center" >"submit"  value= "提交" >     
    26.      
    27.      
    28.   
    29.   

      say.jsp,接收请求并返回响应结果

      java 代码
      1.   
      2.   
      3.   
      4. "-//W3C//DTD HTML 4.01 Transitional//EN" >   
      5.   
      6.      
      7.     "" >   
      8.        
      9.        
      10.        
      11.  "pragma"  content= "no-cache" >   
      12.  "cache-control"  content= "no-cache" >   
      13.  "expires"  content= "0" >       
      14.  "keywords"  content= "keyword1,keyword2,keyword3" >   
      15.  "description"  content= "This is my page" >   
      16.     
      17.   
      18.      
      19.      
      20.      
      21.      

        Welcomle to Web Service


          
      22.     
          
      23.     Message from Web Service :   
      24.      
      25.   
      26.   

       

      项目aa编译完毕并发布到Tomcat上,启动Tomcat测试开始!访问http://127.0.0.1:8080/aa/index.jsp

      执行效果:

      添上你的账户,想要多少钱就写多少钱,嘿嘿 提交!请求转发到say.jsp如果你看到下面的情况:

      恭喜你!成功啦~ 可以看到有 RMB$ 1,000.00 从affman(a fit foolish man~)的账户转到了liudan的账户上!

      总结:

      基本的Web Service s开发步骤清单

         这个清单总结了将一个Java方法发布为Web Service 所必须的步骤:

      嗯~确实不复杂!

      以上步骤均经过亲自测试执行,如有勘误请至mail to: sweetmoondd@hotmail.com  欢迎指教和共同探讨

      以下相关讨论(转自原文http://www.360doc.com/showweb /0/0/516946.aspx

      XFire 的其他高级特性

        XFire 的使用可能比较简单,但是在特性和功能性上,它却占据着领导者的位置。下面是它的高级特性:

        最重要的是,XFire 属于新一代Web Service s引擎。不仅仅是营销用语,“新一代”有一些重要的意义。Apache Axis是第一代Java语言的Web Service s引擎,已经成为了所有后来工具的参考标准。在过去的几年里,Axis以及这些其它的工具已经在很多生产环境中进行了实地测试。从中得出的一个关键的问题就是Web Service s并不最适合RPC类型的通信。对于性能和效率,面向文档的消息形式是最好的方式。但是Apache Axis和很多其他的Web Service s引擎都被设计成了面向RPC的(尽管它们支持文档形式)。现在,整个行业正在开发新一代的SOAP引擎,设计为面向文档的。Apache已经宣布结束旧版本的Axis引擎开发,现在专注于Axis2,现在它的预发布版本是0.95。XFire 在今年的2月份发布了它的第一个产品版本(1.0)。它的下一个版本(1.1)仅仅在几个星期之后就进行了发布。

         局限性

        XFire 有些重要的局限性你应该清楚:

        结论

        Java当前的趋势是简化技术的使用。因此,我们正看到一波基于POJO的开发成就。同时,面向服务架构(SOA,Service s-oriented architecture)和Web Service s已经变成了当前行业的热点话题。XFire 正是在这种情况下产生的。它能够使POJO发布为最少的Web Service s,而只需要付出最小化的努力。从而,它使希望使用这项技术的初级开发者的学习曲线变得平缓。同时,由于它兼容最新标准和提供了丰富的API,XFire 为高级用户提供了更多的大好机会。

  • 分享到:
    评论

    相关推荐

      在Eclipse上使用XFire开发WebService.doc

      #### 创建WebService示例:使用Java与XFire 为了在Eclipse中使用XFire开发WebService,首先需确保JDK和Tomcat环境正确配置,以及具备基本的Java编程技能和Tomcat部署知识。以下步骤指导如何创建一个简单的...

      在Eclipse上使用XFire开发WebService分享.pdf

      【在Eclipse上使用XFire开发WebService】 在IT行业中,Web Service是一种常见的软件接口技术,允许不同系统之间通过网络进行通信和数据交换。Eclipse是一款强大的集成开发环境(IDE),而XFire则是一个免费的开源...

      使用xfire创建webservice极简demo

      2. **创建Maven项目**:使用IDE(如IntelliJ IDEA或Eclipse)创建一个新的Maven项目。 3. **添加依赖**:在pom.xml文件中添加XFire的相关依赖,例如: ```xml &lt;groupId&gt;org.codehaus.xfire &lt;artifactId&gt;xfire...

      Eclipse上使用XFire开发

      ### Eclipse上使用XFire开发WebService知识点详解 #### 一、概述 本文主要介绍如何在Eclipse平台上使用XFire框架来开发WebService。通过本教程的学习,读者可以了解到搭建环境的具体步骤,以及实现一个简单的...

      在Eclipse下用xfire创建webserver服务器demo

      在这个“在Eclipse下用xfire创建webserver服务器demo”中,我们学习了如何在Eclipse环境中配置Xfire,创建一个简单的Web服务,以及如何启动和测试这个服务。这只是一个基础的起点,Xfire还支持许多高级特性,如WS-...

      XFire初识-使用Eclipse开发WebService

      **XFire初识:使用Eclipse开发WebService** 在IT行业中,WebService是一种允许应用程序之间进行交互的标准化技术。它通过XML(可扩展标记语言)来交换数据,使得不同平台上的应用能够无缝对接。XFire是Java平台上一...

      xFire版WebService开发

      对于基于xFire的WebService开发,首先需要安装Eclipse和MyEclipse作为集成开发环境,具体版本要求为Eclipse3.2和MyEclipse5.5.1GA。安装过程需遵循特定路径,例如使用F盘下的MyEclipse安装包,并确保正确获取和应用...

      用xfire开发webservice实例(原稿)

      这个资源是一个关于使用XFire框架创建Web服务的实际示例项目。XFire是早期流行的一个用于构建SOAP Web服务的Java库,它提供了轻量级且高效的解决方案。由于描述中提到“不包含xfire相关jar包”,这意味着用户在运行...

      Eclipse下使用Webservice步骤图解

      本教程将详细讲解如何在Eclipse下使用Web服务,主要涉及的技术包括Java、Web服务(Webservice)、XFire框架以及Eclipse IDE的使用。 一、建立Web Service Project 在Eclipse中创建一个新的项目,选择“Web Service ...

      XFire WebService精简包

      3. **示例代码和文档**:为了帮助开发者理解和使用XFire,包中可能会包含一些示例服务代码和详细的API文档,介绍如何创建服务端点、处理请求和响应等。 4. **配置文件**:XFire的配置文件(如xfire.xml)用于定义...

      使用Xfire创建Web service和客户端使用的视频

      在这个主题中,我们将深入探讨如何使用Xfire创建Web服务以及客户端的实现,同时结合MyEclipse 6.5集成开发环境(IDE)和Tomcat 6.0应用服务器。 1. **Xfire简介** Xfire是Apache CXF项目的一部分,它提供了一个...

      Xfire发布WebService

      可以使用Eclipse集成开发环境并安装Xfire插件。按照以下步骤操作: 1. **安装Xfire Eclipse插件** 打开Eclipse的Help菜单,选择Update Site,输入更新URL:http://dist.codehaus.org/xfire/update/。安装并重启...

      xfire webservice eclipse可运行,非myeclipse可运行

      【标题】"xfire webservice eclipse可运行,非myeclipse可运行"表明这是一个基于XFire框架构建的Web服务项目,特别强调了它能够在Eclipse集成开发环境中顺利运行,但可能不适用于MyEclipse环境。XFire是Apache CXF的...

      【webservice----xfire 快速入门代码实训】----<下载不扣分,回帖加1分,欢迎下载,童叟无欺>

      5. 配置XFire:在项目的src/main/resources目录下创建一个名为`services.xml`的文件,配置XFire如何暴露你的服务。在这个文件中,你需要定义服务的名称、接口类和实现类。 6. 部署服务:运行你的Java应用,XFire将...

      webservice_xfire 学习手册

      ### WebService学习手册知识点概述 ...综上所述,本文档详细介绍了如何使用Xfire、CXF、Axis等框架开发WebService,通过一系列的示例代码和实践指导,即使是初学者也能快速掌握这些技能,并能够在实际项目中运用自如。

      xfire 5分钟开发一个完整实例.doc

      本文将通过一个具体实例介绍如何在MyEclipse环境下使用XFire框架来快速搭建WebService应用。本例涉及的关键技术包括Eclipse IDE、Tomcat服务器、Java编程语言以及XFire框架。目标是在短时间内完成一个简单的...

      xfire+spring+webservice例子

      【标题】"xfire+spring+webservice例子"是一个典型的示例项目,它演示了如何在Java环境中结合XFire和Spring框架来创建和消费Web服务。这个项目旨在帮助开发者理解和实践基于Spring的Web服务实现,同时也展示了XFire...

      webservice xfire 的完整的demo例子,下载后即可运行

      1. webservice xfire的完整demo,下载后可以直接导入eclipse调试。 2. 包括客户端和服务端,服务端需要部署到tomcat等web容器,启动服务端后可以通过客户端测试调用结果。 3. 工程已经将依赖的jar包一起包含,不需要...

    Global site tag (gtag.js) - Google Analytics