我有一堆生成的 SOAP 客户端存根,它们在 WSDL 版本之间有所不同。发生这种情况是因为 SOAP 服务器具有不同版本的 Web 服务。
Web 服务版本 1 的存根打包在 soap.stubs.version1 中,版本 2 的存根打包在 soap.stubs.version2 下。
这意味着 WSDL 版本 1 中的 MyStub 可能与版本 2 中的 MyStub 不同。因此,如果我调用返回 MyStub 版本 2 的 SOAP 方法并保存 MyStub 版本 1 中的值,它将“中断”,因为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 和 casts。