JAXB: @XmlTransient на стороннем или внешнем суперклассе - PullRequest
5 голосов
/ 30 марта 2010

Мне нужна помощь по следующей проблеме с JAXB 2.1.

Пример: я создал класс SpecialPerson, который расширяет абстрактный класс Person. Теперь я хочу преобразовать мою объектную структуру в XML-схему, используя JAXB. Таким образом, я не хочу, чтобы тип Person XML появлялся в моей XML-схеме, чтобы сохранить ее простую. Вместо этого я хочу, чтобы поля класса Person отображались в XML-типе SpecialPerson.

Обычно я добавляю аннотацию @XmlTransient на уровне класса в код Person.

Проблема в том, что Person является сторонним классом, и у меня нет возможности добавить сюда @XmlTransient. Как я могу сказать JAXB, что он должен игнорировать класс Person без аннотирования класса. Можно ли как-то настроить это внешне?

Была ли у вас такая же проблема раньше? Любые идеи, что будет лучшим решением для этой проблемы?

Ответы [ 5 ]

3 голосов
/ 17 декабря 2011

Окей, это была боль в самом себе. Наконец, после просмотра множества сообщений в блоге, вот что я сделал,

добавил класс package-info.java в пакет «сторонний класс», как это,

@javax.xml.bind.annotation.XmlAccessorType (javax.xml.bind.annotation.XmlAccessType.NONE) пакет сторонний пакет;

В моем случае это был всего один пакет, так что это было легко. Очевидно, вам придется сделать это для каждой отдельной структуры пакета. Я не пробовал делать это на уровне мастер-пакета.

2 голосов
/ 30 марта 2010

Вы можете предоставить сопоставления для сторонних классов, используя Annox .

1 голос
/ 06 июля 2010

Реализация EclipseLink JAXB (MOXy) предлагает средства представления метаданных в виде XML, которые вы можете использовать:

Вы можете указать некоторые из метаданных, используя аннотации, а остальные как XML. Вот как будет выглядеть ваш документ:

</ java-types>

</ XML-привязок>

0 голосов
/ 12 мая 2012

Я разместил другое решение с полным кодом здесь

Внешняя пользовательская привязка JAXB XJC Проблема - Анализ результатов в пустом узле

на случай, если вы заинтересованы.

0 голосов
/ 31 марта 2010

Вы можете аннотировать свой класс SuperPerson с помощью @XmlTransient, который даст указание JaxB не выполнять автоматическую сортировку всех свойств. Затем аннотируйте каждый получатель (или поле), который вы хотите сериализовать, соответствующей аннотацией.

Этот подход не очень элегантный, но он должен работать

...