аннотации jaxb для подробного OTA XML

#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;

}
 

Для получения дополнительной информации