【发布时间】:2014-04-29 15:13:23
【问题描述】:
我有一个简单的 Apache Camel EIP 流程,其中入口点是 spring-ws Web 服务。如何访问服务请求的 HttpServletRequest 对象?
from("spring-ws:uri:http://localhost:8080/test-ws-1.0/ws/TestService?endpointMapping=#endpointMapping")
.log("body is:\n${body}")
.process(new HttpRequestParserProcessor())
我希望能够从 HttpRequestParserProcessor 中获取请求的用户主体名称和请求的远程 IP 地址。当我调试处理器时,Exchange 的 in 对象显示为 SpringWebserviceMessage 对象。
提前致谢, 下午。
【问题讨论】:
-
对于 HTTP 组件,这是有效的:
HttpServletRequest request = exchange.getIn().getBody(HttpServletRequest.class);。也许你可以试一试。 -
嗨@Peter,在我的例子中,body 是一个 SpringWebserviceMessage 对象,如果我尝试按照你的建议进行调用,我会收到请求为空。
-
对不起,我之前的评论有误。调试时exchange.getIn()是SpringWebserviceMessage对象,exchange.getIn().getBody()是DOMSource对象。
-
使用 CXF 你可以试试
org.apache.cxf.message.Message cxfMessage = in.getHeader(CxfConstants.CAMEL_CXF_MESSAGE, org.apache.cxf.message.Message.class);和ServletRequest request = (ServletRequest)cxfMessage.get("HTTP.REQUEST");,见svn.apache.org/repos/asf/camel/trunk/components/camel-cxf/src/… -
我为您的问题添加了答案,包括我找到的 Spring Webservice 解决方案。