Получение исключения при генерации WebService, когда HashMap передается в качестве параметра - PullRequest
0 голосов
/ 13 июня 2011

Я пытаюсь создать веб-сервис, который принимает VO, а VO содержит параметр типа Map. Я написал этот простой Сервис и пытался создать из него веб-сервис. При создании веб-сервиса я получаю исключение, что он не поддерживается.

 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. Экземпляры типа могут не сериализоваться или десериализоваться правильно. Это может привести к потере данных или полному отказу веб-службы.

Я не уверен, что с этим не так. Любая помощь или обход?

спасибо заранее.

1 Ответ

1 голос
/ 13 июня 2011

Эта ссылка показывает типы данных, поддерживаемые JAX-RPC 1.1 и Map (и все его подклассы не поддерживаются).

Спецификация JAX-RPC 1.1, раздел 5.1.3:

Другие стандартные классы Java (для пример: классы в Java Collection Framework) отображаются с использованием сменные сериализаторы и deserializers. Обратитесь к главе 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.

...