我们的应用程序是第三方 Web 服务(也是 Axis 1)的 Web 服务客户端( Axis 1)。我们已经使用它好几年了。
几周以来,我们(作为客户端)在调用 Web 服务时有时会收到 HTTP 状态 400(错误请求)或读取超时。
奇怪的是,服务的 access.log 显示的是请求或响应的一部分,而不是 URL。看起来像这样(看起来像请求字符串的结尾)
x.x.x.x -> y.y.y.y:8080 - - [timestamp] "POST /webservice HTTP/1.0" 200 16127 0
x.x.x.x -> y.y.y.y:8080 - - [timestamp] "POST /webservice HTTP/1.0" 200 22511 1
x.x.x.x -> y.y.y.y:8080 - - [timestamp] "il=\"true\"/><nsl:text xsi:type=\"xsd:string\" xsi:nil=\"true\"/></SOAPSomeOperation></soapenv:Body></soapenv:Envelope> Axis/1.4" 400 299 0
或者(看起来像请求的一些字符串)
x.x.x.x -> y.y.y.y:8080 - - [timestamp] ":string\">some text</sometag><othertag>moretext" 400 299 0
或者在其他一些情况下,它看起来像是两个请求放在一起(...意味着 xml 字符串被遗漏):
x.x.x.x -> y.y.y.y:8080 - - [timestamp] "...</someop></soapenv:Body></soapenv:Envelope>:xsd=\"http://www.w3.org/2001/XMLSchema\"...</soapenv:Body></soapenv:Envelope>" 400 299 0
应用程序日志没有给出任何提示。此类调用的频率为对该服务的所有调用的 1%。到目前为止,我所知道的唯一区别在于,这种情况发生是因为操作通知我们服务 URL 由于“服务器迁移”而发生了更改。
有人经历过这样的现象吗?有人知道出了什么问题以及如何解决吗?
谢谢
最佳答案
我们没有这种确切的行为,但我们遇到了 Axis 1 的几个缺陷,这让我们遭受了很多痛苦。有问题的类之一是 Axis 的 HttpSender,它似乎不是线程安全的,并且还有多个 bugs 。
访问日志错误的不规则性可能意味着它实际上与线程安全性相关。无论如何,如果你有机会摆脱 Axis 1,那就立即去做。它已经有将近 5 年历史了,实际上已经是死产品了,有很多缺陷没有修复。
关于java - Axis Webservice 调用有时会失败,access.log 显示内容!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2653932/