java - 从 XSD 模式生成 Java 类

标签 java xsd jaxb jaxb2 xjc

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

为此,我使用 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.

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

<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 架构的绑定(bind),但它不起作用。如何准确找出错误中提到的行号和列号?如果我只是在记事本中复制架构,则该行号将变为不相关的 xml 标记。

有人尝试过生成这些类吗?

最佳答案

根据 @KarlNicholas 的建议,我在没有任何其他选项的情况下运行了 xjc ,它为我生成了类。每次我将 -p 作为选项传递时,它都会抛出我发布的相关错误。

关于java - 从 XSD 模式生成 Java 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48326379/

相关文章:

java - minOccurs、nillable 和 restriction 的目的是什么?

java - 使用 JSB 在 MySql 数据库表中搜索

java - 如何在有状态 session bean 上下文查找期间定义名称?

xml - 使用 XSD 确保 XML 验证中的字符串不为空

xsd - 在正则表达式中使用枚举限制类型

jaxb - 使用 JAXB 绑定(bind)的类重用不支持 SimpleTypes

java - 我可以在网格布局中操作特定的网格吗?

java - 比较 2 List<String> 是否以任何顺序包含相同元素 [JUnit - Asset]

xml - 为什么 XML Schema 允许 QName 作为元素的值?

java - 使用 jaxb 将对象转换为 XML 的异常