2011-06-13 34 views
0

我正在嘗試創建一個需要VO和VO的web服務,其中包含Map類型的參數。我寫了這個簡單的服務,並試圖從中創建web服務。在創建web服務時,我收到了不支持的異常。在將HashMap作爲參數傳遞時生成WebService時獲取異常

public MyVO myService(MyVO vo) { 
    return vo; 
} 

public class VO{ 
    private String name; 
    private Map<String, Serializable> paramsMap; 
} 

錯誤,我越來越:

經由服務類使用的值類型的字段或屬性具有不被JAX支持的數據類型,「java.util.Map」 -RPC 1.1規範。該類型的實例可能無法正確序列化或反序列化。可能會導致數據丟失或Web服務完全失敗。

我不確定這有什麼問題。任何幫助或解決?

在此先感謝。

回答

1

這個link顯示了JAX-RPC 1.1和Map支持的數據類型(以及它的所有子類都不被支持)。

JAX-RPC 1.1規範,第5.1.3節規定:

其他標準Java類( 例如:班在Java 收集框架)使用 可插拔串行和 解串器映射。有關可插入串行器 和解串器的更多詳細信息,請參見第15章 (「可擴展類型映射」)。

一個解決方法是有鍵/值對的JavaBean的陣列,可以通過一個參數。

實施例:

public final class KVPair<T> implements Serializable { 
    private String key; 
    private T value; 

    //Getters and setters 
} 

並有一個具有地圖KVPair的服務。

service.consume(KVPair[] map); 

IBM DeveloperWorks示出了如在WSDL複雜類型映射陣列的示例。

+1

謝謝精英。但是在http://download.oracle.com/javaee/1.3/tutorial/doc/JAXRPC2.html#wp83185上提到它支持HashMap等。現在我更加困惑了。如果我們可以使用HashMap,那麼也很好。但是,當我使用HashMap並嘗試生成Web服務時,它會告訴原始問題中提到的相同的警告消息。但是,當web服務代理生成它採取HashMap。我不知道爲什麼這種行爲.. – 2011-06-13 13:21:21

+0

@java_enthu,你正在使用JEE 1.3文檔,而我正在使用JEE 1.4文檔。我甚至下載了規範來引用規範。我假設你使用Apache Axis 1.4,它爲你的HashMap創建一個類型映射(因爲它是可序列化的)。 – 2011-06-13 13:25:24

+0

我很感謝你的快速反應,非常感謝:)我在eclipse中使用了Apache Axis 1.5.5。與JDK 1.6。你認爲使用Axis2的1.3版本,我將能夠支持地圖? (事實上​​我無法下載1.3) – 2011-06-13 13:30:13

相關問題