我正在尝试为现有服务编写Spring-WS客户端。端点提供了两个非常相似的动作,它们既消耗我的数据,又以简单的对象状态进行响应。我需要同时使用两者。不同之处在于,它们中的一个以HTTP状态代码200响应,另一个以202状态代码响应。在第一种情况下,状态对象已正确解码并从WebServiceTemplate.marshallSendAndReceive()
返回,但在第二种情况下根本未解码,并且该方法返回null。
根据HTTP spec,HTTP状态202被接受,其目的是指示请求已被接收但尚未执行。但是,响应可能仍然包含有用的信息,例如当前请求状态或完成估算。我想得到这个回复。
我尝试调试确切的过程,并注意到我的程序在org.springframework.ws.transport.http.AbstractHttpSenderConnection.hasResponse()
方法中执行了以下代码:
protected final boolean hasResponse() throws IOException {
int responseCode = getResponseCode();
if (HttpTransportConstants.STATUS_ACCEPTED == responseCode ||
HttpTransportConstants.STATUS_NO_CONTENT == responseCode) {
return false;
}
...
}
此代码片段似乎负责从未从202 Accepted响应中获取状态对象。 (或“ 204无内容”响应,但这显然是可以接受的。)
有没有解决的办法?似乎不可能在Bean中覆盖此方法,它标记为final
。
我能找到的最接近答案的是以下SWS JIRA ticket。自2012年8月起,它被标记为“已解决”,但实际上并没有,正如2015年的评论所说。