2012-01-08 11 views
0

2つのWebサービスとクライアントを使用して旅行代理店のインターフェースを提供するシステムを作成しています。利用可能なフライトをXML文書(スキーマに基づく)に格納し、オファーを取得したり、特定のフライトを予約する方法を提供するフライト予約Webサービスがあります。特定の通貨でユーザー価格を提供するために、フライト予約サービスと通貨換算サービスを利用する旅行代理店サービスもあります。その後、利用可能なフライトを表示および予約するために旅行代理店サービスを利用します。Webサービス/クライアント間でJAXBオブジェクトを渡す

私の問題は、フライト情報をフライト予約サービスから旅行代理店サービスまで、そしてその後はクライアントに提供することです。オファーリストに使用されるスキーマは、Webサービスとクライアントの両方で使用されます。オファーを含むXML文書は、OffersTypeのオブジェクトになるようにフライト予約サービス内でアンマーシャリングされます。私はこのオブジェクトを旅行代理店に戻して、その上で操作を実行できるようにしてから、クライアントに返します。しかし、旅行代理店プログラムのメソッドにアクセスするときはflightbooking.OffersTypeが返されますが、これはローカルOffersTypeにキャストできません。これを行う方法はありますか?または、OffersTypeの情報を使用する新しいOffersTypeを作成する必要がありますか?

ですから、例えば、フライト予約Webサービス上:オファーは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; 
} 

。その後

旅行代理店側:

private OffersType getOffers() { 
    OffersType ret = new OffersType(); 
    flightbooking.FlightBookingWS port = service.getFlightBookingWSPort(); 
    return port.getOffers(); 
} 

が、返されるオブジェクトはflightbooking.OffersTypeのインスタンスであると明らかにそれは、動作しません。

+2

ショーあなたがこれまでに試したもののいくつかのコード。 – tobiasbayer

+0

「OffersType」という2つのクラスがあります:1つはあなたの側にあり、もう1つは旅行代理店の側にありますか? – AlexR

+0

はい、それぞれの端に1つ、OffersTypeという2つのクラスがあります。どちらも同じxsdに基づいています。サンプルコードでOPを編集しました。 – Bonnotbh

答えて

1

サーバーとクライアントの両方でJavaを使用している場合は、Jersey + Jacksonを両端で使用します。両側にモデルがある限り、適切に注釈を付けられます。片側から別の側にモデルを渡すことができます。

は、オンラインで多くの例がありますが、私はこのSO質問で始めたい:How to reuse Jersey's JSON/JAXB for serialization?

関連する問題