将 Mimeheader 添加到 apache 轴会引发错误请求
adding Mimeheader to apache axis throws Bad Request
我在我的 Java 项目中使用 apache axis 发送 SOAP 请求。所以我想通过重写 createCall() 方法来添加一个 HTTP header 来进行授权:
private java.lang.String headers;
// then there are codes to fulfill headers which will be a stringified JSON
@Override
public Call createCall() {
_call = new org.apache.axis.client.Call(this) {
@Override
public void setRequestMessage(Message msg) {
super.setRequestMessage(msg);
MimeHeaders mimeHeaders = msg.getMimeHeaders();
if( headers != null )
{
JSONObject jsonHeaders = null;
try {
jsonHeaders = new JSONObject(headers.trim());
Iterator<String> keys = jsonHeaders.keys();
while (keys.hasNext()) {
String key = keys.next();
if (jsonHeaders.get(key) instanceof String) {
String value = jsonHeaders.get(key).toString();
mimeHeaders.addHeader(key, value);
}
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
};
return _call;
}
但是会导致错误异常:
(400)Bad Request
AxisFault
faultCode: {http://xml.apache.org/axis/}HTTP
faultSubcode:
faultString: (400)Bad Request
faultActor:
faultNode:
faultDetail:
{}:return code: 400
{http://xml.apache.org/axis/}HttpErrorCode:400
我设置的 header 正确吗?
发现这是一个 header 格式错误。 header 的键必须有首字母大写所以我添加:
key = key.substring(0, 1).toUpperCase() + key.substring(1);
mimeHeaders.addHeader(key, value);
我在我的 Java 项目中使用 apache axis 发送 SOAP 请求。所以我想通过重写 createCall() 方法来添加一个 HTTP header 来进行授权:
private java.lang.String headers;
// then there are codes to fulfill headers which will be a stringified JSON
@Override
public Call createCall() {
_call = new org.apache.axis.client.Call(this) {
@Override
public void setRequestMessage(Message msg) {
super.setRequestMessage(msg);
MimeHeaders mimeHeaders = msg.getMimeHeaders();
if( headers != null )
{
JSONObject jsonHeaders = null;
try {
jsonHeaders = new JSONObject(headers.trim());
Iterator<String> keys = jsonHeaders.keys();
while (keys.hasNext()) {
String key = keys.next();
if (jsonHeaders.get(key) instanceof String) {
String value = jsonHeaders.get(key).toString();
mimeHeaders.addHeader(key, value);
}
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
};
return _call;
}
但是会导致错误异常:
(400)Bad Request
AxisFault
faultCode: {http://xml.apache.org/axis/}HTTP
faultSubcode:
faultString: (400)Bad Request
faultActor:
faultNode:
faultDetail:
{}:return code: 400
{http://xml.apache.org/axis/}HttpErrorCode:400
我设置的 header 正确吗?
发现这是一个 header 格式错误。 header 的键必须有首字母大写所以我添加:
key = key.substring(0, 1).toUpperCase() + key.substring(1);
mimeHeaders.addHeader(key, value);