Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 管理多个SOAP存根版本_Java_Soap_Stub - Fatal编程技术网

Java 管理多个SOAP存根版本

Java 管理多个SOAP存根版本,java,soap,stub,Java,Soap,Stub,我有一堆生成的SOAP客户端存根,它们在WSDL版本之间有所不同。这是因为SOAP服务器的web服务版本不同 web服务版本1的存根打包在soap.Stubs.version1中,版本2的存根打包在soap.Stubs.version2下 这意味着WSDL版本1中的MyStub可以不同于版本2中的MyStub。因此,如果我调用一个SOAP方法,返回MyStub的版本2并保存MyStub的版本1中的值,它将“中断”,因为xml响应无法正确映射到存根的属性 因此,我需要将类类型与SOAP服务器相关联

我有一堆生成的SOAP客户端存根,它们在WSDL版本之间有所不同。这是因为SOAP服务器的web服务版本不同

web服务版本1的存根打包在soap.Stubs.version1中,版本2的存根打包在soap.Stubs.version2下

这意味着WSDL版本1中的MyStub可以不同于版本2中的MyStub。因此,如果我调用一个SOAP方法,返回MyStub的版本2并保存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和cast。

我已经设法用Java反射和URLClassLoader解决了这个问题。我基本上做的是:

  • 根据服务器版本,我定义从何处获取子项的包名
  • 我使用URLClassLoader加载正确的.class文件
  • 使用反射调用正确的方法
这具有即插即用SOAP服务器的巨大优势,即使具有不同的存根版本。版本之间唯一必须保持不变的是方法名,因此可以通过Class.getMethod获取它们