我使用 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>
答案 0 :(得分:1)
这不是一个完整的答案(在给定的条件下是不可能的),但它的目的是提供第一个指针。
如果您无法显示任何代码,很难帮助您。如果您的原始内容是保密的,请尝试制作匿名样本。
所以这里有一些非常一般的建议:
我想最好的方法就是整理一个小的非机密示例,这个示例仍然是示范性的,与您的用例相关。