cXML到java绑定问题

时间:2016-12-01 10:33:26

标签: xsd jaxb xjc cxml

问题:无法使用java xjc

从cXML.dtd创建java类 我使用的

版本是1.2.032

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

错误: 解析模式...... [ERROR]财产"名称"已定义。使用< jaxb:property>解决这个问题 是冲突。

问题1:行号约为573 问题在于"名称"作为它的副本(元素和属性)。

问题2: ShippingPaymentMethod,TermsOfDeliveryCode,TransportTerms使用" value"导致重复定义。

我理解的解决方案==

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

我需要的帮助

  1. 请尽可能提供正确的binding.xml
  2. 是否有其他方法可以为此cXML
  3. 生成java映射
  4. 是否有可能拥有XSD,然后从XSD获得java映射?
  5. 请建议。

2 个答案:

答案 0 :(得分:2)

仅供参考:您也可以使用外部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>

由于他们继续在XML模式上使用DTD,因此生成JAX-B类非常烦人。如果你想使用其他DTD(Invoice,Catalog,Fulfill),这会特别烦人,因为它们每个都重新定义所有常见元素,但使用自己版本的cxml.requests,cxml.messages,cxml.responses实体

答案 1 :(得分:0)

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

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

  2. 从Cxml.dtd中的TransportTerms,ShippingPaymentMethod和TermsOfDeliveryCode重命名“value”attr

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

  4. 4.in生成的java类将xml注释更改回原始版本。

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