我正在处理一个应用程序,当它进入CXFServlet时,我想用它来捕获SOAP请求。在CXFServlet处理之前,我需要对服务器端的SOAP信封进行一些处理。
我一直认为SOAP信封一旦到达服务器端,就是HTTPServletRequest对象中的参数之一。但是看看会发生什么(当然使用调试器),我找不到它。
当客户端将SOAP请求发送到服务器时,有人可以告诉我SOAP请求的位置吗?我知道客户端正在使用HTTP POST发送请求,我知道服务器正在使用请求中的信息来访问相应的Web服务方法,然后将方法中的任何返回值放入SOAP响应并返回它给客户。我需要知道的是CXFServlet(或其中一个过滤器)在哪里获取SOAP信息?它在参数中的某个地方吗?在servlet上下文中?过滤器在到达CXFServlet之前是否处理SOAP信息?在调用Web服务方法之前,如何获取该信封并对其进行操作?
有人请指教......
答案 0 :(得分:1)
您想要访问原始请求吗?如果是,则可以使用WebServiceContext对象访问实际的请求或响应对象本身。
首先,在服务实现中为WebServiceContext声明一个私有字段,并将其注释为资源
@Resource 私有WebServiceContext上下文;
然后,在您的实现方法中,您可以按如下方式访问MessageContext,HttpServletRequest和HttpServletResponse:
MessageContext ctx = context.getMessageContext();
HttpServletRequest request =(HttpServletRequest)ctx.get(AbstractHTTPDestination.HTTP_REQUEST);
有关WebServiceContext的更多信息,请参阅以下URL: http://docs.oracle.com/javase/6/docs/api/javax/xml/ws/WebServiceContext.html
答案 1 :(得分:0)
如果您需要在CXFServlet处理请求之前拦截请求,您应该考虑开发一个Servlet Filter。
如果您只想在CXF之前处理SOAP消息,则可以使用CXF Interceptor。文档中提到的阶段表明您可以拦截消息的要点。根据您想要做/改变的内容,您可能需要使用各个阶段。
CXF的SoapHeaderInterceptor或SoapActionInInterceptor的来源将是开始研究如何使用SOAP消息的好地方。