JAXB生成的类相互冲突

时间:2014-10-14 15:51:21

标签: xml jaxb jaxb2 xjc

我使用 JAXB xjc 工具从多个XML文件生成多个类

这些XML文件有公共标记名称,这涉及到,当我生成java类时,我有多个具有相同名称的类。我已将它们放入不同的包中并因此重命名。

但我仍然有这个错误:

  

元素名称{} Document有多个映射。这个问题   与以下位置有关:在公共场合   javax.xml.bind.JAXBElement   com.xxx.generatedByJaxb.bal.ObjectFactory.createDocument(com.xxx.generatedByJaxb.bal.DocumentTypeBal)         在com.xxx.generatedByJaxb.bal.ObjectFactory这个问题是   与以下位置有关:在公共场合   javax.xml.bind.JAXBElement   com.xxx.generatedByJaxb.addr.ObjectFactory.createDocument(com.xxx.generatedByJaxb.addr.DocumentTypeAddr)         在com.xxx.generatedByJaxb.addr.ObjectFactory

...在控制台中多次重复。


修改

当我第一次遇到冲突问题时,我重命名了冲突的类,例如:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "DocumentType", propOrder = { "addressPage" })
public class DocumentType {

已被更改为:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "DocumentTypeAddr", propOrder = { "addressPage" })
public class DocumentTypeAddr {

我重新更新了课程,他们知道没有任何手动更改。这是我的错误:

两个类具有相同的XML类型名称" DocumentType"。使用@ XmlType.name和@ XmlType.namespace为它们分配不同的名称。     此问题与以下位置有关:         在com.xxx.generatedByJaxb.addr.DocumentType         at public com.xxx.generatedByJaxb.addr.DocumentType com.xxx.generatedByJaxb.addr.ObjectFactory.createDocumentType()         在com.xxx.generatedByJaxb.addr.ObjectFactory     此问题与以下位置有关:         在com.xxx.generatedByJaxb.bal.DocumentType         at public com.xxx.generatedByJaxb.bal.DocumentType com.xxx.generatedByJaxb.bal.ObjectFactory.createDocumentType()         在com.xxx.generatedByJaxb.bal.ObjectFactory 元素名称{} Document具有多个映射。     此问题与以下位置有关:         at public javax.xml.bind.JAXBElement com.xxx.generatedByJaxb.bal.ObjectFactory.createDocument(com.xxx.generatedByJaxb.bal.DocumentType)         在com.xxx.generatedByJaxb.bal.ObjectFactory     此问题与以下位置有关:         at public javax.xml.bind.JAXBElement com.xxx.generatedByJaxb.addr.ObjectFactory.createDocument(com.xxx.generatedByJaxb.addr.DocumentType)         在com.xxx.generatedByJaxb.addr.ObjectFactory

以下是xsd文件的示例(在我生成类的7个xsd文件之间):

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" elementFormDefault="qualified">
  <xs:element name="Document" type="DocumentType"/>
  <xs:complexType name="DateType">
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute type="xs:string" name="Type"/>
        <xs:attribute type="xs:int" name="Date"/>
        <xs:attribute type="xs:byte" name="HH"/>
        <xs:attribute type="xs:byte" name="MM"/>
        <xs:attribute type="xs:byte" name="SS"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:complexType name="ChargeType">
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute type="xs:short" name="Id" use="optional"/>
        <xs:attribute type="xs:float" name="Amount" use="optional"/>
        <xs:attribute type="xs:string" name="CurrCode" use="optional"/>
        <xs:attribute type="xs:byte" name="Type" use="optional"/>
        <xs:attribute type="xs:string" name="PT" use="optional"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:complexType name="BalancePageType">
    <xs:sequence>
      <xs:element type="DateType" name="Date"/>
      <xs:element type="ChargeType" name="Charge" maxOccurs="unbounded" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="DocumentType">
    <xs:sequence>
      <xs:element type="BalancePageType" name="BalancePage"/>
    </xs:sequence>
    <xs:attribute type="xs:string" name="Sender"/>
    <xs:attribute type="xs:string" name="Id"/>
    <xs:attribute type="xs:string" name="BAId"/>
  </xs:complexType>
</xs:schema>

1 个答案:

答案 0 :(得分:1)

这不是一个完整的答案(在给定的条件下是不可能的),但它的目的是提供第一个指针。

如果您无法显示任何代码,很难帮助您。如果您的原始内容是保密的,请尝试制作匿名样本。

所以这里有一些非常一般的建议:

我想最好的方法就是整理一个小的非机密示例,这个示例仍然是示范性的,与您的用例相关。