概述


wsimport是jdk自带的命令,可以根据wsdl文档生成客户端中间代码,基于生成的代码编写客户端,可以省很多麻烦。

wsimport命令


wsimport的用法
wsimport [options] <WSDL_URI>
比较常用的[options]有:
1. -d <directory>
   在指定的目录生成class文件
2. -clientjar <jarfile>
   在当前目录生成jar文件,结合-d <directory>可以在指定的目录生成jar文件
3. -s <directory>
   在指定的目录生成java源文件
4. -p <pkg>
   指定生成文件的包结构
5. -keep
   在生成class文件,或者jar包时,同时保留java源文件
 

常用的组合

  1. 在指定的目录生成指定包结构的java源文件
    假设wsdl文档的uri为http://localhost:6666/service/interpret?wsdl,那么在F:\temp下,生成包结构为cn.ljl.sand.jws.chapter3.client.wsimport的java源文件的命令为:

    wsimport -s F:\temp -p cn.ljl.sand.jws.chapter3.client.wsimport http://localhost:6666/service/interpret?wsdl
     
  2. 在指定的目录生成指定包结构的jar文件
    假设wsdl文档的uri为http://localhost:6666/service/interpret?wsdl,那么在F:\temp下,生成包结构为cn.ljl.sand.jws.chapter3.client.wsimport的interpret-wsimport.jar的命令为:
    wsimport -d F:\temp -clientjar interpret-wsimport.jar -p cn.ljl.sand.jws.chapter3.client.wsimport http://localhost:6666/service/interpret?wsdl

编写客户端


文件分布图

说明:cn.ljl.sand.jws.chapter3.client.wsimport中的是基于wsimport生成的代码;cn.ljl.sand.jws.chapter3.client中的是基于生成代码的客户端。

使用wsimport生成代码

指定-p cn.ljl.sand.jws.chapter3.client.wsimport

核心类介绍

wsimport生成的文件中,有两个是我们需要了解的,一个是以wsdl文档的portType元素的name为名的接口,一个是以wsdl文档的service元素的name为名的类。比如使用上述命令生成的类图如下:

比较一下,这里生成的InterpretService接口,和服务端的接口是一致的。而InterpretServiceImplService的getInterpretServiceImplPort方法,可以让我们获取InterpretService的实例,然后我们就可以像执行本地代码一样请求webservice了。

编写客户端

创建WSIClient.java,基于生成的代码访问服务。
package cn.ljl.sand.jws.chapter3.client;
import java.net.MalformedURLException;
import java.net.URL;
import org.junit.Assert;
import org.junit.Test;
import cn.ljl.sand.jws.chapter3.client.wsimport.InterpretService;
import cn.ljl.sand.jws.chapter3.client.wsimport.InterpretServiceImplService;
public class WSIClient {
@Test
public void test() {
InterpretServiceImplService ss = new InterpretServiceImplService();
InterpretService service = ss.getInterpretServiceImplPort();
String chnum = service.interpret(112358);
Assert.assertEquals("一一二三五八", chnum);
} @Test
public void test2() throws MalformedURLException {
URL url = new URL("http://localhost:6666/service/interpret?wsdl");
InterpretServiceImplService ss = new InterpretServiceImplService(url);
InterpretService service = ss.getInterpretServiceImplPort();
String chnum = service.interpret(112358);
Assert.assertEquals("一一二三五八", chnum);
}
}
说明:
这里提供了两个测试方法:test使用最简单的方式;test2考虑到URL可能的变动,所以单独指定了URL,而这个url,可以根据需要来自配置。

基于wsimport生成代码的客户端的更多相关文章

  1. 根据wsdl,基于wsimport生成代码的客户端

    根据wsdl,基于wsimport生成代码的客户端 wsimport是jdk自带的命令,可以根据wsdl文档生成客户端中间代码,基于生成的代码编写客户端,可以省很多麻烦. 局限性:wsimport   ...

  2. 使用java的wsimport.exe工具生成wsdl的客户端代码

    在jdk的bin目录下有一个wsimport.exe的工具,使用该工具可以根据wsdl地址生成java的客户端代码. 常用命令如下: wsimport  -keep -d d:\ -s d:\src  ...

  3. 使用java的wsimport.exe生成wsdl的客户端代码【转】

    使用java的wsimport.exe工具生成wsdl的客户端代码 wsimport -keep -d d:\ -s d:\src -p com.map -verbose http://192.168 ...

  4. 基于数据库的代码自动生成工具,生成JavaBean、生成数据库文档、生成前后端代码等(v6.0.0版)

    TableGo v6.0.0 版震撼发布,此次版本更新如下: 1.UI界面大改版,组件大调整,提升界面功能的可扩展性. 2.新增BeautyEye主题,界面更加清新美观,也可以通过配置切换到原生Jav ...

  5. CXF wsdl2java 生成java代码供客户端使用

    CXF wsdl2java 生成java代码供客户端使用 环境配置:1.下载apache-cxf-2.6.2在环境变量中配置CXF_HOME 值为E:\gavin\cxf\apache-cxf-3.0 ...

  6. 利用wsdl2java工具生成webservice的客户端代码

    1.JDK环境  2.下载apache-cxf发布包:http://cxf.apache.org/download.html 目前最新版本为3.2.6, 解压后如下: 解压发布包,设置CXF_HOME ...

  7. SSM 框架基于ORACLE集成TKMYBATIS 和GENERATOR自动生成代码(Github源码)

    基于前一个博客搭建的SSM框架 https://www.cnblogs.com/jiangyuqin/p/9870641.html 源码:https://github.com/JHeaven/ssm- ...

  8. 使用命令wsimport生成WebService客户端

    使用命令wsimport生成WebService客户端 wsimpost命令有几个重要的参数: -keep:是否生成java源文件    -d:指定输出目录    -s:指定源代码输出目录    -p ...

  9. 2016.7.14 generator基于注解和基于xml自动生成代码的区别

    1.generator配置文件generatorConfig.xml的区别 2.生成代码的区别 注:二者的实体类都一样. (1)基于XML 生成的文件有: 后面省略. 也就是说,基于xml的方式,是要 ...

随机推荐

  1. 使用localhost调试本地代码,setcookie无效

    今天在本地调试代码的时候,再域名中使用localhost,结果一直调试不成功,最后发现在登录时,setcookie()没有设置进去 于是发现了,在使用localhost调试时,保存cookie是无效的 ...

  2. git如何删除本地所有未提交的更改

    stash很好用,至少不会影响 .gitignore 里面的不跟踪的文件: git add . && git stash && git stash drop ===== ...

  3. Spring 学习笔记 整合 Struts2

           Struts2与Spring整合后,可以使用Spring的配置文件applicationContext.xml来描述依赖关系,在Struts2的配置文件struts.xml来使用Spri ...

  4. zoj 1729 Hidden Password

    Hidden Passwordhttp://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=729 Time Limit: 2 Seconds ...

  5. 【BZOJ】1500: [NOI2005]维修数列

    [算法]splay [题解]数据结构 感谢Occult的模板>_<:HYSBZ 1500 维修数列 #include<cstdio> #include<cctype> ...

  6. 超详细的Java面试题总结(一)之Java基础知识篇

    面向对象和面向过程的区别 面向过程:   优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机.嵌入式开发.Linux/Unix等一般采用面向过程开发,性能是最重要的因 ...

  7. vue数组操作不触发前端重新渲染

    暂时使用给数组先赋值 [ ] ,然后重新赋值的方式解决. 此外,能够监听的数组变异方法 https://cn.vuejs.org/v2/guide/list.html#%E5%8F%98%E5%BC% ...

  8. node遇到的一些坑,npm无反应,cordova安装以后显示不是内部或外部命令

    1.输入npm -v 以后一直无反应 C:\Users\用户名 目录下找到 .npmrc文件,删除以后,执行npm -v顺利显示版本号 2.安装cordova以后一直报错,不是内部或外部命令也不是可运 ...

  9. Python第三方库SnowNLP(Simplified Chinese Text Processing)快速入门与进阶

    简介 github地址:https://github.com/isnowfy/snownlp SnowNLP是一个python写的类库,可以方便的处理中文文本内容,是受到了TextBlob的启发而写的 ...

  10. 5-3 Linux内核计时、延时函数与内核定时器【转】

    转自:http://www.xuebuyuan.com/510594.html 5-3 Linux内核计时.延时函数与内核定时器 计时 1. 内核时钟 1.1   内核通过定时器(timer)中断来跟 ...