有没有人使用kSOAP包有一个很好的复杂对象编组示例?

===============>>#1 票数:4 已采纳

虽然这个例子不是可编译和完整的,但基本思想是有一个类告诉kSOAP如何将XML标记转换为对象(即readInstance())以及如何将对象转换为XML标记(即writeInstance() )。

public class MarshalBase64File implements Marshal {

  public static Class FILE_CLASS = File.class;

  public Object readInstance(XmlPullParser parser, String namespace, String name, PropertyInfo expected)
      throws IOException, XmlPullParserException {
    return Base64.decode(parser.nextText());
  }

  public void writeInstance(XmlSerializer writer, Object obj) throws IOException {
    File file = (File)obj;
    int total = (int)file.length();
    FileInputStream in = new FileInputStream(file);
    byte b[] = new byte[4096];
    int pos = 0;
    int num = b.length;
    if ((pos + num) > total) {
      num = total - pos;
    }
    int len = in.read(b, 0, num);
    while ((len != -1) && ((pos + len) < total)) {
      writer.text(Base64.encode(b, 0, len, null).toString());
      pos += len;
      if ((pos + num) > total) {
        num = total - pos;
      }
      len = in.read(b, 0, num);
    }
    if (len != -1) {
      writer.text(Base64.encode(b, 0, len, null).toString());
    }
  }

  public void register(SoapSerializationEnvelope cm) {
    cm.addMapping(cm.xsd, "base64Binary", MarshalBase64File.FILE_CLASS, this);
  }
}

稍后,当您调用SOAP服务时,您将对象类型(在本例中为File对象)映射到编组类。 SOAP信封将自动匹配每个参数的对象类型,如果它不是内置类型,则调用关联的编组器将其转换为XML或从XML转换。

public class MarshalDemo {

  public String storeFile(File file) throws IOException, XmlPullParserException {
    SoapObject soapObj = new SoapObject("http://www.example.com/ws/service/file/1.0", "storeFile");
    soapObj.addProperty("file", file);

    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    new MarshalBase64File().register(envelope);
    envelope.encodingStyle = SoapEnvelope.ENC;
    envelope.setOutputSoapObject(soapObj);

    HttpTransport ht = new HttpTransport(new URL(server, "/soap/file"));
    ht.call("http://www.example.com/ws/service/file/1.0/storeFile", envelope);

    String retVal = "";
    SoapObject writeResponse = (SoapObject)envelope.bodyIn;
    Object obj = writeResponse.getProperty("statusString");
    if (obj instanceof SoapPrimitive) {
      SoapPrimitive statusString = (SoapPrimitive)obj;
      String content = statusString.toString();
      retVal = content;
    }
    return retVal;
  }
}

在这种情况下,我使用Base64编码来编组File对象。

  ask by Philip.ie translate from so

未解决问题?本站智能推荐:

1回复

与Web服务的ksoap连接,没有android(使用kso​​ap)

好吧,我正在做一个连接...带有Web服务的sql服务器,带有j2me的Web服务,但是现在我正在做一个helloworld ...我可以,但是现在比我想做一个“ hello world” + nombre。 Web服务未收到。参数,此处是Web服务 这是用ksoap调用它的代码...
1回复

::如何解析KSOAP ARRAYTPE响应::

我需要一些帮助来了解如何在j2me中解析KSOAP RESPONSE。 以下是我提出ksoap请求后得到的实际ksoap响应。 这是ksoap响应模板 请让我知道如何将soap xml respone映射到自定义java类?
1回复

适用于J2ME的kSoap API

我正在使用kso​​ap / ksoap2 api从j2me调用php webservice。 对于ksoap: 用过的.. 和在ksoap2中 用过的.. 它返回我 故障字符串: 错误字符串:WSDL中未为此服务定义'Operation'ns8
1回复

j2me和ksoap如何在ASP.NET Web服务中获取特定元素

我在j2me中使用kso​​ap。 我将用户名和密码传递给asp.net Web服务方法,Web服务将数据集返回给我。 我的问题是如何从此k​​soap响应(数据集)中获取“显示名称”元素?
1回复

Ksoap向后结果

我有ksop请求。 我想生产的是 而我得到的是 如您所见,connectionID在底部而不是顶部。 我正在使用Ksoap2 2.5.8,如果我切换到2.6。*,它在发送请求之前只是致命错误。 有人可以看到出什么问题了吗? 我还有另外两个ksop请求,一切都很好,但
1回复

解析ksoap响应

作为回应 在responseDump调试模式下我有这样的XML 但方法envelope.getResponse()返回下面的文本 UPD1我读了这篇文章 ,但这不是我的回答的解决方案。 好的,我正在尝试解析下面的答案
1回复

KSOAP元素的顺序

我一直在使用KSOAP for Android发送包含6个元素的SOAP请求,其中最后一个是值数组。 这是代码... 在请求中一切正常,禁止排序。 当我调用addSoapObject时,它将数组值首先放在主体请求中。 因此,eventValues元素内的所有内容都显示在请求的顶部。
1回复

ksoap Propertyinfo类型更改

我有一个小问题,我无法解决。 默认情况下,propertyingo的值为anyType: 如何将这种类型更改为a:User?
2回复

Ksoap简单数组Android

我正在尝试从返回Strings数组的Web服务中检索数据。 我做不到,所以给你一小段代码 请帮助我,我快疯了! 我可以从原始类型中检索数据,但这有点复杂。 这是Web服务的响应 提前致谢
2回复

SOAP和KSOAP之间的区别

在网络服务的基础上,我听说过“SOAP”和“KSOAP”。 什么是SOAP和KSOAP? 他们之间有什么区别? 我为什么要使用一个而不是另一个?