Maven JAXB 2插件 - 如何设置使用交叉方案依赖项

时间:2016-11-08 11:37:30

标签: java maven maven-jaxb2-plugin

使用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类使用这个插件工作呢?

1 个答案:

答案 0 :(得分:1)

此:

  

意外元素(uri:“http://...payments”,local:“inputTemplate”)。   预期元素是&lt; {} inputTemplate&gt;

实际上并未指出架构依赖性的问题,而是存在命名空间问题。 inputTemplate元素是已知的,但它在默认命名空间中是预期的。可能是错误的elementFormDefault或类似的东西。

要回答您的问题,如果您单独编译模式(单独的Maven模块)和包含依赖项作为剧集,则最好处理模式间依赖关系。

https://github.com/highsource/maven-jaxb2-plugin/wiki/Using-Episodes