当前位置: 首页 > 面试题库 >

JAXB-属性“值”已定义。用 解决这个冲突

司寇琨
2023-03-14
问题内容

使用JAXB生成XML绑定类。

该架构基于一组旧版XML文件,并包含以下代码段:

<xs:complexType name="MetaType">
    <xs:simpleContent>
        <xs:extension base="xs:string">
            <xs:attribute type="xs:string" name="Name" />
            <xs:attribute type="xs:string" name="Scheme" />
            <xs:attribute type="xs:string" name="Value" />
        </xs:extension>
    </xs:simpleContent>
</xs:complexType>

‘Value’属性与的’value’属性冲突xs:string,并且代码生成失败并显示以下错误:

com.sun.istack.SAXParseException2: Property "Value" is already defined. Use &lt;jaxb:property> to resolve this conflict.

问题答案:

答案在于利用JAXB绑定(site-template.xjb):

<bindings xmlns="http://java.sun.com/xml/ns/jaxb"
          xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"
          xmlns:xs="http://www.w3.org/2001/XMLSchema"
          version="2.1">
    <bindings schemaLocation="site-template.xsd" version="1.0">
        <!-- Customise the package name -->
        <schemaBindings>
            <package name="com.example.schema"/>
        </schemaBindings>

        <!-- rename the value element -->
        <bindings node="//xs:complexType[@name='MetaType']">
            <bindings node=".//xs:attribute[@name='Value']">
                <property name="ValueAttribute"/>
            </bindings>
        </bindings>
    </bindings>
</bindings>

XPath表达式查找节点并重命名节点,从而避免了命名冲突。

使用此绑定XML文件,生成的Java类最终具有所需的getValueAttribute()(以及getValue())。



 类似资料:
  • 问题内容: 我有一个xsd文件(yahoo.xsd),我在其中导入了另一个xsd文件,如下所示: stock.xsd看起来像这样: 当我使用xjc进行编译时,出现以下错误消息: [错误]属性“符号”已经定义。使用 解决此冲突。 我基本上在SO上找到了解决此问题的方法(JAXB编译问题-[ERROR]属性“Any”已经定义),但是我无法使其正常工作。我猜我的XPath是错误的。 这是我正在使用的绑定

  • 我有一个xsd文件(yahoo.xsd),我导入另一个xsd文件像这样: stock.xsd是这样的: 当我用xjc编译时,我得到了以下错误消息: 我基本上在这里找到了解决方案(JAXB编译问题-[ERROR]属性“Any”已经定义),但我无法让它工作。我猜我的XPath是错的。 这是我正在使用的绑定文件: 如果我现在使用xjc-b进行编译,它会说XPath计算会导致一个空的目标节点。 我可能需要

  • 我有这个类结构来序列化TreeGrid(www.TreeGrid.com)对象: 数据网格.java 和 数据网格数据.java 这些类将被处理以返回XML结构,如下所示: 但是封装在B中的信息可能不同(因此在< code>DataGridData类中存在由同一个< code>XmlElement映射的两个属性)。 如果我在Java 7下运行我的项目,这一切都没问题,但是在Java 8下会引发一个

  • 问题内容: 联接操作可以正常工作,但是当我重用df2时,我面临着无法解析的属性错误 错误:org.apache.spark.sql.AnalysisException:已解析的属性ID#426 问题答案: 正如我在评论中提及,它关系到https://issues.apache.org/jira/browse/SPARK-10925,更具体地说https://issues.apache.org/ji

  • 当类使用具有相同属性的两个特征时,如何解决属性名称冲突? 示例: 提前道谢!

  • 我使用JAXB根据一些XSD模式生成java类。对于以下元素: <代码> jaxb生成以下代码: 问题是我们需要使用一些依赖于getter/setter方法命名约定的专有XML工具,例如,对于字段REC_LOC他们希望使用名为getRecLoc(String value)和setRecLoc()的方法,而不是getRECLOC()。 有没有办法自定义jaxb生成的方法名?