日常开发中经常会遇到各种各样的问题,今天在调用webservice接口生成客户端代码时一步一个坑。
首先我是springboot项目,原本是要利用idea生成客户端代码,结果不仅生成失败,还报了一个乱码的错,根本不知道错误信息是什么。最后各种方法测试之后,终于有一个可以让我生成。下面就说一下我遇到的情况,以及三种生成代码的方法,大家根据自己的情况适用吧。
正常来讲利用idea生成客户端代码的步骤如下:
在项目或者要生成客户端代码的包右键
这里第一个url选项也可以换成选择本地.wsdl文件。结果是一样的,一个是利用远程下载,一个是从本地读取。两种方式都可以,这里不做赘述。
如果你的可以利用idea执行这里生成客户端代码,到这里就可以利用生成的代码文件。自己写个调用方法进行测试了。
如果你遇到了和我一样利用idea生成webservice接口客户端代码报错,如下
图上的乱码通过其他方法我了解了报错信息是:
webservice 不支持使用SOAP协议扩展元素中包含use=“encoded“
这里介绍第二种方法,造成这个问题可能是webservice接口服务端在编写的时候协议版本不一致,这个webservice接口为 axis1.4 来编写的。所以生成客户端代码需要用较低版本的jdk(此时我是jdk1.8)。需要更换自己本地jdk版本到1.6. 然后利用wsimport的方式生成接口代码。(因为咱们springboot项目jdk版本是1.8,这里我不想更改idea中环境,不影响项目其他功能。就更新了本地jdk版本)
打开本地cmd,执行命令
wsimport -keep -d P:\code\class -s P:\code -p com.icbccs.login -verbose 接口url
-s生成.java 文件地址 -d生成.class文件地址 -p是包路径 -verbose是url路径
如果这里你可以成功生成。那么恭喜你用不上第三种方法了。如果和我一样如上图报错,咱们接着看第三种方法。
这里需要下载axis1.4的包。然后执行语句
java -cp mail.jar;saaj.jar;jaxrpc.jar;commons-discovery-0.2.jar;commons-logging-1.0.4.jar;axis.jar;activation.jar;wsdl4j-1.5.1.jar org.apache.axis.wsdl.WSDL2Java com.icbccs.login -p com.icbccs.login
至此在对应的包路径下会发现生成了.java文件,然后你就可以把这些文件拷贝到你的项目对应目录中。写调用方法调用对应接口方法啦。