Maven JAXB 2 插件 - 如何设置以使用跨方案依赖项
Maven JAXB 2 Plugin - how to setup to use cross scheme dependencies
使用 maven-jaxb2-plugin
为两个相互关联的 WSDL 模式生成 JAXB classes。
生成的classes是这样的:
com - accounts
|- payments
|- other
maven-jaxb2-plugin 设置如下:
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<version>0.13.1</version>
<executions>
<execution>
<id>unipayments</id>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<schemaLanguage>WSDL</schemaLanguage>
<args>
<arg>-npa</arg>
</args>
<schemas>
<schema>
<url>http://...accounts?wsdl</url>
</schema>
</schemas>
</configuration>
</execution>
<execution>
<id>accounts</id>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<schemaLanguage>WSDL</schemaLanguage>
<args>
<arg>-npa</arg>
</args>
<schemas>
<schema>
<url>http://...payments?wsdl</url>
</schema>
</schemas>
</configuration>
</execution>
</executions>
</plugin>
其中一个生成的 classes 的注释(几乎在任何地方都相同):
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "inputTemplate", namespace = "http://...payments", propOrder = {})
public class InputTemplate {...}
问题是 SOAP accounts
JAXB classes 具有上面指定的 class 的嵌套元素,它来自另一个 payments
方案。因此,当我查询 accounts
服务的对象时,Marshaller 会抛出这样的异常,该服务的子对象是付款的 inputTemplate
:
unexpected element (uri:"http://...payments", local:"inputTemplate").
Expected elements are <{}inputTemplate>
不知道为什么会这样,每个 class 都指定了命名空间。
那么,如何让具有跨方案依赖性的 JAXB classes 使用此插件工作?
这个:
unexpected element (uri:"http://...payments", local:"inputTemplate").
Expected elements are <{}inputTemplate>
实际上指出的不是架构依赖性问题,而是命名空间问题。 inputTemplate
元素是已知的,但它应该在默认命名空间中。可能是错误的 elementFormDefault
或类似的东西。
为了回答您的问题,如果您单独编译您的架构(单独的 Maven 模块)并将依赖项作为片段包含在内,则最好处理架构间依赖项。
https://github.com/highsource/maven-jaxb2-plugin/wiki/Using-Episodes
使用 maven-jaxb2-plugin
为两个相互关联的 WSDL 模式生成 JAXB classes。
生成的classes是这样的:
com - accounts
|- payments
|- other
maven-jaxb2-plugin 设置如下:
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<version>0.13.1</version>
<executions>
<execution>
<id>unipayments</id>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<schemaLanguage>WSDL</schemaLanguage>
<args>
<arg>-npa</arg>
</args>
<schemas>
<schema>
<url>http://...accounts?wsdl</url>
</schema>
</schemas>
</configuration>
</execution>
<execution>
<id>accounts</id>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<schemaLanguage>WSDL</schemaLanguage>
<args>
<arg>-npa</arg>
</args>
<schemas>
<schema>
<url>http://...payments?wsdl</url>
</schema>
</schemas>
</configuration>
</execution>
</executions>
</plugin>
其中一个生成的 classes 的注释(几乎在任何地方都相同):
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "inputTemplate", namespace = "http://...payments", propOrder = {})
public class InputTemplate {...}
问题是 SOAP accounts
JAXB classes 具有上面指定的 class 的嵌套元素,它来自另一个 payments
方案。因此,当我查询 accounts
服务的对象时,Marshaller 会抛出这样的异常,该服务的子对象是付款的 inputTemplate
:
unexpected element (uri:"http://...payments", local:"inputTemplate").
Expected elements are <{}inputTemplate>
不知道为什么会这样,每个 class 都指定了命名空间。
那么,如何让具有跨方案依赖性的 JAXB classes 使用此插件工作?
这个:
unexpected element (uri:"http://...payments", local:"inputTemplate"). Expected elements are <{}inputTemplate>
实际上指出的不是架构依赖性问题,而是命名空间问题。 inputTemplate
元素是已知的,但它应该在默认命名空间中。可能是错误的 elementFormDefault
或类似的东西。
为了回答您的问题,如果您单独编译您的架构(单独的 Maven 模块)并将依赖项作为片段包含在内,则最好处理架构间依赖项。
https://github.com/highsource/maven-jaxb2-plugin/wiki/Using-Episodes