由於項目的歷史原因,webservice服務端是乙方公司開發的,我們自己開發的系統需要去調用乙方公司的webservice接口。前面用了網上提供的一種方法(非生成代理類),怎么也調用不成功(也許是因為服務端的wsdl的版本太低),開始還以為乙方公司接口的問題,后來用.net試了一下,直接調用成功,說明接口沒有問題。
后來經過思考,還是采用生成代理類的方法來調用,剛開始用cxf,下載完cxf壓縮包,用wsdl2java.bat生成java代理類,結果直接報錯:WSDLToJava Error:Rpc/encoded wsdls are not supported with CXF,網上一查是因為服務端的wsdl版本太老(服務端是用axis)。
無奈只好放棄cxf,改用axis,下載axis1.4版本http://mirror.bit.edu.cn/apache/axis/
注意:如果服務端wsdl比較老的話,請下載低版本,不要下載axis2
下載完后,在F:\axis-bin-1_4\axis-1_4\lib下建一個以下的bat文件:
set Axis_Lib=f:\axis-bin-1_4\axis-1_4\lib set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib% set Axis_Servlet=http://host:5080/xxxx/services/xxxService?wsdl %Java_Cmd% org.apache.axis.wsdl.WSDL2Java -u %Axis_Servlet%
雙擊之后,該文件,自動生成java的代理類,生成之后,建一個main函數調用:
public static void main(String[] args) throws Exception { Object[] pas = new Object[2]; pas[0] = "2"; pas[1] = "xxxx"; MapWebServiceServiceLocator ms = new MapWebServiceServiceLocator(); MapWebService client=ms.getMapWebService(); Object a = client.unsafeInvokeService("方法名", pas); System.out.println(a.toString()); }
這樣就可以調用成功了!!!
所需的包,pom.xml
<dependency> <groupId>org.apache.axis</groupId> <artifactId>axis</artifactId> <version>1.4</version> </dependency> <dependency> <groupId>commons-discovery</groupId> <artifactId>commons-discovery</artifactId> <version>0.2</version> <exclusions> <exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.axis</groupId> <artifactId>axis-jaxrpc</artifactId> <version>1.4</version> </dependency> <dependency> <groupId>org.apache.axis</groupId> <artifactId>axis-saaj</artifactId> <version>1.4</version> </dependency> <dependency> <groupId>wsdl4j</groupId> <artifactId>wsdl4j</artifactId> <version>1.4</version> </dependency>