MOXy показывает ошибку "множественные сопоставляемые родительские интерфейсы" для временных элементов / свойств

Я использую внешние файлы сопоставления, чтобы определить сортировку моих объектов. Мое тестовое приложение (link@bottom) имеет этот class_model.png: 3 класса Contact, Relation и Country, которые все реализуют свой собственный интерфейс IContact, IRelation и ICountry. Эти 3 интерфейса расширяют несколько суперинтерфейсов. Эти три класса связаны: класс Contact имеет член IRelation, а класс Relation имеет член ICountry.

Чтобы избежать ошибки "JAXB не может отображать java-интерфейс, так как он имеет несколько сопоставляемых родительских интерфейсов", яввел3 интерфейса в java.lang.Object в своем файле сопоставления, как описано Блезом Дафаном в его блоге.

Я хотел бы скрыть сортировку страны в классе Relation, поэтому я добавляю элемент xml-transient для члена страны вRelation.

<?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-транзитному. Так что я думаю, что MOXy не обрабатывает Country, поэтому мне больше не нужен супертип ICountry. Когда яудаляю ICountry* super-type * из сопоставления, я получаю ошибку "JAXB не может сопоставить java-интерфейс ICountry, так как он имеет несколько сопоставляемых родительских интерфейсов". снова в процессе создания JAXBContext.

Почему я получаю эту ошибку, когда объект Country не обрабатывается MOXy из-заxml-transient?

У меня есть большая модель доменов / дерево объектов (300 доменов, 80 пакетов), где каждый домен реализует интерфейс с несколькими суперинтерфейсами. Я предполагал, что смогу маршалировать подмножество дерева объектов, используя элемент xml-transient. Но кажется, что MOXy нужен супертип для каждого интерфейса в дереве объектов, даже если интерфейс реализован классами, которые не получают маршалинг. Поскольку OXM-отображения основаны на пакетах, это означает, что мне нужно включить 80 файлов отображения для всех интерфейсов, чтобы создать действительный JAXBContext.

Как определить файл сопоставления, чтобы MOXy не проверял интерфейсы / классы, исключенные из процесса сортировки? Как я могу сделать маршаллирование подмножества огромного дерева объектов, не требующего супертипирования каждого интерфейса?

Любая помощь очень ценится.

Ссылки с дополнительной информацией: Ссылка на test_app.zip, который демонстрирует поведение нескольких юнит-тестов с различными файлами сопоставления.

0 ответов

Другие вопросы по тегам