java axis web service
编写 java调用web service的客户端比较简单,其中webservice为上一篇gsoap创建的server。
1 package clientTest; 2 import java.rmi.RemoteException; 3 4 import javax.xml.namespace.QName; 5 import javax.xml.rpc.ServiceException; 6 import javax.xml.rpc.ParameterMode; 7 import javax.xml.rpc.encoding.XMLType; 8 9 import org.apache.axis.client.Call; 10 import org.apache.axis.client.Service; 11 public class ClientTest 12 { 13 public static void main(String[] args) { 14 try { 15 String endpoint = "http://localhost:8080"; 16 Service service = new Service(); 17 Call call = (Call)service.createCall(); 18 call.setTargetEndpointAddress(endpoint); 19 20 call.setOperationName(new QName( 21 "urn:calculator", "add")); 22 call.addParameter("a",XMLType.SOAP_DOUBLE,ParameterMode.IN); 23 call.addParameter("b", XMLType.SOAP_DOUBLE, ParameterMode.IN); 24 call.setReturnClass(Double.class); 25 Double temp = (Double)call.invoke(new Object[]{2,2}); //传入的参数(a、b),返回的类型为Double 26 System.out.println("result: " + temp); 27 } catch (ServiceException e) { 28 // TODO Auto-generated catch block 29 e.printStackTrace(); 30 } catch (RemoteException e) { 31 // TODO Auto-generated catch block 32 e.printStackTrace(); 33 } 34 } 35 }
所对应的wsdl文件如下:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <definitions name="calculator" 3 targetNamespace="urn:calculator" 4 xmlns:tns="urn:calculator" 5 xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" 6 xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" 7 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 8 xmlns:xsd="http://www.w3.org/2001/XMLSchema" 9 xmlns:ns="urn:calculator" 10 xmlns:SOAP="http://schemas.xmlsoap.org/wsdl/soap/" 11 xmlns:MIME="http://schemas.xmlsoap.org/wsdl/mime/" 12 xmlns:DIME="http://schemas.xmlsoap.org/ws/2002/04/dime/wsdl/" 13 xmlns:WSDL="http://schemas.xmlsoap.org/wsdl/" 14 xmlns="http://schemas.xmlsoap.org/wsdl/"> 15 16 <types> 17 18 <schema targetNamespace="urn:calculator" 19 xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" 20 xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" 21 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 22 xmlns:xsd="http://www.w3.org/2001/XMLSchema" 23 xmlns:ns="urn:calculator" 24 xmlns="http://www.w3.org/2001/XMLSchema" 25 elementFormDefault="unqualified" 26 attributeFormDefault="unqualified"> 27 <import namespace="http://schemas.xmlsoap.org/soap/encoding/"/> 28 </schema> 29 30 </types> 31 32 <message name="addRequest"> 33 <part name="a" type="xsd:double"/><!-- ns__add::a --> 34 <part name="b" type="xsd:double"/><!-- ns__add::b --> 35 </message> 36 37 <message name="addResponse"> 38 <part name="result" type="xsd:double"/><!-- ns__add::result --> 39 </message> 40 41 <message name="subRequest"> 42 <part name="a" type="xsd:double"/><!-- ns__sub::a --> 43 <part name="b" type="xsd:double"/><!-- ns__sub::b --> 44 </message> 45 46 <message name="subResponse"> 47 <part name="result" type="xsd:double"/><!-- ns__sub::result --> 48 </message> 49 50 <message name="sqrtRequest"> 51 <part name="a" type="xsd:double"/><!-- ns__sqrt::a --> 52 </message> 53 54 <message name="sqrtResponse"> 55 <part name="result" type="xsd:double"/><!-- ns__sqrt::result --> 56 </message> 57 58 <portType name="calculatorPortType"> 59 <operation name="add"> 60 <documentation>Service definition of function ns__add</documentation> 61 <input message="tns:addRequest"/> 62 <output message="tns:addResponse"/> 63 </operation> 64 <operation name="sub"> 65 <documentation>Service definition of function ns__sub</documentation> 66 <input message="tns:subRequest"/> 67 <output message="tns:subResponse"/> 68 </operation> 69 <operation name="sqrt"> 70 <documentation>Service definition of function ns__sqrt</documentation> 71 <input message="tns:sqrtRequest"/> 72 <output message="tns:sqrtResponse"/> 73 </operation> 74 </portType> 75 76 <binding name="calculator" type="tns:calculatorPortType"> 77 <SOAP:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> 78 <operation name="add"> 79 <SOAP:operation style="rpc" soapAction=""/> 80 <input> 81 <SOAP:body use="encoded" namespace="urn:calculator" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 82 </input> 83 <output> 84 <SOAP:body use="encoded" namespace="urn:calculator" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 85 </output> 86 </operation> 87 <operation name="sub"> 88 <SOAP:operation style="rpc" soapAction=""/> 89 <input> 90 <SOAP:body use="encoded" namespace="urn:calculator" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 91 </input> 92 <output> 93 <SOAP:body use="encoded" namespace="urn:calculator" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 94 </output> 95 </operation> 96 <operation name="sqrt"> 97 <SOAP:operation style="rpc" soapAction=""/> 98 <input> 99 <SOAP:body use="encoded" namespace="urn:calculator" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 100 </input> 101 <output> 102 <SOAP:body use="encoded" namespace="urn:calculator" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 103 </output> 104 </operation> 105 </binding> 106 107 <service name="calculator"> 108 <documentation>gSOAP 2.8.14 generated service definition</documentation> 109 <port name="calculator" binding="tns:calculator"> 110 <SOAP:address location="http://localhost:8080"/> 111 </port> 112 </service> 113 114 </definitions>
程序结构如图:
添加的jar下载地址为java_webservice(注意文件类型,javarpc-api独立一个,其余的均在axis压缩包中)。