Hmmm...are you mixing up SOAP headers with HTTP headers--it seems you're
creating the former but trying to query the latter, that might be the
problem.

If it helps with debugging, you can attach JAX-WS Handlers[1] (or CXF
interceptors[2]) to either the web service provider or the client and try to
read the SOAP (HTTP?) headers there.  Wireshark[3] can also help in making
sure that what you're looking for is indeed on the wire.

HTH,
Glen

[1] http://www.jroller.com/gmazza/entry/jaxws_handler_tutorial
[2] http://www.jroller.com/gmazza/entry/jaxwshandlers_to_cxfinterceptors
[3] http://www.jroller.com/gmazza/entry/soap_calls_over_wireshark


cstreiff wrote:
> 
> Hi,
> 
> Summary:
> Adding a header to a soap message using the WebServiceContext is working
> fine. However, reading the header using the reverse procedure fails.
> 
> Environment:
> CXF 2.2.7, OSX and GNU Linux
> 
> Problem Description:
> 1) I'm adding the Header:
> ...
>  List<Header> headers = new ArrayList<Header>();        
>         Header cidHeader;
>         try {
>             cidHeader = new Header(CORRELATION_ID_ELEMENT, cid, new
> JAXBDataBinding(String.class));            
>         } catch (JAXBException e) {
>             throw new IllegalArgumentException("SOAP Header JAXB binding
> is broken and needs to be fixed.", e);
>         }
>         
>         headers.add(cidHeader);
>         ctx.put(Header.HEADER_LIST, headers);  // WebServiceContext
> ...
> 
> 
> 2) and when I look at the service consumers logfile all seems to be OK.
> The services response message contains the header:
> 
> 
> 2010-05-25 11:13:46,512 33093 INFO 
> [org.apache.cxf.interceptor.LoggingInInterceptor] (btpool0-3:) Inbound
> Message
> ----------------------------
> ID: 2evilcom
> Response-Code: 200
> Encoding: UTF-8
> Content-Type: text/xml; charset=utf-8
> Headers: {Content-Length=[403], Server=[Jetty(6.1.1rc1)],
> content-type=[text/xml; charset=utf-8]}
> Payload: <soap:Envelope
> xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/";><soap:Header><correlationId
> xmlns="http://webservices.evilcom.com/header-v1";>ff7818d7-60ab-40a2-b594-28515b1007f2</correlationId></soap:Header><soap:Body>....</soap:Body></soap:Envelope>
> --------------------------------------
> 
> 3) Now I'm trying to read the header and all I get is the (local) name of
> the header element and a null value:
> 
>  public CommonSoapHeader(Map<String, Object> requestMessageContext,
> Map<String, Object> responseMessageContext) {
>         log.info("responseMessageContext=" + responseMessageContext);
>         
>         List<Header> headers =
> (List<Header>)responseMessageContext.get(Header.HEADER_LIST);
>        
>         if(headers == null) { throw new NullPointerException("Unexpected
> error: message context should have returned a header list."); }
>     
>         for(Iterator<Header> i = headers.iterator(); i.hasNext();) {
>             Header h = i.next();
>             Element n = (Element)h.getObject();
>             
>             log.info("lname="+n.getLocalName());
>             log.info("nv="+ n.getNodeValue());
>         }
>     }  
> 
>       
>       getLocalName() yields the expected element name 'correlationId', however
> 'getNodeValue()' always yields 'null'.
> 
> 
> 4) It seems that I'm making a mistake along the way. Why am I always
> getting a null value for my header element? 
> I would greatly appreciate a hint on where I went wrong.
> chriss
> 
> 
> 
> 

-- 
View this message in context: 
http://old.nabble.com/response-message-soap-header-reading-problem-tp28667390p28670536.html
Sent from the cxf-user mailing list archive at Nabble.com.

Reply via email to