通过IDEA对WSDL进行WebService生成客户端代码

桃扇骨 2022-11-20 08:25 2103阅读 0赞

Table of Contents

1、WSDL详解

2、IDEA中进行WebService客户端生成


参考文献:https://blog.csdn.net/vfsdfdsf/article/details/80426276


1、WSDL详解

这个文档是花50分下载的,希望有所帮助。了解WSDL中需要使用到的参数。

可以参考下这篇文章来了解:https://blog.csdn.net/wenzhi20102321/article/details/68486526

  1. <?xml version='1.0' encoding='UTF-8'?>
  2. <!--这里的name是发布的service类名 + "Service", targetNamespace 是取决于发布类所在的包 -->
  3. <wsdl:definitions name="HelloWorldImplService" targetNamespace="http://test/">
  4. <!--types 的作用是定义输入输出参数都是什么样子的(类型) -->
  5. <wsdl:types >
  6. <xs:schema elementFormDefault="unqualified" targetNamespace="http://test/" version="1.0">
  7. <!--输入参数名字为‘sayHello’,类型是复杂类型‘sayHello’,在下面定义 -->
  8. <xs:element name="sayHello" type="tns:sayHello"/>
  9. <!--输出参数名字为‘sayHelloResponse’,类型是复杂类型sayHelloResponse, 在下面定义-->
  10. <xs:element name="sayHelloResponse" type="tns:sayHelloResponse"/>
  11. <!--输入参数类型的具体定义:包含一个element,名字为arg0,类型为string-->
  12. <xs:complexType name="sayHello">
  13. <!-- 这里的name 是自动生成的。当然,也可以在代码中指定名字。
  14. public @WebResult(name="sayHelloResult") String sayHello(@WebParam(name="name") String str)
  15. -->
  16. <xs:sequence>
  17. <xs:element minOccurs="0" name="arg0" type="xs:string"/>
  18. </xs:sequence>
  19. </xs:complexType>
  20. <xs:complexType name="sayHelloResponse">
  21. <xs:sequence>
  22. <xs:element minOccurs="0" name="return" type="xs:string" />
  23. </xs:sequence>
  24. </xs:complexType>
  25. </xs:schema>
  26. </wsdl:types>
  27. <!--这个message代表输入信息。这个输入信息的类型是sayHello,在<types>中定义过 -->
  28. <wsdl:message name="sayHello">
  29. <wsdl:part element="tns:sayHello" name="parameters"></wsdl:part>
  30. </wsdl:message>
  31. <!--这个message代表输出信息。这个输出信息的类型是sayHelloResponse,在<types>中定义过 -->
  32. <wsdl:message name="sayHelloResponse">
  33. <wsdl:part element="tns:sayHelloResponse" name="parameters">
  34. </wsdl:part>
  35. </wsdl:message>
  36. <!--portType 就是我们定义的接口。一个接口对应一个port -->
  37. <wsdl:portType name="HelloWorld">
  38. <!--这里的一个operation就是 接口中的一个方法 -->
  39. <wsdl:operation name="sayHello">
  40. <wsdl:input message="tns:sayHello" name="sayHello">
  41. </wsdl:input>
  42. <wsdl:output message="tns:sayHelloResponse" name="sayHelloResponse">
  43. </wsdl:output>
  44. </wsdl:operation>
  45. </wsdl:portType>
  46. <!--把接口进行 soap 绑定-->
  47. <wsdl:binding name="HelloWorldImplServiceSoapBinding" type="tns:HelloWorld">
  48. <!-- 这里指明绑定的协议为 http,style为document-->
  49. <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
  50. <!-- 具体方法的绑定类型定义-->
  51. <wsdl:operation name="sayHello">
  52. <soap:operation soapAction="" style="document"/>
  53. <wsdl:input name="sayHello">
  54. <!--literal文本 -->
  55. <soap:body use="literal"/>
  56. </wsdl:input>
  57. <wsdl:output name="sayHelloResponse">
  58. <soap:body use="literal"/>
  59. </wsdl:output>
  60. </wsdl:operation>
  61. </wsdl:binding>
  62. <!--把n个接口放到一起,总称为一个service -->
  63. <wsdl:service name="HelloWorldImplService">
  64. <!--这里一个port就是一个接口。对应的绑定刚刚定义过 -->
  65. <wsdl:port binding="tns:HelloWorldImplServiceSoapBinding" name="HelloWorldImplPort">
  66. <!--这个接口的地址 -->
  67. <soap:address location="http://localhost:8080/HelloWorld" />
  68. </wsdl:port>
  69. </wsdl:service>
  70. </wsdl:definitions>

2、IDEA中进行WebService客户端生成

可以新建一个普通项目

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI4MTk4MTgx_size_16_color_FFFFFF_t_70

创建一个简单的 hello world 项目

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI4MTk4MTgx_size_16_color_FFFFFF_t_70 1

接下来是要进行客户端生成。

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI4MTk4MTgx_size_16_color_FFFFFF_t_70 2

会弹出一个窗口

你要填入你要解析的 wsdl路径、输出路径、存放的解析内容的包的前缀(路径)、以及 web Service Platform。

“Web ServicePlatform是一个协议解析工具,这个可以根据自己的了解与需求自行选择。选择不同的协议解析工具生成的Java代码会不一样,调用的函数也会有差别,但是其根本原理是大同小异。”————使用IDEA根据wsdl生成WebServices客户端代码

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI4MTk4MTgx_size_16_color_FFFFFF_t_70 3

我是用 JWSDP 2.2 这列的。

报红是因为当前项目中没有这个包名。点击OK创建后即可自动生成。

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI4MTk4MTgx_size_16_color_FFFFFF_t_70 4

可以看到生成相关的服务。这个时候就可以进行客户端测试了。

  1. ExchangeService exchangeService = new ExchangeService();
  2. Exchange exchangePort = exchangeService.getExchangePort();
  3. String exchange = exchangePort.exchange("your param");
  4. System.out.println(exchange);

发表评论

表情:
评论列表 (有 0 条评论,2103人围观)

还没有评论,来说两句吧...

相关阅读