【问题标题】:Generated classes by JAXB conflicting with each otherJAXB 生成的类相互冲突
【发布时间】:2014-10-14 15:51:20
【问题描述】:

我使用 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 在公共 com.xxx.generatedByJaxb.addr.DocumentType com.xxx.generatedByJaxb.addr.ObjectFactory.createDocumentType() 在 com.xxx.generatedByJaxb.addr.ObjectFactory 此问题与以下位置有关: 在 com.xxx.generatedByJaxb.bal.DocumentType 在公共 com.xxx.generatedByJaxb.bal.DocumentType com.xxx.generatedByJaxb.bal.ObjectFactory.createDocumentType() 在 com.xxx.generatedByJaxb.bal.ObjectFactory 元素名称 {}Document 具有多个映射。 此问题与以下位置有关: 在公共 javax.xml.bind.JAXBElement com.xxx.generatedByJaxb.bal.ObjectFactory.createDocument(com.xxx.generatedByJaxb.bal.DocumentType) 在 com.xxx.generatedByJaxb.bal.ObjectFactory 此问题与以下位置有关: 在公共 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>

【问题讨论】:

  • 请发布您的架构和冲突类的示例。
  • 有很多类发生冲突
  • XML 文件是保密的,抱歉
  • 我尝试为每个类定义一个不同的命名空间,但它不起作用
  • 您的架构中有targetNamespace 属性吗?

标签: xml jaxb jaxb2 xjc


【解决方案1】:

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

如果您无法显示任何代码,则很难为您提供帮助。如果您的原始资料是机密的,请尝试制作匿名样本。

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

我想对您来说最好的方法是整理一个小型非机密示例,该示例仍然具有示范性并且与您的用例相关。

【讨论】:

  • 我已经手动重命名了一些类:查看我的编辑。它会导致问题吗?全部撤消所有重命名操作吗?
  • 对不起,我无法在不了解全貌的情况下提供建议。通常以任何方式重命名或修改生成的代码都不是一个好主意,因为您的更改将在下一代无效。但这不是恢复任何东西的建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-07
  • 2011-02-17
  • 2020-06-29
  • 2020-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多