【问题标题】:Managing multiple SOAP stubs versions管理多个 SOAP 存根版本
【发布时间】:2012-06-25 17:10:28
【问题描述】:

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

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

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

【问题讨论】:

    标签: java soap stub


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2010-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-23
      • 1970-01-01
      • 2012-04-25
      • 2018-02-17
      • 1970-01-01
      相关资源
      最近更新 更多