NetBeansとGlassfishを使用して、既存のWSDLから構築されたWebServiceで作業しています。 NetBeansは、指定されたWSDLから必要なクラスを作成しました。 WSDLは、いくつかの基本データ型(BaseTypeなど)とそれを拡張する他のデータ型を定義します。 (例えば、ExtType1、ExtType2 ...) WSDLに記述されているSOAP関数の中には、BaseType型のパラメータを受け付けるものがあるため、拡張型をパラメータとして使用することもできます。 PHPで書かれたWebサービスクライアントでは、一般的なJAXBElementからJavaクラスを検出する方法<? extends >
、私は基本型パラメータを使用してメソッドを呼び出すことができます。
$response = $ws->__soapCall(
'myFunctionName',
array('theParameter' => array (
'BaseTypeField1' => 'some value',
'BaseTypeField2' => 'some other value'
)
)
);
やNetBeansの生成されたクラスで今
$response = $ws->__soapCall(
'myFunctionName',
array('theParameter' => array (
'BaseTypeField1' => 'some value',
'BaseTypeField2' => 'some other value',
'ExtTypeField1' => 'some value',
'ExtTypeField2' => 'some other value'
)
)
);
拡張型パラメータを使用して、私はタイプJAXBElement <のオブジェクトを持っていますか?ベースタイプ>を拡張します。ここでは、BaseTypeオブジェクトが必要です。
質問:Java Webメソッド呼び出し内から、WebサービスクライアントのパラメータオブジェクトがBaseTypeの1つまたは拡張型(およびそれらのいずれか)であるかどうかを確認するにはどうすればよいですか? 私はそのオブジェクトのいくつかのクラスデータ情報を取得しようとしましたが、常にBaseTypeだと言われていますので、ExtTypeField1とExtTypeField2が利用可能かどうかはわかりません。
あなたは次のように値の型を決定することができ、このJAXBElement<? extends BaseType> object
のようなものを持っていることを考えると感謝
オム、私はちょうど クラス<のようなものを試してみましたか? BaseType> klass = object.getValue()。getClass();を拡張します。 klassがBaseTypeかExtType1かどうかをどのように判断できますか?それは常にBaseTypeと言う... – Angelo
私の2番目の命題を読んだことがありますか?いずれにしても、あなたのklassが 'BaseType'と言っているなら、' ExtType1'が 'BaseType'のスーパータイプでない限り' ExtType1'でも 'ExtTypeX'でもなく' BaseType'です。 –
さて、それは 'BaseType'と言います。だから、PHPのWebサービスクライアント側からは、 'BaseType'フィールドだけで、あるいは' ExtType'フィールドでもWebサービス関数を呼び出すとJava側で何の違いもなくなり、常にBaseType '... 私はあなたの第2のアプローチをよく理解していません。 'ExtTypeField1'と' ExtTypeField2'は 'ExtType'のメンバーですので、' value instanceof ExtTypeField1'はどのように動作しますか? – Angelo