所以这就是故事,我有一个使用org.apache.cxf插件来提供SOAP服务的play框架应用程序。在我的路线文件中,我有以下内容:
GET /soap/*path org.apache.cxf.transport.play.CxfController.handle(path)
POST /soap/*path org.apache.cxf.transport.play.CxfController.handle(path)
这会路由到我自己的一个函数,它将路径转换为另一个将触及我常用控制器的请求。我们通过构建WSRequestHolder
对象来实现此目的。我们设置标题,查询参数等。
这曾经在游戏2.2中运行得相当好,但随着升级到2.3.8,似乎存在问题。我已将其追溯到这一行:
Promise<WSResponse> responsePromise = request.get();
WSResponse response = responsePromise.get(2000);
当我们发出请求时(调用response.Promise.get时),无论超时设置如何,调用都会超时。我正在使用基本登录请求进行测试,并且它用于在200毫秒内响应。我已经使用postman复制了请求参数,并且请求似乎在它自己的工作正常,但是当它从我的webservice被解雇时,它会超时。
我可能在升级到2.2时遗漏了一些东西,但我甚至不确定要调试什么。它显然没有击中控制器,并且在DEBUG级别打开播放日志甚至看不到请求。
任何帮助都将不胜感激。
更新
我在dev和prod模式下测试过它。两者似乎都失败了。
答案 0 :(得分:0)
我明白了。问题在于,在我们重定向请求期间,我们重新添加了Content-Length标头两次,一次是长度,一次是零(试图强制重新生成长度)。事实证明这在play 2.2中起作用,但导致它在2.3中挂起。确保仅添加Content-Length标头一次可防止请求挂起。 Dev / Prod模式经过测试和运行。