【发布时间】:2025-12-30 04:20:11
【问题描述】:
问题陈述
我已经定义了以下 XSD:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xc="XmlCache" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:import namespace="XmlCache" schemaLocation="mdml/com/mycompany/mds/mdml/schema/xc.xsd"/>
<xs:element name="MarketData">
<xs:complexType>
<xs:sequence>
<xs:element ref="xc:XmlCache" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
元素xc:XmlCache在文件mdml/com/mycompany/mds/mdml/schema/xc.xsd中定义。
我想基于这个 XSD 生成 Java 类,使用 jaxb(带有插件 jaxb2-maven-plugin)。
错误
我在编译过程中不断收到以下错误:
[错误] jar:file:/C:/Users/miannizzotto/.m2/repository/com/sun/xml/bind/jaxb-xjc/2.1.13/jaxb-xjc-2.1.13.jar!/ com/sun/xml/xsom/impl/parser/datatypes.xsd[14,33] com.sun.istack.SAXParseException2; systemId: jar:file:/C:/Users/miannizzotto/.m2/repository/com/sun/xml/bind/jaxb-xjc/2.1.13/jaxb-xjc-2.1.13.jar!/com/sun/ xml/xsom/impl/parser/datatypes.xsd;行号:14;列号:33;属性“值”已定义。使用
解决此冲突。
紧随其后
[错误] 文件:/D:/v3.1.build.dev.asset.x.91253.5.4.dev/component/legacy/sdk/product-api/api/src/main/xsd/mdml/ com/mycompany/mds/mdml/schema/xc.xsd[57,63] com.sun.istack.SAXParseException2; systemId: 文件:/D:/v3.1.build.dev.asset.x.91253.5.4.dev/component/legacy/sdk/product-api/api/src/main/xsd/mdml/com/mycompany/ mds/mdml/schema/xc.xsd;行号:57;列号:63;以下位置与上述er相关
有罪档案的结构
文件mdml/com/mycompany/mds/mdml/schema/xc.xsd 非常大,但我将只在下面列出有罪的部分(第 57 行及其树的主要节点):
<?xml version="1.0"?>
<!DOCTYPE xs:schema>
...
<xs:attributeGroup name="valueAtt">
<xs:attribute name="value" use="optional" form="qualified"/> <!--this is line 57-->
</xs:attributeGroup>
...
</xs:schema>
到目前为止我尝试了什么?
我尝试过使用我的绑定文件,但以下所有尝试仍会导致相同的错误。
尝试 1 (灵感来自this question and its answers)
<?xml version="1.0" encoding="UTF-8"?>
<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
jaxb:extensionBindingPrefixes="xjc"
jaxb:version="1.0">
<jaxb:bindings schemaLocation="../xsd/MarketData.xsd" >
<jaxb:bindings node=".//xs:attributeGroup[@name='valueAtt']">
<jaxb:bindings node=".//xs:attribute[@name='value']">
<jaxb:property name="ValueAttribute"/>
</jaxb:bindings>
</jaxb:bindings>
</jaxb:bindings>
</jaxb:bindings>
(尝试获取“attributeGroup”类型的节点“valueAtt”,然后获取“attribute”类型的节点“value”,并将其重命名为“ValueAttribute”。
尝试 2 (灵感来自this question)
<?xml version="1.0" encoding="UTF-8"?>
<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
jaxb:extensionBindingPrefixes="xjc"
jaxb:version="1.0">
<jaxb:bindings schemaLocation="../xsd/MarketData.xsd" >
<jaxb:bindings node=".//xs:element[@name=MarketData]/xs:complexType/xs:sequence/xs:element[@ref=XmlCache]">
<jaxb:bindings node=".//xs:attributeGroup[@name='valueAtt']">
<jaxb:bindings node=".//xs:attribute[@name='value']">
<jaxb:property name="ValueAttribute"/>
</jaxb:bindings>
</jaxb:bindings>
</jaxb:bindings>
</jaxb:bindings>
</jaxb:bindings>
(与上一次尝试的主要区别是这里我尝试使用@ref通过引用选择节点XmlCache,因为问题发生在另一个XSD中)。
尝试 3 (灵感只是直觉问题发生在另一个 XSD 中,这只是在我的 XSD 中引用):
<?xml version="1.0" encoding="UTF-8"?>
<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
jaxb:extensionBindingPrefixes="xjc"
jaxb:version="1.0">
<jaxb:bindings schemaLocation="../xsd/mdml/com/mycompany/mds/mdml/schema/xc.xsd"
node="//xs:attributeGroup[@name=valueAtt]/xs:attribute[@name=value]">
<jaxb:property name="ValueAttribute"/>
</jaxb:bindings>
</jaxb:bindings>
我做错了什么?有人可以帮忙吗?
【问题讨论】:
标签: java xsd jaxb jaxb2-maven-plugin