第 28 章 从 WSDL 合同开发一个消费者
摘要
创建消费者的一种方法是从 WSDL 合同开始。该合同定义了消费者发出请求的服务的操作、消息和传输详情。消费者的起点代码由 WSDL 合同生成。消费者所需的功能添加到生成的代码中。
28.1. 生成 Stub 代码
概述
cxf-codegen-plugin
Maven 插件生成来自 WSDL 合同的 stub 代码。stub 代码提供了在远程服务上调用操作所需的支持代码。
对于消费者,cxf-codegen-plugin
Maven 插件会生成以下类型的代码:
- Stub 代码 - 支持用于实施消费者的文件。
- 起点代码 - 连接到远程服务的示例代码,并在远程服务上调用每个操作。
生成消费者代码
要生成消费者代码,请使用 cxf-codegen-plugin
Maven 插件。例 28.1 “消费者代码生成” 演示了如何使用代码生成器生成消费者代码。
例 28.1. 消费者代码生成
<plugin> <groupId>org.apache.cxf</groupId> <artifactId>cxf-codegen-plugin</artifactId> <version>${cxf.version}</version> <executions> <execution> <id>generate-sources</id> <phase>generate-sources</phase> <configuration> <sourceRoot>outputDir</sourceRoot> <wsdlOptions> <wsdlOption> <wsdl>wsdl</wsdl> <extraargs> <extraarg>-client</extraarg> </extraargs> </wsdlOption> </wsdlOptions> </configuration> <goals> <goal>wsdl2java</goal> </goals> </execution> </executions> </plugin>
其中 outputDir 是放置生成的文件的目录位置,wsdl 指定 WSDL 合同的位置。-client
选项为消费者的 main ()
方法生成起点代码。
有关 cxf-codegen-plugin
Maven 插件的参数的完整列表,请参阅 第 44.2 节 “cxf-codegen-plugin”。
生成的代码
代码生成插件为 例 26.1 “helloworld WSDL Contract” 中显示的合同生成以下 Java 软件包:
-
org.apache.hello_world_soap_http - 这个软件包是从
http://apache.org/hello_world_soap_http
目标命名空间生成的。此命名空间中定义的所有 WSDL 实体(例如,Greeter 端口类型和 SOAPService 服务)映射到 Java 类。 -
org.apache.hello_world_soap_http.types - 这个软件包是从
http://apache.org/hello_world_soap_http/types
目标命名空间生成的。此命名空间中定义的所有 XML 类型(即 HelloWorld 合同的wsdl:types
元素中定义的一切)都会映射到此 Java 软件包中的 Java 类。
由 cxf-codegen-plugin
Maven 插件生成的 stub 文件属于以下类别:
在 org.apache.hello_world_soap_http 软件包中代表 WSDL 实体的类。生成以下类来代表 WSDL 实体:
- 在 org.objectweb.hello_world_soap_http.types 软件包中代表 XML 类型的类。在 HelloWorld 示例中,唯一生成的类型是请求和回复消息的各种打包程序。其中一些数据类型可用于异步调用模型。