准備工作:
主要依賴的包:
1.axis.jar
官網:http://axis.apache.org/axis/
2.jaxrpc.jar
下載地址:http://www.java2s.com/Code/Jar/j/Downloadjaxrpcjar.htm
說明:
在拿到wsdl地址后先分析清楚xml文件的一些參數,然后再動手寫代碼,例如service名稱,targetNamespace,請求operation的名稱,要傳入的參數類型,返回結果類型等等。具體的代碼參考如下:
1 package com.joysee.account.service.impl;
2
3
4 import java.rmi.RemoteException;
5
6 import javax.xml.namespace.QName;
7 import javax.xml.rpc.ParameterMode;
8 import javax.xml.rpc.ServiceException;
9
10 import org.apache.axis.client.Call;
11 import org.apache.axis.client.Service;
12
13
14 public class Test {
15
16 /**
17 * @param args
18 * @throws ServiceException
19 * @throws MalformedURLException
20 * @throws RemoteException
21 */
22 public static void main(String[] args) throws ServiceException, RemoteException {
23
24 //WSDL地址
25 String wsdlUrl ="http://IP:PORT/ExampleWebService?wsdl";
26 //看具體響應的WSDL中的namespace
27 String nameSpaceUri ="http://ws.exmaple.com/";
28
29 Service service = new Service();
30
31 Call call = (Call)service.createCall();
32 call.setTargetEndpointAddress(wsdlUrl);
33
34 //設置operation 名稱,
35 call.setOperationName(new QName(nameSpaceUri, "order"));
36
37 //設置賬戶,注意參數為XSD_STRRING
38 call.addParameter("account", org.apache.axis.Constants.XSD_STRING,
39 ParameterMode.IN);
40
41 //設置賬戶,注意參數為XSD_LONG
42 call.addParameter("price", org.apache.axis.Constants.XSD_LONG,
43 ParameterMode.IN);
44
45 //設置返回類型為對象數組
46 call.setReturnClass(Object[].class);
47
48 Object[] result = (Object[]) call.invoke(new Object[]{"test","123456"});
49
50 System.out.println(result[0]);
51
52 }
53
54 }
常見異常:
1.org.xml.sax.SAXException: No deserializer for {http://www.w3.org/2001/XMLSchema}anyType
這個異常需要檢查call.setReturnClass(); 中的類型,或者是setReturnType()
2. Unexpected wrapper element order found.
可以檢查setOperationName中的QName參數,其中的NameSpace地址是不是有問題,或者operation名是否有誤