看起来 KSoap 对命名空间有一个硬编码值SoapEnvelope
:
https://github.com/karlmdavis/ksoap2-android/blob/master/ksoap2-base/src/main/java/org/ksoap2/SoapEnvelope.java#L182 https://github.com/karlmdavis/ksoap2-android/blob/master/ksoap2-base/src/main/java/org/ksoap2/SoapEnvelope.java#L182
/**
* Writes the complete envelope including header and body elements to the
* given XML writer.
*/
public void write(XmlSerializer writer) throws IOException {
writer.setPrefix("i", xsi);
writer.setPrefix("d", xsd);
writer.setPrefix("c", enc);
writer.setPrefix("v", env);
writer.startTag(env, "Envelope");
writer.startTag(env, "Header");
writeHeader(writer);
writer.endTag(env, "Header");
writer.startTag(env, "Body");
writeBody(writer);
writer.endTag(env, "Body");
writer.endTag(env, "Envelope");
}
The SoapSerializationEnvelope
你在这里创建:
envelope = new SoapSerializationEnvelope(SoapEnvelope.VER12);
…是一个子类SoapEnvelope
。因此,要改变行为,您需要子类化SoapSerializationEnvelope
像这样:
public class CustomSoapSerializationEnvelope extends SoapSerializationEnvelope {
@Override
public void write(XmlSerializer writer) throws IOException {
writer.setPrefix("i", xsi);
writer.setPrefix("d", xsd);
writer.setPrefix("c", enc);
writer.setPrefix("soap", env); // <-- changed line
writer.startTag(env, "Envelope");
writer.startTag(env, "Header");
writeHeader(writer);
writer.endTag(env, "Header");
writer.startTag(env, "Body");
writeBody(writer);
writer.endTag(env, "Body");
writer.endTag(env, "Envelope");
}
}
然后,将上面的行替换为:
envelope = new CustomSoapSerializationEnvelope(SoapEnvelope.VER12);