`
VerRan
  • 浏览: 459785 次
  • 性别: Icon_minigender_1
  • 来自: 陕西.西安
社区版块
存档分类
最新评论

XFire:轻松简单地开发Web Services(转载)

阅读更多
   
      MyEclispe5.0已经集成了XFire框架,开发起来更简单,下面是原文没有采用Myeclispe开发,我用MyEclispe作了一个简单的例子,的确如果熟练了积分钟就可以搞定!

     引自:http://www.360doc.com/showWeb/0/0/228251.aspx

     问一下.Net的开发者,开发Web Services有多困难?他们会被你的问题逗乐,他们会告诉你所有步骤花费的时间不会超过一分钟。再问一下Java开发者,运气好的话你会碰到上面的回答,一般情况下,你会得到一个完全不同的答案。从Web Services引入到Java中至今已经5年了,然而它仍然被认为是一门较新的技术,一个主要的原因就是使用Java实现Web Services太困难了。现在,随着新一代Web Services引擎XFire的发布,这种情况将会发生明显的变化。使用XFire,你可以把Java类方法发布为Web Services而不需要编写额外的代码。在这篇文章中,你将会看到XFire使Web Services开发变得多么容易和简单。

  Web Services使我们能够在网络上建立分布式系统,应用程序组件可以通过任何平台、任何语言和任何方式访问。无论应用程序如何开发,使用了什么语言,以及运行在什么操作系统平台上,只要它作为Web Service,并且为协同解决问题而设计,那么你的应用程序,以任何语言开发或在任何平台上,都可以利用它的服务。这是Web Service的主要概念。

  为了实现Web Services的平台无关性和实现访问独立性,软件行业需要遵循一些作为标准的技术。其中一些包括:

  ---XML:在Web Services环境中各层之间进行传递的默认数据格式。

  ---SOAP:封装和交换信息的默认协议。第一次被提出时,它是只取Simple Object Access Protocol(简单对象访问协议)的首字母。但是现在SOAP更多被认为是一个特定的名词,以它自己而命名,同样很多人认为这是用词不当:SOAP实际上不是用来访问对象的。另外,它也不再简单。

  ---WSDL(Web Services Description Language,Web Services描述语言):描述Web Services的语言。尽管基于XML并且可以被人理解,WSDL主要是由机器处理,由客户端程序读取和理解。

  下面的高级层次图表,基于WWW协会发布的“Web Services Architecture”(Web Services架构)文档,显示了这些技术在实际的工作环境中是如何发挥作用:

点击放大此图片

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

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

  XFire是一个免费的开源SOAP框架,它不仅可以极大方便地实现这样一个环境,并且可以提供许多Web Services规范中高级特征,这些特征在多数的商业或者开源工具都没有提供。你要恰当的理解这些单词:great ease and simplicity(非常轻松和简单)。你将会看到使用XFire创建Web Services是多么的简单。

  假如你的Web应用有一个Java类,并且你想把它的一个方法发布为Web Services,当使用XFire时,你不需要编写一行额外的Java代码。只需要编辑发布描述符,然后你就会得到一个Web Services。是的,它相当地简单。我们来看一个例子。
 
  

 

  因为使用接口的设计是一个好的实践,所以我们的Java类也实现了一个称为IBankingService的接口。代码十分简单:

package com.mybank.xfire.example;

public interface IBankingService { 

    public String transferFunds(
        String fromAccount, String toAccount, double amount, String currency);
       
}

  在实际实现中,这样一个方法可能包括各种类型的复杂调用、查询和处理操作。但是我们的示例代码已经最小化了,以至于我们可以集中精力在主要目标上:把这个方法发布为Web Services。

  你可以看到BankingService是一个普通的Java类,没有任何代码告诉我们它将会在Web Services中使用。好的,这里我们不需要增加任何东西。我们所有的工作都在部署描述符里完成。

  Web应用的部署描述符

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

  web.xml

  首先,修改web.xml。我们需要增加下面的XFire servlet相关的条目:

<servlet>
        <servlet-name>XFireServlet</servlet-name>
        <display-name>XFire Servlet</display-name>
        <servlet-class>org.codehaus.xfire.transport.http.XfireConfigurableServlet
         </servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>XFireServlet</servlet-name>
        <url-pattern>/servlet/XFireServlet/*</url-pattern>
    </servlet-mapping>
   
    <servlet-mapping>
        <servlet-name>XFireServlet</servlet-name>
        <url-pattern>/services/*</url-pattern>
    </servlet-mapping>


 

 

  services.xml

  现在我们不得不说一下我们的Web Services的由什么组成的了。这由一个叫做services.xml的文件完成,它存放在META-INF/xfire目录下,而这整个目录放在WEB-INF/classes文件夹中,它在Web应用程序的标准类路径中。这里是services.xml中的基本配置条目:

<beans xmlns="http://xfire.codehaus.org/config/1.0">
 
  <service>
    <name>Banking</name>
    <namespace>mybank</namespace>
    <serviceClass>com.mybank.xfire.example.IBankingService</serviceClass>
    <implementationClass>com.mybank.xfire.example.BankingService</implementationClass>
  </service> 
 
</beans>

   让我们看看这里都包含了什么内容。Web Services的定义包含在<service></service>元素中,它还含有一些子元素。第一个子元素是<name></name>,它可以是你提供任何的合法名字。这将会被客户端程序和其它需要定位你的服务的组件用到。例如,在服务准备好以后,你将在浏览器上使用这个名字来查看WSDL。

  下一个子元素是<namespace>。任何合法的XML名字都是可以的。<namespace>用来唯一标识你的服务的各个参数。
<serviceClass>元素包含了Java类的名字,它指定了方法签名。在我们的例子中,它是接口IBankingService。如果Java类没有实现任何接口,你就需要把类的名字放在这里。在你的Java类或者接口中可能有几个方法。只需要一个入口把它们全部发布为Web Services。

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

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

  XFire和其它类库

  现在是最后一步了,需要得到所有必需的类库。我们怎样得到它们呢?去XFire网站,下载xfire-distribution-1.0.zip,然后解压到一个本地文件夹。复制下面的jar文件和它的库文件夹到WEB-INF/lib中:

  •   • 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

  一切妥当。我们来部署和启动应用程序。为了部署示例应用,只需要复制websvc.war到Apache Tomcat的webapps文件夹中,再等待几秒钟。它将会自动启动。这个应用的全部源代码也包含在这个war文件中。我们的程序已经准备作为一个Web Service了。

 

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

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

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

 

  就是它了。这个代理就是实际的客户端。现在,我们可以调用它的transferFunds()方法来得到我们需要的Web Service。

  一旦示例应用发布并启动,就可以尝试servlet URL:

  http://localhost:8080/websvc/ws。

  这个Servlet使用默认参数来调用Web Service和显示接收到的响应。页面的最后两行应该读取:

  Response Received
  COMPLETED: CDN$ 500.00 was successfully transferred from A/C# 11111-01234 to A/C# 99999-05678

  现在你可以确定Web Service已经发布并且在运行中了。

  为了尝试不同的输入值,你可以使用完整的URL,例如:

  http://localhost:8080/websvc/ws?from=11-2345&to=77-9876&amt=250.00&cur=EUR。

  基本的Web Services开发步骤清单

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

  •   1、 检查Java类的方法和默认构造函数确保为public
  •   2、 增加XFire servlet相关条目到web.xml中
  •   3、 创建services.xml,把它放到WEB-INF/classes/META-INF/xfire目录下
  •   4、 增加XFire和第三方包到你的Web应用的WEB-INF/lib文件夹中

  这就是所有需要的步骤,是的,相当简单。

  XFire的其他高级特性

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

  •   ---本地数据绑定支持POJOs(plain-old Java objects)、XMLBeans、JAXB(Java Architecture for XML Binding)、Castor等等。数据绑定说明了Web Services的XML请求和映射到Java对象的XML响应。
  •   ---使用StAX(Streaming API for XML)处理XML文档。同DOM的基于树和SAX的事件驱动的处理方式相比,StAX使用了拉(pull)机制,它使处理更快速,内存效率更高。
  •   ---支持多种传输协议,如HTTP、JMS(Java Message Service)和JVM内部传输。
  •   ---嵌入式,这是XFire的核心功能之一。你可以把这个SOAP引擎嵌入到你的应用中,完全隐藏所有XFire特定引用,同样所有配置都是程序驱动。
  •   ---丰富的API,它使XFire可高度自定义,允许开发者在不同的阶段截获请求,并且对他们进行处理。
  •   ---兼容最新的标准例如SOAP1.1(没有加密远程工程调用,或者RPC)和1.2、WSDL1.1、the Web Services Interoperability Organization’s Basic Profile 1.0、Web Services Addressing和WS-Security。

  最重要的是,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)仅仅在几个星期之后就进行了发布。

 

  性能

  Web Services需要消耗很多资源,但是性能方面它们不是那么引人注目。XFire打破了这种趋势。它消耗更少的内存(部分因为 StAX的使用),但是表现却比多数可比较的SOAP引擎出色。你可以在资源中提供的链接中看到比较的结果。

  此外,XFire还提供了各种方法来进一步优化性能。一个方法是使用JVM内置传输(in-JVM transport)。如果你知道Web Services和客户端运行在同一个JVM上,你可以选择使用本地传输,它可以大幅提升性能。在示例中的客户端代码,看以下指定服务端点URL的这行:

  String serviceUrl = "http://localhost:8080/websvc/services/Banking";

  替换为

  String serviceUrl = "xfire.local://Banking";

  你会看到性能上的明显提高,因为它绕过了整个网络层。

  局限性

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

  •   ---开发Web Services的好的实践是从WSDL开始。大部分的SOAP引擎提供了从WSDL生成服务stub的工具。XFire也提供了这样一个工具。但是它是基于注释(annotations-based)的,因此需要J2SE5.0。对于仍坚持使用J2SE1.4.x的人来说,它不是一个令人拍手叫好的工具,因为我们有很多其他方式来编写客户端,一个就是文章中演示的方式。
  •   ---附件支持,它将会包含在未来发行的版本中。
  •   ---易于学习的用户向导。XFire团队在这个方面还有很多工作需要做。

  结论

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

版权声明:Techtarget获Matrix授权发布,如需转载请联系Matrix
作者:Shahid Ahmed ;mydeman
原文:http://www.javaworld.com/javaworld/jw-05-2006/jw-0501-xfire.html
Matrix:http://www.matrix.org.cn/resource/article/2006-09-24/XFire_6bd1061c-4bc6-11db-978f-43b3336b7e51.html

  但是这个测试是不够的。可能会发生这种情况,可以看到WSDL,但是从客户端程序可能会访问不到服务。因此为了核实服务是否可以访问了,我们必须使用一个客户端进行服务的实际调用来进行一个真正的测试。

  开发一个客户端

  你可以使用任何的SOAP工具创建客户端,例如,.Net或者Apache Axis,有很多种方法:使用从WSDL产生的stubs,使用动态代理,等等。在例子中,我们使用一个动态代理,以一个简单的Servlet形式,叫做WsClient.java。为了保持代码两最小,所有在屏幕显示的元素都放在了doGet()方法中。对Web Service的实际调用由callWebService()方法完成,它相当地简单。和下面的类似:

/* Call the Web service
    *
    */
    public String callWebService(
        String fromAccount, String toAccount, double amount, String currency)
        throws MalformedURLException, Exception {
       
        //Create a metadata of the service     
        Service serviceModel = new ObjectServiceFactory().create(IBankingService.class);       
        log.debug("callSoapServiceLocal(): got service model." );
  
        //Create a proxy for the deployed service
        XFire xfire = XFireFactory.newInstance().getXFire();
        XFireProxyFactory factory = new XFireProxyFactory(xfire);     
   
        String serviceUrl = "http://localhost:8080/websvc/services/Banking";
       
        IBankingService client = null;
        try {
            client = (IBankingService) factory.create(serviceModel, serviceUrl);
        } catch (MalformedURLException e) {
            log.error("WsClient.callWebService(): EXCEPTION: " + e.toString());
        }   
              
        //Invoke the service
        String serviceResponse = "";
        try {
            serviceResponse = client.transferFunds(fromAccount, toAccount, amount, currency);
       } catch (Exception e){
            log.error("WsClient.callWebService(): EXCEPTION: " + e.toString());                
            serviceResponse = e.toString();
        }       
        log.debug("WsClient.callWebService(): status=" + serviceResponse);             

        //Return the response
        return serviceResponse;
    }

  这个代码是如何工作的呢?我来解释一下:首先,我们创建一个服务模型,它包含服务的说明——换句话说,就是服务的元数据。我们使用XFire的ObjectServiceFactory从IBankingService.class接口创建这个模型。

  接着,为XFire获得一个代理工厂对象,它包含了常规的代码,也相当地简单和易懂。这一步中没有任何特定应用的东西。从这个proxyFactory,使用服务模型和服务端点URL(用来获得WSDL),我们可以得到一个服务的本地代理。

 

  一个简单的Java类

  我们的例子是一个银行业应用程序,服务器是运行在J2SE1.4.2_07下的Apache Tomcat5.5.7。假定你已经了解如何使用Java编写Web应用程序,并知道应该如何把它部署到Apache Tomcat服务器上。我们的Web应用程序非常简单;它只做一件事——将资金从一个账户转到另外一个账户上。一个普通的Java类BankingService包含了一个叫做transferFunds()的方法来为我们完成这项工作。它需要四个输入参数:

  •   1、 String fromAccount
  •   2、 String toAccount
  •   3、 double amount
  •   4、 String currency

  代码如下:

package com.mybank.xfire.example;

import java.text.NumberFormat;
import java.text.DecimalFormat;

/** XFire WebServices sample implementation class.
*/
public class BankingService implements IBankingService {
   
    //Default constructor.
    public BankingService(){   
    }
   
    /** Transfers fund from one account to another.
    */
    public String transferFunds(
        String fromAccount, String toAccount, double amount, String currency){
       
        String statusMessage = "";
                     
        //Call business objects and other components to get the job done.
        //Then create a status message and return.
        try {
            NumberFormat formatter = new DecimalFormat("###,###,###,###.00");      
            statusMessage = "COMPLETED: " + currency + " " + formatter.format(amount)+
            " was successfully transferred from A/C# " + fromAccount + " to A/C# " + toAccount;
        } catch (Exception e){
            statusMessage = "BankingService.transferFunds(): EXCEPTION: " + e.toString();
        }
        return statusMessage;
    }
   
}

  在这里你看到了什么异常的东西了吗?或许没有,除了默认的构造函数,类型是public。这是必须的。否则,XFire不能够初始化这个类。
 

相关推荐

    MyEclipse+XFire开发Web Services

    本次实验旨在通过使用MyEclipse集成开发环境以及XFire插件来开发一个简单的Web Services示例,以此来掌握Web Services的基本开发流程和技术要点。 #### 实验准备 1. **安装MyEclipse**:确保计算机上已经安装了...

    XFire用户库包-开发WebServices服务

    XFire是一款早期流行的Java Web Services框架,用于开发和部署SOAP服务。它提供了全面的工具集,使得开发者可以方便地创建、测试和管理Web服务。在本文中,我们将深入探讨如何利用XFire用户库包来开发Web Services...

    XFire开发Web Services

    XFire是一款开源的轻量级Web服务框架,它简化了Web服务的开发过程,使得开发者能够更轻松地创建和使用Web服务。本篇文章将详细介绍如何使用XFire来开发Web Services,并提供具体的步骤以及所需的技术栈。 #### 二、...

    xfire + struts + spring 开发webservices例子

    本示例将详细介绍如何使用XFire、Struts和Spring框架来开发Web服务。这三个技术是Java Web开发中的重要组件,它们各自承担着不同的职责。 首先,XFire(后被Apache CXF合并)是一个轻量级的Web服务框架,它简化了...

    XFire_demo.zip_XFire_demo_java webservices_webservices_xfire dem

    【标题】"XFire_demo.zip_XFire_demo_java webservices_webservices_xfire dem" 提供了一个基于XFire的Java Web服务实现示例,这是一份关于如何使用XFire框架创建和部署Web服务的教程。 【描述】"webservices实现...

    Java中使用XFire开发简单的WebServices.pdf

    ### 使用XFire在Java中开发简单的Web Services #### 背景介绍 随着网络技术的发展,Web Services作为一种标准的企业间通信方式,越来越受到重视。它允许应用程序之间通过网络进行交互,不受平台限制。Java作为主流...

    eclipse 使用xfire开发webservices server

    标题中的“eclipse使用xfire开发webservices server”意味着我们将使用Eclipse IDE和XFire来创建和部署一个Web服务服务器。以下是一步步的操作步骤: 1. **安装Eclipse和XFire插件**:首先确保你的Eclipse已经安装...

    xfire webservices源码

    XFire允许开发者快速、简单地构建和部署Web服务。在这个源码包中,你可能会找到相关的Java源代码、配置文件以及可能需要自行添加的依赖库。 Web服务是一种通过网络提供和使用功能的方式,它使得不同系统间的交互变...

    开发webservices所需要的全部jar包xfire

    Web服务(Web Services)是一种基于互联网的、使用标准XML(Extensible Markup Language)进行通信的软件,它允许不同系统间的应用程序互相交互。XFire是早期流行的一个用于创建和消费Web服务的Java框架,它简化了在...

    XFire与Spring组合发布webservices

    首先,XFire(现在称为Apache CXF的一部分)是一个轻量级的Web服务框架,它支持SOAP、RESTful等多种Web服务协议,并且提供了易于使用的API和工具,使得开发人员能够快速地创建和部署Web服务。XFire的强项在于它的...

    XFire实现webServices源码

    XFire则是一个简化这一过程的工具,它允许开发者通过简单的API创建和调用Web服务。 二、XFire简介 XFire是由Apache CXF的前身,旨在提供轻量级、高性能的Web服务实现。它的核心特性包括: 1. **动态代理**:XFire...

    Myeclipse开发基于xfire的Web Services

    使用Myeclipse开发基于xfire的Web Services 入门,如何开发Web Services

    java使用xfire创建和调用webservices

    Java 使用 XFire 创建和调用 WebServices 是一个常见的任务,特别是在构建分布式系统和服务导向架构(SOA)中。XFire 是一个 Java 框架,它简化了 WebService 的开发和消费过程。在这个主题中,我们将深入探讨如何...

    XFire-WebServices傻瓜配置.doc

    XFire是一款开源的Java Web Services框架,它使得开发者能够轻松地创建和消费Web服务。XFire提供了简洁的API和XML绑定,使其成为开发人员构建基于SOAP的服务的理想选择。在本文档中,我们将探讨如何在Eclipse环境下...

    java利用 xfire实现 webservices 服务端与客户端

    通过XFire,我们可以轻松地在Java中创建和消费Web服务,无需复杂的配置和接口定义。服务端通过注解方式定义服务,客户端通过代理类直接调用服务,使得开发过程更加简洁高效。然而,随着技术的发展,现代的Java Web...

    xfire_webservices

    【xfire_webservices】是关于Web服务使用的讨论,涵盖了Web服务的基本概念、涉及的关键技术以及主流的Web服务框架,特别是Apache的XFire框架。Web服务是一种通过Web调用的应用程序接口,允许不同系统间的数据交换和...

    java webservices xfire Demo

    Java Web服务(Xfire Demo)是面向开发者的一个实例教程,它主要展示了如何利用Xfire库来创建和使用Java Web服务。...通过实践这个Demo,你可以更好地理解Java Web服务的工作机制,并为更复杂的Web服务开发打下坚实基础。

    MyEclipse+xFire开发Web Service

    通过理解xFire的基本概念和MyEclipse的Web Services Project Wizard的使用方法,开发者可以轻松地搭建起Web服务的基础架构,进一步实现复杂的服务交互和集成。这个教程为初学者提供了一个良好的起点,让他们能够进入...

    xfire开发webservices相关全部jar包

    xfire开发webservices相关jar包: xfire-aegis-1.2.6.jar xfire-annotations-1.2.6.jar xfire-core-1.2.6.jar xfire-java5-1.2.6.jar xfire-jsr181-api-1.0-M1.jar xfire-spring-1.2.6.jar xfire-xmlbeans-1.2.6.jar

Global site tag (gtag.js) - Google Analytics