如何从JAX-WS类中提取SOAP头信息?

时间:2012-01-31 04:25:10

标签: java soap header jax-ws

我正在编写一个JAX-WS WebService,但是当涉及从SOAP头中提取信息时,我遇到了一个小绊脚石。我的WebService类使用@WebService注释,我将WebServiceContext注入到类中:

@Resource
private WebServiceContext webServiceContext;

但是我现在有点担心如何提取SOAP头信息。

我正在使用Spring 3,但是还没有看到任何方法/ util类,它们可以解释这个问题。从我在网上看到的情况来看,我可以使用getMessageContext()并投射到SOAPMessageContext,但我发现有很多人在这个级别上失败,抱怨没有提供解决方案的问题。

我还没有尝试过,所以在此之前,我想知道这是否是首选方法,或者是否有更好的技术可供使用。

谢谢,

埃里克

2 个答案:

答案 0 :(得分:2)

我猜你可以使用消息处理程序获取SoapMessageContext。您可以查看回复here

实现像这样的SoapMessageHandler应该有效:

public class SoapHeadersHandler implements SOAPHandler<SOAPMessageContext>
{

  @Override
  public boolean handleMessage(SOAPMessageContext soapMessageContext)
  {
    try
    {
      Object[] headers = soapMessageContext.getHeaders(...);
    }
    catch (SOAPException e)
    {
      // Handle exception
    }

    return true;
  }

}

答案 1 :(得分:1)

在这里发布我的操作,因为它不需要创建额外的类

final HttpServletRequest req = (HttpServletRequest) wsCtxt.getMessageContext().get(MessageContext.SERVLET_REQUEST);
String headerValue = req.getHeader("myHeaderName");