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, который демонстрирует поведение нескольких юнит-тестов с различными файлами сопоставления.