在Web服务/客户端之间传递JAXB对象

时间:2012-01-08 19:10:05

标签: java xml web-services jaxb

我正在创建一个使用两个Web服务和一个客户端为旅行社提供界面的系统。有一个航班预订网络服务,它存储xml文档中的可用航班(基于架构),并提供检索优惠或预订特定航班的方法。还有一种旅行社服务,其使用航班预订服务和货币兑换服务,以便以特定货币提供用户价格。然后,客户将使用旅行社服务以查看和预订可用航班。

我的问题是从航班预订服务获取航班信息到旅行社服务,然后再转发给客户。用于商品列表的架构在Web服务和客户端中使用。包含优惠的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 个答案:

答案 0 :(得分:1)

如果你在服务器和客户端都使用Java,我会在两端使用Jersey + Jackson。你可以,只要你有两侧的模型,并且它们被正确注释,你可以将它从一侧传递到另一侧。

网上有很多例子,但我从这个问题开始:How to reuse Jersey's JSON/JAXB for serialization?