java - 如何使用 android-ksoap2 构建正确的 XML 请求?

标签 java android xml ksoap2 android-ksoap2

我尝试从 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 请求。

最佳答案

我解决了这个问题:

  1. 创建了一个新类,它扩展了 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();
            }
        }
    
  2. 不要使用SoapSerializationEnvelope:

    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    

我使用我新创建的类:

MyNewClass envelope = new MyNewClass (SoapEnvelope.VER11);

关于java - 如何使用 android-ksoap2 构建正确的 XML 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48477199/

相关文章:

java - 如何强制 max 返回 Java Stream 中的所有最大值?

android - Kindle Fire状态栏和软键栏bug

java - 当我从 html 表单传递值时,为什么我在 post api 期间收到 'Column cannot be null' 错误

java - Android登录与字符串响应

android - 如何在应用程序结束时打开显示屏?

mysql - 将 XML 导入 mySQL 时列名无效?

xml - MarkLogic TDE XPATH 不适用于重复组

ruby - 如何使用 ruby​​、xpath、rexml 从子上下文获取节点文本

java - 验证数字序列

java - 将字符串从一个子类传递到另一个子类