0

我正在开发一个应用程序,当它进入 CXFServlet 时,我想用它来捕获 SOAP 请求。在 CXFServlet 处理它之前,我需要对服务器端的 SOAP 信封进行一些处理。

我一直假设 SOAP 信封一旦到达服务器端,就是 HTTPServletRequest 对象中的参数之一。但是看看进来的东西(当然使用调试器),我找不到它。

当客户端将 SOAP 请求发送到服务器时,有人能告诉我 SOAP 请求的去向吗?我知道客户端正在使用 HTTP POST 发送请求,并且我知道服务器正在使用请求中的信息来访问适当的 Web 服务方法,然后将来自该方法的任何返回值放入 SOAP 响应并返回它给客户。我需要知道的是 CXFServlet(或其过滤器之一)在哪里查看以获取 SOAP 信息?它在参数中的某个地方吗?在 servlet 上下文中?过滤器是否会在 SOAP 信息到达 CXFServlet 之前对其进行处理?如何在调用 Web 服务方法之前获取该信封并对其进行处理?

有人请指教...

4

2 回答 2

1

您想访问原始请求吗?如果是,则可以使用 WebServiceContext 对象访问实际的请求或响应对象本身。

首先,在您的服务实现中为 WebServiceContext 声明一个私有字段,并将其注释为资源

@Resource 私有 WebServiceContext 上下文;

然后,在您的实现方法中,您可以访问 MessageContext、HttpServletRequest 和 HttpServletResponse,如下所示:

MessageContext ctx = context.getMessageContext();

HttpServletRequest 请求 = (HttpServletRequest)ctx.get(AbstractHTTPDestination.HTTP_REQUEST);

有关 WebServiceContext 的更多信息,请参见以下网址: http ://docs.oracle.com/javase/6/docs/api/javax/xml/ws/WebServiceContext.html

于 2013-08-20T18:14:29.623 回答
0

如果您需要在 CXFServlet 处理之前拦截请求,您应该考虑开发一个 Servlet过滤器

如果您只想在 CXF 之前处理 SOAP 消息,您可能会使用CXF Interceptor。文档中提到的阶段指示您可以截获消息的点。根据您想要做/改变的事情,您可能需要玩转这些阶段。

CXF 的SoapHeaderInterceptorSoapActionInInterceptor的源代码是开始了解如何使用 SOAP 消息的好地方。

于 2013-08-20T18:50:24.350 回答