Hat jemand ein gutes komplexes Objekt Marshalling Beispiel mit dem KSOAP-Paket?kSOAP Marshalling Hilfe benötigt
4
A
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.
Können Sie den vollständigen Quellcode dafür bereitstellen. – Rajapandian
Schöne Antwort +1 @Dan Howard –
Wie schreibe ich Marshal für Custom-Klasse mit Arraylist? – Umair