gpt4 book ai didi

java - 管理多个 SOAP stub 版本

转载 作者:行者123 更新时间:2023-12-01 05:16:04 24 4
gpt4 key购买 nike

我有一堆生成的 SOAP 客户端 stub ,它们在 WSDL 版本之间有所不同。发生这种情况是因为 SOAP 服务器的 Web 服务版本不同。

Web 服务版本 1 的 stub 打包在soap.stubs.version1 中,版本2 的 stub 打包在soap.stubs.version2 中。

这意味着 WSDL 版本 1 中的 MyStub 可能与版本 2 中的 MyStub 不同。因此,如果我调用返回 MyStub 版本 2 的 SOAP 方法并保存 MyStub 版本 1 中的值,它将“中断” ,因为 xml 响应无法正确映射到 stub 的属性。

因此,我需要将类类型与 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 */
}

每次我为新版本生成 stub 时,我都需要复制所有逻辑以使用新的 stub 。有时唯一改变的是属性。

因此,我如何根据 SOAP 服务器使用正确的 stub ,而不必重新实现该“类”的所有逻辑?

我考虑过使用 Object,但这需要分配 if instanceof 和强制转换。

最佳答案

我已经通过 Java 反射和 URLClassLoader 的错误成功解决了这个问题。我基本上做的是:

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

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

关于java - 管理多个 SOAP stub 版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11193977/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com