cxf-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Freeman Fang <freeman.f...@iona.com>
Subject Re: setting HTTP response headers
Date Thu, 02 Nov 2006 03:04:56 GMT
Hi Conrad,

I guess you need set headers into  outMessage which is  instance of 
org.apache.cxf.message.Message

outMessage.put(Message.PROTOCOL_HEADERS, hdrs);

I just paste some code from AbstractHTTPDestination.java  and 
JettyHTTPDestination.java where do setHeaders work

protected void setHeaders(Message message) {
    Map<String, List<String>> requestHeaders = new HashMap<String, 
List<String>>();
    copyRequestHeaders(message, requestHeaders);
    message.put(Message.PROTOCOL_HEADERS, requestHeaders);
    ....
}
 
    protected void copyRequestHeaders(Message message, Map<String, 
List<String>> headers) {
        HttpRequest req = (HttpRequest)message.get(HTTP_REQUEST);
        for (Enumeration e = req.getFieldNames(); e.hasMoreElements();) {
            String fname = (String)e.nextElement();
            List<String> values;
            if (headers.containsKey(fname)) {
                values = headers.get(fname);
            } else {
                values = new ArrayList<String>();
                headers.put(fname, values);
            }
            for (Enumeration e2 = req.getFieldValues(fname); 
e2.hasMoreElements();) {
                String val = (String)e2.nextElement();
                values.add(val);
            }
        }
    }
Thanks very much

Freeman


Conrad O'Dea wrote:

> Hi,
>
> I'm porting a RESTy service from Celtix 1.something to CXF and have  
> noticed some differences in the way the HTTP protocol headers are  
> handled.
>
> For example, in a service implemented using a Provider, I've tried  
> getting the headers from the MessageContext like this:
>
>     ctx.get(javax.xml.ws.handler.MessageContext.HTTP_REQUEST_HEADERS);
>
> This returns null though.  Calling:
>
>     Map<String, List<String>>hdrs = ctx.get 
> (org.apache.cxf.message.Message.PROTOCOL_HEADERS);
>
> works though and I can get the headers ok.
>
> I also need to set the response headers and should be able to set a  
> header like this:
>
>       Map<String, List<String>>hdrs = ctx.get 
> (javax.xml.ws.handler.MessageContext.HTTP_RESPONSE_HEADERS);
>       hdrs.put(headerName, headerValue);
>
> and have it added to the outgoing response.  However, as above using  
> the MessageContext property does not return anything.  I've tried  
> using the org.apache.cxf.message.Message property like this
>
>       Map<String, List<String>>hdrs = ctx.get 
> (org.apache.cxf.message.Message.PROTOCOL_HEADERS);
>       hdrs.put(headerName, headerValue);
>
> but there's no sign that the header has been correctly added.  Is  
> there some other way to set a HTTP header on the response?
>
> thanks
> Conrad
>
>


-- 
Freeman Fang
Software Engineer

IONA Asia Pacific Software Development Center
No.2 Floor A Unit Information Center
Zhongguancun Software Park Haidian District,
Beijing, P.R.China

Tel.: +86-10-82825151 -  ex. 551
Fax: +86-10-8282-5210
freeman.fang@iona.com
-------------------------------------------------
Making Software Work Together TM




Mime
View raw message