MOXy显示错误'多个可映射的父接口'关于瞬态成员/属性

时间:2014-04-03 15:54:44

标签: xml jaxb mapping moxy oxm

我使用外部映射文件来定义对象的编组。我的测试应用(link @ bottom)有class_model.png:3个类联系人关系国家,他们都实现了自己的界面 IContact IRelation ICountry 。这3个接口扩展了多个超级接口。这3个类是相关的:类联系 IRelation 成员,类关系 ICountry 成员。< / p>

避免错误&#39; JAXB无法映射java接口,因为它具有多个可映射的父接口&#39;我在我的映射文件中超级输入了java.lang.Object的3个接口,正如Blaise Doughan在他的博客中所描述的那样。

我想在关系类中隐藏国家/地区的编组,因此我为该国家/地区成员添加 xml-transient 元素在关系

<?xml version="1.0"?>
<xml-bindings xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.eclipse.org/eclipselink/xsds/persistence/oxm http://www.eclipse.org/eclipselink/xsds/eclipselink_oxm_2_4.xsd"
package-name="com.foo.domain"
xml-mapping-metadata-complete="false" xml-accessor-type="PROPERTY">
<xml-schema element-form-default="QUALIFIED" />
<java-types>
    <java-type name="Contact">
        <xml-root-element />
        <java-attributes>
            <xml-element java-attribute="relation"
                type="com.foo.domain.Relation" />
        </java-attributes>
    </java-type>
    <java-type name="Relation">
        <xml-root-element />
        <java-attributes>
            <xml-transient java-attribute="country" />
        </java-attributes>
    </java-type>
    <!-- ###### I want to delete this line ###### -->
    <!-- <java-type name="ICountry" super-type="java.lang.Object" /> -->
    <java-type name="IRelation" super-type="java.lang.Object" />
    <java-type name="IContact" super-type="java.lang.Object" />
</java-types>

由于 xml-transient ,该国家未被编组。所以我猜MOXy并没有处理国家,因此我不再需要超级类型 ICountry 了。当我从映射中删除 ICountry * super-type *时,我得到错误&#39; JAXB无法映射java接口ICountry,因为它有多个可映射的父接口。&#39 ;再次在创建JAXBContext的过程中。

为什么在 xml-transient 的MOXy处理国家/地区对象时出现此错误?

我有一个大的域模型/对象树(300个域,80个包),其中每个域实现一个具有多个超级接口的接口。我认为我可以使用 xml-transient 元素来编组对象树的子集。但似乎MOXy需要对象树中的每个接口都有一个超类型,即使接口是由未被编组的类实现的。因为OXM映射是基于包的,所以它意味着我必须为所有接口包含80个映射文件以创建有效的JAXBContext。

我的映射文件应该如何定义,以便MOXy不会检查从编组过程中排除的任何接口/类?我如何编组一个巨大的对象树的子集,而不是每个超级类型的interfcae的需要?

非常感谢任何帮助。

更多信息链接 链接到test_app.zip,它演示了具有不同映射文件的多个单元测试中的行为。

0 个答案:

没有答案