【发布时间】:2015-05-04 14:45:32
【问题描述】:
故事就是这样,我有一个使用 org.apache.cxf 插件提供 SOAP 服务的播放框架应用程序。在我的路线文件中,我有以下内容:
GET /soap/*path org.apache.cxf.transport.play.CxfController.handle(path)
POST /soap/*path org.apache.cxf.transport.play.CxfController.handle(path)
这路由到我自己的一个函数,该函数将路径转换为另一个请求,该请求将访问我常用的控制器。我们通过建立一个WSRequestHolder 对象来做到这一点。我们设置标题、查询参数等。
这曾经在 play 2.2 中运行良好,但升级到 2.3.8 后,似乎出现了问题。我已经追踪到这一行:
Promise<WSResponse> responsePromise = request.get();
WSResponse response = responsePromise.get(2000);
当我们发出请求时(调用 response.Promise.get 时),无论超时设置如何,调用都会超时。我正在使用一个基本的登录请求进行测试,它曾经在不到 200 毫秒的时间内做出响应。我已经使用邮递员复制了请求参数,并且该请求似乎可以正常工作,但是当它从我的网络服务中被触发时,它会超时。
我可能在升级到 2.2 时遗漏了一些东西,但我什至不确定要调试什么。它显然没有击中控制器,并且在 DEBUG 级别打开播放日志甚至看不到请求。
任何帮助将不胜感激。
更新:
我已经在 dev 和 prod 模式下对其进行了测试。两者似乎都在同一个地方失败。
【问题讨论】:
-
这是在开发模式下吗? Play 在开发模式下串行处理请求,所以如果你对自己的应用程序进行 WS 调用并阻塞,我很确定它注定会超时。
-
有趣,它处于开发模式...此外,这在 play 2.2 中有效,所以如果在迁移指南中提到这一点会很好。我想知道是否有办法绕过该限制而不切换到 prod 模式(这也禁用自动重新加载)
-
另外,切换到 application.mode=prod 仍然会出现问题。
-
除非我仍然不知道如何将 application 设置为 prod...我认为将 application.mode=prod 放入 application.conf 文件中就可以了,但日志仍然说 play以开发模式启动。
-
activator start看看它在那里的表现会很有趣。
标签: web-services playframework cxf playframework-2.3