在HashMap作为参数传递时生成WebService时获取异常

时间:2011-06-13 11:27:34

标签: java web-services hashmap jax-rpc

我正在尝试创建一个Web服务,它接受一个VO,VO包含一个Map类型的参数。我编写了这个简单的服务并尝试从中创建Web服务。在创建Web服务时,我得到了不受支持的异常。

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

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

我得到的错误:

通过服务类使用的值类型的字段或属性具有JAX-RPC 1.1规范不支持的数据类型“java.util.Map”。该类型的实例可能无法正确序列化或反序列化。可能会导致数据丢失或Web服务完全失败。

我不确定这有什么问题。任何帮助或解决方法?

提前感谢。

1 个答案:

答案 0 :(得分:1)

link显示JAX-RPC 1.1和Map支持的数据类型(并且不支持其所有子类)。

JAX-RPC 1.1规范,第5.1.3节规定:

  

其他标准Java类(for   示例:Java中的类   Collection Framework)使用映射   可插拔的序列化器和   解串器。请参阅第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中的复杂类型的示例。