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

标签 java xml web-services jaxb

我正在创建一个系统,该系统使用两个 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/

相关文章:

此处不允许使用 Android list 属性

java - 本地开发中的 JAX-RS "Faked" header

java - 如何解决不兼容类型错误?

Java 泛型编译错误

java - eclipse 在我的项目旁边显示感叹号

web-services - Flex webservice 巨大的性能问题

java - grails 中的 native CXF 集成

java - 如何制作一个不干扰Activity的正在运行的服务?

java - 为 JTextarea 创建 WordWrap 方法 - Java

xml - 使用 XSLT 更改单个属性