根据wsdl文件生成java客户端--用于Spring Boot项目
前段时间对接第三方系统时,需要根据对方的wsdl文件生成java客户端,然后进行调用。由于之前没有接触过,各种百度谷歌,现在记录如下:
- 可用的方法;
- 使用axis2生成java客户端;
- 实现为Spring Boot项目;
一、可用的方法
1、使用apache-cxf。尝试之后没有成功,好像是版本支持的问题,然后放弃了。
2、使用eclipse。过程比较简单:
(1)new --> Dynamic Web Project
(2)在刚刚新建的项目上右键,然后new --> Web Service Client,填写wsdl的地址,选择Develop client,然后finish。

但是创建完成之后,代码有错误,所以也放弃了:


(3)最后使用axis2生成了java客户端。
二、使用axis2生成java客户端
1、下载axis2:http://axis.apache.org/axis2/java/core/download.html#,下载axis2-1.7.9-bin.zip,解压。
2、命令行进入解压文件的bin目录下,执行命令(windows系统使用bat命令):
wsdl2java.sh -uri wsdl文件的路径 -o 生成文件的保存路径 -p 包名
例如:wsdl2java.sh -uri /Users/zzc/MXSE_beta.wsdl -o /Users/zzc/mycode/ -p com.zzc.myplugin.axis2test
3、如果出现异常:You must set the JAVA_HOME variable before running Axis2 Script.,手动设置一下JAVA_HOME:
export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home"
4、运行成功后会得到两个文件:XXXCallbackHandler.java、XXXStub.java。其中XXXStub.java就是客户端接口的实现类。
三、实现为Spring Boot项目
1、初始化一个Spring Boot项目,包名就用上面指定的包,比如:com.zzc.myplugin.axis2test,将上面生成的两个文件copy到包下面。
2、引入axis2的相关依赖:注意maven的版本尽量和上面步骤中下载的axis2的版本保持一直,否则可能会报错,比如构造函数不支持之类的,这个坑也爬了很久...
<!-- axis2 -->
<dependency>
<groupId>org.apache.axis2</groupId>
<artifactId>axis2-spring</artifactId>
<version>1.7.9</version>
</dependency>
<dependency>
<groupId>org.apache.axis2</groupId>
<artifactId>axis2-transport-http</artifactId>
<version>1.7.9</version>
</dependency>
<dependency>
<groupId>org.apache.axis2</groupId>
<artifactId>axis2-transport-local</artifactId>
<version>1.7.9</version>
</dependency>
<dependency>
<groupId>org.apache.axis2</groupId>
<artifactId>axis2-kernel</artifactId>
<version>1.7.9</version>
</dependency>
<dependency>
<groupId>org.apache.axis2</groupId>
<artifactId>axis2-adb</artifactId>
<version>1.7.9</version>
</dependency>
<!-- axis2 -->
3、修改客户端代码,添加属性
一般调用第三方系统是要账号、密码之类的权限验证的;而且测试和生产的url地址(也就是targetEndpoint)也是不一样的。所以我们需要在XXXStub.java中添加一些新的字段,同时将测试和生产的url地址添加为spring的配置类。
(1)在XXXStub.java中添加账号、密码字段:

(2)新建XXXProperties.java。
package com.zzc.myplugin.axis2test;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(prefix=PftStubProperties.PFT_PREFIX)
public class PftStubProperties {
public static final String PFT_PREFIX = "myaxis";
private String ac;
private String pw;
private String address; // 接口地址
public String getAc() {
return ac;
}
public void setAc(String ac) {
this.ac = ac;
}
public String getPw() {
return pw;
}
public void setPw(String pw) {
this.pw = pw;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
该测试项目会作为依赖供其他项目使用,所以记得在对应项目的配置文件里添加配置信息,比如使用application.yml:

(3)新建配置类XXXConfigration.java,注入客户端,设置账号、密码、请求地址。
package com.zzc.myplugin.axis2test;
import org.apache.axis2.AxisFault;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan
@EnableConfigurationProperties({PftStubProperties.class})
public class PftStubConfigration {
@Bean
@ConditionalOnMissingBean
public PFTMXStub pftMxStub(PftStubProperties pftStubProperties) throws AxisFault{
PFTMXStub pftMxStub = new PFTMXStub(pftStubProperties.getAddress());
pftMxStub.setAc(pftStubProperties.getAc());
pftMxStub.setPw(pftStubProperties.getPw());
return pftMxStub;
}
}
(4)新建spring.factories文件:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.zzc.myplugin.axis2test.PftStubConfigration
最后的代码结构为:

四、使用客户端调用接口
在需要调用wsdl客户端的项目中,引入上面新建的项目,就可以愉快的调用相应的方法,对接接口了。
@Autowired
private PFTMXStub pftMxStub;
...
pftMxStub.doSomething(param);
...
更多推荐
所有评论(0)