我有一堆生成的SOAP客户端存根,它们在WSDL版本之间有所不同。发生这种情况是因为SOAP服务器具有不同版本的Web服务。
Web服务版本1的存根包装在soap.stubs.version1和soap.stubs.version2下的版本2的存根中。
这意味着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,但这需要分配ifofof和casts。
答案 0 :(得分:0)
我设法通过误解Java反射和URLClassLoader解决了这个问题。我基本上做的是:
即使使用不同的存根版本,这也具有即插即用SOAP服务器的巨大优势。版本之间唯一必须保持不变的是方法名称,因此可以通过Class.getMethod获取它们。