44.2. cxf-codegen-plugin
摘要
从 WSDL 文档生成兼容 JAX-WS 的 Java 代码
概述
基本示例
以下 POM 提取显示如何将 Maven cxf-codegen-plugin
配置为处理 myService.wsdl
WSDL 文件:
<plugin> <groupId>org.apache.cxf</groupId> <artifactId>cxf-codegen-plugin</artifactId> <version>3.2.7.fuse-750027-redhat-00001</version> <executions> <execution> <id>generate-sources</id> <phase>generate-sources</phase> <configuration> <sourceRoot>target/generated/src/main/java</sourceRoot> <wsdlOptions> <wsdlOption> <wsdl>src/main/resources/wsdl/myService.wsdl</wsdl> </wsdlOption> </wsdlOptions> </configuration> <goals> <goal>wsdl2java</goal> </goals> </execution> </executions> </plugin>
基本配置设置
在前面的示例中,您可以自定义以下配置设置
configuration/sourceRoot
-
指定存储生成的 Java 文件的目录。默认为
target/generated-sources/cxf
。 configuration/wsdlOptions/wsdlOption/wsdl
- 指定 WSDL 文件的位置。
描述
wsdl2java
任务采用 WSDL 文档,并从中生成完全注解的 Java 代码以实施服务。WSDL 文档必须具有有效的 portType
元素,但它不需要包含 绑定
元素 或服务
元素。使用可选参数来自定义生成的代码。
WSDL 选项
至少需要一个 wsdlOptions
元素来配置插件。需要 wsdlOptions
元素的 wsdl
子项,并指定要由插件处理的 WSDL 文档。除了 wsdl
元素外,wsdlOptions
元素还可取多个可自定义 WSDL 文档的子项。
插件配置中可以列出多个 wsdlOptions
元素。每个元素配置单一 WSDL 文档来处理。
默认选项
defaultOptions
元素是一个可选元素。它可用于设置在所有指定的 WSDL 文档中使用的选项。
如果在 wsdlOptions
元素中重复某个选项,则 wsdlOptions
元素中的值会优先使用。
指定代码生成选项
要指定通用代码生成选项(与 Apache CXF wsdl2java
命令行工具支持的交换机相同),您可以添加 extraargs
元素作为 wsdlOption
元素的子项。例如,您可以添加 -impl
选项和 -verbose
选项,如下所示:
... <configuration> <sourceRoot>target/generated/src/main/java</sourceRoot> <wsdlOptions> <wsdlOption> <wsdl>${basedir}/src/main/resources/wsdl/myService.wsdl</wsdl> <!-- you can set the options of wsdl2java command by using the <extraargs> --> <extraargs> <extraarg>-impl</extraarg> <extraarg>-verbose</extraarg> </extraargs> </wsdlOption> </wsdlOptions> </configuration> ...
如果交换机采用参数,您可以使用后续 额外参数
元素来指定这些参数。例如,要指定 jibx
数据绑定,您可以按照如下所示配置插件:
... <configuration> <sourceRoot>target/generated/src/main/java</sourceRoot> <wsdlOptions> <wsdlOption> <wsdl>${basedir}/src/main/resources/wsdl/myService.wsdl</wsdl> <extraargs> <extraarg>-databinding</extraarg> <extraarg>jibx</extraarg> </extraargs> </wsdlOption> </wsdlOptions> </configuration> ...
指定绑定文件
要指定一个或多个 JAX-WS 绑定文件的位置,您可以将 bindingFiles
元素添加为 wsdlOption
- 例如:
... <configuration> <wsdlOptions> <wsdlOption> <wsdl>${basedir}/src/main/resources/wsdl/myService.wsdl</wsdl> <bindingFiles> <bindingFile>${basedir}/src/main/resources/wsdl/async_binding.xml</bindingFile> </bindingFiles> </wsdlOption> </wsdlOptions> </configuration> ...
为特定 WSDL 服务生成代码
要指定生成代码的 WSDL 服务的名称,您可以将 serviceName
元素添加为 wsdlOption
的子项(默认值为 WSDL 文档中的每个服务生成代码):
... <configuration> <wsdlOptions> <wsdlOption> <wsdl>${basedir}/src/main/resources/wsdl/myService.wsdl</wsdl> <serviceName>MyWSDLService</serviceName> </wsdlOption> </wsdlOptions> </configuration> ...
为多个 WSDL 文件生成代码
要为多个 WSDL 文件生成代码,只需为 WSDL 文件插入额外的 wsdlOption
元素。如果要指定适用于所有 WSDL 文件的一些常用选项,请将常用选项放在 defaultOptions
元素中,如下所示:
<configuration> <defaultOptions> <bindingFiles> <bindingFile>${basedir}/src/main/jaxb/bindings.xml</bindingFile> </bindingFiles> <noAddressBinding>true</noAddressBinding> </defaultOptions> <wsdlOptions> <wsdlOption> <wsdl>${basedir}/src/main/resources/wsdl/myService.wsdl</wsdl> <serviceName>MyWSDLService</serviceName> </wsdlOption> <wsdlOption> <wsdl>${basedir}/src/main/resources/wsdl/myOtherService.wsdl</wsdl> <serviceName>MyOtherWSDLService</serviceName> </wsdlOption> </wsdlOptions> </configuration>
也可以使用通配符匹配指定多个 WSDL 文件。在本例中,使用 wsdlRoot
元素指定 WSDL 文件的目录,然后使用 include
元素选择所需的 WSDL 文件,它支持使用 *
字符进行通配符。例如,若要从 src/main/resources/wsdl
根目录选择以 Service.wsdl
结尾的所有 WSDL 文件,您可以按照如下所示配置插件:
<configuration> <defaultOptions> <bindingFiles> <bindingFile>${basedir}/src/main/jaxb/bindings.xml</bindingFile> </bindingFiles> <noAddressBinding>true</noAddressBinding> </defaultOptions> <wsdlRoot>${basedir}/src/main/resources/wsdl</wsdlRoot> <includes> <include>*Service.wsdl</include> </includes> </configuration>
从 Maven 存储库下载 WSDL
要直接从 Maven 存储库下载 WSDL 文件,请将 wsdlArtifact
元素添加为 wsdlOption
元素的子项,并指定 Maven 工件的协调,如下所示:
... <configuration> <wsdlOptions> <wsdlOption> <wsdlArtifact> <groupId>org.apache.pizza</groupId> <artifactId>PizzaService</artifactId> <version>1.0.0</version> </wsdlArtifact> </wsdlOption> </wsdlOptions> </configuration> ...
编码
(需要 JAXB 2.2) 若要指定用于生成的 Java 文件的字符编码(Charset),添加 编码
元素作为 配置元素
的子项,如下所示:
... <configuration> <wsdlOptions> <wsdlOption> <wsdl>${basedir}/src/main/resources/wsdl/myService.wsdl</wsdl> </wsdlOption> </wsdlOptions> <encoding>UTF-8</encoding> </configuration> ...
对独立进程进行分叉
您可以通过将 fork
元素添加为配置元素的子项,将 codegen 插件配置为代码生成的单独 JVM。fork 元素可设置为以下值之一:
once
- 对一个新的 JVM 进行处理 codegen 插件配置中指定的所有 WSDL 文件。
always
- 派生新的 JVM,以处理 codegen 插件配置中指定的每个 WSDL 文件。
false
- (默认) 禁用分叉。
如果 codegen 插件配置为分叉一个单独的 JVM (即 fork
选项被设置为非false 值),您可以通过 additionalJvmArgs
元素为 fork JVM 指定额外的 JVM 参数。例如,以下片段将 codegen 插件配置为对单个 JVM 进行分叉,该插件仅限于从本地文件系统访问 XML 模式(仅通过设置 javax.xml.accessExternalSchema
系统属性):
... <configuration> <wsdlOptions> <wsdlOption> <wsdl>${basedir}/src/main/resources/wsdl/myService.wsdl</wsdl> </wsdlOption> </wsdlOptions> <fork>once</fork> <additionalJvmArgs>-Djavax.xml.accessExternalSchema=jar:file,file</additionalJvmArgs> </configuration> ...
选项参考
下表中列出了用于管理代码生成过程的选项。
选项 | 解释 |
---|---|
[option]`-fe | -frontend frontend' |
指定代码生成器使用的前端。可能的值有 | [option]`-db |
-databinding databinding` |
指定代码生成器使用的数据绑定。可能的值有: |
|
指定工具预期的 WSDL 版本。默认值为 |
| 指定用于生成的代码的零个或多个软件包名称。(可选)指定 WSDL 命名空间(用于软件包名称映射)。 |
|
指定一个或多个 JAXWS 或 JAXB 绑定文件。每个绑定文件都使用单独的 |
| 指定生成代码的 WSDL 服务的名称。默认值是为 WSDL 文档中的每个服务生成代码。 |
|
与 |
| 指定用于解析导入的模式和 WSDL 文档的 XML 目录的 URL。 |
| 指定生成代码文件的目录。 |
| 编译生成的 Java 文件。 |
| 指定要写入已编译的类文件的目录。 |
|
生成包含所有客户端类和 WSDL 的 JAR 文件。指定 |
| 为客户端主线生成起点代码。 |
| 为服务器主行生成起点代码。 |
| 为实现对象生成起点代码。 |
|
生成所有起点代码:类型、服务代理、服务接口、服务器主行、客户端主线、实施对象和 Ant |
|
生成 Ant |
| 自动解决命名冲突,而无需使用绑定自定义。 |
|
指示 工具为生成的客户端和生成的实施生成默认值。另外,您还可以提供用于生成默认值的类名称。默认情况下,使用 |
| 在生成代码时忽略指定的 WSDL 模式命名空间。这个选项可以多次指定。另外,可选指定由排除命名空间中描述的类型使用的 Java 软件包名称。 |
| 启用或禁用处理扩展 soap 标头消息绑定。默认为 false。 |
| 关闭生成类型。 |
| 启用或禁用加载默认命名空间软件包名称映射。默认为 true。 |
| 启用或禁用加载默认排除命名空间映射。默认为 true。 |
|
指定在使用 JAXB 数据绑定时要直接传递给 XJC 的参数列表。要获得所有可能的 XJC 参数列表,请使用 |
| 指示 工具使用 Apache CXF 专有 WS-Addressing 类型,而不是兼容 JAX-WS 2.1 的映射。 |
[option]'-validate [=all | 基本的 |
none]' | 指示 工具在尝试生成任何代码前验证 WSDL 文档。 |
| 指示 工具不会覆盖任何现有的文件。 |
|
指定 |
| 显示工具的版本号。 |
[option]`-verbose | -V` |
在代码生成过程中显示注释。 |
|
在代码生成过程中阻止注释。 |
|
如果为 |
|
随后生成的 Java 类方法列表,以允许客户端异步调用;类似于 JAX-WS 绑定文件中的 |
|
随后生成的 Java 类方法列表具有打包程序风格(请参阅以下),类似于 JAX-WS 绑定文件中的 |
|
随后生成的 Java 类方法列表以启用 mime:content 映射,类似于在 JAX-WS 绑定文件中 |
|
如何生成容错异常。可能的值有:NONE、 |
|
指定生成 Java 代码时要使用的 Charset 编码。 |
|
来自 |
|
为生成的 SEI 接口指定一个基本接口。例如,此选项可用于将 Java 7 |
|
[a]
目前,Apache CXF 仅为代码生成器提供 WSDL 1.1 支持。
|