Добавление поведения в сгенерированный класс JAXB - PullRequest
2 голосов
/ 12 февраля 2011

Я должен добавить небольшую бизнес-логику в мои сгенерированные jaxb классы. Например, у меня есть следующие XML:

<vehicle>
 <car id="20" make="ABC"/>
</vehicle>

<vehicle>
 <motorcycle id="05" make="XYZ"/>
<vehicle>

<vehicle>
 <truck id="34"  make="UVW"/>
</vehicle>

И я создаю XSD для них.

Теперь, что мне нужно сделать, это при демонтаже любого XML-файла такого типа (т. Е. Всякий раз, когда вызывается установщик автомобиля, мотоцикла или грузовика, он также должен установить тип транспортного средства, который я не хочу добавлять в качестве атрибута в XML).

Или после демаршаллинга (любым способом, которым я могу узнать QName подэлемента). Я пытался Как расширить код Java, сгенерированный инструментами JAXP-cxf или Hibernate? , но переопределенные сеттеры никогда не вызывались.

Ответы [ 2 ]

1 голос
/ 12 февраля 2011

JAXB имеет функцию «post-construct» (см. javadoc ). Просто добавьте что-то подобное в свой аннотированный класс:

void afterUnmarshal(Unmarshaller, Object parent) {
    vehicle.setType(..); // your logic here    
}
0 голосов
/ 12 февраля 2011

Вы можете создать расширение JAXB . Но это звучит для меня непосильно - вы можете просто вызывать инициализатор всякий раз, когда демонтируете объект JAXB. Что-то вроде:

public class Initializer {
    public static void initialize(Vehicle vehicle) {
       vehicle.setType(..); // your logic here
    }
}

И звоните Initializer.initialize(unmarshalledObject)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...