gpt4 book ai didi

java - JAXB:package.package. 已在 package.package.. 中定义

转载 作者:太空宇宙 更新时间:2023-11-04 12:47:24 26 4
gpt4 key购买 nike

我正在尝试使用 JAXB 从 XSD 生成 java 类。

XSD 是我公司的官方 xsd,因此我无法仅为我的项目修改它们。在该网站上进行了数百次尝试和搜索后,我决定直接提出问题。

我的 XSD 中有这个:

<xs:element name="Line" minOccurs="0" maxOccurs="999">
<xs:complexType>
<xs:sequence>
<xs:element name="Line" minOccurs="0" maxOccurs="999">
<xs:complexType>
<xs:attribute name="reference" type="xs:toto" use="optional">
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="reference" type="xs:toto" use="optional">

</xs:attribute>
</xs:complexType>
</xs:element>

这会导致问题:package.Index.Line 已在 package.Index 中定义

查看生成的代码后,我可以看到我们有一个静态内部类行到另一个静态内部类行(在另一个索引下)

我在线路上遇到错误(在顶部底部)嵌套类型 Line 无法隐藏封闭类型

如果名称更改(在生成后的 xsd 上或 java 类上),我就不再有问题了。

我尝试创建一个绑定(bind)文件:

<jaxb:bindings schemaLocation="file:../path/myschema.xsd" node="//xs:element[@name='Index']">
<jaxb:bindings node=".//xs:element[@name='Line']" multiple="true">
<jaxb:property name="Lines"/>
</jaxb:bindings>
</jaxb:bindings>

我有同样的问题...因为事实上在索引下我有两个节点行所以我尝试这样做:

<jaxb:bindings schemaLocation="file:path/myxsd.xsd" node="//xs:element[@name='Index']/xs:element[@name='Line']">
<jaxb:bindings node="//xs:element[@name='Line']" multiple="true">
<jaxb:property name="Lines"/>
</jaxb:bindings>
</jaxb:bindings>

<jaxb:bindings schemaLocation="file:path/myxsd.xsd" node="//xs:element[@name='Index']">
<jaxb:bindings node="//xs:element[@name='Line']/xs:element[@name='Line']" multiple="true">
<jaxb:property name="Lines"/>
</jaxb:bindings>
</jaxb:bindings>

但是我遇到了一个生成问题:com.sun.istack.SAXParseException2:“//xs:element[@name='Index']/xs:element[@name='Line']”的 XPath 计算导致空目标节点

我完全迷失了。我整天吃花生酱来补偿我的悲伤 T_T

如果您有建议;)

提前致谢

杰弗里

最佳答案

首先配置绑定(bind)以将它们生成为单独的类。

<jaxb:globalBindings localScoping="toplevel"/>

然后,对引用的元素使用完整的 XPath,如下所示。

<bindings version="2.1" xmlns="http://java.sun.com/xml/ns/jaxb"
xmlns:xs="http://www.w3.org/2001/XMLSchema">

<globalBindings localScoping="toplevel"/>

<bindings schemaLocation="yourschema.xsd">
<bindings node="//xs:element[@name='Index']/xs:complexType/xs:sequence/xs:element[@name='Line']/xs:complexType">
<class name="Lines1"/>
</bindings>
</bindings>

<bindings schemaLocation="yourschema.xsd">
<bindings node="//xs:element[@name='Index']/xs:complexType/xs:sequence/xs:element[@name='Line']/xs:complexType/xs:sequence/xs:element[@name='Line']/xs:complexType">
<class name="Lines2"/>
</bindings>
</bindings>

</bindings>

关于java - JAXB:package.package.<Type> 已在 package.package.<Type>.<Type> 中定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36176115/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com