7

我正在尝试将自定义 HTTP 标头添加到 Axis 1.4 Web 服务器。

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

  .
  .
  .

}

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

    .
    .
    .

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

任何建议表示赞赏。

4

4 回答 4

6

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

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

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

于 2015-11-12T19:22:47.690 回答
2

我为请求标头添加了 apikey,感谢@romeara在这里回答。它有效。Axis 1.4 从 java 发送客户端请求。

YourStub stub = new YourStub();
Hashtable<String, String> headers = new Hashtable<String, String>();
headers.put("apikey", "xxxxxxxxxxxxxxxxxxxx");
stub._setProperty(HTTPConstants.REQUEST_HEADERS, headers);
于 2021-02-15T12:11:51.483 回答
1

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

_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

这种修改是有效的。

于 2013-09-19T08:48:56.690 回答
-1

这就是我们所做的

import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPException;

 /**
 * This method is to be used for secure SOAP calls.
 * Method created as Axis 1.4 strips the security header which compiling the Java classes.
 * @param username
 * @param password
 * @return SOAP Header
 * @throws SOAPException
 */
public static SOAPHeaderElement createCustomSOAPHeader(String username, String password) throws SOAPException {
    SOAPHeaderElement oHeaderElement;
    SOAPElement oElement;   

    //Header
    oHeaderElement = new SOAPHeaderElement("http://siebel.com/webservices", "Security");
    oHeaderElement.setPrefix("web");
    oHeaderElement.setMustUnderstand(false);
    //Elements for the Header
    oElement = oHeaderElement.addChildElement("UsernameToken");
    oElement.addTextNode(username);
    oElement = oHeaderElement.addChildElement("PasswordText");
    oElement.addTextNode(password);
    oElement = oHeaderElement.addChildElement("SessionType");
    oElement.addTextNode("None");

    return oHeaderElement;
}

希望这可以帮助。

于 2013-09-23T05:45:56.563 回答