In your client handler you can do:
public boolean handleRequest(MessageContext context) {
// get the headers object
Hashtable headers = (Hashtable) context.getProperty(HTTPConstants.REQUEST_HEADERS);
if (headers == null) {
headers = new Hashtable();
context.setProperty(HTTPConstants.REQUEST_HEADERS, headers);
}
// add a header String someheadervalue = (String) context.getProperty("PROPS_KEY"); headers.put("MYHEADER", someheadervalue);
return true; }
Now, you ask how the handler will know what header to set. Well, you have to use the _setProperty() call on your stub to propagate information to the handler. e.g.
((javax.xml.rpc.Stub)yourapi)._setProperty("PROPS_KEY", "here is the value of the header I want to set, thank you");
As an additional treat, these properties are apparently not accessible from the handler prior to Axis 1.1.
On the server side your handler needs to do something like:
public boolean handleRequest(javax.xml.rpc.handler.MessageContext context) {
// get the servletrequest object
HttpServletRequest request = (HttpServletRequest) context.getProperty(HTTPConstants.MC_HTTP_SERVLETREQUEST);
if (request == null) return true;
// look up your header String myheadervalue = (String) request.getHeader("MYHEADER");
System.out.println("my header was propagated with this value!: " + myheadervalue);
return true; }
Note that this requires usage of specific internal Axis classes/APIs (e.g. HTTPConstants properties set in the context), so it will probably not be portable (although I imagine other frameworks will provide similar mechanisms).
I can provide sample code and/or libraries if you need.
Aaron Hamid CIT/I&D Cornell University
Benjamin Flohr wrote:
Hi*,
we need to access the http headers and set them using information taken from the fully formed SOAP envelope before it is posted. We managed to do this by modifying the HttpSender and assigning it to the call as its handler. Unfortunately we lose the typemapping for the serializer/deserializer and can no longer parse the incoming SOAP message. Is there a straightforward way to alter Http headers? Can anyone help?
thanks
Andrew and Benjamin