2013-04-17 53 views
0

我目前正在使用Java中使用JAX-WS webservices的項目。 全局主題是這樣的:用戶在本地創建一個對象,比如代理。他稱第一個webservice並將其代理傳遞給web服務。 Web服務處理代理(修改其屬性:例如生命值),並將其傳遞給另一個Web服務。這個調用是從第一個webservice完成的,所以用戶在這個過程中沒有任何事情要做。通過JAX-WS WebService傳遞時截斷的Java對象

經過幾個Web服務鏈後,用戶檢索已修改的代理。

我的項目的目的是設計2份:

  • 一個框架,指定先前所描述的現象:使用我的web服務,代理和遷移的
  • 一個演示應用程序過程框架。主要區別在於增加了一個GUI和一個新類別頭像,擴展代理。因此,遷移過程仍然由「框架」和Agent對象完成。

下面的代碼顯示了我怎麼稱呼我的web個簡單的例子,主持我的頭像,然後檢索從服務代理:

// connection to the server 
URL endpoint= new URL("http://SERVER/tomcat/KiwiBidonDynamique/ServiceWebBidonDeDadou?wsdl"); 
QName serviceName=new QName("http://avatar/","ServeurKiwiBidonService"); 
Service service = Service.create(endpoint, serviceName); 
WebService port = service.getPort(WebService.class); 


Avatar myAvatar = new Avatar(1, "Jack the Ripper"); 
port.hostAgent(myAvatar); 

// some process on the service... 

Avatar myAvatarTransformed = (Avatar) port.getAgent("AgentNumberOne"); 

當我這樣做,我得到一個異常的最後一行:

Exception in thread "main" java.lang.ClassCastException: agent.Agent cannot be cast to avatar.Avatar 

很多日誌閱讀後,我想原因是Web服務的工作方式。被調用時,參數中給出的頭像在我的JVM中編組,然後在服務上解組,但服務僅在解組時構造代理。這樣做會截斷特定於頭像的數據。然後,當我嘗試從服務中檢索我的代理時,無法將其轉換爲頭像。

有沒有辦法在處理服務代理時保留頭像信息? 我能以某種方式編寫自己的編組/解編嗎?

非常感謝。

回答

0

如果您的web服務將Agent元素定義爲傳入數據,則不會將其解組爲一個繼承類。我想這可能會寫你自己的編組,但它不像聽起來那麼容易(我會建議反對它)。要麼爲每個類編寫一個單獨的WS(messy),要麼使傳入的數據具有可以存儲其他結構的元素,如type:any(也是messy)。事實是WS不完全是OO。

+0

非常感謝。這些是我開始想到的選項......我一直在嘗試使用XmlAdapter實現自定義編組:http://stackoverflow.com/a/7282020/2291104 –