WSDL バージョン間で異なる生成済み SOAP クライアント スタブが多数あります。これは、SOAP サーバーの Web サービスのバージョンが異なるために発生します。
Web サービス バージョン 1 のスタブは soap.stubs.version1 にパックされ、バージョン 2 のスタブは soap.stubs.version2 の下にパックされます。
これは、WSDL のバージョン 1 の MyStub がバージョン 2 の MyStub と異なる可能性があることを意味します。したがって、MyStub のバージョン 2 を返し、MyStub のバージョン 1 の値を保持する SOAP メソッドを呼び出すと、「壊れる」ことになります。 xml 応答をスタブの属性に正しくマップできません。
このため、クラス タイプを SOAP サーバーに関連付ける必要があります。
バージョンごとにロジックを複製することは、単純に不可能です。
if(SoapServer.version==1)
{
soap.subts.version1.MyStub result = SoapServer.getFoo();
/* rest of the logic using result of type soap.subts.version1.MyStub */
}
else if(SoapServer.version==2)
{
soap.subts.version2.MyStub result = SoapServer.getFoo();
/* rest of the logic using result of type soap.subts.version2.MyStub */
}
新しいバージョンのスタブを生成するたびに、新しいスタブを使用するためにすべてのロジックを複製する必要があります。変更されるのは属性だけの場合もあります。
そのため、その「クラス」のすべてのロジックを再実装することなく、SOAP サーバーに応じて適切なスタブを使用するにはどうすればよいでしょうか?
Object を使用することも考えましたが、if instanceof とキャストの割り当てが必要になります。