【问题标题】:Generating Java classes from XSD schema从 XSD 模式生成 Java 类
【发布时间】:2018-01-18 16:48:05
【问题描述】:

我正在尝试从 XSD 架构 http://docs.oasis-open.org/ws-sx/ws-trust/200512/ws-trust-1.3.xsd 生成 java 类。

为此,我使用jaxb2-maven-pluginxjc 来生成这些眼镜。但是遇到以下错误

http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd [87,40]
org.xml.sax.SAXParseException; systemId: http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd; lineNumber: 87; columnNumber: 40; A class/interface with the same name "com.abccompany.wstrust.ReferenceType" is already in use. Use a class customization to resolve this conflict.

[ERROR] http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd [97,35]
org.xml.sax.SAXParseException; systemId: http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd; lineNumber: 97; columnNumber: 35; (Relevant to above error) another "ReferenceType" is generated from here.

[ERROR] http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd [87,40]
com.sun.istack.SAXParseException2; systemId: http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd; lineNumber: 87; columnNumber: 40; Two declarations cause a collision in the ObjectFactory class.

[ERROR] http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd [97,35]
com.sun.istack.SAXParseException2; systemId: http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd; lineNumber: 97; columnNumber: 35; (Related to above error) This is the other declaration.
[ERROR] http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd [152,58]
com.sun.istack.SAXParseException2; systemId: http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd; lineNumber: 152; columnNumber: 58; Two declarations cause a collision in the ObjectFactory class
[ERROR] http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd [96,52]
com.sun.istack.SAXParseException2; systemId: http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd; lineNumber: 96; columnNumber: 52; (Related to above error) This is the other declaration.

所以我尝试使用绑定来解决冲突,这样

<jxb:bindings version="1.0" xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:xsd="http://www.w3.org/2001/XMLSchema" schemaLocation="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" >
    <jxb:bindings node="//xsd:complexType[@name='ReferenceType']">
        <jxb:class name="AbstractReferenceType1" />
    </jxb:bindings>
</jxb:bindings>

但我仍然收到以下错误

[ERROR] http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd [152,58]
com.sun.istack.SAXParseException2; systemId: http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd; lineNumber: 152; columnNumber: 58; Two declarations cause a collision in the ObjectFactory class
[ERROR] http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd [96,52]
com.sun.istack.SAXParseException2; systemId: http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd; lineNumber: 96; columnNumber: 52; (Related to above error) This is the other declaration.

尝试为xmldsig-core-schema.xsd 架构添加绑定,但它不起作用。如何准确找出错误中提到的这个行号和列号?如果我只是在记事本中复制架构,则该行号将出现在不相关的 xml 标记中。

有没有人尝试生成这些类?

【问题讨论】:

  • com.abccompany.wstrust.ReferenceType 是从哪里来的?它来自您的自定义 XSD,因为我没有看到它在您提供的 XSD 或其导入中的任何地方引用。
  • 这是我在pom.xml中提供的包名(com.abccompany.wstrust)
  • 如果我只是做xjc sw-trust-1.3.xml 我得到java文件没有任何错误。也许是一个不同的插件? (Java 1.8)
  • @KarlNicholas - 没有绑定?我正在使用 Java 1.8
  • @KarlNicholas - 有趣,它也对我有用。如果我不使用任何标志,它就可以工作。但是当我通过-p 进行包裹时,它抛出了错误。

标签: java xsd jaxb jaxb2 xjc


【解决方案1】:

按照@KarlNicholas 的建议,我在没有任何其他选项的情况下运行xjc,它为我生成了课程。每次,我将-p 作为选项传递,它会抛出一个我发布的错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-15
    • 1970-01-01
    • 2018-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多