zoukankan      html  css  js  c++  java
  • 根据wsdl反向生成webservice服务端(3种方法)

    前言

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

    生成方式

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

    l 使用soapUI生成

    l 使用myeclipseweb service生成

    使用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

    假设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.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生成的。

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

    转:http://blog.csdn.net/jiandanfeng2/article/details/53439748

  • 相关阅读:
    【Codechef】Chef and Bike(二维多项式插值)
    USACO 完结的一些感想
    USACO 6.5 Checker Challenge
    USACO 6.5 The Clocks
    USACO 6.5 Betsy's Tour (插头dp)
    USACO 6.5 Closed Fences
    USACO 6.4 Electric Fences
    USACO 6.5 All Latin Squares
    USACO 6.4 The Primes
    USACO 6.4 Wisconsin Squares
  • 原文地址:https://www.cnblogs.com/xijin-wu/p/6890116.html
Copyright © 2011-2022 走看看