首页 > 解决方案 > Spring 的 DeferredResult 不适用于 Spring-ws (SOAP)

问题描述

我们想在 spring-ws 中使用 DeferredResult 处理一个soap请求。我们无法更改 wsdl。

下面是我们尝试的代码片段:

@PayloadRoot(
namespace=NAMESPACE_URL,
localPart="ABC")
@ResponsePayload
Public CallPerson(@RequestPayload CallRequest,
@SoapHeader("{"+NAMESPACE_HEADER_URL+"}Credentials")SoapHeaderElementheaderDetails){

    DeferredData deferredData = new DeferredData();
    // Some other thread would call deferredData.setResult() to resume control & return
    return deferredData;
}

class DeferredData extends DeferredResult<String>

这里的 DeferredData 类扩展了 DeferredResult。我们预计此调用将等待但未完成,因为未调用 deferredData.setResult()。但这并没有像预期的那样发生。API 调用直接返回,无需等待。我在控制台中看不到任何错误。

我在 Spring REST 控制器中尝试了同样的事情,它运行良好。

我们希望 deferredData.setResult() 稍后发生。期望的是 SOAP 调用应该一直等到 setResult() 被调用。

关于我们如何在 SOAP 请求中使用 DeferredResult 的任何指针?

标签: springspring-bootsoap

解决方案


推荐阅读