Я работаю над WebService, построенным из существующего WSDL, используя NetBeans и Glassfish.
NetBeans создал необходимые классы из заданного WSDL.
WSDL определяет некоторые базовые типы данных (например, BaseType) и другие типы данных, которые расширяют их. (например, ExtType1, ExtType2 ...)
Некоторые функции SOAP, описанные в WSDL, принимают параметры типа BaseType, поэтому можно использовать расширенные типы в качестве параметров.
В клиенте веб-службы, написанном на PHP, я могу вызвать метод, используя параметр базового типа:
$response = $ws->__soapCall(
'myFunctionName',
array('theParameter' => array (
'BaseTypeField1' => 'some value',
'BaseTypeField2' => 'some other value'
)
)
);
или с использованием параметра расширенного типа
$response = $ws->__soapCall(
'myFunctionName',
array('theParameter' => array (
'BaseTypeField1' => 'some value',
'BaseTypeField2' => 'some other value',
'ExtTypeField1' => 'some value',
'ExtTypeField2' => 'some other value'
)
)
);
Теперь в сгенерированных классах NetBeans у меня есть объект типа JAXBElement <? extends BaseType>, где ожидается объект BaseType.
Вопрос заключается в следующем: как из вызова веб-метода Java можно определить, является ли объект параметра из клиента веб-службы базовым типом одного или одного из его расширенных типов (и какой из них)?
Я пытался получить некоторую информацию о классе для этого объекта, но он всегда говорит, что это BaseType, поэтому я не могу точно знать, доступны ли ExtTypeField1 и ExtTypeField2.
Спасибо