|
I am newbie in ksoap. I want to recieve array of TransRecord user-defined object using KvmSerialize. I tried to make implementation of KvmSerialize like below, but I only get SoapObject instead TransRecord. Any help will be appreciated. ClassMap cm = new ClassMap(Soap.VER11); cm.prefixMap = new PrefixMap(cm.prefixMap, "ns-946433677", "http://model.bank"); cm.addMapping("http://model.bank", "TransRecord", new TransRecord2().getClass()); rpc.setClassMap(cm); SoapObject so=null; TransRecord[] tr = null; try { so = (SoapObject)rpc.call(method); //tr = (TransRecord[])rpc.call(method); .... package bank.model; import java.math.BigDecimal; import java.util.Calendar; import java.util.Date; import org.kobjects.isodate.IsoDate; import org.kobjects.serialization.ElementType; import org.kobjects.serialization.KvmSerializable; import org.kobjects.serialization.PropertyInfo; import org.ksoap.SoapObject; import org.ksoap.SoapPrimitive; public class TransRecord implements KvmSerializable { private java.util.Calendar timeStamp; private java.lang.String transType; private java.math.BigDecimal transAmt; private static int PROP_COUNT = 3; private static PropertyInfo PI_timeStamp = new PropertyInfo ("timeStamp", Calendar.class.getClass()); private static PropertyInfo PI_transType = new PropertyInfo ("transType", ElementType.STRING_CLASS); private static PropertyInfo PI_transAmt = new PropertyInfo ("transAmt", BigDecimal.class.getClass()); private static PropertyInfo[] PI_PROP_ARRAY = {PI_timeStamp, PI_transType, PI_transAmt}; public TransRecord() { } public java.util.Calendar getTimeStamp() { return timeStamp; } public void setTimeStamp(java.util.Calendar timeStamp) { this.timeStamp = timeStamp; } public java.lang.String getTransType() { return transType; } public void setTransType(java.lang.String transType) { this.transType = transType; } public java.math.BigDecimal getTransAmt() { return transAmt; } public void setTransAmt(java.math.BigDecimal transAmt) { this.transAmt = transAmt; } /** * @see org.kobjects.serialization.KvmSerializable#getProperty(int) */ public Object getProperty(int param) { switch (param) { case 0 : return getTimeStamp(); case 1 : return getTransType(); case 2 : return getTransAmt(); default : System.err.println ("FATAL: Unknown type : param"); return null; } } /** * @see org.kobjects.serialization.KvmSerializable#getPropertyCount() */ public int getPropertyCount() { return PI_PROP_ARRAY.length; } /** * @see org.kobjects.serialization.KvmSerializable#setProperty(int, Object) */ public void setProperty(int param, Object obj) { switch (param) { case 0 : setTimeStamp((Calendar)obj); break; case 1 : setTransType((String)obj); break; case 2 : setTransAmt((BigDecimal)obj); break; default : System.err.println ("FATAL: Unknown type : param"); return; } } /** * @see org.kobjects.serialization.KvmSerializable#getPropertyInfo(int, PropertyInfo) */ public void getPropertyInfo(int param, PropertyInfo propertyInfo) { propertyInfo.name = PI_PROP_ARRAY[param].name; propertyInfo.nonpermanent = PI_PROP_ARRAY[param].nonpermanent; propertyInfo.copy(PI_PROP_ARRAY[param]); } } Here is the SOAP message request/response. 1. request <?xml version="1.0" encoding="UTF-8" ?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:q0="http://service.bank" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <SOAP-ENV:Body> <q0:getTransactions> <q0:accountID>00</q0:accountID> </q0:getTransactions> </SOAP-ENV:Body> </SOAP-ENV:Envelope> 2. response <?xml version="1.0" encoding="UTF-8" ?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <getTransactionsResponse xmlns="http://service.bank"> <ns-946433677:TransRecord xmlns:ns-946433677="http://model.bank"> <ns-946433677:timeStamp>2004-02-04T05:16:36.132Z</ns-946433677:timeStamp> <ns-946433677:transType>Trx1</ns-946433677:transType> <ns-946433677:transAmt>80</ns-946433677:transAmt> </ns-946433677:TransRecord> <ns-946433677:TransRecord xmlns:ns-946433677="http://model.bank"> <ns-946433677:timeStamp>2004-02-04T05:16:36.132Z</ns-946433677:timeStamp> <ns-946433677:transType>Trx2</ns-946433677:transType> <ns-946433677:transAmt>81</ns-946433677:transAmt> </ns-946433677:TransRecord> <ns-946433677:TransRecord xmlns:ns-946433677="http://model.bank"> <ns-946433677:timeStamp>2004-02-04T05:16:36.132Z</ns-946433677:timeStamp> <ns-946433677:transType>Trx3</ns-946433677:transType> <ns-946433677:transAmt>82</ns-946433677:transAmt> </ns-946433677:TransRecord> <ns-946433677:TransRecord xmlns:ns-946433677="http://model.bank"> <ns-946433677:timeStamp>2004-02-04T05:16:36.132Z</ns-946433677:timeStamp> <ns-946433677:transType>Trx4</ns-946433677:transType> <ns-946433677:transAmt>83</ns-946433677:transAmt> </ns-946433677:TransRecord> <ns-946433677:TransRecord xmlns:ns-946433677="http://model.bank"> <ns-946433677:timeStamp>2004-02-04T05:16:36.132Z</ns-946433677:timeStamp> <ns-946433677:transType>Trx5</ns-946433677:transType> <ns-946433677:transAmt>84</ns-946433677:transAmt> </ns-946433677:TransRecord> </getTransactionsResponse> </soapenv:Body> </soapenv:Envelope> Regards, CW. |