Передача объектов JAXB между веб-сервисами / клиентом - PullRequest
0 голосов
/ 08 января 2012

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

Моя проблема заключается в получении информации о рейсе из службы бронирования авиабилетов в службу турагентства и далее в адрес клиента.Схема, используемая для списка предложений, используется как в веб-сервисах, так и в клиенте.XML-документ, содержащий предложения, распаковывается в службе бронирования авиабилетов и становится объектом OffersType.Я хочу вернуть этот объект в туристическое агентство, чтобы на нем можно было выполнить какие-то операции, а затем он вернулся к клиенту.Однако при доступе к методу в программе туристического агентства он возвращает только flightbooking.OffersType, который нельзя преобразовать в локальный OffersType.Есть ли способ сделать это?Или мне нужно создать новый OffersType, который использует информацию с пульта OffersType?

Так, например, на веб-сервисе бронирования авиабилетов:

@WebMethod(operationName = "getOffers")
public OffersType getOffers() {
     try {
        javax.xml.bind.JAXBContext jaxbCtx = javax.xml.bind.JAXBContext.newInstance(this.getClass().getPackage().getName());
        javax.xml.bind.Unmarshaller unmarshaller = jaxbCtx.createUnmarshaller();
        offers = (OffersType) unmarshaller.unmarshal(new java.io.File("\\resources\\CurrentOffers.xml")); //NOI18N
    } catch (javax.xml.bind.JAXBException ex) {
        // XXXTODO Handle exception
        java.util.logging.Logger.getLogger("global").log(java.util.logging.Level.SEVERE, null, ex); //NOI18N
    }
    return offers;
}

с предложениямибудучи экземпляром OffersType.

Тогда на стороне туристического агентства:

private OffersType getOffers() {
    OffersType ret = new OffersType();
    flightbooking.FlightBookingWS port = service.getFlightBookingWSPort();
    return port.getOffers();
}

, но, очевидно, это не работает, так как возвращаемый объект является экземпляром flightbooking.OffersType.

1 Ответ

1 голос
/ 08 января 2012

Если вы используете Java как на сервере, так и на клиенте, я бы использовал Джерси + Джексон на обоих концах. Вы можете, если у вас есть модель с обеих сторон, и они правильно аннотированы, вы можете просто передать ее с одной стороны на другую.

Есть много примеров в сети, но я бы начал с этого вопроса SO: Как повторно использовать JSON / JAXB Джерси для сериализации?

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