使用cmd根据WSDL网址生成java客户端代码的实现
作者:峥嵘life 发布时间:2022-09-12 11:00:20
windows下使用cmd命令提示符生成java webservice客户端代码,可以使用命令提示符直接生成客户端代码,直接导入到项目中,只需配置jdk即可,在jdk的bin文件夹下,按Shift并点击右键,选中“在此处打开命令窗口”
输入命令如下:
wsimport -keep -p com.demo.client -d D:\\(存放的地址) http://XX/Account?wsdl(wsdl地址)
命令参数说明:
-d:生成客户端执行类的class文件的存放目录(默认存放在C:\Users\Administrator\)
-s:生成客户端执行类的源文件的存放目录(默认存放在C:\Users\Administrator\)
-p:定义生成类的包名
图示:
上面代码是在D盘下生成java代码,-d代表的是生成class文件和java文件,图示:
如果把这里的-d改为-s,生成的只有java文件,图示:
文件里面包名都是我们可以指定的,如果没有指定,使用的就是根据WSDL文档里面的targetNamespace来命名。
共勉:这个时代会犒赏那些爱学习的人。
补充:利用wsdl地址生成java客户端调用类并实现动态配置的方法
前言:
有时,我们经常要和一些外部系统对接,如果是HTTP接口还好,直接用apache的HttpClient工具类调用即可。而如果对方系统是Webservice,则比较麻烦,本文主要讲解如何用对方的wsdl地址生成java客户端调用类并且动态配置访问地址并在java中使用
1,首先我们先要获取对方的wsdl地址,例如
http://xxxx/xxxx/xxxx.asmx?wsdl
2, 接着,在cxf官网上下载apache-cxf-3.2.5
2.1,将apache-cxf-3.2.5解压缩后安装在D:\\apache-cxf-3.2.5中,设置CXF_HOME环境变量为D:\\ apache-cxf-3.2.5
如下图所示:
2.2,运行cmd,执行命令wsdl2java,等待大概1秒钟,出现USAGE证明设置成功
2.3,用wsdl地址执行命令:其中-d代表输出路径,后面紧跟着路径,路径后面紧跟着地址,按回车键,生成成功!
3,生成成功后
由于wsdl是写死在生成的java类的注解中的,有时我们会使用多套环境进行测试,验证,而sit和uat环境的wsdl地址是不尽相同的。此时,我们需要动态配置wsdl的地址和命名空间的地址
@Component
public class DebitPushClient implements InitializingBean {
private static URL wsdlUrl;
private static String debitWsdlUrl;
private static String uri;
private static QName SERVICE_NAME;
public static HttpResult pushDebitData(String jsonData) {
FinancialSharing ss = new FinancialSharing(wsdlUrl, SERVICE_NAME);
return (HttpResult) WebServiceClientUtil.invokeWebServiceSoapAction(ss, new QName(uri, "FinancialSharingSoap12"), FinancialSharingSoap.class, "pushDebitData", jsonData);
}
/**
* 初始化wsdl连接地址
*/
private void initWsdlUrl() {
URL url = null;
try {
wsdlUrl = new URL(debitWsdlUrl);
} catch (MalformedURLException e) {
java.util.logging.Logger.getLogger(FinancialSharing.class.getName())
.log(java.util.logging.Level.INFO,
"Can not initialize the default wsdl from {}",
debitWsdlUrl);
}
}
/**
* 从配置文件中读取wsdl地址
* @param debitWsdlUrl 地址
*/
@Value("${my.dfdk.wsdl.url:http://xxx.xxx.asmx?wsdl}")
public void setDebitWsdlUrl(String debitWsdlUrl) {
DebitPushClient.debitWsdlUrl = debitWsdlUrl;
}
/**
* 从配置文件中读取命名空间地址
* @param uri 命名空间地址
*/
@Value("${my.dfdk.wsdl.namespace.uri:http://tempuri.org/}")
public void setUri(String uri) {
DebitPushClient.uri = uri;
}
/**
* 初始化wsdl
* @throws Exception
*/
@Override
public void afterPropertiesSet() throws Exception {
initWsdlUrl();
SERVICE_NAME = new QName(uri, "FinancialSharing");
}
}
4,客户端调用,调用成功后,即可获取正确的响应结果,不需要再将xml转成java对象
这篇文章,只是简单介绍了用wsdl地址生成java客户端调用代码的一种方法,除此之外,还可以用maven plugin
cxf-codegen-plugin
生成
<build>
<finalName>cxf-date</finalName>
<plugins>
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>${cxf.version}</version>
<executions>
<execution>
<id>generate-sources</id>
<phase>generate-sources</phase>
<configuration>
<sourceRoot>src/main/resources/cxf</sourceRoot>
<wsdlOptions>
<wsdlOption>
<wsdl>http://localhost:8080/cxf-date/services/BookService?wsdl</wsdl>
<frontEnd>jaxws21</frontEnd>
<faultSerialVersionUID>1</faultSerialVersionUID>
</wsdlOption>
</wsdlOptions>
</configuration>
<goals>
<goal>wsdl2java</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。
来源:https://blog.csdn.net/wenzhi20102321/article/details/68484354


猜你喜欢
- 背景今天我们来谈一下我们自定义的一组WPF控件Form和FormItem,然后看一下如何自定义一组完整地组合WPF控件,在我们很多界面显示的
- import java.io.UnsupportedEncodingException;import java.security.Inval
- 引言在高并发的场景下,异步是一个极其重要的优化方向。前段时间,生产环境发生一次事故,笔者认为事故的场景非常具备典型性 。写这篇文章,笔者想和
- @[toc]在之前的文章中松哥和小伙伴们聊过,正在执行的流程信息是保存在以 ACT_RU_ 为前缀的表中,执行完毕的流程
- 先明确几个概念的区别: padding margin都是边距的含义,关键问题得明白是什么相对什么的边距. padding是控件的内容相对控件
- Kryo框架的source已移至https://github.com/EsotericSoftware/kryo ,进入此页面,然后点击右边
- 1.前言MyBatis框架大家肯定都用过的,废话我就不再多说了,这篇文章就给大家分享一下有关MyBatis框架底层的执行原理吧(Debug!
- MyBatis插入Insert、InsertSelective的区别逆向自动生成的mybatis对应配置Mapper文件里面,有两个方法,分
- 如何将jar包打包到指定目录今天分享一下springboot将jar包打包到指定目录下。由于之前上线都是一个打包到一个jar,由于服务多了,
- 本文实例讲述了Spring实战之@Autowire注解用法。分享给大家供大家参考,具体如下:一 配置<?xml version=&qu
- 1:Maven命令下载源码和javadocs当在IDE中使用Maven时如果想要看引用的jar包中类的源码和javadoc需要通过maven
- VC和BCB中做一个Server的监听程序,只需要指定端口,然后监听(Listen)就行了.在C#找不到这个函数了,慢慢看MSDN,怎么需要
- 优点1.装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能。缺点2.多层装饰比较
- 本文实例讲述了Android实现给TableLayou绘制边框的方法。分享给大家供大家参考,具体如下:效果如下:思路:使用share作为背景
- 本文实例讲述了C#实现读取指定盘符硬盘序列号的方法。分享给大家供大家参考,具体如下:using System;using System.IO
- 一、开篇通过对之前Java之路的了解之后,相信初学者们都对Java有了一个比较深印象的了解了。但是事情不能总停留在理论层面,还得多多实现,才
- 这篇文章主要介绍了Java原生序列化和反序列化代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋
- 本文实例讲述了Java设计模式之抽象工厂模式。分享给大家供大家参考,具体如下:具体工厂类:生产创建某一类具体产品对象。抽象产品类可以使用接口
- 本文实例为大家分享了C# Winform实现波浪滚动效果的具体代码,供大家参考,具体内容如下设计思路1、首先,理解一个概念:正弦波,余弦波。
- 目录源码实现基本流程ThreadLoalMap数据结构Hash冲突及解决ThreadLocal内存泄露内存引用链路引用类型为什么使用弱引用而