我正在使用NetBeans和Glassfish從現有的WSDL構建WebService。 NetBeans從給定的WSDL創建了所需的類。 WSDL定義了一些基本數據類型(例如BaseType)和擴展它們的其他數據類型。 (例如ExtType1,ExtType2 ...) WSDL中描述的一些SOAP函數接受BaseType類型的參數,因此也可能使用擴展類型作爲參數。如何從泛型JAXBElement中檢測java類<? extends >
$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的類:
在Web服務客戶端,寫在PHP,我可以使用鹼型參數調用一個方法我有一個JAXBElement類型的對象<?擴展BaseType >,其中需要一個BaseType對象。
現在的問題是:如何從Java Web方法調用中確定Web服務客戶端的參數對象是BaseType一個還是一個擴展類型(以及哪些擴展類型)? 我試圖檢索該對象的某些類數據信息,但它總是說它是一個BaseType,所以我不知道ExtTypeField1和ExtTypeField2是否可用。
感謝
嗯,我剛纔試過類似 類<?擴展BaseType> klass = object.getValue()。getClass(); 但我怎麼能確定如果klass是BaseType或ExtType1?它總是說BaseType ... – Angelo 2012-03-22 17:24:24
你讀過我的第二個提議嗎?無論哪種方式,如果你的klass表示它是'BaseType',那麼它就是'BaseType',而不是'ExtType1'和'ExtTypeX'(除非'ExtType1'是一個超類型的'BaseType')。 – 2012-03-22 17:31:46
好的,它是一個'BaseType'。因此,從PHP Web服務客戶端看來,只使用'BaseType'字段或甚至使用'ExtType'字段調用Web服務函數在Java端沒有任何區別,並且我總是獲得一個'BaseType '... 我不明白你的第二種方法。 'ExtTypeField1'和'ExtTypeField2'是'ExtType'的成員,那麼'instanceof ExtTypeField1'這個值怎麼能工作呢? – Angelo 2012-03-22 17:39:13