如何在apache cxf中的soap头和web服务方法之间共享数据

时间:2013-11-05 12:43:03

标签: java apache soap cxf

我有一个使用Apache CXF开发的SOAP Web服务。 Web服务将在SOAP头中传递一个参数,我必须将该参数传递给Web服务方法。如何在Web服务方法中获取此参数? 例如。我的Web服务方法是getCustomerByName(String name)。 请求SOAP标头将有一个参数,authentication = ticket。如何在方法中获取此值(票证)。 我尝试过拦截器 - 它们允许获取Header详细信息,但是我在哪里存储它并将其放入方法体中。是否有我可以设置的共享上下文或属性?

2 个答案:

答案 0 :(得分:4)

JAX-WS有一个WebServiceContext对象,可以通过@Resource注释注入。从上下文中,您应该能够在拦截器中获取您在消息中设置的任何内容。

OR

您可以使用PhaseInterceptorChain.getCurrentMessage()来获取CXF的当前消息并检索您需要的任何内容。

OR

您可以将方法修改为:getCustomerByName(@WebParam(header = true)String auth,String name)让CXF传入标题。

答案 1 :(得分:0)

我做到了这一点并且有效:

`Message message = PhaseInterceptorChain.getCurrentMessage();

List<Header> headers = CastUtils.cast((List<?>) message.get(Header.HEADER_LIST));

for(Header hd : headers){
   if (hd!=null){
    //do dom parsing
    Element e = (Element)hd.getObject();
    e.getTextContent());
    }
}`