2015-11-13 25 views
0

我正在做一個任務,我必須使用apache軸的web服務(使用eclips Mars)在Java中創建桌面應用程序。它必須使用我已經創建的現有動態Web項目。 Web項目是在Web界面的(Oracle)數據庫中添加/刪除公司和員工詳細信息。它按需要工作。但是,當創建Web服務時,它不允許我創建Web客戶端。它給出了這樣的錯誤:如何在使用Apche軸的Web服務中使用HashMaps?

IWAB0399E Error in generating Java from WSDL: 
java.io.IOException: ERROR: Missing <soap:fault> element inFault "IOException" 
in operation "IOException", in binding getCompanies 

顯然,它不會允許我從我創建的方法返回HashMap秒。 (當我改變我的整個項目沒有返回HashMap,我可以創建客戶端)但我需要獲得HashMaps。 有沒有辦法從我創建的Web服務中獲得HashMap

我在SO中裁判This question。但我不知道接受的答案是什麼。

編輯:

確定。現在我知道我不能在Web服務中使用HashMaps,因爲它們不能編組和解組。然後我發現了我試過的This question。但問題依然存在。 (我想我沒有正確地使用上面提到的答案。)作爲這個領域的初學者,我實際上不知道如何包裝(或序列化)Hashmap並將其恢復。有人可以舉個例子嗎?

回答

1

您可以嘗試將HashMap包裝到類中,並使用@XmlJavaTypeAdapter創建一個自定義適配器,以允許JAXB正確地生成對象序列化。

public class Response { 
    @XmlJavaTypeAdapter(MapAdapter.class)  

    HashMap<Integer, Student> students; 

    public HashMap<Integer, Student> getStudents() { 
    return students; 
    } 

    public void setStudents(HashMap<Integer, Student> map) { 
    this.students = map; 
    } 
} 

然後只是使用這個類作爲你的web方法的返回值。

查看更多:

Doc API Example

+0

當我用這個,它給了我這個錯誤: '類不能被解析爲type' –

+0

你必須創建一個類。它將包含哈希映射如何被序列化。 –

+0

只需搜索'jaxb自定義適配器'以便了解您必須執行的操作 –