我有一个Apache camel应用程序,它与Web服务进行通信。这纯粹是一个集成(中介)应用程序。我们接受REST请求并将其转换为SOAP消息(使用VM模板)并调用Web服务。接收来自Web服务的响应,将其转换为JSON并发送回我们的客户端。
REST ---->转换为SOAP req(Velocity模板)---->调用WS ---->接收响应---->转换为JSON ---->返回回应来电者。
我们正在使用servlet端点来接收来自客户端的请求。我们可以在调用Web服务之前从交换中获取HttpSession对象,如下所示:
HttpServletRequest req = exchange.getIn().getBody(HttpServletRequest.class);
HttpSession session = req.getSession();
然而,问题是我在收到来自Web服务的响应后无法从交换中获取HTTPSession。如果我在调试模式下检查Exchange对象,则Exchange.getIn()的类型为DefaultMessage,而不是HttpMessage。这就是我认为我放松了Request和response对象的原因。
我尝试将交换模式设置为InOut,但这没有帮助。 我能找到的唯一解决方案是将消息的原始主体存储在标题或属性中,并在最后检索它。但我认为必须有一个更好的解决方案。
有人可以帮忙吗?
注意:我们需要HttpSession,以便我们可以存储相应的会话信息,例如在WS上为我们的请求创建的会话创建的会话ID。我们无法将在WS上创建的会话信息传递给我们的调用者,并且需要在我们的应用程序上放置一个位置来保存此映射信息。 HttpSession满足此要求。还有更好的办法吗?
答案 0 :(得分:0)
您可以将http会话存储为交换属性,将这些属性存储在交换机中,以便您可以在需要时在路径中访问它。