我需要将此soap请求转换为java(Android)。我正在使用 ksoap2 库来执行此操作,但我不断收到所需的错误身份验证。
我的java代码
SoapObject remoteUser = new SoapObject(NAMESPACE, "RemoteUser");
remoteUser.addProperty("UserLogin", "ws_admin");
remoteUser.addProperty("UserPassword", "Password1");
SoapObject userContact = new SoapObject(NAMESPACE, "UserContact");
userContact.addProperty("UserLogin", "sqa101");
userContact.addProperty("UserPassword", "Password1");
request.addSoapObject(remoteUser);
request.addSoapObject(userContact);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
androidHttpTransport.debug = true;
androidHttpTransport.call(SOAP_ACTION, envelope);
SoapPrimitive response = (SoapPrimitive)envelope.getResponse();
webResponse = response.toString();
这是我得到的错误:08-19 09:58:35.690: W/System.err(737): SoapFault - faultcode: 'SOAP-ENV:Server' faultstring: '3001: 未知用户试图执行消息类型 UserAuthenticationRequest。需要身份验证。faultactor:'null' 详细信息:org.kxml2.kdom.Node@40585a08
任何帮助将不胜感激。
更新:我找到了答案。问题出在我使用的格式上。以下代码有效。
PropertyInfo remoteUser =new PropertyInfo();
remoteUser.setName("RemoteUser");
SoapObject login = new SoapObject();
login.addProperty("UserLogin", "admin");
login.addProperty("UserAuthenticator", "Password");
remoteUser.setValue(login);
remoteUser.setType(String.class);
request.addProperty(remoteUser);
PropertyInfo userContact =new PropertyInfo();
userContact.setName("UserContact");
SoapObject login2 = new SoapObject();
login2.addProperty("UserLogin", "username");
login2.addProperty("UserPassword", "Password");
userContact.setValue(login2);
userContact.setType(String.class);
request.addProperty(userContact);