【发布时间】:2016-01-20 17:08:01
【问题描述】:
我们有一个基于 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 Accepted。这不是调用者想要的,他宁愿让我们返回 204 No Content(或者如果这不可能,则返回一个空的 200 OK )。
我们的其他端点有一个有效的响应对象,并返回 200 OK。当 204 可能更合适时,似乎 void 导致 202?
是否可以在 Spring WS 中更改响应代码?我们似乎找不到正确的方法来做到这一点。
我们尝试过但没有成功的方法:
- 将返回类型更改为:
- HttpStatus.NO_CONTENT
- org.w3c.dom.Element
- 添加 @ResponseStatus
有什么想法吗?
【问题讨论】:
-
202 表示请求已被接受但处理未完成。我想这是由于
void返回类型,DefaultMethodEndpointAdapter然后没有调用handleMethodReturnValue,因为没有什么可处理的。我想返回 200(或其他)的最简单方法是创建自定义SoapMessageDispatcher并重新实现receive方法。您可能需要复制整个类(层次结构),因为该类非常封闭(最终方法)。
标签: spring web-services soap spring-ws http-status-codes