在 KSOAP2 Status 400 中生成的请求在 SoapUI 中有效
Request generated in KSOAP2 Status 400 works in SoapUI
您好,我正在开发一个使用网络服务的应用程序。我可以在 SoapUI 中正确请求它,但是在 Android Studio 中使用 KSOAP2 库生成的相同请求收到 HTTP 状态 400。
生成的请求:
<v:Envelope xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:d="http://www.w3.org/2001/XMLSchema" xmlns:c="http://schemas.xmlsoap.org/soap/encoding/" xmlns:v="http://schemas.xmlsoap.org/soap/envelope/">
<v:Header>
<n0:UserId xmlns:n0="http://www.webservice.com">user</n0:UserId>
<n1:Password xmlns:n1="http://www.webservice.com">pass</n1:Password>
</v:Header>
<v:Body>
<n2:GetAgenciaInfoRequest xmlns:n2="http://www.webservice.com">
<n2:AgencyClientCode>00001</n2:AgencyClientCode>
</n2:GetAgenciaInfoRequest>
</v:Body>
</v:Envelope>
这是我从 WebService.class
打来的电话
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
//envelope.dotNet = true;
envelope.implicitTypes = true;
envelope.setAddAdornments(false);
envelope.headerOut = new Element[2];
String UserId = "user";
String Password = "pass";
Element username = new Element().createElement(NAMESPACE, "UserId");
username.addChild(Node.TEXT, UserId);
envelope.headerOut[0] = username;
//h.addChild(Node.ELEMENT, username);
Element pass = new Element().createElement(NAMESPACE, "Password");
pass.addChild(Node.TEXT, Password);
//h.addChild(Node.ELEMENT, pass);
envelope.headerOut[1] = pass;
envelope.setOutputSoapObject(request);
HttpTransportSE ht = new HttpTransportSE(URL);
ArrayList<Object> sol = new ArrayList<Object>();
try {
List<HeaderProperty> headerList = new ArrayList<HeaderProperty>();
headerList.add(new HeaderProperty("Content-Type", "application/soap+xml; charset=utf-8"));
ht.debug = true;
ht.call(" http://www.webservice.com/IService1/GetAgenciaInfo", envelope, headerList);
} catch (Exception e) {
Log.d("dump Request: " ,ht.requestDump);
e.printStackTrace();
}
我不知道为什么当我在 SoapUI 中粘贴请求并正常工作时收到状态 400,这很难诊断,但我们将不胜感激。堆栈跟踪只告诉我 400 错误。
问题是 URL 我尝试使用的用户和内容类型。
注意:尝试在 Soap-Ui 中使用 WS 并复制请求顶部使用的 URL window。也许 URL 没有必要在 ?wsdl.
中完成
内容类型出现在请求中,在 RAW 选项卡中。
您好,我正在开发一个使用网络服务的应用程序。我可以在 SoapUI 中正确请求它,但是在 Android Studio 中使用 KSOAP2 库生成的相同请求收到 HTTP 状态 400。
生成的请求:
<v:Envelope xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:d="http://www.w3.org/2001/XMLSchema" xmlns:c="http://schemas.xmlsoap.org/soap/encoding/" xmlns:v="http://schemas.xmlsoap.org/soap/envelope/">
<v:Header>
<n0:UserId xmlns:n0="http://www.webservice.com">user</n0:UserId>
<n1:Password xmlns:n1="http://www.webservice.com">pass</n1:Password>
</v:Header>
<v:Body>
<n2:GetAgenciaInfoRequest xmlns:n2="http://www.webservice.com">
<n2:AgencyClientCode>00001</n2:AgencyClientCode>
</n2:GetAgenciaInfoRequest>
</v:Body>
</v:Envelope>
这是我从 WebService.class
打来的电话 SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
//envelope.dotNet = true;
envelope.implicitTypes = true;
envelope.setAddAdornments(false);
envelope.headerOut = new Element[2];
String UserId = "user";
String Password = "pass";
Element username = new Element().createElement(NAMESPACE, "UserId");
username.addChild(Node.TEXT, UserId);
envelope.headerOut[0] = username;
//h.addChild(Node.ELEMENT, username);
Element pass = new Element().createElement(NAMESPACE, "Password");
pass.addChild(Node.TEXT, Password);
//h.addChild(Node.ELEMENT, pass);
envelope.headerOut[1] = pass;
envelope.setOutputSoapObject(request);
HttpTransportSE ht = new HttpTransportSE(URL);
ArrayList<Object> sol = new ArrayList<Object>();
try {
List<HeaderProperty> headerList = new ArrayList<HeaderProperty>();
headerList.add(new HeaderProperty("Content-Type", "application/soap+xml; charset=utf-8"));
ht.debug = true;
ht.call(" http://www.webservice.com/IService1/GetAgenciaInfo", envelope, headerList);
} catch (Exception e) {
Log.d("dump Request: " ,ht.requestDump);
e.printStackTrace();
}
我不知道为什么当我在 SoapUI 中粘贴请求并正常工作时收到状态 400,这很难诊断,但我们将不胜感激。堆栈跟踪只告诉我 400 错误。
问题是 URL 我尝试使用的用户和内容类型。
注意:尝试在 Soap-Ui 中使用 WS 并复制请求顶部使用的 URL window。也许 URL 没有必要在 ?wsdl.
中完成内容类型出现在请求中,在 RAW 选项卡中。