Возврат одного результата, но нескольких типов из веб-службы? На яве?
Мне нужно вернуть несколько значений из веб-службы как...
Object GetResults(){}
Объект может быть нескольких разных типов. Как добавить эти известные типы в контракт веб-службы? Есть ли аннотация, которой я могу украсить свой интерфейс?
ПРИМЕЧАНИЕ: я использую Java с CXF, Aegis, с аннотациями.
Другой вариант той же проблемы - возврат абстрактного класса, но при этом необходимо отправить конкретный тип.
Employee getEmployee(string name) {}
abstract class Employee {}
class SalariedEmployee extends Employee {}
В WCF и .NET есть функция KnownTypes, которая обрабатывает эти сценарии.
Есть ли что-то похожее в Java с CXF, Aegis, с аннотациями?
1 ответ
В JAXB есть аннотация под названием @XmlSeeAlso. Это может быть использовано для украшения вашего базового класса Employee типами-потомками. К сожалению, привязка данных Aegis не использует эту аннотацию. Однако привязка данных JAXB по умолчанию в CXF учитывает эту аннотацию. Это решает сценарий SalariedEmployee выше. Эквивалентом этого является.NET - атрибут KnownType.
К сожалению, первый вариант использования, в котором мы возвращаем Object и должен гарантировать, что все типы, которые действительны для возврата из веб-службы, представлены в WSDL, не представляется возможным при первой разработке кода. В.NET вы можете использовать атрибут ServiceKnownType для предоставления этих типов. К сожалению, это просто не представляется возможным в Java с первой разработкой кода.