将自定义HTTP标头添加到Axis 1.4 Web服务响应中

mip*_*mip 7 java axis web-services jax-rpc

我正在尝试向Axis 1.4 Web服务器添加自定义HTTP标头.

我创建了一个扩展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);     
  }

  .
  .
  .

}
Run Code Online (Sandbox Code Playgroud)

我已将以下内容添加到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>

    .
    .
    .
Run Code Online (Sandbox Code Playgroud)

我可以看到正在调用invoke方法,因为日志文件出现在日志文件中,但自定义标头未添加到响应中.

任何建议赞赏.

rom*_*ara 6

org.apache.axis.Stub通过执行以下操作,我能够在实例上执行此操作:

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

请注意,_setProperty() 的 value 参数必须是 a java.util.Hashtable(使用 Stub 时,Axis 稍后会对其进行强制转换)


Rau*_*ero 2

我记得使用生成的存根文件来添加 HTTP 用户和密码,检查此链接并找到显示以下内容的代码:

_call.setProperty(org.apache.axis.client.Call.SEND_TYPE_ATTR, Boolean.FALSE);  
Run Code Online (Sandbox Code Playgroud)

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

这种修改是有效的。