嗨,我正在开发一个使用 Web 服务的应用程序。我可以在 SoapUI 中正确请求它,但是在带有 KSOAP2 库的 Android Studio 中生成的相同请求会收到 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>
这是我从网络服务呼叫.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。也许没有必要在 ?wsdl 中完成 URL。
内容类型显示在"请求"的"RAW"选项卡中。