首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用android-ksoap2构建正确的XML请求?

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

Stack Overflow用户
提问于 2018-01-27 23:19:01
回答 1查看 571关注 0票数 1

我正在尝试从Android项目调用webservice,但我无法传递任何参数。

我需要构建一个这样的请求:

代码语言:javascript
复制
<?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,我得到了这样的结果:

代码语言:javascript
复制
<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>

我的代码是:

代码语言:javascript
复制
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请求。

EN

回答 1

Stack Overflow用户

发布于 2018-01-28 19:59:12

我解决了这个问题:

  1. 创建了一个新的类,它扩展了SoapSerializationEnvelope并覆盖了它的方法write -我已经修改了它以满足我的需求:

公共类MyNewClass扩展SoapSerializationEnvelope { public MyNewClass (int version) { super(version);} @Override public void (XmlSerializer写入器)抛出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",项目);writer.startTag(环境,“信封”);writer.startTag(环境,"Body");writer.startTag(项目,"MyMethodName");writeBody(写入者);writer.endTag(项目,"MyMethodName");writer.endTag(环境,"Body");writer.endTag(env,“信封”);writer.endDocument();}}使用

  • 而不使用SoapSerializationEnvelope:

新的SoapSerializationEnvelope(SoapEnvelope.VER11); = SoapSerializationEnvelope信封

我使用新创建的类:

代码语言:javascript
复制
MyNewClass envelope = new MyNewClass (SoapEnvelope.VER11);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48477199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档