`
tenn
  • 浏览: 569673 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
文章分类
社区版块
存档分类
最新评论

Axis2快速上手指南(2)

阅读更多

创建客户端
在这个部分,我们将看看基于StockQuoteService类创建客户端的四种方式:构建基于AXIOM的客户端,使用Axis2 Databinding Frame
work(ADB)生成客户端,使用XMLBeans生成客户端,使用JiBX生成客户端。

使用AXIOM创建一个客户端
执行以下步骤来使用AXIOM构建一个客户端。
也注意在使用AXIOM创建服务部分显示的目录结构,为了完整性下面的重复了。

代码
  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   
<script>render_code();</script>
上面提到的AXIOMClient.java类的定义显示在下面的Code Listing 9。
Code Listing 9:使用AXIOM的AXIOMClient类
代码
  1. package samples.quickstart.clients;   
  2.   
  3. import org.apache.axiom.om.OMAbstractFactory;   
  4. import org.apache.axiom.om.OMElement;   
  5. import org.apache.axiom.om.OMFactory;   
  6. import org.apache.axiom.om.OMNamespace;   
  7. import org.apache.axis2.Constants;   
  8. import org.apache.axis2.addressing.EndpointReference;   
  9. import org.apache.axis2.client.Options;   
  10. import org.apache.axis2.client.ServiceClient;   
  11.   
  12. public class AXIOMClient {   
  13.   
  14.     private static EndpointReference targetEPR =    
  15.         new EndpointReference("http://localhost:8080/axis2/services/StockQuoteService");   
  16.   
  17.     public static OMElement getPricePayload(String symbol) {   
  18.         OMFactory fac = OMAbstractFactory.getOMFactory();   
  19.         OMNamespace omNs = fac.createOMNamespace("http://axiom.service.quickstart.samples/xsd""tns");   
  20.   
  21.         OMElement method = fac.createOMElement("getPrice", omNs);   
  22.         OMElement value = fac.createOMElement("symbol", omNs);   
  23.         value.addChild(fac.createOMText(value, symbol));   
  24.         method.addChild(value);   
  25.         return method;   
  26.     }   
  27.   
  28.     public static OMElement updatePayload(String symbol, double price) {   
  29.         OMFactory fac = OMAbstractFactory.getOMFactory();   
  30.         OMNamespace omNs = fac.createOMNamespace("http://axiom.service.quickstart.samples/xsd""tns");   
  31.   
  32.         OMElement method = fac.createOMElement("update", omNs);   
  33.   
  34.         OMElement value1 = fac.createOMElement("symbol", omNs);   
  35.         value1.addChild(fac.createOMText(value1, symbol));   
  36.         method.addChild(value1);   
  37.   
  38.         OMElement value2 = fac.createOMElement("price", omNs);   
  39.         value2.addChild(fac.createOMText(value2,   
  40.                                          Double.toString(price)));   
  41.         method.addChild(value2);   
  42.         return method;   
  43.     }   
  44.   
  45.     public static void main(String[] args) {   
  46.         try {   
  47.             OMElement getPricePayload = getPricePayload("WSO");   
  48.             OMElement updatePayload = updatePayload("WSO"123.42);   
  49.             Options options = new Options();   
  50.             options.setTo(targetEPR);   
  51.             options.setTransportInProtocol(Constants.TRANSPORT_HTTP);   
  52.   
  53.             ServiceClient sender = new ServiceClient();   
  54.             sender.setOptions(options);   
  55.   
  56.             sender.fireAndForget(updatePayload);   
  57.             System.err.println("done");   
  58.             OMElement result = sender.sendReceive(getPricePayload);   
  59.   
  60.             String response = result.getFirstElement().getText();   
  61.             System.err.println("Current price of WSO: " + response);   
  62.   
  63.         } catch (Exception e) {   
  64.             e.printStackTrace();   
  65.         }   
  66.     }   
  67.        
  68. }   
<script>render_code();</script>
Axis2使用AXIOM,或者AXIs Object Model,一个基于StAX API(Streaming API for XML)的DOM(Document Object Model)类似的结构
这里你为服务的update和getPrice方法建立有效载荷。有效载荷的创建类似于你为AXIOM服务创建getPriceResponse有效载荷。然后
你创建Options类,并创建用来与服务交流的ServiceClient。首先你调用update方法,一个什么也不返回的fireAndForget方法。最后
你调用getPrice方法,并从服务得到当前价格并显示它。
现在你可以通过在Axis2_HOME/samples/quickstartaxiom目录键入ant run.client构建并运行AXIOM客户端。
你应该得到以下输出:
代码
  1. done   
  2. Current price of WSO: 123.42  
<script>render_code();</script>

 

使用ADB生成一个客户端
执行以下步骤来使用Axis Data Binding(ADB)构建一个客户端。
通过在Axis2_HOME/samples/quickstartadb目录键入以下命令来生成客户端数据绑定:
%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,并看看它在Code Listing 10中是怎样定义的。
Code Listing 10:ADBClient类

代码
  1. package samples.quickstart.clients;   
  2.   
  3. import samples.quickstart.service.adb.StockQuoteServiceStub;   
  4.   
  5. public class ADBClient{   
  6.     public static void main(java.lang.String args[]){   
  7.         try{   
  8.             StockQuoteServiceStub stub =   
  9.                 new StockQuoteServiceStub   
  10.                 ("http://localhost:8080/axis2/services/StockQuoteService");   
  11.   
  12.             getPrice(stub);   
  13.             update(stub);   
  14.   
  15.         } catch(Exception e){   
  16.             e.printStackTrace();   
  17.             System.err.println("\n\n\n");   
  18.         }   
  19.     }   
  20.   
  21.     /* fire and forget */  
  22.     public static void update(StockQuoteServiceStub stub){   
  23.         try{   
  24.             StockQuoteServiceStub.Update req = new StockQuoteServiceStub.Update();   
  25.             req.setSymbol ("ABC");   
  26.             req.setPrice (42.35);   
  27.   
  28.             stub.update(req);   
  29.             System.err.println("done");   
  30.         } catch(Exception e){   
  31.             e.printStackTrace();   
  32.             System.err.println("\n\n\n");   
  33.         }   
  34.     }   
  35.   
  36.     /* two way call/receive */  
  37.     public static void getPrice(StockQuoteServiceStub stub){   
  38.         try{   
  39.             StockQuoteServiceStub.GetPrice req = new StockQuoteServiceStub.GetPrice();   
  40.   
  41.             req.setSymbol("ABC");   
  42.   
  43.             StockQuoteServiceStub.GetPriceResponse res =   
  44.                 stub.getPrice(req);   
  45.   
  46.             System.err.println(res.get_return());   
  47.         } catch(Exception e){   
  48.             e.printStackTrace();   
  49.             System.err.println("\n\n\n");   
  50.         }   
  51.     }   
  52.   
  53. }   
<script>render_code();</script>
该类使用你创建的Axis Data Bindings创建一个客户端存根。然后它在Web服务上调用getPrice和update操作。getPrice方法操作创建
GetPrice有效载荷并设置symbol为ABC。然后它发送请求并显示当前价格。update方法创建一个Update有效载荷,设置symbol为ABC及
price为42.35。
现在通过在Axis2_HOME/samples/quickstartadb目录键入ant run.client来构建并运行客户端。
你应该得到以下输出:
代码
  1. 42  
  2. done   
<script>render_code();</script>

 

使用XMLBeans生成一个客户端
执行以下步骤来使用XMLBeans数据绑定来构建一个客户端。
通过在xmlbeansClient目录键入以下命令来生成数据绑定:
%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
注意这只会创建客户端存根代码而不会创建服务器端代码。
下一步看看quickstartxmlbeans/src/samples/quickstart/clients/XMLBEANSClient.java,并在Code Listing 11看看它怎样定义的
Code Listing 11:XMLBEANSClient类

代码
  1. package samples.quickstart.clients;   
  2.   
  3. import samples.quickstart.service.xmlbeans.StockQuoteServiceStub;   
  4. import samples.quickstart.service.xmlbeans.xsd.GetPriceDocument;   
  5. import samples.quickstart.service.xmlbeans.xsd.GetPriceResponseDocument;   
  6. import samples.quickstart.service.xmlbeans.xsd.UpdateDocument;   
  7.   
  8. public class XMLBEANSClient{   
  9.   
  10.     public static void main(java.lang.String args[]){   
  11.         try{   
  12.             StockQuoteServiceStub stub =   
  13.                 new StockQuoteServiceStub   
  14.                 ("http://localhost:8080/axis2/services/StockQuoteService");   
  15.   
  16.             getPrice(stub);   
  17.             update(stub);   
  18.   
  19.         } catch(Exception e){   
  20.             e.printStackTrace();   
  21.             System.err.println("\n\n\n");   
  22.         }   
  23.     }   
  24.   
  25.     /* fire and forget */  
  26.     public static void update(StockQuoteServiceStub stub){   
  27.         try{   
  28.             UpdateDocument reqDoc = UpdateDocument.Factory.newInstance();   
  29.             UpdateDocument.Update req = reqDoc.addNewUpdate();   
  30.             req.setSymbol ("ABC");   
  31.             req.setPrice (42.32);   
  32.   
  33.             stub.update(reqDoc);   
  34.             System.err.println("done");   
  35.         } catch(Exception e){   
  36.             e.printStackTrace();   
  37.             System.err.println("\n\n\n");   
  38.         }   
  39.     }   
  40.   
  41.     /* two way call/receive */  
  42.     public static void getPrice(StockQuoteServiceStub stub){   
  43.         try{   
  44.             GetPriceDocument reqDoc = GetPriceDocument.Factory.newInstance();   
  45.             GetPriceDocument.GetPrice req = reqDoc.addNewGetPrice();   
  46.             req.setSymbol("ABC");   
  47.   
  48.             GetPriceResponseDocument res =   
  49.                 stub.getPrice(reqDoc);   
  50.   
  51.             System.err.println(res.getGetPriceResponse().getReturn());   
  52.         } catch(Exception e){   
  53.             e.printStackTrace();   
  54.             System.err.println("\n\n\n");   
  55.         }   
  56.     }   
  57. }   
<script>render_code();</script>
该类使用你创建的XMLBeans数据绑定创建一个客户端存根,然后它在Web服务上调用getPrice和update操作。getPrice方法操作创建
GetPriceDocument,它内部的GetPrice类,并设置symbol为ABC。然后它发送请求并得到GetPriceResponseDocument并显示当前price
update方法创建一个UpdateDocument和Update并设置symbol为ABC及price为42.32,当完成时显示done。
现在通过在Axis2_HOME/samples/quickstartxmlbeans目录键入ant run.client构建并运行工程。
你应该得到下列输出:
代码
  1. 42  
  2. done   
<script>render_code();</script>

 

使用JiBX生成一个客户端
执行以下步骤来使用JiBX构建一个客户端。
通过在Axis2_HOME/samples/quickstartjibx目录的控制台键入以下命令来生成客户端存根:

代码
  1. %AXIS2_HOME%/bin/wsdl2java -uri resources/META-INF/StockQuoteService.wsdl -p samples.quickstart.clients -d jibx -s   
  2. -uw -o build/client   
<script>render_code();</script>
或者简单的键入"ant generate.client"。
下一步看看quickstartjibx/src/samples/quickstart/clients/JiBXClient.java,在Code Listing 12显示了。
Code Listing 12:JiBXClient类
代码
  1. package samples.quickstart.clients;   
  2.   
  3. import samples.quickstart.service.jibx.StockQuoteServiceStub;   
  4.   
  5. public class JiBXClient{   
  6.     public static void main(java.lang.String args[]){   
  7.         try{   
  8.             StockQuoteServiceStub stub =   
  9.                 new StockQuoteServiceStub   
  10.                 ("http://localhost:8080/axis2/services/StockQuoteService");   
  11.   
  12.             getPrice(stub);   
  13.             update(stub);   
  14.   
  15.         } catch(Exception e){   
  16.             e.printStackTrace();   
  17.             System.err.println("\n\n\n");   
  18.         }   
  19.     }   
  20.   
  21.     /* fire and forget */  
  22.     public static void update(StockQuoteServiceStub stub){   
  23.         try{   
  24.             stub.update("ABC"new Double(42.35));   
  25.             System.err.println("done");   
  26.         } catch(Exception e){   
  27.             e.printStackTrace();   
  28.             System.err.println("\n\n\n");   
  29.         }   
  30.     }   
  31.   
  32.     /* two way call/receive */  
  33.     public static void getPrice(StockQuoteServiceStub stub){   
  34.         try{   
  35.             System.err.println(stub.getPrice("ABC"));   
  36.         } catch(Exception e){   
  37.             e.printStackTrace();   
  38.             System.err.println("\n\n\n");   
  39.         }   
  40.     }   
  41.   
  42. }   
<script>render_code();</script>
该类使用创建的JiBX客户端存根在Web服务上访问getPrice和update操作。getPrice方法为股票"ABC"发送请求并显示当前price。
update方法为股票"ABC"设置价格为42.35。
现在通过在Axis2_HOME/samples/quickstartjibx目录的控制台键入"ant run.client[b]"来构建并运行客户端。
你应该得到以下输出:
代码
  1. 42  
  2. done   
<script>render_code();</script>
参考JiBX代码生成集成来得到更多关于同Axis2使用JiBX的信息细节。

 

[b]总结

进一步学习
Apache Axis2-http://ws.apache.org/axis2/
Axis2 Architecture-http://ws.apache.org/axis2/1_0/Axis2ArchitectureGuide.html
Introduction to Apache Axis2-http://www.redhat.com/magazine/021jul06/features/apache_axis2/
Working With Apache Axis2-http://www.wso2.net/articles/axis2/java/2006/09/13/working-with-axis2


Axis2是一个立刻让web服务运行起来的灵活和健壮的方式。本指南呈现了创建一个可以在Axis2上部署的服务的五种方法。现在你拥有
了使用多种不同技术来创建Web服务的灵活性。
分享到:
评论
1 楼 kevindurant 2009-01-02  
看不明白..从哪里搬来的??

相关推荐

    axis2-1.7.9

    - `samples`目录:可能包含了一些示例服务和使用指南,帮助初学者快速上手。 了解了这些基础知识后,开发者可以利用Apache Axis2 1.7.9创建高效率、可扩展的Web服务,同时享受其强大的功能和灵活性。在实际项目中,...

    axis2包含axis2-1.4.1-war.zip和axis2-1.4.1-bin.zip

    - `README.txt`:通常包含快速安装指南、基本操作和一些重要的提示,帮助用户快速上手使用Axis2。 Axis2的核心特性包括: - **模块化**:Axis2允许通过模块进行功能扩展,模块可以独立于服务存在,提高代码复用性...

    Axis2-1.6.2.war

    4. **文档**:可能会包含用户指南、API参考文档和其他技术文档,解释了Axis2的用法和配置选项。 5. **源代码**:如果标记正确,那么会有一系列的源代码文件,这包括了Axis2的实现,开发者可以研究并学习其设计和...

    Axis2完美例子Demo

    "经典实例,工程导入就能用"意味着这是一个可以直接运行的项目,无需过多的设置,这对于初学者或开发者快速上手Axis2非常有帮助。 【标签】"Axis2"、"myeclipse"和"例子"、"jar"揭示了几个关键概念。Axis2是Apache...

    axis2-1.7.zip

    6. **samples**:可能包含示例Web服务和教程,帮助用户快速上手。 7. **docs**:可能包含API文档和用户指南。 8. **Distributions**或**WebContent**:包含Axis2的Web应用程序结构,可以部署到Web服务器如Tomcat。 ...

    Axis_API和axis2_API

    在IT行业中,Web服务是应用程序之间进行通信的一种标准方法,而Axis和Axis2是两种流行的Java SOAP(简单对象访问协议)框架,用于...在实际工作中,结合详细的API文档,开发者可以快速上手,实现高效的服务开发和集成。

    axis2-1.5.6-bin.rar

    4. **示例和服务**:可能包含一些预打包的示例Web服务,帮助用户快速上手和理解如何在Axis2中部署和调用服务。 5. **文档**:包括用户手册、开发者指南和API文档,帮助开发者了解如何使用和扩展Axis2。 6. **模块**...

    axis2-1.4.1-bin

    - **samples**目录:包含示例服务和客户端应用,帮助开发者快速上手。 - **repository**目录:存储服务、模块和依赖的仓库。 - **docs**目录:可能包含API文档和用户指南。 通过解压并探索这个“axis2-1.4.1-bin”...

    axis2&axis教程资料

    - "axis2&axis教程资料"可能包含了关于这两个框架的详细教程、示例代码和最佳实践,可以帮助初学者快速上手。 - 在线文档:Apache官方提供了详细的 Axis2 和 Axis 文档,包括用户指南、开发者指南和API参考。 7. ...

    axis2-1.5.4-war.zip 官网下载

    3. **README.txt** - 这个文件通常包含关于如何安装、配置和使用软件的基本指南,对于快速上手Axis2 1.5.4的部署和配置非常有帮助。 4. **NOTICE.txt** - 通知文件,列出在软件中使用的第三方组件及其各自的版权信息...

    APACHE AXIS2

    - **在线教程和示例代码**:帮助快速上手并深入理解Axis2的工作原理和实践技巧。 总之,Apache Axis2是一个强大且灵活的Web服务框架,为企业级应用提供了一套完善的解决方案,无论是对于初学者还是有经验的开发者,...

    Axis1.4开发指南

    - **DEMO分析**:指南中提供的DEMO将演示如何创建、部署和调用Web服务,以及如何处理响应,这些实例有助于开发者快速上手。 - **问题解决**:通过实例,开发者可以学习到常见问题的解决方法,比如命名空间问题、...

    Quickstart Apache Axis2

    通过阅读“Quickstart Apache Axis2.pdf”,你可以逐步掌握这些概念并实践操作,从而快速上手Apache Axis2的使用。"E书说明.txt"可能包含了关于PDF文档的阅读和使用提示,而"阅读器下载.htm"可能是推荐的PDF阅读器...

    AXIS入门指南-webservice

    AXIS简化了WebService的开发流程,通过自动代码生成和部署工具,使得开发人员可以快速地实现服务接口。 ### 2. 简单介绍 **2.1 WebService介绍** WebService是一种基于标准的、平台无关的通信方式,通过SOAP消息在...

    Packt - Quickstart Apache Axis2 .rar

    总的来说,《Packt - Quickstart Apache Axis2》是一本全面的指南,涵盖了从基础到高级的Apache Axis2知识,适合想要快速上手并深入理解Web服务开发的开发者。通过阅读本书,读者将能够熟练地运用Apache Axis2构建...

    axis2-1.6.0-docs.zip

    4. **Samples**:提供示例代码和配置文件,帮助开发者快速上手,通过实际操作理解Axis2的功能和用法。 5. **Schema**:可能包含Axis2支持的数据交换格式(如WSDL和XML Schema)的定义文件。 6. **Deployment ...

    Developing Web Services with Apache Axis2

    ### 开发Web服务使用Apache Axis2的...通过上述总结,我们可以看出《使用Apache Axis2开发Web服务》这本书是一本非常实用的指南,不仅提供了详细的步骤指导,还涵盖了多项高级技术的应用,适合不同层次的开发者阅读。

Global site tag (gtag.js) - Google Analytics