根据wsdl反向生成webservice服务端(3种方法)
前言
正常情况下,都是我们项目组创建一个webservice服务端,客户通过我们提供的wsdl地址生成客户端并进行访问;但是最近和一个国企做接口对接,他们却只提供给我们wsdl,需要我们根据wsdl生成服务端,提供服务给他们。故有此文。
生成方式
通过wsdl生成服务端的方法总共有3种方法:
l 使用soapUI生成
l 使用myeclipse的web service生成
l 使用wsdl2java.bat生成
工具
l SoapUI 3.5.1
l Myeclipse 10
l Myeclipse 10自带的tomcat6
l Apache-cxf 2.2.8 安装文件夹下的bin文件下的wsdl2java.bat(请提前下载apache-cxf,并且解压缩),把安装路径配置为全局变量,如下图:CXF_HOME全局变量是第三种生成方式要用的。
环境
l JDK1.6
l JavaEE6
l 假设wsdl地址为:http://localhost:7001/aueic/webservice/HelloWorld?wsdl;如果没有现成的wsdl,也可以用myeclipse编写一个wsdl文件,方法自行百度
1.使用soapUI生成
1. 我这边使用cxf来生成,所以首先把cxf的解压缩目录配置到soapUI的工具变量中,需要配置到bin目录。
2. 新建一个项目
3. 输入项目名称,wsdl地址或者文件,创建请求,点击OK,根据需要可以选择Create TestSuite和其他选项。
4. 生成的项目如下所示:表名该接口对外提供6个方法
5. 右击【HelloWorldImplServiceSoapBinding】节点,选择【Generate Code】,再选择Apache
CXF(注:我这边使用的是cxf,读者可以根据需要使用其他的),如下图:
6. 填写生成的代码输出的系统路径,以及生成代码的所放的包路径,因为我这边需要的是生成webservice的服务端,所以我选择的是【Implementation】,生成实现webservice接口的子类。其中【Client】会生成一个调用客户端,生成webservice客户端需要用到了,而Server可以用来把生成的代码,发布为一个接口,根据需要选择。最后点击【Generate】生成代码。
7. 最后生成成功,如下图:注意图中的wsdl2java就是利用了apache cxf安装文件夹的wsdl2java.bat生成的。
8. 在系统F盘下面找到如下的代码列表,实现IHelloWorldImpl.Java里面的方法,把该类发布为一个webservice服务(可以采用多种方法发布,如上面第5步的生成server,然后再jre和javaee环境下执行server里面的mian方法即可;生成wsdl服务端的方式二也提供了另一种方法,还可以通过spring,具体实现自行百度)。
接口IHelloWorld.java中的每个方法会生成两个类,如SayHello.java和SayHelloResponse.java,其中第一个是用来映射请求时的入参,第二个是响应返回值。
2.使用myeclipse的web service Project生成
1. 先new 一个web service Project。取名helloworld
2. 生成的项目如下图:并且在项目中新建包com.jdf,下一步的时候会用到。
3. 右击helloworld项目,new一个web service。
4. WSDL URL和方式一是同一个地址,也可以是wsdl文件(myeclipse可以新建和编辑wsdl文件)。Java
package是生成的代码要放的包路径,必须是已经存在的,不然会提示错误。其他选项根据需要选择。然后next。然后就是验证wsdl格式,点击Finish,生成代码。
5. 生成的代码如下图:其中HelloWorldImplPortImpl.java就是需要自己实现的类,和方式一生成的实现类是一样的,只是名字不太一样。sun-jaxws.xml是生成webservice的代码。其中在web.xml中新增了一些配置信息。
Sun-jaxws.xml内容如下:
Web.xml配置信息如下:红框中是生成代码生成的webservice服务的配置信息。
6. 然后把该项目发布到myeclipse自带的tomcat中,启动服务。
7. 在浏览器中输入wsdl地址:http://localhost:8080/helloworld/HelloWorldImplPort?wsdl,能正确打开,代表服务发布成功。此时可以实现HelloWorldImplPortImpl.java中的方法,然后通过第4步(如果有勾选Generate
web service client的话)生成的客户端调用,也可以通过soapUI调用(方法自行百度)。
注:方式二看着不是采用cxf的方式生成的,但是实际上可以通用,因为jax-ws是个标准,cxf有实现了jax-ws标准,所以,把生成的代码用cxf发布为一个webservice服务也是可以的。我们这个例子是用javaee(或者说JAX-WS)来发布的。
3.使用apache cxf bin文件夹下的wsdl2java.bat生成
方式一的生成方式中,我们在soapUI中配置了apache cxf bin的路径,所以方式一本质就是采用wsdl2java.bat生成的。
其中在方式一的第五步,如下图:server、Client选项,都是wsdl2java.bat生成代码的指令。
wsdl2java.bat用法:
wsdl2java –p com.jdf –d F:\ -all xx.wsdl
-p 指定wsdl的命名空间,也就是要生成代码的包名
-d 指令要生成代码所在目录
-client 生成客户端测试web service的代码
-server 生成服务器启动web service代码
-impl 生成web service的实现代码,我们在方式一用的就是这个
-ant 生成build.xml文件
-all 生成所有开始端点代码。
使用步骤:
l 下载apache-cxf-2.2.8.jar,解压缩,如G:\ apache-cxf-2.2.8
l 设置环境变量
1. CXF_HOME= G:\ apache-cxf-2.2.8
2. 在path后面加上%CXF_HOME%/bin;
3. 在cmd命令中输入wsdl2java,如果有提示usage,表示配置成功。
4. 接下去就可以使用了
结尾
Axis2等其他webservice的逆向生成也是类似的。上面生成服务端方式,也适用于生成客户端,只要勾选client就行。
转:http://blog.csdn.net/jiandanfeng2/article/details/53439748
根据wsdl反向生成webservice服务端(3种方法)的更多相关文章
- C#根据WSDL文件生成WebService服务端代码
转自:http://www.cnblogs.com/liyi93/archive/2012/01/30/2332320.html 虽然现在已经进入了.NET FrameWork 4.0的时代,WebS ...
- C# 利用VS自带的WSDL工具生成WebService服务类
C# 利用VS自带的WSDL工具生成WebService服务类 WebService有两种使用方式,一种是直接通过添加服务引用,另一种则是通过WSDL生成. 添加服务引用大家基本都用过,这里就不讲 ...
- 记一次在Eclipse中用Axis生成webservice服务端的过程中出现的问题
问题一. Unable to find config file. Creating new servlet engine config file: /WEB-INF/server-config.ws ...
- axis2框架用wsdl文件生成的服务端MessageReceiveInOut文件注意事项
在用axis2生成服务端文件和客户端文件,当客户端文件调用服务端文件时,都是通过wsdl文件生成的 配置文件进行相互的调用. 在一开始做开发测试的时候,通过soapUI进行调用接口的时候,可以调用成功 ...
- axis2生成webservice服务端返回String[]和String[][]一维数组和二维数组解析
环境:用axis2生成服务端,用aixs做客户端 1:直接返回String[]: public String[] testArr(String name) { String[] ret=new Str ...
- C# 利用VS自带的WSDL工具生成WebService服务类(转载)
WebService有两种使用方式,一种是直接通过添加服务引用,另一种则是通过WSDL生成. 添加服务引用大家基本都用过,这里就不讲解了. 那么,既然有直接引用的方式,为什么还要通过WSDL生成呢? ...
- MyEclipse创建WebService服务端和客户端
1.新建立一个javaWeb项目,一个java类,如图: 2.接下来我们就要将项目中的TestService的这个类生成WebService服务端,选择new Web Service,如图: Next ...
- webservice 服务端例子+客户端例子+CXF整合spring服务端测试+生成wsdl文件 +cxf客户端代码自动生成
首先到CXF官网及spring官网下载相关jar架包,这个不多说.webservice是干嘛用的也不多说. 入门例子 模拟新增一个用户,并返回新增结果,成功还是失败. 大概的目录如上,很简单. Res ...
- webservice快速入门-使用wsimport生成ws服务端(二)
上个例子演示的是在当前项目下发布的Webservice Server,而实际应用中和Client是分离的,本文介绍两种客户端开发方式: 1.导出WebService服务端服务接口到jar包,客户端引入 ...
随机推荐
- 初中级PHP面试基础汇总
这是我整理的一套面试题,老铁们看看就当复习了哦 相关PHP面试题 搞定PHP面试 - 函数知识点整理 php 面试题目整理 PHP面试整理 PHP面试 概述 感觉现在发面试题有些冷门,就跟昨天德国那场 ...
- 5.电影搜索之 自动填充,也叫autocomplete、搜索建议!
什么叫自动填充,用过百度的应该都知道!当你输入关键词之后,会有一个下拉的候选列表,都是与你输入的内容相关的,这个就是自动填充的搜索建议.一般的搜索引擎或者站内搜索都会有这个功能. 今天分享下这个功能的 ...
- Web框架之Django_08 重要组件(form组件、cookie和session组件)
摘要: form组件 cookie组件 session组件 一.form组件 form介绍我们之前在html页面中利用form表单向后端提交数据时候,都需要对用户的输入进行校验,比如校验用户是否输入正 ...
- 微信小程序登录对接Django后端实现JWT方式验证登录
先上效果图 点击授权按钮后可以显示部分资料和头像,点击修改资料可以修改部分资料. 流程 1.使用微信小程序登录和获取用户信息Api接口 2.把Api获取的用户资料和code发送给django后端 3. ...
- Oracle跟踪分析数据库启动的各个阶段
目录 启动到nomount状态 设置trace 启动数据库到mount状态并打开 查阅trace 查阅trace的另外方法 v$diag_info 视图 演示如下: 启动到nomount状态 SYS@ ...
- appium+python自动化-adb shell模拟点击事件(input tap)
前言 appium有时候定位一个元素很难定位到,或者说明明定位到这个元素了,却无法点击,这个时候该怎么办呢? 求助大神是没用的,点击不了就是点击不了,appium不是万能的,这个时候应该转换思路,换其 ...
- Python第三方库之openpyxl(8)
Python第三方库之openpyxl(8) 饼图 饼图将数据绘制成一个圆片,每个片代表整体的百分比.切片是按顺时针方向绘制的,0在圆的顶部.饼图只能取一组数据.该图表的标题将默认为该系列的标题. 2 ...
- Windows同步阿里云时间
Ctrl+R打开cmd命令框 输入:gpedit.msc 计算机配置”—“管理模版”—“系统”—“Windows 时间服务”—“时间提供程序”—“配置 Windows NTP 客户端 双击打开配置 W ...
- [LA3620]Manhattan Wiring
[LA3620]Manhattan Wiring 试题描述 输入 输出 输入示例 输出示例 数据规模及约定 见“输入” 题解 我们把“连线”的过程改为“铺地砖”的过程,总共有 11 种地砖,每种地砖上 ...
- BZOJ4199 [Noi2015]品酒大会 【后缀数组 + 单调栈 + ST表】
题目 一年一度的"幻影阁夏日品酒大会"隆重开幕了.大会包含品尝和趣味挑战两个环节,分别向优胜者颁发"首席品 酒家"和"首席猎手"两个奖项,吸 ...