#jaxb
#jaxb
Вопрос:
За мои грехи я работаю с OTA XML авиакомпании. Он содержит подробные элементы, такие как:
<FlightInfo>
<Success />
<DepartureAirport LocationCode="LHR" />
<ArrivalAirport LocationCode="LAX" />
</FlightInfo>
где наличие элемента Success означает, что ответ получен успешно, а коды аэропортов встроены в качестве атрибутов в элементы хранения.
Чтобы сохранить мое здравомыслие при написании кода Java, я хочу преобразовать это в простой POJO, подобный этому:
public class FlightInfo {
private boolean success;
private String departureAirport;
private String arrivalAirport;
}
Используя JAXB, каков рекомендуемый подход для этого — использовать XmlJavaTypeAdapter для всех этих элементов?
Ответ №1:
Примечание: я являюсь руководителем EclipseLink JAXB (MOXy) и членом экспертной группы JAXB 2 (JSR-222).
Вы могли бы использовать @XmlPath
расширение в MOXy для полей departureAirport
и arrivalAirport
:
@XmlPath("DepartureAirport/@LocationCode")
private String departureAirport;
@XmlPath("ArrivalAirport/@LocationCode")
private String arrivalAirport;
И вы могли бы использовать an XmlAdapter
для представления boolean
поля success
с указанием наличия или отсутствия Success
элемента:
@XmlJavaTypeAdapter(SuccessAdapter.class)
private boolean success;
FlightInfo
Ниже FlightInfo
показано, как будет выглядеть ваш класс с аннотациями MOXy и JAXB:
import javax.xml.bind.annotation.*;
import org.eclipse.persistence.oxm.annotations.*;
@XmlRootElement(name="FlightInfo")
@XmlAccessorType(XmlAccessType.FIELD)
public class FlightInfo {
@XmlJavaTypeAdapter(SuccessAdapter.class)
private boolean success;
@XmlPath("DepartureAirport/@LocationCode")
private String departureAirport;
@XmlPath("ArrivalAirport/@LocationCode")
private String arrivalAirport;
}
Для получения дополнительной информации