由于项目的历史原因,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_4axis-1_4lib下建一个以下的bat文件:
set Axis_Lib=f:axis-bin-1_4axis-1_4lib 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>