Java利用Axis遠程調用WebService接口

準備工作:

  主要依賴的包:

  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名是否有誤

作者:Ziv小威
出處:http://www.cnblogs.com/zivxiaowei/
關於作者:專注於Java技術的程序員一枚,此外對JS開發保持着較高的興趣。愛好音樂,閱讀,FM等等。
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接。
如有問題,可以郵件:[email protected]
微博:Ziv小威

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章