软件编程
位置:首页>> 软件编程>> java编程>> 使用cmd根据WSDL网址生成java客户端代码的实现

使用cmd根据WSDL网址生成java客户端代码的实现

作者:峥嵘life  发布时间:2022-09-12 11:00:20 

标签:cmd,WSDL,java,客户端

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:定义生成类的包名

图示:

使用cmd根据WSDL网址生成java客户端代码的实现

上面代码是在D盘下生成java代码,-d代表的是生成class文件和java文件,图示:

使用cmd根据WSDL网址生成java客户端代码的实现

如果把这里的-d改为-s,生成的只有java文件,图示:

使用cmd根据WSDL网址生成java客户端代码的实现

文件里面包名都是我们可以指定的,如果没有指定,使用的就是根据WSDL文档里面的targetNamespace来命名。

使用cmd根据WSDL网址生成java客户端代码的实现

共勉:这个时代会犒赏那些爱学习的人。

补充:利用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

如下图所示:

使用cmd根据WSDL网址生成java客户端代码的实现

2.2,运行cmd,执行命令wsdl2java,等待大概1秒钟,出现USAGE证明设置成功

使用cmd根据WSDL网址生成java客户端代码的实现

2.3,用wsdl地址执行命令:其中-d代表输出路径,后面紧跟着路径,路径后面紧跟着地址,按回车键,生成成功!

使用cmd根据WSDL网址生成java客户端代码的实现

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

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com