美文网首页Java高级进阶
根据wsdl反向生成webservice服务端(3种方法)

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

作者: 架构师springboot | 来源:发表于2018-09-20 15:58 被阅读15次

    生成方式

    通过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就行。

    欢迎工作一到五年的Java工程师朋友们加入Java架构开发:855801563

    本群提供免费的学习指导 架构资料 以及免费的解答

    不懂得问题都可以在本群提出来 之后还会有职业生涯规划以及面试指导

    同时大家可以多多关注一下小编 纯干货 大家一起学习进步

    相关文章

      网友评论

        本文标题:根据wsdl反向生成webservice服务端(3种方法)

        本文链接:https://www.haomeiwen.com/subject/ternnftx.html