`
andy54321
  • 浏览: 441507 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

【Z】Axis2快速上手指南

阅读更多

原文链接:http://ws.apache.org/axis2/1_1_1/quickstartguide.html
本指南的目的是让你尽可能快的创建使用Axis2的服务和客户端,我们将使用一个简单的StockQuote服务并显示给你一些创建和部署它
的不同的方式,以及快速的看看Axis2自带的一些工具,然后我们将看看创建访问这些服务的客户端。

内容

Java代码 复制代码
  1. 介绍   
  2. 做好准备   
  3. <SPAN class=hilite1>Axis2</SPAN>服务   
  4. 创建服务   
  5.     部署POJOs   
  6.     使用AXIOM构建服务   
  7.     使用ADB生成服务   
  8.     使用XMLBeans生成服务   
  9.     使用JiBX生成服务   
  10. 生成客户端   
  11.     使用AXIOM创建一个客户端   
  12.     使用ADB生成一个客户端   
  13.     使用XMLBeans生成一个客户端   
  14.     使用JiBX生成一个客户端   
  15. 总结   
  16. 进一步学习  
介绍
做好准备
Axis2服务
创建服务
    部署POJOs
    使用AXIOM构建服务
    使用ADB生成服务
    使用XMLBeans生成服务
    使用JiBX生成服务
生成客户端
    使用AXIOM创建一个客户端
    使用ADB生成一个客户端
    使用XMLBeans生成一个客户端
    使用JiBX生成一个客户端
总结
进一步学习



快速安装笔记:
文档的代码可以在解压的标准二进制发布[/url]找到,更明确的位于其中的Axis2_HOME/samples/目录-quickstart,quickstartdb,
quickstartaxiom,quickstartjibx和quickstartxmlbeans,如果你继续下去它将帮你掌握它。它包含一个Ant构建文件(build.xml)
贯穿所有的例子我们将提到它来使得编译更容易。

介绍
让我们以服务本身开始。我们将使它简单,所以你可以看到当我们构建并部署服务时会发生什么,一个StockQuoteService例子看起来
像这个,所以让我们使用下面的(参看Code Listing 1)。
Code Listing 1: StockQuoteService类

Java代码 复制代码
  1. package samples.quickstart.service.pojo;   
  2.   
  3. import java.util.HashMap;   
  4.   
  5. public class StockQuoteService {   
  6.     private HashMap map = new HashMap();   
  7.   
  8.     public double getPrice(String symbol) {   
  9.         Double price = (Double) map.get(symbol);   
  10.         if(price != null){   
  11.             return price.doubleValue();   
  12.         }   
  13.         return 42.00;   
  14.     }   
  15.   
  16.     public void update(String symbol, double price) {   
  17.         map.put(symbol, new Double(price));   
  18.     }   
  19. }  
package samples.quickstart.service.pojo;

import java.util.HashMap;

public class StockQuoteService {
    private HashMap map = new HashMap();

    public double getPrice(String symbol) {
        Double price = (Double) map.get(symbol);
        if(price != null){
            return price.doubleValue();
        }
        return 42.00;
    }

    public void update(String symbol, double price) {
        map.put(symbol, new Double(price));
    }
}


它将为一个具有两个可能的调用的简单服务,其中一个是一个in/out消息,另一个则为一个只能in的服务,最终我们将打包服务并用
四种不同的方式部署部署它。
首先,让我们看看这个简单的Java类怎样响应一个服务。

做好准备
在我们使用Axis2构建任何东西之前,我们将需要关注一些家务事。现在你将需要准备好你使用Axis2的环境,幸运的是,它只包括一
些简单的步骤:
1,下载并安装Java(版本至少为JDK1.4)
2,下载Axis2并解压到一个目标目录
3,复制axis2.war文件到你的servlet引擎的webapps目录
4,设置AXIS2_HOME环境变量来指出目标目录,注意Axis2生成的所有脚本和构建文件依赖于这个值,所以不要遗漏了这个步骤。
大多数情况下,我们的服务也将需要一个WSDL文件,Axis2Java2WSDL可以用来生成一个WSDL。执行以下步骤来从一个Java类生成一
个WSDL文件:
1,创建并编译Java类
2,使用该命令生成WSDL:
%AXIS2_HOME%/bin/java2wsdl -cp . -cn samples.quickstart.service.pojo.StockQuoteService -of StockQuoteService.wsdl
移动你生成WSDL文件,你可以做你需要的任何更改。例如,你可能添加自定义的过错或者改变生成的元素名。例如,该StockQuoteSer
vice.wsdl位于%AXIS2_HOME%/samples/quickstartadb/resources/META-INF文件夹,我们将在本指南的其他部分使用它,代替生成过
程创建的一般参数。

Axis2服务
在我们构建任何东西之前,理解最终产品看起来像什么是有用的。Axis2的服务器端可以被部署在任何Servlet引擎上,并且有如下的
Code Listing 2显示的结构。
Code Listing 2: axis2.war的目录结构

Java代码 复制代码
  1. <SPAN class=hilite1>axis2</SPAN>-web    
  2. META-INF   
  3. WEB-INF   
  4.     classes    
  5.     conf   
  6.         <SPAN class=hilite1>axis2</SPAN>.xml    
  7.     lib   
  8.         activation.jar   
  9.         ...   
  10.         xmlSchema.jar   
  11.     modules   
  12.         modules.list    
  13.         addressing.mar   
  14.         ...   
  15.         soapmonitor.mar   
  16.     services   
  17.         services.list   
  18.         aservice.aar   
  19.         ...   
  20.         version.aar   
  21.     web.xml  
axis2-web 
META-INF
WEB-INF
    classes 
    conf
        axis2.xml 
    lib
        activation.jar
        ...
        xmlSchema.jar
    modules
        modules.list 
        addressing.mar
        ...
        soapmonitor.mar
    services
        services.list
        aservice.aar
        ...
        version.aar
    web.xml


从最上面开始,axis2-web是组成Axis2管理程序的一些JSPs,你可以通过它来执行任何需要的动作,例如添加服务,使用模块和禁止
模块。WEB-INF包含了运行部署到服务目录的任何服务的实际上的java类和其他支持文件。
这里主要的文件是axis2.xml,它控制程序怎样与接收的消息打交道,决定Axis2是否需要使用模块目录里定义的任何模块。
这里你可以看到,服务可以被部署为*.aar文件,但是它们的内容必须以一个特殊的方式安排。例如,服务的结构将为如下:

Java代码 复制代码
  1. - StockQuoteService   
  2.    - META-INF   
  3.      - services.xml   
  4.    - samples   
  5.      - quickstart   
  6.        - service   
  7.          - pojo   
  8.            - StockQuoteService.class  
- StockQuoteService
   - META-INF
     - services.xml
   - samples
     - quickstart
       - service
         - pojo
           - StockQuoteService.class


这不是太复杂,服务的名字为StockQuoteService,它在services.xml中指定,并且根据包名把任何Java类放到合适的位置。META-INF
目录包含关于Axis2需要来正确执行服务的额外信息。services.xml文件定义了服务本身并把Java类链接到它(参看Code Listing 3)。
Code Listing 3: 服务定义文件

Java代码 复制代码
  1. <service name="StockQuoteService" scope="application">   
  2.     <description>   
  3.         Stock Quote Sample Service   
  4.     </description>   
  5.     <messageReceivers>   
  6.         <messageReceiver    
  7.             mep="http://www.w3.org/2004/08/wsdl/in-only"  
  8.     class="org.apache.<SPAN class=hilite1>axis2</SPAN>.rpc.receivers.RPCInOnlyMessageReceiver"/>   
  9.         <messageReceiver   
  10.             mep="http://www.w3.org/2004/08/wsdl/in-out"  
  11.     class="org.apache.<SPAN class=hilite1>axis2</SPAN>.rpc.receivers.RPCMessageReceiver"/>   
  12.     </messageReceivers>   
  13.     <parameter name="ServiceClass">   
  14.         samples.quickstart.service.pojo.StockQuoteService   
  15.     </parameter>   
  16. </service>  
<service name="StockQuoteService" scope="application">
    <description>
        Stock Quote Sample Service
    </description>
    <messageReceivers>
        <messageReceiver 
            mep="http://www.w3.org/2004/08/wsdl/in-only"
    class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>
        <messageReceiver
            mep="http://www.w3.org/2004/08/wsdl/in-out"
    class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
    </messageReceivers>
    <parameter name="ServiceClass">
        samples.quickstart.service.pojo.StockQuoteService
    </parameter>
</service>


这里你看到服务本身被定义了,以及不同的消息交换模式相关的messageReceiver类型。
META-INF目录也是你打算包含在该程序中的自定义WSDL文件的位置。
你可以通过简单的采用该文件目录结构并复制到你的servlet引擎的webapps目录来部署一个服务,这是著名的"爆发"形式,但是你也
可以压缩你的文档到一个*.aar文件,类似于一个*.jar文件,并直接将*.aar文件放到servlet引擎的webapps目录。
既然你理解了我们在尝试完成什么,我们几乎准备好开始构建了。
首先,下载并解压合适版本的Axis2标准二进制发布。确认你设置了AXIS2_HOME变量的值来匹配你解压该版本内容的位置。
让我们看看一些创建客户端和服务的不同方式。

创建服务
在这个部分,我们将看看根据StockQuoteService类创建服务的五种方式:部署Plain Old Java Objects(POJO),使用AXIOM的OMElement
构建服务,使用Axis2 Databinding Framework(ADB)生成服务,使用XMLBeans生成服务和使用JiBX生成服务。

部署POJOs
使用POJOs(Plain Old Java Objects)来部署服务,执行下面的步骤。
注意包含在<AXIS2_HOME>/samples/quickstart的目录结构(services.xml文件来自于该指南的第一个部分):

Java代码 复制代码
  1. - quickstart   
  2.    - README.txt   
  3.    - build.xml   
  4.    - resources   
  5.      - META-INF   
  6.        - services.xml   
  7.    - src   
  8.      - samples   
  9.        - quickstart   
  10.          - service   
  11.            - pojo   
  12.              - StockQuoteService.java  
- quickstart
   - README.txt
   - build.xml
   - resources
     - META-INF
       - services.xml
   - src
     - samples
       - quickstart
         - service
           - pojo
             - StockQuoteService.java


注意你可以通过在quickstart目录键入ant generate.wsdl来生成WSDL。
尽管如此,创建StockQuoteService.wsdl是可选的。它可以是直接从Java类生成的版本,或者该文件的一个自定义版本,并且servi
ces.xml是本文档前面提到的同一文件。
现在通过在quickstart目录键入ant generate.service来构建工程,该目录创建了以下目录结构:

Java代码 复制代码
  1. - quickstart/build/classes   
  2.    - META-INF   
  3.      - services.xml   
  4.    - samples   
  5.      - quickstart   
  6.        - service   
  7.          - pojo   
  8.            - StockQuoteService.class  
- quickstart/build/classes
   - META-INF
     - services.xml
   - samples
     - quickstart
       - service
         - pojo
           - StockQuoteService.class


如果你想以爆发形式部署服务,重命名classes目录为StockQuoteService,并复制它到你的servlet引擎的webapps/axis2/WEB-INF/s
ervices目录。否则,复制build/StockQuoteService.aar文件到你的servlet引擎的webapps/axis2/WEB-INF/services目录。然后通过
视察以下服务列表来确认服务被正确部署:
http://localhost:8080/axis2/services/listServices
你也可以检验以下WSDL:
http://localhost:8080/axis2/services/StockQuoteService?wsdl
以及以下结构:
http://localhost:8080/axis2/services/StockQuoteService?xsd
一旦这些urls工作,让我们快速测试一下服务。让你的浏览器访问以下URL试试:
http://localhost:8080/axis2/rest/StockQuoteService/getPrice?symbol=IBM
你将得到如下应答:

Java代码 复制代码
  1. <ns:getPriceResponse xmlns:ns="http://pojo.service.quickstart.samples/xsd"><ns:return>42</ns:return></ns:getPriceResponse>  
<ns:getPriceResponse xmlns:ns="http://pojo.service.quickstart.samples/xsd"><ns:return>42</ns:return></ns:getPriceResponse>


如果你像这样调用update方法:
http://localhost:8080/axis2/rest/StockQuoteService/update?symbol=IBM&price=100
然后调用第一个getPrice url。你可以看到price被更新了。

使用AXIOM构建服务
为了使用AXIOM"从零开始"构建一个服务,执行以下步骤。
注意包含在/samples/quickstartaxiom的目录结构:

Java代码 复制代码
  1. - quickstartaxiom   
  2.    - README.txt   
  3.    - build.xml   
  4.    - resources   
  5.      - META-INF   
  6.        - services.xml   
  7.        - StockQuoteService.wsdl   
  8.    - src   
  9.      - samples   
  10.        - quickstart   
  11.          - service   
  12.            - axiom   
  13.              - StockQuoteService.java   
  14.          - clients   
  15.            - AXIOMClient.java  
- quickstartaxiom
   - README.txt
   - build.xml
   - resources
     - META-INF
       - services.xml
       - StockQuoteService.wsdl
   - src
     - samples
       - quickstart
         - service
           - axiom
             - StockQuoteService.java
         - clients
           - AXIOMClient.java


由于AXIOM有一点不同,你将需要一个与POJO所用不同的services.xml文件,在Code Listing 4中显示了它的定义。
Code Listing 4: 服务定义文件

Java代码 复制代码
  1. <service name="StockQuoteService" scope="application">   
  2.     <description>   
  3.         Stock Quote Service   
  4.     </description>   
  5.     <operation name="getPrice">   
  6.         <messageReceiver class="org.apache.<SPAN class=hilite1>axis2</SPAN>.receivers.RawXMLINOutMessageReceiver"/>   
  7.     </operation>   
  8.     <operation name="update">   
  9.         <messageReceiver class="org.apache.<SPAN class=hilite1>axis2</SPAN>.receivers.RawXMLINOnlyMessageReceiver"/>   
  10.     </operation>   
  11.     <parameter name="ServiceClass">samples.quickstart.service.axiom.StockQuoteService</parameter>   
  12. </service>  
<service name="StockQuoteService" scope="application">
    <description>
        Stock Quote Service
    </description>
    <operation name="getPrice">
        <messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
    </operation>
    <operation name="update">
        <messageReceiver class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver"/>
    </operation>
    <parameter name="ServiceClass">samples.quickstart.service.axiom.StockQuoteService</parameter>
</service>


注意,几乎是一样的,除了操作是显示地定义在service.xml文件中,而且MessageReceiver现在是RawXML。
现在,上面提到的简单的使用Axis2库的类的StockQuoteService.java类,在Code Listing 5中定义。
Code Listing 5:使用AXIOM的StockQuoteService类

Java代码 复制代码
  1. package samples.quickstart.service.axiom;   
  2.   
  3. import javax.xml.stream.XMLStreamException;   
  4. import org.apache.axiom.om.OMAbstractFactory;   
  5. import org.apache.axiom.om.OMElement;   
  6. import org.apache.axiom.om.OMFactory;   
  7. import org.apache.axiom.om.OMNamespace;   
  8.   
  9. import java.util.HashMap;   
  10. public class StockQuoteService {   
  11.     private HashMap map = new HashMap();   
  12.   
  13.     public OMElement getPrice(OMElement element) throws XMLStreamException {   
  14.         element.build();   
  15.         element.detach();   
  16.   
  17.         OMElement symbolElement = element.getFirstElement();   
  18.         String symbol = symbolElement.getText();   
  19.   
  20.         String returnText = "42";   
  21.         Double price = (Double) map.get(symbol);   
  22.         if(price != null){   
  23.             returnText  = "" + price.doubleValue();   
  24.         }   
  25.         OMFactory fac = OMAbstractFactory.getOMFactory();   
  26.         OMNamespace omNs =   
  27.             fac.createOMNamespace("http://axiom.service.quickstart.samples/xsd""tns");   
  28.         OMElement method = fac.createOMElement("getPriceResponse", omNs);   
  29.         OMElement value = fac.createOMElement("price", omNs);   
  30.         value.addChild(fac.createOMText(value, returnText));   
  31.         method.addChild(value);   
  32.         return method;   
  33.     }   
  34.   
  35.     public void update(OMElement element) throws XMLStreamException {   
  36.         element.build();   
  37.         element.detach();   
  38.   
  39.         OMElement symbolElement = element.getFirstElement();   
  40.         String symbol = symbolElement.getText();   
  41.   
  42.         OMElement priceElement = (OMElement)symbolElement.getNextOMSibling();   
  43.         String price = priceElement.getText();   
  44.   
  45.         map.put(symbol, new Double(price));   
  46.     }   
  47. }  
package samples.quickstart.service.axiom;

import javax.xml.stream.XMLStreamException;
import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNamespace;

import java.util.HashMap;
public class StockQuoteService {
    private HashMap map = new HashMap();

    public OMElement getPrice(OMElement element) throws XMLStreamException {
        element.build();
        element.detach();

        OMElement symbolElement = element.getFirstElement();
        String symbol = symbolElement.getText();

        String returnText = "42";
        Double price = (Double) map.get(symbol);
        if(price != null){
            returnText  = "" + price.doubleValue();
        }
        OMFactory fac = OMAbstractFactory.getOMFactory();
        OMNamespace omNs =
            fac.createOMNamespace("http://axiom.service.quickstart.samples/xsd", "tns");
        OMElement method = fac.createOMElement("getPriceResponse", omNs);
        OMElement value = fac.createOMElement("price", omNs);
        value.addChild(fac.createOMText(value, returnText));
        method.addChild(value);
        return method;
    }

    public void update(OMElement element) throws XMLStreamException {
        element.build();
        element.detach();

        OMElement symbolElement = element.getFirstElement();
        String symbol = symbolElement.getText();

        OMElement priceElement = (OMElement)symbolElement.getNextOMSibling();
        String price = priceElement.getText();

        map.put(symbol, new Double(price));
    }
}


Axis2使用AXIOM,或者AXIs Object Model,一个基于StAX API(Streaming API for XML)的DOM(Document Object Model)类似的结构
作为服务的方法必须使用OMElement作为它们的参数,OMElement表示一个XML元素,在这里它则为进来的SOAP消息的有效载荷。这里,
你提取有效载荷元素的第一个孩子,添加文本给它,并使用它作为返回的OMElement的内容。除非这是一个"只有in"的服务,这些方法
必须返回一个OMElement,因为它成为返回的SOAP消息的有效载荷。
现在通过在Axis2_HOME/samples/quickstartaxiom目录键入ant generate.service来构建工程。
把StockQuoteService.aar文件放在servlet引擎的webapps/axis2/WEB-INF/services目录,通过视察下面的服务列表来确认服务正确
部署:
http://localhost:8080/axis2/services/listServices
你也可以检验以下WSDL:
http://localhost:8080/axis2/services/StockQuoteService?wsdl
以及以下结构:
http://localhost:8080/axis2/services/StockQuoteService?xsd

使用ADB生成服务
执行以下步骤来使用Axis2 Databinding Framework(ADB)生成和部署服务。
通过在Axis2_HOME/samples/quickstartadb目录键入以下内容来使用WSDL2Java工具生成骨架:
%AXIS2_HOME%/bin/WSDL2Java -uri resources/META-INF/StockQuoteService.wsdl -p samples.quickstart.adb -d adb -s -ss
-sd -ssi -o build/service

或者在Axis2_HOME/samples/quickstartadb目录简单的键入ant generate.service
选项-d adb指定了Axis Data Binding(ADB)。-s转换指定同步或者只模块化调用。-ss转换创建服务器端代码(骨架和相关文件)。-sd
转换创建一个服务描述符(services.xml文件)。-ssi转换为服务骨架创建一个接口。服务文件现在应该定位于build/service。
如果你通过使用WSDL2Java直接生成代码,下一步你需要修改生成的骨架来实现服务(如果你使用"ant generate.service",一个完全
的骨架会自动复制并覆盖生成的那个)。
打开build/service/src/samples/quickstart/adb/service/StockQuoteServiceSkeleton.java文件并修改它来添加你的服务的功能性
到生成的方法,下面的Code Listing 6显示了。
Code Listing 6:定义服务骨架文件

Java代码 复制代码
  1. package samples.quickstart.service.adb;   
  2.   
  3. import samples.quickstart.service.adb.xsd.GetPriceResponse;   
  4. import samples.quickstart.service.adb.xsd.Update;   
  5. import samples.quickstart.service.adb.xsd.GetPrice;   
  6.   
  7. import java.util.HashMap;   
  8.   
  9. public class StockQuoteServiceSkeleton {   
  10.   
  11.     private static HashMap map;   
  12.   
  13.     static{ map = new HashMap(); }   
  14.   
  15.     public void update(Update param0) {   
  16.         map.put(param0.getSymbol(), new Double(param0.getPrice()));   
  17.     }   
  18.   
  19.     public GetPriceResponse getPrice(GetPrice param1) {   
  20.         Double price = (Double) map.get(param1.getSymbol());   
  21.         double ret = 42;   
  22.         if(price != null){   
  23.             ret = price.doubleValue();   
  24.         }   
  25.         GetPriceResponse res =   
  26.                 new GetPriceResponse();   
  27.         res.set_return(ret);   
  28.         return res;   
  29.     }   
  30. }  
package samples.quickstart.service.adb;

import samples.quickstart.service.adb.xsd.GetPriceResponse;
import samples.quickstart.service.adb.xsd.Update;
import samples.quickstart.service.adb.xsd.GetPrice;

import java.util.HashMap;

public class StockQuoteServiceSkeleton {

    private static HashMap map;

    static{ map = new HashMap(); }

    public void update(Update param0) {
        map.put(param0.getSymbol(), new Double(param0.getPrice()));
    }

    public GetPriceResponse getPrice(GetPrice param1) {
        Double price = (Double) map.get(param1.getSymbol());
        double ret = 42;
        if(price != null){
            ret = price.doubleValue();
        }
        GetPriceResponse res =
                new GetPriceResponse();
        res.set_return(ret);
        return res;
    }
}


现在你可以通过在build/service目录键入以下命令构建工程:ant jar.server
如果一切进展顺利,你应该在你的窗口看到BUILD SUCCESSFUL消息,而且StockQuoteService.aar文件在build/service/build/lib
目录中。复制该文件到servlet引擎的webapps/axis2/WEB-INF/services目录。
你可以通过视察下面的服务列表来确认服务正确部署:
http://localhost:8080/axis2/services/listServices
你也可以检验以下WSDL:
http://localhost:8080/axis2/services/StockQuoteService?wsdl
以及以下结构:
http://localhost:8080/axis2/services/StockQuoteService?xsd

使用XMLBeans生成服务
执行以下步骤来使用XMLBeans生成服务。
通过在Axis2_HOME/samples/quickstartxmlbeans目录键入以下命令来使用WSDL2Java工具生成骨架:
%AXIS2_HOME%/bin/WSDL2Java -uri resources/META-INF/StockQuoteService.wsdl -p samples.quickstart.service.xmlbeans
-d xmlbeans -s -ss -sd -ssi -o build/service

或者在Axis2_HOME/sampels/quickstartxmlbeans目录简单的键入ant generate.service
选项-d xmlbeans指定XMLBeans数据绑定。-s转换指定同步或者只是模块化调用。-ss转换创建服务器端代码(骨架和相关文件)。-sd
转换创建一个服务描述符(services.xml文件)。-ssi转换创建一个服务骨架的接口。现在服务文件应该位于build/service。
如果你通过使用WSDL2Java直接生成代码,下一步你需要修改生成的骨架来实现服务(如果你使用"ant generate.service",一个完全
的骨架将被自动复制并覆盖生成的那个)。
下一步打开build/service/src/samples/quickstart/service/xmlbeans/StockQuoteServiceSkeleton.java文件并修改它来添加你的
服务的功能性到生成的方法(参看Code Listing 7)。
Code Listing 7:定义服务骨架

Java代码 复制代码
  1. package samples.quickstart.service.xmlbeans;   
  2.   
  3. import samples.quickstart.service.xmlbeans.xsd.GetPriceDocument;   
  4. import samples.quickstart.service.xmlbeans.xsd.GetPriceResponseDocument;   
  5. import samples.quickstart.service.xmlbeans.xsd.UpdateDocument;   
  6.   
  7. import java.util.HashMap;   
  8.   
  9. public class StockQuoteServiceSkeleton implements StockQuoteServiceSkeletonInterface {   
  10.   
  11.     private static HashMap map;   
  12.   
  13.     static{ map = new HashMap(); }   
  14.   
  15.     public void update(UpdateDocument param0) {   
  16.     }   
  17.   
  18.     public GetPriceResponseDocument getPrice(GetPriceDocument param1) {   
  19.     }   
  20. }  
package samples.quickstart.service.xmlbeans;

import samples.quickstart.service.xmlbeans.xsd.GetPriceDocument;
import samples.quickstart.service.xmlbeans.xsd.GetPriceResponseDocument;
import samples.quickstart.service.xmlbeans.xsd.UpdateDocument;

import java.util.HashMap;

public class StockQuoteServiceSkeleton implements StockQuoteServiceSkeletonInterface {

    private static HashMap map;

    static{ map = new HashMap(); }

    public void update(UpdateDocument param0) {
    }

    public GetPriceResponseDocument getPrice(GetPriceDocument param1) {
    }
}


通过在build/service目录键入命令ant jar.server构建项目,该目录包含build.xml文件。
如果一切进展顺利,你应该在你的窗口看到BUILD SUCCESSFUL消息,而且StockQuoteService.aar文件位于新创建的build/service/
build/lib目录。复制该文件到servlet引擎的webapps/axis2/WEB-INF/services目录。
你可以通过视察下面的服务列表来确认服务正确部署:
http://localhost:8080/axis2/services/listServices
你也可以检验以下WSDL:
http://localhost:8080/axis2/services/StockQuoteService?wsdl
以及以下结构:
http://localhost:8080/axis2/services/StockQuoteService?xsd

使用JiBX生成服务
执行以下步骤来使用JiBX数据绑定生成和部署服务。
通过在Axis2_HOME/samples/quickstartjibx目录的控制台键入以下内容来使用WSDL2Java工具生成骨架:
%AXIS2_HOME%/bin/wsdl2java -uri resources/META-INF/StockQuoteService.wsdl -p samples.quickstart.service.jibx -d jibx
-s -ss -sd -ssi -uw -o build/service

或者在Axis2_HOME/samples/quickstartjibx目录简单的键入"ant generate.service"
选项-d jibx指定了JiBX数据绑定。-s转换指定同步或者只是模块化调用。-ss转换创建服务器端代码(骨架和相关文件)。-sd转换创建
一个服务描述符(services.xml文件)。-ssi转换创建服务骨架的接口。-uw转换解开传递给服务操作和从服务操作传递出去的参数,来
创建一个更自然的编程接口。
在运行WSDL2Java后,服务文件应该位于build/service。如果你通过使用WSDL2Java直接生成代码,下一步你需要修改生成的骨架来
实现服务(如果你使用"ant generate.service"则一个完全的骨架将自动被复制并覆盖生成的那个)。打开build/service/src/samples
/quickstart/service/jibx/StockQuoteServiceSkeleton.java文件并修改它来添加你的服务的功能性到生成的方法,在Code Listing
8中显示了。
Code Listing 8:定义服务骨架文件

Java代码 复制代码
  1. package samples.quickstart.service.jibx;   
  2.   
  3. import java.util.HashMap;   
  4.   
  5. public class StockQuoteServiceSkeleton implements StockQuoteServiceSkeletonInterface {   
  6.     private HashMap map = new HashMap();   
  7.   
  8.     public void update(String symbol, Double price) {   

 </

分享到:
评论

相关推荐

    Axis1,Axis2,Xfire,CXF区别

    XFire 还具有易于上手、快速发布服务、灵活的 Binding 机制等特点。 与 Axis1 相比,XFire 的性能有了质的提高,XFire 比 Axis1.3 快 2-6 倍,XFire 的响应时间是 Axis1.3 的 1/2 到 1/5。XFire 的灵活性更高,...

    axis2_WebService_开发指南

    Axis2是Apache软件基金会的一个用于构建和部署WebService的引擎,它基于Apache Axis项目,并且是Apache Web服务堆栈的...通过这个指南,开发者可以快速上手Axis2的使用,以及深入理解和应用其在各种场景下的强大功能。

    axis2 webservice开发指南.pdf

    ### Axis2 WebService 开发指南知识点详述 #### 一、Axis2 WebService 技术概览 **Axis2** 是Apache的一个开源项目,旨在提供一个高性能、灵活且可扩展的Web服务框架,用于实现基于SOAP协议的Web服务。与前代产品*...

    AXIS2快速学习资料

    在这个名为"AXIS2快速学习资料"的压缩包中,包含两份宝贵的资源:一份是中文的Word文档,标题为"Axis2--Java访问Axis2接口.doc",另一份是英文的PDF,标题为"Axis2--Dev_Web_Services_With_Apache_Axis2.pdf"。...

    Axis_API和axis2_API

    在IT行业中,Web服务是应用程序之间进行通信的一种标准方法,而Axis和Axis2是两种流行的Java SOAP(简单对象访问协议)框架,用于构建和消费Web服务。本文将深入探讨这两个API,以及它们在Web服务开发中的作用。 ...

    用Axis2快速发布自己的wsdl服务

    而Axis2是Apache软件基金会开发的一个高效、灵活且可扩展的Web服务框架,它为开发人员提供了一个快速创建和部署Web服务的平台。本教程将详细介绍如何使用Axis2快速发布自己的WSDL(Web Service Definition Language...

    Axis1.4_开发指南

    Axis1.x系列版本与Axis2系列版本在体系结构和使用方式上存在显著差异,Axis1.x被认为是更加稳定的一个系列,且相对而言,其文档资料也更加丰富和齐全。 ### WebService简介 WebService是一种基于网络的分布式计算...

    axis2-idea-plugin-1.7.9.zip_axis2_axis2-idea-plugin_idea导入axis2_

    标题中的"axis2-idea-plugin-1.7.9.zip_axis2_axis2-idea-plugin_idea导入axis2_"提到了几个关键元素,分别是"axis2"、"idea-plugin"和"idea导入axis2",这暗示了这个压缩包是用于在IntelliJ IDEA这款集成开发环境...

    axis2-1.6.1

    2. `axis2-1.6.1-docs.zip`:文档包,提供了关于Axis2 1.6.1版本的详细用户指南、开发者文档、API参考和教程。这些文档对于学习和理解如何使用和扩展Axis2至关重要,它们通常包括HTML格式的在线文档,PDF文件,以及...

    axis2相关的jar包

    axis2-adb-1.5.4.jar axis2-adb-codegen-1.5.4.jar axis2-codegen-1.5.4.jar axis2-corba-1.5.4.jar axis2-fastinfoset-1.5.4.jar axis2-java2wsdl-1.5.4.jar axis2-jaxbri-1.5.4.jar axis2-jaxws-1.5.4.jar axis2-...

    axis2的API,axis2 API,axis2帮助文档

    Axis2的帮助文档包括用户指南、开发者指南和API参考,为初学者和高级用户提供详尽的指导。用户可以通过官方文档学习如何配置Axis2、创建服务、调用服务以及使用各种特性。此外,社区论坛和邮件列表也是获取问题解答...

    axis2-1.6.2

    axis2-1.6.2.zip, windows axis2工具,根据 WSDL生成java文件。 1、axis2客户端下载地址:http://mirror.esocc.com/apache//axis/axis2/java/core/1.6.2/axis2-1.6.2-bin.zip; 2、下载解压在D:\Work_Program_...

    Axis2 WebService 开发指南 技术文档 入门文档

    《Axis2 WebService 开发指南》 Axis2是一款强大的Web服务框架,它是Apache Axis1的升级版,提供了更高效、更灵活的服务实现和部署机制。本指南将详细讲解如何使用Axis2进行Web服务的开发,从基础准备到高级特性,...

    eclipse axis2插件安装

    eclipse axis2 插件安装指南 Axis2 是一个开源的 Web 服务引擎,由 Apache 软件基金会维护。它提供了一个灵活、可扩展、性能高效的 Web 服务解决方案。Eclipse 是一个流行的集成开发环境(IDE),Axis2 插件安装...

    axis2 包括源码 文档

    首先,`axis2-1.6.2-docs.zip` 文件包含了 Axis2 框架的完整文档,包括用户指南、开发者指南、API参考以及各种教程。这些文档对于理解 Axis2 的工作原理、如何创建和消费Web服务、以及如何自定义和扩展其功能至关...

    axis2-1.5.1-bin.zip axis2-1.5.1-war.zip axis2部署使用

    Apache Axis2是著名的开源Web服务框架,用于构建和部署高效且灵活的Web服务。这个框架是基于Axis1的升级版,提供了许多改进和新特性,包括更好的性能、模块化架构和增强的MIME支持。标题提到的“axis2-1.5.1-bin.zip...

    axis2-1.6.2.zip

    - **文档**:可能有用户指南、API文档等,帮助开发者理解和使用Axis2。 - **配置文件**:如axis2.xml,这是Axis2的主配置文件,用于定义服务行为和服务部署的细节。 - **工具**:可能包括上面提到的wsdl2java和java2...

    Axis2创建web service快速入门

    本教程将引导你快速入门,掌握使用Axis2创建Web服务的基本步骤。 **一、了解Axis2** Axis2是Axis1的下一代产品,它提供了更强大的功能和更高的性能。Axis2基于模块化架构,支持多种传输协议(如HTTP、HTTPS、SMTP...

    axis和axis2的一些发布差异(WSDL2Java) 收藏

    ### Axis与Axis2在WSDL2Java工具中的发布差异 #### 概述 本文将详细介绍Axis与Axis2在使用WSDL2Java工具进行服务发布的差异性。这两种工具都是Apache项目的一部分,它们为开发者提供了强大的Web服务支持。其中,...

Global site tag (gtag.js) - Google Analytics