2012-01-08 184 views
0

我正在创建一个使用两个Web服务和一个客户端为旅行代理提供接口的系统。有一个航班预订网络服务,它将一个XML文档中的可用航班(基于模式)存储起来,并提供检索要约或预订给定航班的方法。还有一种旅行代理服务,它使用航班预订服务和货币兑换服务,以便以特定货币提供用户价格。然后,客户将消费旅行社服务,以查看和预订可用航班。在Web服务/客户端之间传递JAXB对象

我的问题是将航班信息从机票预订服务获取到旅行社服务,然后再发送给客户。用于商品列表的模式用于Web服务和客户端。包含优惠的xml文件在机票预订服务内解除编组,成为OffersType的对象。我想将这个对象返回给旅行社,以便可以对其执行操作,然后将其返回给客户端。但是,在旅行社计划中访问该方法时,它只会返回flightbooking.OffersType,该地址无法投射到本地OffersType。有没有办法做到这一点?或者我需要创建一个新的OffersType,它使用来自远程OffersType的信息?

因此,例如,在航班预订Web服务:

@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一个实例。

+2

显示到目前为止你已经尝试过什么一些代码。 – tobiasbayer 2012-01-08 19:11:48

+0

你的意思是说你有两个名为'OffersType'的类:一个在你身边,另一个在旅行社的旁边? – AlexR 2012-01-08 19:33:32

+0

是的,两个名为OffersType的类在每一端都有一个。两者都基于相同的xsd。我用示例代码编辑了我的OP。 – Bonnotbh 2012-01-08 19:50:02

回答

1

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

有很多在线的例子,但我会用这太问题开始:How to reuse Jersey's JSON/JAXB for serialization?