Добавление сложного объекта в SOAP Response
Я отправил свои сложные объекты в Запрос как: теперь я хочу получать сложные объекты из Ответа. Ниже приведен пример ответа SOAP 1.1:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<CommitReceiptionAgentResponse xmlns="http://mywebService.ir/">
<CommitReceiptionAgentResult Exc="string">
<Errors>
<string>string</string>
<string>string</string>
</Errors>
<CST>dateTime</CST>
</CommitReceiptionAgentResult>
</CommitReceiptionAgentResponse>
</soap:Body>
</soap:Envelope>
Я создал класс CommitReceiptionAgentResponse:
public class CommitReceiptionAgentResponse implements KvmSerializable {
@Element(name = "CommitReceiptionAgentResult")
CommitReceiptionAgentResult commitReceiptionAgentResult;
.
.
.
}
и я создал класс CommitReceiptionAgentResult:
public class CommitReceiptionAgentResult extends Vector<String> implements KvmSerializable {
@ElementList(name = "Errors")
public Errors errors;
@Attribute(name = "Exc", required = false)
public String InternalServiceException;
@Element(name = "CST", required = false)
public Date CommitStartTime;
.
.
.
}
тот метод getProperty() класса CommitReceiptionAgentResult, определенный как blew:
@Override
public Object getProperty(int arg0) {
switch (arg0) {
case 0:
Errors errorList = getErrors();
SoapObject erlistObject = new SoapObject(
ServiceUtil.WSDL_TARGET_NAMESPACE, "errorList");
try{
if (errorList.size() > 0) {
for (String error : errorList) {
SoapObject erObject = new SoapObject(
ServiceUtil.WSDL_TARGET_NAMESPACE, "Errors");
PropertyInfo info = new PropertyInfo();
errorList.getPropertyInfo(0, null, info);
erObject.addProperty(info.name,
errorList.getProperty(0));
erlistObject.addSoapObject(erObject);
}
}
}catch (Exception e) {
}
return erlistObject;
case 1:
return getInternalServiceException();
case 2:
return getCommitStartTime();
}
return null;
}
@Element(name = "CST", required = false)
public Date CommitStartTime;
}
и я создаю класс ошибок, как это:
public class Errors extends Vector<String> implements KvmSerializable{
@Override
public Object getProperty(int arg0) {
return this.get(arg0);
}
@Override
public int getPropertyCount() {
return 1;
}
@Override
public void getPropertyInfo(int arg0, Hashtable arg1, PropertyInfo arg2) {
arg2.name = "string";
arg2.type = PropertyInfo.STRING_CLASS;
}
@Override
public void setProperty(int arg0, Object arg1) {
this.add(arg1.toString());
}
}
Когда я определяю мыльные объекты и конверт по этой ссылке, envelop.getResponse() имеет значение null:
final SoapObject response1 = new SoapObject(WSDL_TARGET_NAMESPACE,
"CommitReceiptionAgentResponse");
response1.addProperty("CommitReceiptionAgentResult",
new CommitReceiptionAgentResult());
final SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
envelope.bodyOut = request;
envelope.setOutputSoapObject(response1);
envelope.addMapping(WSDL_TARGET_NAMESPACE,
"CommitReceiptionAgentResponse",
new CommitReceiptionAgentResponse().getClass());
envelope.addMapping(WSDL_TARGET_NAMESPACE,
"CommitReceiptionAgentResult",
new CommitReceiptionAgentResult().getClass());
envelope.addMapping(WSDL_TARGET_NAMESPACE, "Errors",
new Errors().getClass());
HttpTransportSE httpTransport1 = new HttpTransportSE(SOAP_ADDRESS);
try {
httpTransport1.debug = true;
httpTransport1.setXmlVersionTag("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
httpTransport1.call(SOAP_ACTION, envelope); // in/out
SoapObject response = (SoapObject) soapEnvelope.getResponse();
}catch(exception){}
Я много искал, но не смог найти проблему. Я хочу знать, что моя реализация классов и addMAppings 'true'?! Если это неправильно, каков правильный ответ? Я буду признателен, если кто-нибудь поможет мне. заранее спасибо
Извините за мой английский.