4
kSOAPパッケージを使用して、誰かが複雑なオブジェクトマーシャリングの例を持っていますか?kSOAPマーシャリングヘルプが必要
kSOAPパッケージを使用して、誰かが複雑なオブジェクトマーシャリングの例を持っていますか?kSOAPマーシャリングヘルプが必要
基本的な考え方は、kSOAPにXMLタグをオブジェクトに変換する方法(readInstance())と、オブジェクトをXMLタグに変換する方法を教えるクラスを持つことですすなわちwriteInstance())。あなたはSOAPサービスを呼び出すとき
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);
}
}
後で、あなたはマーシャリングクラスに(この場合は、Fileオブジェクト)オブジェクトタイプをマッピングします。 SOAPエンベロープは各引数のオブジェクト型と自動的に一致し、組み込み型でない場合は、関連付けられたマーシャラを呼び出して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オブジェクトをマーシャリングしています。
完全なソースコードを提供できますか? – Rajapandian
素敵な答え+1 @ダン・ハワード –
arraylistを含むカスタムクラスのマーシャルを書く方法は? – Umair