2008-09-16 11 views

Antwort

4

Obwohl dieses Beispiel nicht kompilierbar und vollständig ist, besteht die Grundidee darin, eine Klasse zu haben, die kSOAP mitteilt, wie ein XML-Tag in ein Objekt umgewandelt wird (dh readInstance()) und ein Objekt in ein XML-Tag umwandelt (zB 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); 
    } 
} 

Später, wenn Sie den SOAP-Dienst aufrufen, werden Sie den Objekttyp (in diesem Fall Dateiobjekte) an die Rangier-Klasse zuordnen. Der SOAP-Umschlag wird automatisch dem Objekttyp jedes Arguments zugeordnet, und wenn es kein eingebauter Typ ist, rufen Sie den zugeordneten Marshaller auf, um ihn in/aus XML zu konvertieren.

In diesem Fall verwende ich Base64-Codierung, um Dateiobjekte zu marshalieren.

+0

Können Sie den vollständigen Quellcode dafür bereitstellen. – Rajapandian

+0

Schöne Antwort +1 @Dan Howard –

+0

Wie schreibe ich Marshal für Custom-Klasse mit Arraylist? – Umair