有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

jaxb EclipseLink Moxy:Java类型绑定不使用子类型(组合)

我偶然遇到了与MOXy v2的一个问题。5.1最好用下面的例子来解释

输入:

<Root>
    <parentId>1</parentId>
    <parentVersion>1</parentVersion>
    <children> <!-- Always has one and only one child -->
        <child>
            <cType>P</cType>
            <cId>2</cId>
            <cVersion>2</cVersion>
        </child>
    <children>
</Root>

使用上面的XML作为基本输入,并使用下面给出的绑定文件,所有java属性尤其是cType在运行解组器后都是非空的。所以,我们在这里很好

<?xml version="1.0"?>
<xml-bindings
        xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm"
        package-name="com.xyz.model"
        xml-access-order="alphabetical" 
        xml-mapping-metadata-complete="true">
    <xml-schema/>
    <xml-java-type-adapters>
        <xml-java-type-adapter value="com.xyz.unmarshal.xml.DateAdapter" type="java.util.Date"/>
        <xml-java-type-adapter value="com.xyz.unmarshal.xml.BooleanAdapter" type="java.lang.Boolean"/>        
    </xml-java-type-adapters>
    <java-types>
        <java-type name="com.xyz.model.SomeType">
            <xml-root-element name="Root"/>
            <java-attributes>
                <xml-element java-attribute="id"                            name="parentId"/>
                <xml-element java-attribute="version"                       name="parentVersion"/>
                <xml-element java-attribute="cType"                         name="children/child/cType"/>
                <!--xml-element java-attribute="subType"                        name="children/child" --/>
            </java-attributes>
        </java-type>
        <java-type name="com.xyz.model.SubType">
            <java-attributes>   
                <xml-element java-attribute="subTypeId"         name="cId"/>
                <xml-element java-attribute="subTypeVersion"    name="cVersion"/>
            </java-attributes>
        </java-type>
   </java-types> 
</xml-bindings>

但是,当我们在上面的示例中取消注释subType属性时,除了cType之外,其他所有属性都被填充。如果我们有与子类型属性的名称相同的名称开头的任何内容,则似乎就是这种情况

知道如何解决这个问题吗(我不能肯定地更改输入XML)

更新(2月3日):

有一个非常糟糕的解决方案-将绑定文件拆分为两个(在我的例子中),并使用不同的绑定文件将同一消息解组两次(代价高昂),然后将对象合并回来。我对我提出的解决方案一点也不满意。因此,要么需要探索其他一些参考实现,要么等待在MOXy(理想)中解决这个问题

问候


共 (1) 个答案

  1. # 1 楼答案

    问题在于元数据文档的以下部分:

    <xml-element java-attribute="cType" name="children/child/cType"/>
    <xml-element java-attribute="subType" name="children/child"/>
    

    当您将subType属性映射到children/child路径时,它希望映射到child的域对象拥有该元素下面的内容。由于cType的映射在该元素下方,所以事情就变得不正常了