管理多个SOAP存根版本

时间:2012-06-25 17:10:28

标签: java soap stub

我有一堆生成的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。

1 个答案:

答案 0 :(得分:0)

我设法通过误解Java反射和URLClassLoader解决了这个问题。我基本上做的是:

  • 根据服务器版本,我定义了从哪里获取子文件的包名称
  • 使用URLClassLoader我加载了正确的.class文件
  • 使用反射我调用正确的方法

即使使用不同的存根版本,这也具有即插即用SOAP服务器的巨大优势。版本之间唯一必须保持不变的是方法名称,因此可以通过Class.getMethod获取它们。