0

我正在尝试创建一个采用 VO 并且 VO 包含 Map 类型的参数的 web 服务。我写了这个简单的服务,并试图从中创建 web 服务。在创建 web 服务时,我遇到了不支持的异常。

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

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

我得到的错误:

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

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

提前致谢。

4

1 回答 1

1

链接显示 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 中的复杂类型的示例。

于 2011-06-13T11:50:13.650 回答