Наследование по параметрам метода не работает - PullRequest
1 голос
/ 13 сентября 2010

У меня есть тестовый веб-сервис со следующими методами и классами,

Метод

public String addPerson(Person p) {
if(p instanceof Employee) {
return "Employee"; 
}
return "Person";
}

Примечание. Метод аннотируется @WebMethod, @WebParam, как и веб-сервис с @Веб-сервис.

Классы

Class Person {
public String name;
}

Class Employee extends Person{
public int employeeNo;
}

Наблюдения

  1. Несмотря на то, что клиент отправляет сериализованный объект Employee, веб-служба всегда принимает его как объект Person.Я проверил пакет мыла на клиенте с помощью инструмента firebug, номер сотрудника присутствует в полезной нагрузке.Я также проверяю MESSAGE мыла на сервере и их я не вижу атрибута номера сотрудника.

Вопрос

  1. Это ожидаемое поведение?Я надеюсь, что это не так.
  2. Можно ли как-то справиться с этой задачей без написания пользовательских SOAP-декодеров?

Ответы [ 2 ]

0 голосов
/ 16 сентября 2010

После глубокого копания мы обнаружили, что проблема была в клиентской стороне, которая сгенерированный пакет SOAP, который не работает в таком сценарии. Ожидается, что клиент поместить имя (имена) типа производного объекта (ов) (Employee) в соответствующий элемент к операции, но клиент, который мы используем, не делает этого, из-за которого "javax.xml.bind.UnmarshalException: невозможно создать экземпляр ..." сообщается.

0 голосов
/ 13 сентября 2010

Я думаю, что так и должно быть.Потому что при отправке данных информация о наследовании теряется, и она будет декодировать данные только до типа, объявленного в вашем методе webservice, в объект Person.

...