gpt4 book ai didi

soap - 需要 kSOAP 编码帮助

转载 作者:行者123 更新时间:2023-12-01 13:09:42 26 4
gpt4 key购买 nike

有没有人有使用 kSOAP 包的良好的复杂对象编码示例?

最佳答案

虽然这个例子不是可编译的和完整的,但基本思想是有一个类告诉 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 对象。

关于soap - 需要 kSOAP 编码帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77131/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com