`

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

    博客分类:
  • java
阅读更多

有了在 《Eclipse下使用Xfire创建WebService入门示例(上)》中所描述的构建基础,接下来我们要写一个服务端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 Services中使用。只是要有默认的构造函数,类型是public。这是必须的。否则,XFire不能够初始化这个类。好的,这里我们不需要增加任何东西。我们所有的工作都在部署描述符里完成。

Web应用的部署描述符

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

services.xml

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

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

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

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

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

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


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

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

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

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

  为了了解Web Service是否正在工作,我们需要测试。首先,我们测试来看WSDL是否可用。我们在浏览器中输入URL。哪个URL?因为我们的应用程序的war文件是aa.war,并且在services.xml中给出的服务名是Banking,WSDL的URL应该是:http://localhost:8080/aa/services/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.XFireFactory;   
  6. import org.codehaus.xfire.client.XFireProxyFactory;   
  7. import org.codehaus.xfire.service.Service;   
  8. import org.codehaus.xfire.service.binding.ObjectServiceFactory;   
  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 callWebService(   
  28.         String fromAccount, String toAccount, double amount, String currency)    
  29.         throws MalformedURLException, Exception {   
  30.            
  31.         //Create a metadata of the service  创建一个service的元数据       
  32.         Service serviceModel = new ObjectServiceFactory().create(IBankingService.class);           
  33.         System.out.println("callSoapServiceLocal(): got service model." );   
  34.       
  35.         //Create a proxy for the deployed service 为XFire获得一个代理工厂对象   
  36.         XFire xfire = XFireFactory.newInstance().getXFire();   
  37.         XFireProxyFactory factory = new XFireProxyFactory(xfire);         
  38.         //得到一个服务的本地代理   
  39.         String serviceUrl = "http://127.0.0.1:8080/wstest/services/Banking";   
  40.            
  41.         IBankingService client = null;   
  42.         try {   
  43.             client = (IBankingService) factory.create(serviceModel, serviceUrl);   
  44.         } catch (MalformedURLException e) {   
  45.          System.out.println("WsClient.callWebService(): EXCEPTION: " + e.toString());   
  46.         }       
  47.                   
  48.         //Invoke the service 调用服务 返回状态结果信息   
  49.         String serviceResponse = "";   
  50.         try {    
  51.             serviceResponse = client.transferFunds(fromAccount, toAccount, amount, currency);   
  52.        } catch (Exception e){   
  53.         System.out.println("WsClient.callWebService(): EXCEPTION: " + e.toString());                    
  54.             serviceResponse = e.toString();   
  55.         }           
  56.        System.out.println("WsClient.callWebService(): status=" + serviceResponse);                 
  57.   
  58.         //Return the response   
  59.         return serviceResponse;   
  60.     }    
  61.   
  62. }   
  63.   

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

index.jsp;发送请求

<!----> <base href="&lt;%=basePath%&gt;&lt;/base&gt;"> <base href="&lt;%=basePath%&gt;&lt;/base&gt;"><!----></base> </base>

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 WebService! 


      
  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 WebService! 


        
    22.     
        
    23.     Message from WebService:<!---->   
    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 Services开发步骤清单

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

    嗯~确实不复杂!

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

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

    XFire的其他高级特性

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

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

      局限性

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

      结论

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

    版权声明:

        本文内容为作者经过查阅资料,编码实践,编辑实属原创,仅限学习与个人收藏,为避免制造网络垃圾请误用于商业性的原文转载。如有勘误请至mail to: sweetmoondd@hotmail.com  期待共同探讨!

    参考资料:

    通过WebService实现Java与.Net互联 作者:itlove

        图文并茂的阐述了WebService相关概念。

    轻松简单地开发Web Services 作者:Shahid Ahmed ;mydeman

        文章语言组织简练明确,是众多资料中表述最确切全面的,很多语言也被我原文转述了,原因是说的很好无须再由本人重新组织语言。可惜也是被转载的。

    利用xfire开发webservice专题[四] 作者:MSN:spell_zheng@hotmial.com

        借鉴了测试客户端的jsp形式实现。

  
分享到:
评论
4 楼 vanegao 2010-04-29  
3 楼 C_J 2009-12-10  
案例通过,tks....
2 楼 kaguvivian 2008-11-08  
好久没回来javaEye啦,还是很亲切滴~感谢大家的阅读和分享!有时候回邮件有点迟钝,sorry啦公司上网不方便诶~
1 楼 liujia09 2008-03-05  
哥们太谢谢你了,讲的很好

相关推荐

    在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可运行

    在【压缩包子文件的文件名称列表】中,"WebServiceDemo"可能是项目的主目录或者模块名,这可能包含了一系列的源代码、配置文件、测试用例以及相关的资源文件,用于演示如何使用XFire在Eclipse中创建和运行Web服务。...

    【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