加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

根据wsdl反向生成webservice服务端(3种方法)

发布时间:2020-12-16 21:58:36 所属栏目:安全 来源:网络整理
导读:前言 正常 情况下, 都是 我们项目组创建一个 webservice 服务端,客户通过我们提供的 wsdl 地址生成客户端并进行访问;但是 最近和一个 国企做接口对接,他们却只提供给我们 wsdl, 需要我们根据 wsdl 生成服务端,提供服务给他们。故 有 此文。 生成 方式

前言

正常情况下,都是我们项目组创建一个webservice服务端,客户通过我们提供的wsdl地址生成客户端并进行访问;但是最近和一个国企做接口对接,他们却只提供给我们wsdl,需要我们根据wsdl生成服务端,提供服务给他们。故此文。

生成方式

通过wsdl生成服务端的方法总共有3方法

l?使用soapUI生成

l?使用myeclipseweb 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,然后再jrejavaee环境下执行server里面的mian方法即可生成wsdl服务端的方式二提供了另一种方法,还可以通过spring具体实现自行百度

接口IHelloWorld.java中的每个方法会生成两个类,如SayHello.javaSayHelloResponse.java,其中第一个是用来映射请求的入参,第二个是响应返回值。

?

2.使用myeclipseweb 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生成的。

其中在方式一的第五步,如下图serverClient选项,都是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就行。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读