theboyaply
theboyaply
发布于 2022-11-10 / 384 阅读
0
0

使用java的wsimport生成Webservice客户端代码

参考链接:

https://blog.csdn.net/sinat_18132365/article/details/79668137

https://blog.csdn.net/z69183787/article/details/53505941

介绍

与三方系统对接的时候,如果对方提供的是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 –


评论