这是我的配置:
我的REST控制器捕获了一个请求,我通过SOAP将数据发送到我的webservice。然后我访问一些将SOAP请求发送到另一个服务的数据,并将收集的数据返回给发送请求的用户。
在向外部webservice发送SOAP请求之前,我需要设置一些头文件,因此我有一个拦截器,它在构造函数中通过webservice端扩展AbstractSoapInterceptor
Phase.PRE_PROTOCOL
。
在handleMessage()
内部我创建新标头并添加到SoapMessage
但是......我需要设置的数据是在其标头内的REST请求中。因此,为了获取它们,我需要访问HttpServletRequest
,然后我使用HttpServletRequest#getHeader("header_name")
获取标题。
我已经看到了here我可以使用@Context注释,但它在我的Spring(3.0.5)中不可用,或者RESTEasy可能是其他东西,而且这个问题与我的无关联
我试过这个:
HttpServletRequest request = (HttpServletRequest) message.get(AbstractHTTPDestination.HTTP_REQUEST);
和
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
但它在黑暗中被击中而且失败了。
编辑:
感谢Abel ANEIROS我添加了:
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
并且能够从HttpServletRequest
获得RequestContextHolder.getRequestAttributes()
但显然它来自我的网络服务,而不是REST
EDIT2:
结构与我想的不同。
它是:休息控制器 - &gt; MyWebService(SOAP) - &gt;外部服务(SOAP)
我在控制器端创建了另一个拦截器,向SOAP消息添加了头文件,现在我正试图在MyWebService端重新获取头文件。