2013-04-03 4 views
6

私は複数の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()が呼び出されていて、パッケージがリファクタリングされてももう動作しないため、役に立たない。

答えて

1

おそらく、JAXBバインディングファイルを経由してこれを行うことができます - この質問/答えを見てあります、その答えから、java wsimport rename/different ObjectFactory.java

をオラクルのバインディングファイルのものを見て:http://docs.oracle.com/javaee/5/tutorial/doc/bnbbf.html

+0

私はこのXMLバインディングを使用しました: \t \t \t \t \t \t ただし、XPathエラー:nullが返されます。私はxsdを持っていない、あなたは提案がありますか? – alexroat

+1

ちょっと考えました。「wsimport -p com.mydomain.myapp.a http:/mydomain/wsA.svc?wsdl」と「wsimport -p com.mydomain.myapp.b http:/ mydomain/wsB」を試してみましたか? .svc?wsdl "?これは、バインドファイルを必要とせずに、生成されたすべてのコードを指定されたパッケージに( "-p"スイッチに従って)置きます。 (思っていたほうが早いだろう...) – FOOM

+0

はい、しました。 「2つの宣言がObjectFactoryクラスで衝突を引き起こす」のような多くのエラーがあります。 "同じ名前のクラス/インタフェース" com.anthesi.prova.ExecuteTransmDocModelResponse "はすでに使用されています。クラスのカスタマイズを使用してこの競合を解決してください。 – alexroat

0

は、これが働いていました私のために私のための仕事(私は仮定し、それはObjectFactory、スキャン中に何があるか無視をsetPackagesToScan代わりsetContextPathの使用

@Bean 
public Jaxb2Marshaller marshaller() { 
    Jaxb2Marshaller marshaller = new Jaxb2Marshaller(); 
    marshaller.setPackagesToScan("com.example.api"); 
    return marshaller; 
} 

なかった(春のJavaの設定を使用して)パッケージ全体)。

関連する問題