如何处理元素和使用jaxb生成pojos时xsd中具有相同名称的属性?

时间:2012-03-07 08:28:08

标签: java xsd jaxb

我有一个xsd,其中包含:

<xs:complexType>
  <xs:sequence minOccurs="0">
    <xs:element ref="HereIsTheProblem"/>
    <xs:element ref="blaBla"/>
  </xs:sequence>
  <xs:attribute name="something" type="xs:string" use="required">
    <xs:annotation/>
  </xs:attribute>
  <xs:attribute name="somethingElse" type="xs:string">
    <xs:annotation/>
  </xs:attribute>
  <xs:attribute name="HereIsTheProblem" type="xs:string">
    <xs:annotation/>
  </xs:attribute>
</xs:complexType>

现在,当我尝试使用jaxb解析模式以生成java类时,它失败了:

[ERROR] Element "{http://something.somemorething.com/etc/}HereIsTheProblem" shows up in more than one properties.

如何在不对架构进行任何修改的情况下解决此问题?

PS:我的jaxb版本是2.1.13

1 个答案:

答案 0 :(得分:7)

您需要使用一个绑定文件来指示jaxB应该如何处理此名称冲突。例如,将类似的东西放在一个名为bindings.xjb:

的文件中
<jaxb:bindings version="2.1" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
    xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
    xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:com.fnf="http://www.fnf.com/xes">
  <jaxb:bindings schemaLocation="your schema location here" node="/xs:schema">
    <jaxb:bindings node="//XPath selector">
      <jaxb:property name="HereIsTheProblem2" />
    </jaxb:bindings>
  </jaxb:bindings>
</jaxb:bindings>

无法为您提供没有完整架构的完整解决方案