JAXB/Maven JAX-WS:全局 bindings.xml 引用特定的 WSDL
JAXB/Maven JAX-WS: global bindings.xml references particular WSDL
我正在使用 Maven JAXWS 插件和 bindings.xml 文件来覆盖从 WSDL 生成的 JAXB class 字段的 Java 类型,但是在生成 Java class使用 JAX-WS Maven 插件从多个 WSDL 中获取。
我的项目结构是:
- src
- jaxws
- bindings.xml
- main
- resources
- wsdl
- Wsdl1.wsdl
- Wsdl1.xsd
- Wsdl2.wsdl
- Wsdl2.xsd
Wsdl1.wsdl
引用 Wsdl1.xsd
,Wsdl2.wsdl
引用 Wsdl2.xsd
,这两个 WSDL 和 XSD 没有任何共同点。我无法修改 WSDL 和 XSD。
我想覆盖 Wsdl2.xsd
中特定类型 (Flight
) 中特定字段 (departureDate
) 的 Java 类型。
我的bindings.xml
是
<bindings version="2.0" extensionBindingPrefixes="xjc"
xmlns="http://java.sun.com/xml/ns/jaxb"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<globalBindings>
<xjc:javaType name="org.joda.time.LocalDate" xmlType="xs:date"
adapter="my.LocalDateAdapter"/>
<xjc:javaType name="org.joda.time.DateTime" xmlType="xs:dateTime"
adapter="my.DateTimeAdapter"/>
</globalBindings>
<bindings schemaLocation="../main/resources/wsdl/Wsdl2.xsd" node="/xs:schema">
<bindings node="//xs:complexType[@name='Flight']//xs:element[@name='departureDate']">
<xjc:javaType name="org.joda.time.LocalDateTime"
adapter="my.LocalDateTimeAdapter"/>
</bindings>
</bindings>
</bindings>
我的 Maven 配置是
<plugin>
<groupId>org.jvnet.jax-ws-commons</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<version>2.2</version>
<executions>
<execution>
<goals>
<goal>wsimport</goal>
</goals>
<configuration>
<wsdlDirectory>${basedir}/src/main/resources/wsdl</wsdlDirectory>
</configuration>
</execution>
</executions>
</plugin>
当我使用该配置构建模块时,JAX-WS 一个一个地处理 WSDL,但对每个 WSDL 使用相同的 bindings.xml
。这样,由于在 bindings.xml
.
中引用 Wsdl2.xsd
,它在 Wsdl1
的处理过程中失败
[INFO] --- jaxws-maven-plugin:2.2:wsimport (default) @ my-backend ---
[INFO] Processing: file:/D:/dev/Projects/my-api/my-backend/src/main/resources/wsdl/Wsdl1.wsdl
[INFO] jaxws:wsimport args: [-keep, -s, D:\dev\Projects\my-api\my-backend\target\generated-sources\wsimport, -encoding, UTF-8, -Xnocompile, -b, D:\dev\Projects\my-api\my-backend\src\jaxws\bindings.xml, file:/D:/dev/Projects/my-api/my-backend/src/main/resources/wsdl/Wsdl1.wsdl]
parsing WSDL...
[ERROR] "file:/D:/dev/Projects/my-api/my-backend/src/main/resources/wsdl/Wsdl2.xsd"
is not a part of this compilation. Is this a mistake for "file:/D:/dev/Projects/my-api/my-backend/src/main/resources/wsdl/Wsdl1.wsdl#types?schema1"?
line 11 of file:/D:/dev/Projects/my-api/my-backend/src/jaxws/bindings.xml
如果我 select 只是 Wsdl2.wsdl
由 JAX-WS 插件处理,那么一切正常。
<configuration>
<wsdlDirectory>${basedir}/src/main/resources/wsdl</wsdlDirectory>
<wsdlFiles>
<wsdlFile>Wsdl2.wsdl</wsdlFile>
</wsdlFiles>
</configuration>
我该如何解决这个问题?
为除 Wsdl2.wsdl 之外的所有 WSDL 创建一个 wsimport 执行,并为 Wsdl2.wsdl 创建另一个执行。这样您就可以为每次执行设置不同的配置,并为每个执行指定不同的 jaxb 绑定。
我正在使用 Maven JAXWS 插件和 bindings.xml 文件来覆盖从 WSDL 生成的 JAXB class 字段的 Java 类型,但是在生成 Java class使用 JAX-WS Maven 插件从多个 WSDL 中获取。
我的项目结构是:
- src
- jaxws
- bindings.xml
- main
- resources
- wsdl
- Wsdl1.wsdl
- Wsdl1.xsd
- Wsdl2.wsdl
- Wsdl2.xsd
Wsdl1.wsdl
引用 Wsdl1.xsd
,Wsdl2.wsdl
引用 Wsdl2.xsd
,这两个 WSDL 和 XSD 没有任何共同点。我无法修改 WSDL 和 XSD。
我想覆盖 Wsdl2.xsd
中特定类型 (Flight
) 中特定字段 (departureDate
) 的 Java 类型。
我的bindings.xml
是
<bindings version="2.0" extensionBindingPrefixes="xjc"
xmlns="http://java.sun.com/xml/ns/jaxb"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<globalBindings>
<xjc:javaType name="org.joda.time.LocalDate" xmlType="xs:date"
adapter="my.LocalDateAdapter"/>
<xjc:javaType name="org.joda.time.DateTime" xmlType="xs:dateTime"
adapter="my.DateTimeAdapter"/>
</globalBindings>
<bindings schemaLocation="../main/resources/wsdl/Wsdl2.xsd" node="/xs:schema">
<bindings node="//xs:complexType[@name='Flight']//xs:element[@name='departureDate']">
<xjc:javaType name="org.joda.time.LocalDateTime"
adapter="my.LocalDateTimeAdapter"/>
</bindings>
</bindings>
</bindings>
我的 Maven 配置是
<plugin>
<groupId>org.jvnet.jax-ws-commons</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<version>2.2</version>
<executions>
<execution>
<goals>
<goal>wsimport</goal>
</goals>
<configuration>
<wsdlDirectory>${basedir}/src/main/resources/wsdl</wsdlDirectory>
</configuration>
</execution>
</executions>
</plugin>
当我使用该配置构建模块时,JAX-WS 一个一个地处理 WSDL,但对每个 WSDL 使用相同的 bindings.xml
。这样,由于在 bindings.xml
.
Wsdl2.xsd
,它在 Wsdl1
的处理过程中失败
[INFO] --- jaxws-maven-plugin:2.2:wsimport (default) @ my-backend ---
[INFO] Processing: file:/D:/dev/Projects/my-api/my-backend/src/main/resources/wsdl/Wsdl1.wsdl
[INFO] jaxws:wsimport args: [-keep, -s, D:\dev\Projects\my-api\my-backend\target\generated-sources\wsimport, -encoding, UTF-8, -Xnocompile, -b, D:\dev\Projects\my-api\my-backend\src\jaxws\bindings.xml, file:/D:/dev/Projects/my-api/my-backend/src/main/resources/wsdl/Wsdl1.wsdl]
parsing WSDL...
[ERROR] "file:/D:/dev/Projects/my-api/my-backend/src/main/resources/wsdl/Wsdl2.xsd"
is not a part of this compilation. Is this a mistake for "file:/D:/dev/Projects/my-api/my-backend/src/main/resources/wsdl/Wsdl1.wsdl#types?schema1"?
line 11 of file:/D:/dev/Projects/my-api/my-backend/src/jaxws/bindings.xml
如果我 select 只是 Wsdl2.wsdl
由 JAX-WS 插件处理,那么一切正常。
<configuration>
<wsdlDirectory>${basedir}/src/main/resources/wsdl</wsdlDirectory>
<wsdlFiles>
<wsdlFile>Wsdl2.wsdl</wsdlFile>
</wsdlFiles>
</configuration>
我该如何解决这个问题?
为除 Wsdl2.wsdl 之外的所有 WSDL 创建一个 wsimport 执行,并为 Wsdl2.wsdl 创建另一个执行。这样您就可以为每次执行设置不同的配置,并为每个执行指定不同的 jaxb 绑定。