Java 管理多个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服务器相关联 复制每个版本的逻辑是不可能的: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服务器相关联
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文件
- 使用反射调用正确的方法