-1

问题:无法使用 java xjc 从 cXML.dtd 创建 java 类

我使用的版本是 1.2.032

使用的命令:xjc -dtd cXML.dtd

错误:解析架构... [错误] 属性“名称”已定义。使用 <jaxb:property> 来解决冲突。

问题 1:573 问题周围的行号是“名称”作为其重复项(元素和属性)。

问题 2: ShippingPaymentMethod,TermsOfDeliveryCode,TransportTerms 使用“值”导致重复定义。

我理解的解决方案==

我需要自定义 binding.xml .. 我尝试了各种方法,但无法创建正确的 binding.xml 来解决这个问题。一旦我有了正确的 xml,我就可以使用以下命令来创建生成的类。xjc -b binding.xml -dtd cXML.dtd

我需要什么

  1. 如果可能,请提供正确的 binding.xml
  2. 有没有其他方法可以为此 cXML 生成 java 映射
  3. 是否有可能拥有 XSD,然后从 XSD 进行 java 映射?

请建议。

4

2 回答 2

5

仅供参考:您也可以使用如下所示的外部 jax-b 绑定文件来解决此问题:

<xml-java-binding-schema xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc">
  <element name="ReturnData" type="class">
    <attribute name="name" property="nameAttribute"/>
  </element>
  <element name="ShippingPaymentMethod" type="class">
    <attribute name="value" property="valueAttribute"/>
  </element>
  <element name="TermsOfDeliveryCode" type="class">
    <attribute name="value" property="valueAttribute"/>
  </element>
  <element name="TransportTerms" type="class">
    <attribute name="value" property="valueAttribute"/>
  </element>
</xml-java-binding-schema>

CXML 规范生成 JAX-B 类非常烦人,因为它们继续使用 DTD over XML 模式。如果您想使用其他 DTD(Invoice、Catalog、Fulfill),这尤其令人讨厌,因为它们每个都重新定义了所有公共元素,但使用了自己的 cxml.requests、cxml.messages、cxml.responses 实体版本

于 2017-11-01T17:15:52.777 回答
1

问题由我自己解决。做了以下步骤..可能对其他人有用

  1. 在 Cxml.dtd 中重命名“名称”元素“ReturnData”

  2. 从 TransportTerms、ShippingPaymentMethod 和 Cxml.dtd 中的 TermsOfDeliveryCode 重命名“值”属性


  3. 使用xjc -dtd cXML.dtd创建 java 类

4.在生成的java类中将xml注解改回原来的。

所以方法名称会有所不同,但它会读取和写入正确的 XML。

于 2016-12-06T08:08:21.223 回答