axis2生成客户端代码

ØAXIS_HOME

D:/axis1_4

ØAXIS_LIB

%AXIS_HOME%/lib

ØAXIS_CLASSPATH

D:/axis1_4/lib/axis.jar;D:/axis1_4/lib/axis-ant.jar;D:/axis1_4/lib/commons-discovery-0.2.jar;D:/axis1_4/lib/commons-logging-1.0.4.jar;D:/axis1_4/lib/jaxrpc.jar;D:/axis1_4/lib/saaj.jar;D:/axis1_4/lib/log4j-1.2.8.jar;D:/axis1_4/lib/wsdl4j-1.5.1.jar;

ØCLASSPATH

添加%axis_classpath%

使用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

上述引用的AXIOMClient.java类定义如代码9所示。

CodeListing
9:TheAXIOMClientclassusingAXIOM

packagesamples.quickstart.clients;
importorg.apache.axiom.om.OMAbstractFactory;
importorg.apache.axiom.om.OMElement;
importorg.apache.axiom.om.OMFactory;
importorg.apache.axiom.om.OMNamespace;
importorg.apache.axis2.Constants;
importorg.apache.axis2.addressing.EndpointReference;
importorg.apache.axis2.client.Options;
importorg.apache.axis2.client.ServiceClient;
publicclassAXIOMClient{
privatestaticEndpointReferencetargetEPR=
newEndpointReference("http://localhost:8080/axis2/services/StockQuoteService");
publicstaticOMElementgetPricePayload(Stringsymbol){
OMFactoryfac
=OMAbstractFactory.getOMFactory();
OMNamespaceomNs
=fac.createOMNamespace("http://axiom.service.quickstart.samples/xsd","tns");
OMElementmethod
=fac.createOMElement("getPrice",omNs);
OMElementvalue
=fac.createOMElement("symbol",omNs);
value.addChild(fac.createOMText(value,symbol));
method.addChild(value);
returnmethod;
}

publicstaticOMElementupdatePayload(Stringsymbol,doubleprice){
OMFactoryfac
=OMAbstractFactory.getOMFactory();
OMNamespaceomNs
=fac.createOMNamespace("http://axiom.service.quickstart.samples/xsd","tns");
OMElementmethod
=fac.createOMElement("update",omNs);
OMElementvalue1
=fac.createOMElement("symbol",omNs);
value1.addChild(fac.createOMText(value1,symbol));
method.addChild(value1);
OMElementvalue2
=fac.createOMElement("price",omNs);
value2.addChild(fac.createOMText(value2,
  Double.toString(price)));
method.addChild(value2);
returnmethod;
}

publicstaticvoidmain(String[]args){
try{
OMElementgetPricePayload
=getPricePayload("WSO");
OMElementupdatePayload
=updatePayload("WSO",123.42);
Optionsoptions
=newOptions();
options.setTo(targetEPR);
options.setTransportInProtocol(Constants.TRANSPORT_HTTP);
ServiceClientsender
=newServiceClient();
sender.setOptions(options);
sender.fireAndForget(updatePayload);
System.err.println(
"priceupdated");
OMElementresult
=sender.sendReceive(getPricePayload);
Stringresponse
=result.getFirstElement().getText();
System.err.println(
"CurrentpriceofWSO:"+response);
}
catch(Exceptione){
e.printStackTrace();
}

}

}



Axis2使用的AXIOM又叫AXIS对象模型,它是一个以StAXAPI(XML的流式API)为基础的类似DOM(文档对象模型)的结构。在这里,您为调用服务提供的两个方法update和getPrice设置了有效载荷。有效载荷的建立过程类似于您为AXIOM服务的getPriceResponse建立有效载荷的情形。然后,您设置可选类,并创建一个用于和服务端通讯的ServiceClient。接下来先调用Update方法,这是一个一触即忘的方法,因为它没有任何返回值。最后调用getPrice方法从服务端获得当前股价并显示出来。

现在,您可以通过键入在Axis2_HOME
/samples/quickstartaxiom的命令”antrun.client”构建并运行AXIOM客户端。

你应该看到以下输出:

done
CurrentpriceofWSO:
123.42



使用ADB生成客户端

若要用ADB生成客户端,请执行以下步骤。

输入下列在Axis2_HOME
/samples/quickstartadb目录中的命令来创建ADB数据绑定的客户端:

%AXIS2_HOME%\bin\WSDL2Java-uriresources\META-INF\StockQuoteService.wsdl-psamples.quickstart.clients-dadb-s-obuild\client

或者,输入在Axis2_HOME
/samples/quickstartadb目录中的命令”antgenerate.client”。

代码10是quickstartadb
/src/samples/quickstart/clients/ADBClient.java的内容。

CodeListing
10:TheADBClientClass

packagesamples.quickstart.clients;
importsamples.quickstart.service.adb.StockQuoteServiceStub;
publicclassADBClient{
publicstaticvoidmain(java.lang.Stringargs[]){
try{
StockQuoteServiceStubstub
=
newStockQuoteServiceStub
(
"http://localhost:8080/axis2/services/StockQuoteService");
getPrice(stub);
update(stub);
getPrice(stub);
}
catch(Exceptione){
e.printStackTrace();
System.err.println(
"\n\n\n");
}

}

/*fireandforget*/
publicstaticvoidupdate(StockQuoteServiceStubstub){
try{
StockQuoteServiceStub.Updatereq
=newStockQuoteServiceStub.Update();
req.setSymbol(
"ABC");
req.setPrice(
42.35);
stub.update(req);
System.err.println(
"priceupdated");
}
catch(Exceptione){
e.printStackTrace();
System.err.println(
"\n\n\n");
}

}

/*twowaycall/receive*/
publicstaticvoidgetPrice(StockQuoteServiceStubstub){
try{
StockQuoteServiceStub.GetPricereq
=newStockQuoteServiceStub.GetPrice();
req.setSymbol(
"ABC");
StockQuoteServiceStub.GetPriceResponseres
=
stub.getPrice(req);
System.err.println(res.get_return());
}
catch(Exceptione){
e.printStackTrace();
System.err.println(
"\n\n\n");
}

}

}



这个类用你生成的Axis数据绑定创建了一个客户端存根。然后它调用web服务提供的getPrice和update操作。该getPrice方法的操作创建GetPrice的有效载荷,并将符号设置为ABC。然后它发出请求,并显示当前的股票价格。update方法创建了一个Update的有效载荷,并将标志设置为ABC,价格设置为42.
35

现在,请输入在Axis2_HOME
/samples/quickstartadb目录中的命令”antrun.client”,建立并运行客户端。

你应该看到以下输出:

42
priceupdated
42.35



使用XMLBeans生成客户端

若要使用XMLBeans生成客户端,请执行以下步骤。

通过输入在xmlbeansClient目录中的下列命令生成数据绑定。

%AXIS2_HOME%\bin\WSDL2Java-uriresources\META-INF\StockQuoteService.wsdl-psamples.quickstart.service.xmlbeans-dxmlbeans-s-obuild\client

请注意,这将仅创建一个客户端存根代码而没有服务器端代码。

下面看看quickstartxmlbeans
/src/samples/quickstart/clients/XMLBEANSClient.java是如何定义的。见代码11。

CodeListing
11:TheXMLBEANSClientclass

packagesamples.quickstart.clients;
importsamples.quickstart.service.xmlbeans.StockQuoteServiceStub;
importsamples.quickstart.service.xmlbeans.xsd.GetPriceDocument;
importsamples.quickstart.service.xmlbeans.xsd.GetPriceResponseDocument;
importsamples.quickstart.service.xmlbeans.xsd.UpdateDocument;
publicclassXMLBEANSClient{
publicstaticvoidmain(java.lang.Stringargs[]){
try{
StockQuoteServiceStubstub
=
newStockQuoteServiceStub
(
"http://localhost:8080/axis2/services/StockQuoteService");
getPrice(stub);
update(stub);
getPrice(stub);
}
catch(Exceptione){
e.printStackTrace();
System.err.println(
"\n\n\n");
}

}

/*fireandforget*/
publicstaticvoidupdate(StockQuoteServiceStubstub){
try{
UpdateDocumentreqDoc
=UpdateDocument.Factory.newInstance();
UpdateDocument.Updatereq
=reqDoc.addNewUpdate();
req.setSymbol(
"BCD");
req.setPrice(
42.32);
stub.update(reqDoc);
System.err.println(
"priceupdated");
}
catch(Exceptione){
e.printStackTrace();
System.err.println(
"\n\n\n");
}

}

/*twowaycall/receive*/
publicstaticvoidgetPrice(StockQuoteServiceStubstub){
try{
GetPriceDocumentreqDoc
=GetPriceDocument.Factory.newInstance();
GetPriceDocument.GetPricereq
=reqDoc.addNewGetPrice();
req.setSymbol(
"BCD");
GetPriceResponseDocumentres
=
stub.getPrice(reqDoc);
System.err.println(res.getGetPriceResponse().getReturn());
}
catch(Exceptione){
e.printStackTrace();
System.err.println(
"\n\n\n");
}

}

}



这个类用你生成的XMLBeans数据绑定产生一个客户端存根。然后他调用web服务的getPrice和update操作。这个getPrice方法产生它的一个内部GetPrice类,GetPriceDocument,并将它的符号设置为ABC.它然后发送请求并提取出GetPriceResponseDocument,显示价格为42.
32

现在键入Axis2_HOME
/samples/quickstartxmlbeans目录中的命令”antrun.client”来构建和运行项目。你将看到下列输出

42
priceupdated
42.32



使用JiBX生成一个客户端

若要使用JiBX生成一个客户端,请执行下列步骤

键入在Axis2_HOME
/samples/quickstartjibx目录中的下列命令来生成客户端存根。

%AXIS2_HOME%\bin\wsdl2java-uriresources\META-INF\StockQuoteService.wsdl-psamples.quickstart.clients-djibx-s-uw-obuild\client

或者简单的运行命令
"antgenerate.client".

下面看看quickstartjibx
/src/samples/quickstart/clients/JiBXClient.java是如何定义的。见代码12.

CodeListing
12:TheJiBXClientclass

packagesamples.quickstart.clients;
importsamples.quickstart.service.jibx.StockQuoteServiceStub;
publicclassJiBXClient{
publicstaticvoidmain(java.lang.Stringargs[]){
try{
StockQuoteServiceStubstub
=
newStockQuoteServiceStub
(
"http://localhost:8080/axis2/services/StockQuoteService");
getPrice(stub);
update(stub);
getPrice(stub);
}
catch(Exceptione){
e.printStackTrace();
System.err.println(
"\n\n\n");
}

}

/*fireandforget*/
publicstaticvoidupdate(StockQuoteServiceStubstub){
try{
stub.update(
"CDE",newDouble(42.35));
System.err.println(
"priceupdated");
}
catch(Exceptione){
e.printStackTrace();
System.err.println(
"\n\n\n");
}

}

/*twowaycall/receive*/
publicstaticvoidgetPrice(StockQuoteServiceStubstub){
try{
System.err.println(stub.getPrice(
"CDE"));
}
catch(Exceptione){
e.printStackTrace();
System.err.println(
"\n\n\n");
}

}

}



这个类用你生成的JiBX客户端存根访问web服务的getPrice和update操作。这个getPrice方法发送获取股票“ABC”价格的请求,然后显示当前股价。Update将“ABC”的股价设为42.
35

现在,通过键入Axis2_HOME
/samples/quickstartjibx目录中的命令"antrun.client"来构建和运行客户端。

您将看到下列输出:

42
priceupdated
42.35


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/aseity/archive/2009/04/12/4066363.aspx

你可能感兴趣的:(axis2)