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