创建客户端
在这个部分,我们将看看基于StockQuoteService类创建客户端的四种方式:构建基于AXIOM的客户端,使用Axis2 Databinding Frame
work(ADB)生成客户端,使用XMLBeans生成客户端,使用JiBX生成客户端。
使用AXIOM创建一个客户端
执行以下步骤来使用AXIOM构建一个客户端。
也注意在使用AXIOM创建服务部分显示的目录结构,为了完整性下面的重复了。
代码
- - quickstartaxiom
- - README.txt
- - build.xml
- - resources
- - META-INF
- - services.xml
- - StockQuoteService.wsdl
- - src
- - samples
- - quickstart
- - service
- - axiom
- - StockQuoteService.java
- - clients
- - AXIOMClient.java
<script>render_code();</script>
上面提到的AXIOMClient.java类的定义显示在下面的Code Listing 9。
Code Listing 9:使用AXIOM的AXIOMClient类
代码
- 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 omNs = 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 omNs = 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 options = new Options();
- options.setTo(targetEPR);
- options.setTransportInProtocol(Constants.TRANSPORT_HTTP);
-
- ServiceClient sender = new ServiceClient();
- sender.setOptions(options);
-
- sender.fireAndForget(updatePayload);
- System.err.println("done");
- OMElement result = sender.sendReceive(getPricePayload);
-
- String response = result.getFirstElement().getText();
- System.err.println("Current price of WSO: " + response);
-
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- }
<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客户端。
你应该得到以下输出:
代码
- done
- 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类
代码
- 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);
-
- } catch(Exception e){
- e.printStackTrace();
- System.err.println("\n\n\n");
- }
- }
-
-
- 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("done");
- } catch(Exception e){
- e.printStackTrace();
- System.err.println("\n\n\n");
- }
- }
-
-
- 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");
- }
- }
-
- }
<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来构建并运行客户端。
你应该得到以下输出:
代码
<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类
代码
- 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);
-
- } catch(Exception e){
- e.printStackTrace();
- System.err.println("\n\n\n");
- }
- }
-
-
- public static void update(StockQuoteServiceStub stub){
- try{
- UpdateDocument reqDoc = UpdateDocument.Factory.newInstance();
- UpdateDocument.Update req = reqDoc.addNewUpdate();
- req.setSymbol ("ABC");
- req.setPrice (42.32);
-
- stub.update(reqDoc);
- System.err.println("done");
- } catch(Exception e){
- e.printStackTrace();
- System.err.println("\n\n\n");
- }
- }
-
-
- public static void getPrice(StockQuoteServiceStub stub){
- try{
- GetPriceDocument reqDoc = GetPriceDocument.Factory.newInstance();
- GetPriceDocument.GetPrice req = reqDoc.addNewGetPrice();
- req.setSymbol("ABC");
-
- GetPriceResponseDocument res =
- stub.getPrice(reqDoc);
-
- System.err.println(res.getGetPriceResponse().getReturn());
- } catch(Exception e){
- e.printStackTrace();
- System.err.println("\n\n\n");
- }
- }
- }
<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构建并运行工程。
你应该得到下列输出:
代码
<script>render_code();</script>
使用JiBX生成一个客户端
执行以下步骤来使用JiBX构建一个客户端。
通过在Axis2_HOME/samples/quickstartjibx目录的控制台键入以下命令来生成客户端存根:
代码
- %AXIS2_HOME%/bin/wsdl2java -uri resources/META-INF/StockQuoteService.wsdl -p samples.quickstart.clients -d jibx -s
- -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类
代码
- package samples.quickstart.clients;
-
- import samples.quickstart.service.jibx.StockQuoteServiceStub;
-
- public class JiBXClient{
- public static void main(java.lang.String args[]){
- try{
- StockQuoteServiceStub stub =
- new StockQuoteServiceStub
- ("http://localhost:8080/axis2/services/StockQuoteService");
-
- getPrice(stub);
- update(stub);
-
- } catch(Exception e){
- e.printStackTrace();
- System.err.println("\n\n\n");
- }
- }
-
-
- public static void update(StockQuoteServiceStub stub){
- try{
- stub.update("ABC", new Double(42.35));
- System.err.println("done");
- } catch(Exception e){
- e.printStackTrace();
- System.err.println("\n\n\n");
- }
- }
-
-
- public static void getPrice(StockQuoteServiceStub stub){
- try{
- System.err.println(stub.getPrice("ABC"));
- } catch(Exception e){
- e.printStackTrace();
- System.err.println("\n\n\n");
- }
- }
-
- }
<script>render_code();</script>
该类使用创建的JiBX客户端存根在Web服务上访问getPrice和update操作。getPrice方法为股票"ABC"发送请求并显示当前price。
update方法为股票"ABC"设置价格为42.35。
现在通过在Axis2_HOME/samples/quickstartjibx目录的控制台键入"
ant run.client[b]"来构建并运行客户端。
你应该得到以下输出:
代码
<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服务的灵活性。
分享到:
相关推荐
axis2 webservice开发指南
用Axis2快速发布自己的wsdl服务,注意:里面的axis2(即axis2War解压后)文件里面的内容已清空,你可以在网上下载。你可以结合前面的《Axis2创建服务端实例》资源分析。
Axis 的简单准备 Axis 的入门实例 Axis 复杂对象类型的WebService Axis 的辅助工具发布、调用WebService Axis WebService 会话Session 的管理 Axis 用控制台Dos 命令发布WebService Axis 跨多个WebService 管理...
Axis2指南,介绍Axis2架构体系,英文。
Axis2快速发布服务详解:包括服务端与客户端。 此资源只包括脚本以及说明,整个目录没有上传。 我在此说明一下:根目录Axis2_141|---client |---server |---axis2-1.4.1(axis2的完整包) |---axis2(axis2_war...
axis2例子 webservice axis2 示例axis2例子 webservice axis2 示例axis2例子 webservice axis2 示例axis2例子 webservice axis2 示例axis2例子 webservice axis2 示例
Axis2_WebService_开发指南(转)
axis2服务端的各种写法及客户端的用法及helloworld代码,包配环境部署文件axis2.war 其中 services文件 - - <!-- 实现的服务类,locked 锁定 xsd:false 一种格式 --> ...
axis2 webservice 服务端jar包: -->axis2-kernel-1.6.1.jar -->axis2-spring-1.6.1.jar -->axis2-transport-http-1.6.1.jar -->XmlSchema-1.4.7.jar -->wsdl4j-1.6.2.jar -->axiom-api-1.2.12.jar -->axiom...
Axis2创建web service快速入门
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-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-1.7.8.zip客户端。2、下载解压在D:\Work_Program_Files目录;在D:\Work_Program_Files\axis2-1.6.2\bin目录有一个wsdl2java.bat文件; 3、设置环境变量,加入AXIS2_HOME=Axis2客户端安装目录,path中追加;%...
各位看官,超级经典AXIS2资料,让你在最短的时间内,学会如何开发AXIS2程序,你下载后如果觉得对你没有帮助,不值10的币,请评分区去骂。 (包含一个中文WORD,一个英文PDF)
本案例实现使用Axis2生成.arr包发布WebService服务,并使用Axis2生成客户端代码方式调用WebService
Axis2是下一代 Apache Axis。Axis2 虽然由 Axis 1.x 处理程序模型提供支持,但它具有更强的灵活性并可扩展到新的体系结构。Axis2 基于新的体系结构进行了全新编写,而且没有采用 Axis 1.x 的常用代码。支持开发 Axis...
axis1.4和axis2相关jar文件,axis1.4和axis2相关jar文件
axis2的API,axis2 API,axis2帮助文档
axis2-1.6.1
axis2客户端调用axis1服务接口 调用方式 使用RPC方式调用WebService,为了防止冲突可以增加 // 与weblogic的lib冲突配置 System.setProperty("javax.xml.stream.XMLInputFactory", ...