我正在尝试向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);
}
.
.
.
}
我已将以下内容添加到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>
.
.
.
我可以看到正在调用invoke方法,因为日志文件出现在日志文件中,但自定义标头没有添加到响应中。
任何建议表示赞赏。
答案 0 :(得分: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
这种修改有效。
答案 1 :(得分:1)
我可以通过执行以下操作在org.apache.axis.Stub
实例上执行此操作:
private Stub setHeaders(Stub stub, Hashtable<String, String> headers){
stub._setProperty(HTTPConstants.REQUEST_HEADERS, headers);
return stub;
}
请注意,_setProperty()的value参数必须是java.util.Hashtable
(当使用Stub时,它会被Axis稍后转换)
答案 2 :(得分:1)
我为请求头添加了 apikey 感谢@romeara 回答 here 。它有效。 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);
答案 3 :(得分:0)
这就是我们所做的
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;
}
希望这有帮助。