2008-09-16 26 views

cevap

4

Bu örnek tamamlanamaz ve tamamlanmamış olsa da, temel fikir kSOAP'a bir XML etiketinin bir nesneye nasıl dönüştürüleceğini (yani readInstance()) ve bir nesneyi bir XML etiketine nasıl çevireceğini bildiren bir sınıfa sahip olmaktır (yani writeInstance()). Eğer SABUN hizmetini çağırmak zaman

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); 
    } 
} 

Daha sonra, sen manevra sınıfına (bu durumda, Dosya nesneler) nesne türünü map edeceğiz. SOAP zarfı, her bağımsız değişkenin nesne türüyle otomatik olarak eşleşecek ve eğer yerleşik bir tür değilse, ilgili marşalörü onu XML'den/XML'ye dönüştürecek şekilde çağırır.

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; 
    } 
} 

Bu durumda, File nesnelerini düzenlemek için Base64 kodlamasını kullanıyorum.

+0

Bunun için tam kaynak kodu sağlayabilir misiniz? – Rajapandian

+0

Nice answer +1 @Dan Howard –

+0

arraylist içeren Özel Sınıf için marshal nasıl yazılır? – Umair

İlgili konular