参考链接:
https://blog.csdn.net/sinat_18132365/article/details/79668137
介绍
与三方系统对接的时候,如果对方提供的是webservice
接口,我们需要根据对方的接口地址来生成对应的客户端代码。方法有很多种,以前常用的就是使用IntelliJ IDEA
自带的WebService
相关工具生成,并且生成的代码还会附带测试用例。
但是最近我升级了IntelliJ IDEA
版本,导致自带的WebService
工具找不到了或者生成的代码与预期不一致,因此去网上找了另一种方式,就是使用java
自带的命令wsinporrt
来生成。
用法
wsimport
所在路径为%JAVA_HOME%/bin
下面,常用语法为:
wsimport -encoding utf-8 -p com.theboyaply.wsdl -keep -s D:/wsdl/source -d D:/wsdl/dist http://127.0.0.1:8001/HelloWorld?wsdl
- encoding:指定生成文件的编码,不指定默认操作系统的编码。
- p:生成文件所在包名。
- keep:生成客户端源代码。
- s:生成的源代码所在目录。
- d:生成的class所在目录。
- 最后一个参数是wsdl地址。
代码调用
以前用IntelliJ IDEA
自带的WebService
生成的代码会提供测试代码示例,现在生成的代码没看到了(这块没具体研究,反正就这样理解吧,不影响这篇文章技术点)。所以有时候看着生成的客户端代码,不知道从何下手,不知道怎么用。
这里简单介绍下思路:
1、在生成的源代码里全局搜索你的wsdl
地址,比如上面我们的地址是:127.0.0.1。一般来讲你会发现WorkflowService.java
这个文件,因为wsdl
地址就写在里面。好了,这个就是入口类。接下来你只需要去看这里面的方法,然后构造方法的参数传进去就行了。
2、找到入口类后,需要去构造方法的参数,有时候你会看到方法的参数是JAXBElement<String> value
或者其它JAXBElement<Xxx> value
格式,不要急,你可以再去生成的源代码里找找是否有一个文件叫ObjectFactory.java
,如果有,那么你可以使用它来构造你的参数。ObjectFactory
里面包含了所有方法需要的参数的构造方式。
比如有一个方法是这样的setRequestName
:
public class WorkflowRequestInfo {
protected JAXBElement<String> requestName;
public void setRequestName(JAXBElement<String> value) {
this.requestName = value;
}
}
那么你可以使用如下代码去获取它的参数:
ObjectFactory objectFactory = new ObjectFactory();
// objectFactory的方法名一般都是create+对象名+属性名
JAXBElement<String> jaxbERequestName = objectFactory.createWorkflowRequestInfoRequestName("xxx");
– end –