我正在使用NetBeans和Glassfish从现有的WSDL构建WebService。 NetBeans已经从给定的WSDL创建了所需的类。 WSDL定义了一些基本数据类型(例如BaseType)和扩展它们的其他数据类型。 (例如ExtType1,ExtType2 ......) WSDL中描述的一些SOAP函数接受BaseType类型的参数,因此也可以使用扩展类型作为参数。
在用PHP编写的Web服务客户端中,我可以使用基类型参数调用方法:
$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类型的对象<?扩展BaseType>,其中需要BaseType对象。
问题是:我如何从Java Web方法调用中确定来自Web服务客户端的参数对象是BaseType中的一个还是一个扩展类型(以及哪些扩展类型)? 我试图检索该对象的一些类数据信息,但它总是说它是一个BaseType,所以我不知道ExtTypeField1和ExtTypeField2是否可用。
由于
答案 0 :(得分:1)
鉴于您有类似JAXBElement<? extends BaseType> object
的内容,您可以确定值的类型如下:
Class<? extends BaseType> klass = object.getValue().getClass();
现在你可以根据对象类型做一些事情,但这并不总是最好的方法。你可能想要的更像是这样:
BaseType value = object.getValue();
if (value instanceof ExtType1) {
ExtType1 field1 = (ExtType1) value;
// we now know that it's an ExtType1
} else if (value instanceof ExtTypeField2) {
ExtType2 field2 = (ExtType2) value;
// we now know that it's an ExtType2
} // etc...