使用AXIS2 创建WS客户端的四种方法

上一篇 / 下一篇  2009-06-01 14:00:54 / 个人分类:Web Service

本文翻译自http://ws.apache.org/axis2/1_4_1/quickstartguide.html部分章节

本章基于StockQuoteService类通过四种方法创建客户端,1、基于AXIOM 的客户端2、用Axis2 Databinding FrameworkADB3、使用XMLBeans 4、使用JiBX

 

1、   为创建一个使用AXIOM,执行以下步骤:

同样的,复制以下目录文档以便于文档的完整性

- quickstartaxiom
  - README.txt
  - build.xml
  - resources
    - META-INF
      - services.xml
      - StockQuoteService.wsdl
  - src
    - samples
      - quickstart
        - service
          - axiom
            - StockQuoteService.java
        - clients
          - AXIOMClient.java

以上引用的AXIOMClient.java类如下所定义

 

package samples.quickstart.clients;

 

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 org.apache.axis2.Constants;

import org.apache.axis2.addressing.EndpointReference;

import org.apache.axis2.client.Options;

import org.apache.axis2.client.ServiceClient;

 

public class AXIOMClient {

 

   private static EndpointReference targetEPR =

       new EndpointReference("http://localhost:8080/axis2/services/StockQuoteService");

 

   public static OMElement getPricePayload(String symbol) {

       OMFactory fac = OMAbstractFactory.getOMFactory();

       OMNamespace mNs = fac.createOMNamespace("http://axiom.service.quickstart.samples/xsd", "tns");

 

       OMElement method = fac.createOMElement("getPrice", omNs);

       OMElement value = fac.createOMElement("symbol", omNs);

       value.addChild(fac.createOMText(value, symbol));

       method.addChild(value);

       return method;

   }

 

   public static OMElement updatePayload(String symbol, double price) {

       OMFactory fac = OMAbstractFactory.getOMFactory();

       OMNamespace mNs = fac.createOMNamespace("http://axiom.service.quickstart.samples/xsd", "tns");

 

       OMElement method = fac.createOMElement("update", omNs);

 

       OMElement value1 = fac.createOMElement("symbol", omNs);

       value1.addChild(fac.createOMText(value1, symbol));

       method.addChild(value1);

 

       OMElement value2 = fac.createOMElement("price", omNs);

       value2.addChild(fac.createOMText(value2,

                                        Double.toString(price)));

       method.addChild(value2);

       return method;

   }

 

   public static void main(String[] args) {

       try {

           OMElement getPricePayload = getPricePayload("WSO");

           OMElement updatePayload = updatePayload("WSO", 123.42);

           Options ptions = new Options();

           options.setTo(targetEPR);

           options.setTransportInProtocol(Constants.TRANSPORT_HTTP);

 

           ServiceClient sender = new ServiceClient();

           sender.setOptions(options);

 

           sender.fireAndForget(updatePayload);

           System.err.println("price updated");

           OMElement result = sender.sendReceive(getPricePayload);

 

           String response = result.getFirstElement().getText();

           System.err.println("Current price of WSO: " + response);

 

       } catch (Exception e) {

           e.printStackTrace();

       }

   }

   

}

 

 

Axis2使用AXIOM或者AXIs对象模型,一个类DOMDocument Object Model文本对象模型)结构的机遇StAX API( Streaming API for XML),这里为服务中的updategetPrice方法建立载荷,载荷的创建类似为AXIOM服务的创建getPriceResponse载荷,然后建立Options类,创建一个ServiceClient类用来和服务通信。首先调用update方法,它是一个fireAndForget方法并且不返回任何数据,最后,可以调用getPrice方法,取回服务的当前价格并显示出来

 

现在可以构建并运行AXIOM客户端,通过在Axis2_HOME/samples/quickstartaxiom目录中输入ant run.client

应该能够得到如下输出:

done

Current price of WSO:123.42

 

 

2、   使用ADB创建客户端

为了使用ADB创建一个客户端,执行以下步骤:

在目录Axis2_HOME/samples/quickstartadb输入以下命令以创建databings客户端

%AXIS2_HOME%\bin\WSDL2Java -uri resources\META-INF\StockQuoteService.wsdl -p samples.quickstart.clients -d adb -s -o build\client

另外在目录Axis2_HOME/samples/quickstartadb下输入ant generate.client

接下来看下quickstartadb/src/samples/quickstart/clients/ADBClient.java文件的编码如下:

package samples.quickstart.clients;

 

import samples.quickstart.service.adb.StockQuoteServiceStub;

 

public class ADBClient{

   public static void main(java.lang.String args[]){

       try{

           StockQuoteServiceStub stub =

               new StockQuoteServiceStub

               ("http://localhost:8080/axis2/services/StockQuoteService");

 

           getPrice(stub);

           update(stub);

           getPrice(stub);

 

       } catch(Exception e){

           e.printStackTrace();

           System.err.println("\n\n\n");

       }

   }

 

   /* fire and forget */

   public static void update(StockQuoteServiceStub stub){

       try{

           StockQuoteServiceStub.Update req = new StockQuoteServiceStub.Update();

           req.setSymbol ("ABC");

           req.setPrice (42.35);

 

           stub.update(req);

           System.err.println("price updated");

       } catch(Exception e){

           e.printStackTrace();

           System.err.println("\n\n\n");

       }

   }

 

   /* two way call/receive */

   public static void getPrice(StockQuoteServiceStub stub){

       try{

           StockQuoteServiceStub.GetPrice req = new StockQuoteServiceStub.GetPrice();

 

           req.setSymbol("ABC");

 

           StockQuoteServiceStub.GetPriceResponse res =

               stub.getPrice(req);

 

           System.err.println(res.get_return());

       } catch(Exception e){

           e.printStackTrace();

           System.err.println("\n\n\n");

       }

   }

 

}

 

这个类使用创建的ADB产生了一个class stub,然后它通过web service调用getPriceupdategetPrice方法新建了GetPrice载荷并将symbol设置为ABC,然后它发送请求并显示当前的就爱个。Update方法新建了一个Update载荷,将symbol设置为ABC价格设为42.35

现在编译并运行客户端:

Axis2_HOME/samples/quickstartadb目录下输入ant run.client

将得到如下输出:

42

Price updated

42.35

 

3、  使用XMLBeans创建一个客户端

 

使用XML Beans数据绑定方法创建客户端,需要执行以下步骤:

通过在xmlbeansClient目录下输入以下命令来创建databings

%AXIS2_HOME%\bin\WSDL2Java -uri resources\META-INF\StockQuoteService.wsdl -p samples.quickstart.service.xmlbeans -d xmlbeans -s -o build\client

 

另外,在目录Axis2_HOME/samples/quickstartxmlbeans下输入ant generate.client

注意这创建了一个client stub并没有服务器端代码

文件quickstartxmlbeans/src/samples/quickstart/clients/XMLBEANSClient.java代码如下定义:

Code Listing 11: The XMLBEANSClient class

 

package samples.quickstart.clients;

 

import samples.quickstart.service.xmlbeans.StockQuoteServiceStub;

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

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

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

 

public class XMLBEANSClient{

 

   public static void main(java.lang.String args[]){

       try{

           StockQuoteServiceStub stub =

               new StockQuoteServiceStub

               ("http://localhost:8080/axis2/services/StockQuoteService");

 

           getPrice(stub);

           update(stub);

           getPrice(stub);

 

       } catch(Exception e){

           e.printStackTrace();

           System.err.println("\n\n\n");

       }

   }

 

   /* fire and forget */

   public static void update(StockQuoteServiceStub stub){

       try{

           UpdateDocument reqDoc = UpdateDocument.Factory.newInstance();

           UpdateDocument.Update req = reqDoc.addNewUpdate();

           req.setSymbol ("BCD");

           req.setPrice (42.32);

 

           stub.update(reqDoc);

           System.err.println("price updated");

       } catch(Exception e){

           e.printStackTrace();

           System.err.println("\n\n\n");

       }

   }

 

   /* two way call/receive */

   public static void getPrice(StockQuoteServiceStub stub){

       try{

           GetPriceDocument reqDoc = GetPriceDocument.Factory.newInstance();

           GetPriceDocument.GetPrice req = reqDoc.addNewGetPrice();

           req.setSymbol("BCD");

 

           GetPriceResponseDocument res =

               stub.getPrice(reqDoc);

 

           System.err.println(res.getGetPriceResponse().getReturn());

       } catch(Exception e){

           e.printStackTrace();

           System.err.println("\n\n\n");

       }

   }

}

 

4、  使用JiBX创建客户端

为了使用JiBX创建一个客户端,需要执行以下步骤

Axis2_HOME/samples/quickstartjibx目录下,在控制台输入以下命令创建一个客户端stub

%AXIS2_HOME%\bin\wsdl2java -uri resources\META-INF\StockQuoteService.wsdl -p samples.quickstart.clients -d jibx -s -uw -o build\client

TAG:

 

评分:0

我来说两句

日历

« 2024-05-28  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 3379
  • 日志数: 7
  • 建立时间: 2009-05-06
  • 更新时间: 2009-06-01

RSS订阅

Open Toolbar