从具有类似属性名称的XSD生成JAXB类

时间:2011-12-26 09:28:46

标签: java xml xsd jaxb2 maven-jaxb2-plugin

我使用maven-jaxb2-plugin从xsd生成带有jaxb注释的类。我有很多像这样的xsd文件:

<?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]解析模式时出错。位置[   文件:schema1.xsd {10,16}]。 org.xml.sax.SAXParseException:'A3'已经存在   定义

有什么方法可以解决这个问题吗? 实际上我有很多XSD代表来自/来自服务器的请求/响应消息。我想简化创建,验证,解析消息。也许还有另一个解决方案吗?

3 个答案:

答案 0 :(得分:6)

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

我的WSDL共享了一个重复的模式定义,导致XJC窒息。

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

答案 1 :(得分:1)

您不能在同一名称空间中包含冲突的元素定义。这与在Java中的给定包中不允许具有相同名称的多个类相同。最好的办法是用不同的名称或不同的名称空间定义它们。

答案 2 :(得分:0)

您可以在jaxb绑定文件中重命名xsd的第二个或第一个A3

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