我正在创建一个系统,该系统使用两个 Web 服务和一个客户端来为旅行社提供界面。有一个航类预订 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
的实例。
最佳答案
如果您在服务器和客户端上都使用 Java,我会在两端使用 Jersey + Jackson。只要两侧都有模型,并且它们已正确注释,您就可以将其从一侧传递到另一侧。
网上有很多例子,但我会从这个问题开始:How to reuse Jersey's JSON/JAXB for serialization?
关于java - 在 Web 服务/客户端之间传递 JAXB 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8780371/