jaxb аннотации для подробного OTA XML - PullRequest
2 голосов
/ 02 ноября 2011

За мои грехи я работаю с Авиакомпания 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 Ответ

1 голос
/ 02 ноября 2011

Примечание: Я EclipseLink JAXB (MOXy) и являюсь членом JAXB 2 (JSR-222 ) экспертная группа.

Вы можете использовать расширение @XmlPath в MOXy для полей departureAirport и arrivalAirport:

   @XmlPath("DepartureAirport/@LocationCode")
   private String departureAirport;

   @XmlPath("ArrivalAirport/@LocationCode")
   private String arrivalAirport;

И вы можете использовать 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;

}

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

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