私は複数のWebサービスを持っており、それらを使用するクライアントを生成する必要があります。 Netbeansでは、2つのwsdlを渡すウィザード「新しいWebサービスクライアント」を使用します。出力Netbeansを見てみると、それぞれのwsimportが呼び出されます。wsimport:複数のwsdlがObjectFactoryを上書きする
wsimport http:/mydomain/wsA.svc?wsdl
wsimport http:/mydomain/wsB.svc?wsdl
どちらもAとB、同じパッケージcom.mydomain.myappを生成する(私は彼らが同じ名前空間に定義されていると思います)ので、私はAとBのスタブクラスのセットは、同じパッケージにマージされます。
しかし、wsimportもWebサービスごとにObjectFactoryを作成するので、Aの後にBのスタブを生成すると、B定義に関連するObjectFactoryのみが取得されます(最初のAが上書きされるため)。逆に、注文を切り替えると、AのObjectFactoryは存続します。
問題は、私は両方のWebサービスAとB
のタイプについてJAXBElementsラッピングCLASインスタンスを作成するために、両方のObjectFactoriesを必要とするということですが、JavaパッケージにAの名前空間をマッピングする方法はありますし、取得するためにもう1つのB
com.mydomain.myapp.a
com.mydomain.myapp.b
したがって、両方のObjectFactoriesを保持しますか?
単純なリファクタリングは、内部的にgetClass()が呼び出されていて、パッケージがリファクタリングされてももう動作しないため、役に立たない。
私はこのXMLバインディングを使用しました: \t \t \t \t \t jxb:package> \t jxb:bindings> jxb:bindings>ただし、XPathエラー:nullが返されます。私はxsdを持っていない、あなたは提案がありますか? –
alexroat
ちょっと考えました。「wsimport -p com.mydomain.myapp.a http:/mydomain/wsA.svc?wsdl」と「wsimport -p com.mydomain.myapp.b http:/ mydomain/wsB」を試してみましたか? .svc?wsdl "?これは、バインドファイルを必要とせずに、生成されたすべてのコードを指定されたパッケージに( "-p"スイッチに従って)置きます。 (思っていたほうが早いだろう...) – FOOM
はい、しました。 「2つの宣言がObjectFactoryクラスで衝突を引き起こす」のような多くのエラーがあります。 "同じ名前のクラス/インタフェース" com.anthesi.prova.ExecuteTransmDocModelResponse "はすでに使用されています。クラスのカスタマイズを使用してこの競合を解決してください。 – alexroat