Adding custom HTTP headers to Axis 1.4 web service responses

14,544

Solution 1

I was able to do this on a org.apache.axis.Stub instance by doing the following:

private Stub setHeaders(Stub stub, Hashtable<String, String> headers){
    stub._setProperty(HTTPConstants.REQUEST_HEADERS, headers);
    return stub;
}

Note that it is REQUIRED that the value argument to _setProperty() be a java.util.Hashtable (it gets cast later on by Axis when the Stub is used)

Solution 2

I added apikey for request header thanks for @romeara answer here . And it works. Axis 1.4 sending client request from java.

YourStub stub = new YourStub();
Hashtable<String, String> headers = new Hashtable<String, String>();
headers.put("apikey", "xxxxxxxxxxxxxxxxxxxx");
stub._setProperty(HTTPConstants.REQUEST_HEADERS, headers);

Solution 3

I remember using the stub files generated to add HTTP user and password, check this link and locate the code that says:

_call.setProperty(org.apache.axis.client.Call.SEND_TYPE_ATTR, Boolean.FALSE);  

http://www.coderanch.com/t/225102/Web-Services/java/Axis-username-password-auth-stubs

That kind of modification works.

Share:
14,544
mip
Author by

mip

Updated on June 16, 2022

Comments

  • mip
    mip almost 2 years

    I'm trying to add custom HTTP headers to Axis 1.4 web servers.

    I've created a handler which extends BasicHandler:

    public class HttpHeaderHandler extends BasicHandler {
    
      .
      .
      .
    
      @Override
      public void invoke(org.apache.axis.MessageContext arg0) throws AxisFault {  
        LOG.trace("invoke called");     
        Hashtable ht = (Hashtable)ctx.getProperty(HTTPConstants.RESPONSE_HEADERS);
        if(ht == null) {
          ht = new Hashtable();
        }
        ht.put("custom-header", "Hello");
        ctx.setProperty(HTTPConstants.RESPONSE_HEADERS, ht);     
      }
    
      .
      .
      .
    
    }
    

    I've added the following to server-config.wsdd:

        .
        .
        .
    
    <transport name="http">
        <requestFlow>
            <handler type="URLMapper" />
            <handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler" />
        </requestFlow>
        <responseFlow>
            <handler type="java:com.my.package.HttpHeaderHandler" />
        </responseFlow>
    </transport>
    
        .
        .
        .
    

    I can see that the invoke method is being called as the logging is appearing in the log file but the custom header is not being added to the response.

    Any suggestions appreciated.

  • MariuszS
    MariuszS over 10 years
    This is not HTTP Header, this is SOAP Header.
  • Khush
    Khush over 10 years
    @MariuszS Isn't Axis 1.4 used for SOAP??? Can it be used for HTPP as well? Thats news to me.
  • MariuszS
    MariuszS over 10 years
    Yes, Axis can be used for SOAP over HTTP Transport, and some real life scenerios requires adding http header. Look at this answer -> stackoverflow.com/questions/3925272/…