我尝试从 Android 项目调用 Web 服务,但无法传递任何参数。
我需要构建这样的请求:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="www.mywebservice.com">
<SOAP-ENV:Body>
<ns1:MyMethodName>
<ns1:appUser>0</ns1:appUser>
</ns1:MyMethodName>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
但是使用 ksoap2,我得到这样的结果:
<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 />
<v:Body>
<MyMethodName xmlns="www.mywebservice.com">
<appUser>0</appUser>
</MyMethodName>
</v:Body>
</v:Envelope>
我的代码是:
SoapObject request = new SoapObject(NAMESPACE,METHOD_NAME);
request.addProperty("appUser",0);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setAddAdornments(false);
envelope.implicitTypes = true;
envelope.setOutputSoapObject(request);
HttpTransportSE httpTransport = new HttpTransportSE(URL);
httpTransport.debug = true;
httpTransport.call(SOAP_ACTION, envelope);
尝试了很多示例,但似乎没有任何效果 - 我无法构建正确的 XML 请求。
最佳答案
我解决了这个问题:
创建了一个新类,它扩展了 SoapSerializationEnvelope 并重写了其方法 write - 我已对其进行了修改以满足我的需要:
public class MyNewClass extends SoapSerializationEnvelope { public MyNewClass (int version) { super(version); } @Override public void write(XmlSerializer writer) throws IOException { env = "http://schemas.xmlsoap.org/soap/envelope/"; String tem = "www.mywebservice.com"; writer.startDocument("UTF-8", true); writer.setPrefix("SOAP-ENV", env); writer.setPrefix("ns1", tem); writer.startTag(env, "Envelope"); writer.startTag(env, "Body"); writer.startTag(tem, "MyMethodName"); writeBody(writer); writer.endTag(tem, "MyMethodName"); writer.endTag(env, "Body"); writer.endTag(env, "Envelope"); writer.endDocument(); } }
不要使用SoapSerializationEnvelope:
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
我使用我新创建的类:
MyNewClass envelope = new MyNewClass (SoapEnvelope.VER11);
关于java - 如何使用 android-ksoap2 构建正确的 XML 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48477199/