我目前正在用Spring WS开发SOAP客户端。我跟着指南/教程,一切工作正常。除了一件事情,错误处理。Spring WS客户端处理HTTP错误
我无法控制我发送消息的SOAP端点。所以我想在事情出错的情况下做一些很好的异常处理。我在没有指望的测试场景中遇到了一些HTTP错误。我不知道如何处理它们。
例如:
我发送SOAP消息到错误的URL。其中返回HTTP 405方法不允许。 (我发送POST到仅GET的URL,这是一个配置错误,但仍然是一个错误)。 在正文中实际上是来自SOAP端点的HTML错误页面。当然,Spring不能处理这个消息并抛出一个异常。在堆栈跟踪中,它显然是405.但我想提取返回的错误代码并以其他方式记录(或者将它发回给发送SOAP消息请求的用户)。
这些是发送SOAP消息后,我收到一些日志消息(省略了其它记录):
org.apache.http.wire : << "HTTP/1.1 405 Method Not Allowed[\r][\n]"
o.a.h.impl.conn.DefaultClientConnection : Receiving response: HTTP/1.1 405 Method Not Allowed
org.apache.http.headers : << HTTP/1.1 405 Method Not Allowed
是否有任何方式来捕捉和提取这些HTTP错误代码? 如果需要更多信息,请询问。我愿意提供尽可能多的信息,但我不知道此时还要发布什么内容。
编辑:或者有什么办法用集成测试来模拟/测试这个吗?我无法继续发送消息到真正的SOAP端点。我从集成测试中得不到与真实测试相同的输出(引导应用程序并将消息发送到真正的SOAP端点)。我已经将集成测试的日志记录级别设置为与真实测试环境相同。
谢谢!
我试过这个实现,它似乎工作,但不是最佳。我尝试在此方法中实现'log.error(“Error message:”+ webServiceConnection.getErrorMessage());''。它在我的日志中记录以下错误:'错误消息:[405]'。我将不得不从getErrorMessage()返回的字符串中去掉响应代码。我实际上想要捕获HTTP头,它的HTTP响应代码由'org.apache.http.headers'记录,因为它看起来更健壮。任何方式来做到这一点? – Clemenz
我编辑了我的答案,不知道您是否需要特定的状态代码,或仅仅通过检测soap故障就足以满足您的要求。 – artemisian
问题是,soap端点没有返回SOAP错误。但实际的HTTP错误代码与HTML错误页面。这就是为什么我需要捕获HTTP返回代码,以检查它是否是4xx或5xx。因为我不打算解析HTML文件。我已经在试用ClientInterceptor。也许今天我会得到一个解决方案。感谢寿! – Clemenz