如果要建立Web service客户端,你可以手工做(参见搭建服务),但是在大多数情况下你拥有一个Web Service描述语言(WSDL)定义,它描述了客户端发送的和希望收到的消息。Axis2提供了几种方法来用该定义自动生成一个客户端。


<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions
xmlns:apachesoap="http://xml.apache.org/xml-soap"
xmlns:impl="http://apache.org/axis2/Axis2UserGuide"
xmlns:intf="http://apache.org/axis2/Axis2UserGuide"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://apache.org/axis2/Axis2UserGuide">
<wsdl:types>
<schema
elementFormDefault="qualified"
targetNamespace="http://apache.org/axis2/Axis2UserGuide"
xmlns="http://www.w3.org/2001/XMLSchema">
<!-- ELEMENTS -->
<element name="DoInOnlyRequest">
<complexType>
<sequence>
<element name="messageString" type="xsd:string"/>
</sequence>
</complexType>
</element>
<element name="TwoWayOneParameterEchoRequest">
<complexType>
<sequence>
<element name="echoString" type="xsd:string"/>
</sequence>
</complexType>
</element>
<element name="TwoWayOneParameterEchoResponse">
<complexType>
<sequence>
<element name="echoString" type="xsd:string"/>
</sequence>
</complexType>
</element>
<element name="NoParametersRequest">
<complexType/>
</element>
<element name="NoParametersResponse">
<complexType/>
</element>
<element name="MultipleParametersAddItemRequest">
<complexType>
<sequence>
<element name="itemId" type="xsd:int"/>
<element name="itemName" type="xsd:string"/>
<element name="price" type="xsd:float"/>
<element name="description" type="xsd:string"/>
</sequence>
</complexType>
</element>
<element name="MultipleParametersAddItemResponse">
<complexType>
<sequence>
<element name="itemId" type="xsd:int"/>
<element name="successfulAdd" type="xsd:boolean"/>
</sequence>
</complexType>
</element>
</schema>
</wsdl:types>
<!-- MESSAGES -->
<wsdl:message name="DoInOnlyRequestMessage">
<wsdl:part name="input" element="impl:DoInOnlyRequest"/>
</wsdl:message>
<wsdl:message name="TwoWayOneParameterEchoRequestMessage">
<wsdl:part name="input" element="impl:TwoWayOneParameterEchoRequest"/>
</wsdl:message>
<wsdl:message name="TwoWayOneParameterEchoResponseMessage">
<wsdl:part name="output" element="impl:TwoWayOneParameterEchoResponse"/>
</wsdl:message>
<wsdl:message name="NoParametersRequestMessage">
<wsdl:part name="input" element="impl:NoParametersRequest"/>
</wsdl:message>
<wsdl:message name="NoParametersResponseMessage">
<wsdl:part name="output" element="impl:NoParametersResponse"/>
</wsdl:message>
<wsdl:message name="MultipleParametersAddItemRequestMessage">
<wsdl:part name="input" element="impl:MultipleParametersAddItemRequest"/>
</wsdl:message>
<wsdl:message name="MultipleParametersAddItemResponseMessage">
<wsdl:part name="output" element="impl:MultipleParametersAddItemResponse"/>
</wsdl:message>
<!-- Port type (operations) -->
<wsdl:portType name="Axis2UserGuidePortType">
<wsdl:operation name="DoInOnly" parameterOrder="input">
<wsdl:input name="DoInOnlyRequestMessage"
message="impl:DoInOnlyRequestMessage"/>
</wsdl:operation>
<wsdl:operation name="TwoWayOneParameterEcho" parameterOrder="input">
<wsdl:input name="TwoWayOneParameterEchoRequestMessage"
message="impl:TwoWayOneParameterEchoRequestMessage"/>
<wsdl:output name="TwoWayOneParameterEchoResponseMessage"
message="impl:TwoWayOneParameterEchoResponseMessage"/>
</wsdl:operation>
<wsdl:operation name="NoParameters" parameterOrder="input">
<wsdl:input name="NoParametersRequestMessage"
message="impl:NoParametersRequestMessage"/>
<wsdl:output name="NoParametersResponseMessage"
message="impl:NoParametersResponseMessage"/>
</wsdl:operation>
<wsdl:operation name="MultipleParametersAddItem" parameterOrder="input">
<wsdl:input name="MultipleParametersAddItemRequestMessage"
message="impl:MultipleParametersAddItemRequestMessage"/>
<wsdl:output name="MultipleParametersAddItemResponseMessage"
message="impl:MultipleParametersAddItemResponseMessage"/>
</wsdl:operation>
</wsdl:portType>
<!-- BINDING (bind operations) -->
<wsdl:binding
name="Axis2UserGuideSoapBinding"
type="impl:Axis2UserGuidePortType">
<wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="DoInOnly">
<wsdlsoap:operation soapAction="DoInOnly"/>
<wsdl:input>
<wsdlsoap:body use="literal"/>
</wsdl:input>
</wsdl:operation>
<wsdl:operation name="TwoWayOneParameterEcho">
<wsdlsoap:operation soapAction="TwoWayOneParameterEcho"/>
<wsdl:input>
<wsdlsoap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<wsdlsoap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="NoParameters">
<wsdlsoap:operation soapAction="NoParameters"/>
<wsdl:input>
<wsdlsoap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<wsdlsoap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="MultipleParametersAddItem">
<wsdlsoap:operation soapAction="MultipleParametersAddItem"/>
<wsdl:input>
<wsdlsoap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<wsdlsoap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<!-- SERVICE -->
<wsdl:service name="Axis2UserGuideService">
<wsdl:port binding="impl:Axis2UserGuideSoapBinding"
name="Axis2UserGuide">
<wsdlsoap:address location="http://localhost:8080/axis2/services/Axis2UserGuide"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>

package org.apache.axis2.axis2userguide;
import org.apache.axis2.axis2userguide.Axis2UserGuideServiceStub.DoInOnlyRequest;
import org.apache.axis2.axis2userguide.Axis2UserGuideServiceStub.TwoWayOneParameterEchoRequest;
import org.apache.axis2.axis2userguide.Axis2UserGuideServiceStub.NoParametersRequest;
import org.apache.axis2.axis2userguide.Axis2UserGuideServiceStub.MultipleParametersAddItemRequest;
import org.apache.axis2.axis2userguide.Axis2UserGuideServiceStub.TwoWayOneParameterEchoResponse;
import org.apache.axis2.axis2userguide.Axis2UserGuideServiceStub.NoParametersResponse;
import org.apache.axis2.axis2userguide.Axis2UserGuideServiceStub.MultipleParametersAddItemResponse;
public class Client{
public static void main(java.lang.String args[]){
try{
Axis2UserGuideServiceStub stub =
new Axis2UserGuideServiceStub
("http://localhost:8080/axis2/services/Axis2UserGuideService");
doInOnly(stub);
twoWayOneParameterEcho(stub);
noParameters(stub);
multipleParameters(stub);
} catch(Exception e){
e.printStackTrace();
System.out.println("\n\n\n");
}
}
/* do in only */
public static void doInOnly(Axis2UserGuideServiceStub stub){
try{
DoInOnlyRequest req = new DoInOnlyRequest();
req.setMessageString("An in only request");
stub.DoInOnly(req);
System.out.println("done");
} catch(Exception e){
e.printStackTrace();
System.out.println("\n\n\n");
}
}
/* two way call/receive */
public static void twoWayOneParameterEcho(Axis2UserGuideServiceStub stub){
try{
TwoWayOneParameterEchoRequest req = new TwoWayOneParameterEchoRequest();
req.setEchoString("echo! ... echo!");
TwoWayOneParameterEchoResponse res =
stub.TwoWayOneParameterEcho(req);
System.out.println(res.getEchoString());
} catch(Exception e){
e.printStackTrace();
System.out.println("\n\n\n");
}
}
/* No parameters */
public static void noParameters(Axis2UserGuideServiceStub stub){
try{
NoParametersRequest req = new NoParametersRequest();
System.out.println(stub.NoParameters(req));
} catch(Exception e){
e.printStackTrace();
System.out.println("\n\n\n");
}
}
/* multiple parameters */
public static void multipleParameters(Axis2UserGuideServiceStub stub){
try{
MultipleParametersAddItemRequest req =
new MultipleParametersAddItemRequest();
req.setPrice((float)1.99);
req.setItemId((int)23872983);
req.setDescription("Must have for cooking");
req.setItemName("flour");
MultipleParametersAddItemResponse res =
stub.MultipleParametersAddItem(req);
System.out.println(res.getSuccessfulAdd());
System.out.println(res.getItemId());
} catch(Exception e){
e.printStackTrace();
System.out.println("\n\n\n");
}
}
}
ADB不是生成Web service客户端的唯一选择,其他的方法包括XmlBeans, JiBX, JAXME and JAXBRI。看下一部分 – 搭建服务