使用maven-jaxb2-plugin
为两个彼此相关的WSDL模式生成JAXB类。
生成的类如下:
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>
生成的类之一的注释(几乎在任何地方都相同):
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "inputTemplate", namespace = "http://...payments", propOrder = {})
public class InputTemplate {...}
问题是SOAP accounts
JAXB类具有上面指定的类的嵌套元素,该元素来自另一个payments
方案。因此,当我向accounts
服务的对象查询付款inputTemplate
作为孩子时,Marshaller会抛出这样的异常:
unexpected element (uri:"http://...payments", local:"inputTemplate").
Expected elements are <{}inputTemplate>
不知道为什么会发生这种情况,每个类都有指定的命名空间。
那么,如何让具有交叉方案依赖性的JAXB类使用这个插件工作呢?
答案 0 :(得分:1)
此:
意外元素(uri:“http://...payments”,local:“inputTemplate”)。 预期元素是&lt; {} inputTemplate&gt;
实际上并未指出架构依赖性的问题,而是存在命名空间问题。 inputTemplate
元素是已知的,但它在默认命名空间中是预期的。可能是错误的elementFormDefault
或类似的东西。
要回答您的问题,如果您单独编译模式(单独的Maven模块)和包含依赖项作为剧集,则最好处理模式间依赖关系。
https://github.com/highsource/maven-jaxb2-plugin/wiki/Using-Episodes