gpt4 book ai didi

Spring WS (DefaultWsdl11Definition) 带有 void 的 HTTP 状态码

转载 作者:行者123 更新时间:2023-12-01 23:07:50 25 4
gpt4 key购买 nike

我们有一个基于 Spring WS 和 DefaultWsdl11Definition 的(工作)SOAP Web 服务。

这基本上是它的样子:

@Endpoint("name")
public class OurEndpoint {

@PayloadRoot(namespace = "somenamespace", localPart = "localpart")
public void onMessage(@RequestPayload SomePojo pojo) {
// do stuff
}
}

它在 Spring 中连接,并且正确处理我们所有的 SOAP 请求。唯一的问题是该方法返回 202 接受 .这不是调用者想要的,他宁愿让我们返回 204 无内容 (或者如果这不可能是空的 200 OK )。

我们的其他端点有一个有效的响应对象,并返回 200 确定 .似乎无效的原因 202 204 可能更合适?

是否可以更改 Spring WS 中的响应代码?我们似乎找不到正确的方法来做到这一点。

我们尝试过但没有成功的事情:
  • 将返回类型更改为:
  • HttpStatus.NO_CONTENT
  • org.w3c.dom.Element <- 不接受
  • 添加@ResponseStatus <- 这是针对 MVC,而不是 WS

  • 有任何想法吗?

    最佳答案

    与我在评论中所写的不同,创建委托(delegate)类型的解决方案可能是最简单的。

    public class DelegatingMessageDispatcher extends MessageDispatcher {
    private final WebServiceMessageReceiver delegate;

    public DelegatingMessageDispatcher(WebServiceMessageReceiver delegate) {
    this.delegate = delegate;
    }

    public void receive(MessageContext messageContext) throws Exception {
    this.delegate.receive(messageContext);
    if (!messageContext.hasResponse()) {
    TransportContext tc = TransportContextHolder.getTransportContext();
    if (tc != null && tc.getConnection() instanceof HttpServletConnection) {
    ((HttpServletConnection) tc.getConnection()).getHttpServletResponse().setStatus(200);
    }
    }
    }
    }

    然后你需要配置一个名为 messageDispatcher的bean这将包装默认 SoapMessageDispatcher .

    @Bean
    public MessageDispatcher messageDispatcher() {
    return new DelegatingMessageDispatcher(soapMessageDispatcher());
    }

    @Bean
    public MessageDispatcher soapMessageDispatcher() {
    return new SoapMessageDispatcher();
    }

    像这样的东西应该可以解决问题。现在,当创建响应时(在返回类型为 void 的情况下),您想要的状态将发送回客户端。

    关于Spring WS (DefaultWsdl11Definition) 带有 void 的 HTTP 状态码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34906204/

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