由於項目的歷史原因,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>
