2012-01-08 96 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?