2011-12-26 99 views
3

我使用maven-jaxb2-plugin从xsd生成jaxb注释类。我有很多XSD文件像:从具有类似属性名称的XSD生成JAXB类

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="A3"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="loginPartner"> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:element type="xs:string" name="login"/> 
       <xs:element type="xs:string" name="password"/> 
      </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="A3"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element type="xs:string" name="errorCode"/> 
     <xs:element type="xs:string" name="errorDescription"/> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

当我运行Maven插件它给了我一个错误:

[ERROR] Error while parsing schema(s).Location [ file:schema1.xsd{10,16}]. org.xml.sax.SAXParseException: 'A3' is already defined

有什么办法解决这一问题? 其实我有很多XSD表示向/从服务器发送请求/响应消息。我想简化创建,验证,解析消息。也许有另一种解决方案吗?

+0

你能从你的'pom.xml'发表您的插件配置?我现在无法找到(达到)'maven-jaxb2-plugin'的文档,并且我不明白所有选项。如果可行,可以尝试为模式添加一个'targetNamespace =“http://任何”'“属性来区分具有相同名称的类型。可以将每个模式文件编译到不同的Java包中。这也可以。为此,您可能必须为该插件指定multipe [executions](http://maven.apache.org/guides/mini/guide-configuring-plugins.html#Using_the_executions_Tag)。 – 2011-12-29 08:29:14

回答

4

我有类似的问题;我有两个独立的独立WSDL(每个都有几个模式定义),我通过JAXB(通过maven-jaxb2-plugin)运行以生成映射类。

我的WSDL共享导致XJC窒息的重复架构定义。

因为它们都是独立的,所以我能够通过运行maven-jaxb2插件的两个单独执行来生成JAXB映射 - 每个WSDL(这里覆盖 - How can I tell jaxb/Maven to generate multiple schema packages?)。

1

在同一名称空间内不能有冲突的元素定义。这与在Java中给定包中不允许具有相同名称的多个类相同。你最好的选择是用不同的名字或不同的命名空间来定义它们。

0

可以重命名第二或第一A3的XSD在你的JAXB绑定文件

<jaxb:bindings schemaLocation="filePath.xsd" node="/xs:schema"> 
     <jaxb:bindings node="//xs:element[@name='A3']"> 
      <jaxb:Property name="SecondA3"/> 
     </jaxb:bindings> 
</jaxb:bindings> 
相关问题