/**
         * Response from the soap call. Pulls the object from the wrapper object and returns it.
         *
         * @return response from the soap call.
         * @throws SoapFault
         * @since 2.0.3
         */

        public Object getResponse()
        {
            if (bodyIn == null)
            {
                return(null);
            }
            if (bodyIn is SoapFault)
            {
                throw (SoapFault)bodyIn;
            }
            FvmSerializable ks = (FvmSerializable)bodyIn;

            if (ks.getPropertyCount() == 0)
            {
                return(null);
            }
            else if (ks.getPropertyCount() == 1)
            {
                return(ks.getProperty(0));
            }
            else
            {
                List <object> ret = new List <object>();
                for (int i = 0; i < ks.getPropertyCount(); i++)
                {
                    ret.Add(ks.getProperty(i));
                }
                return(ret);
            }
        }
        protected void writeArrayListBody(XmlSerializer writer, List <object> list)
        {
            FvmSerializable obj          = (FvmSerializable)list;
            int             cnt          = list.Count;
            PropertyInfo    propertyInfo = new PropertyInfo();
            String          namespace_;
            String          name;
            String          type;

            for (int i = 0; i < cnt; i++)
            {
                // get the property
                Object prop = obj.getProperty(i);
                // and importantly also get the property info which holds the name potentially!
                obj.getPropertyInfo(i, properties, propertyInfo);

                if (!(prop is SoapObject))
                {
                    // prop is a PropertyInfo
                    if ((propertyInfo.flags & PropertyInfo.TRANSIENT) == 0)
                    {
                        Object objValue = obj.getProperty(i);
                        if ((prop != null || !skipNullProperties) && (objValue != SoapPrimitive.NullSkip))
                        {
                            writer.startTag(propertyInfo.namespace_, propertyInfo.name);
                            writeProperty(writer, objValue, propertyInfo);
                            writer.endTag(propertyInfo.namespace_, propertyInfo.name);
                        }
                    }
                }
                else
                {
                    // prop is a SoapObject
                    SoapObject nestedSoap = (SoapObject)prop;
                    // lets get the info from the soap object itself
                    Object[] qName = getInfo(null, nestedSoap);
                    namespace_ = (String)qName[QNAME_NAMESPACE];
                    type       = (String)qName[QNAME_TYPE];

                    // prefer the name from the property info
                    if (propertyInfo.name != null && propertyInfo.name.Length > 0)
                    {
                        name = propertyInfo.name;
                    }
                    else
                    {
                        name = (String)qName[QNAME_TYPE];
                    }

                    // prefer the namespace_ from the property info
                    if (propertyInfo.namespace_ != null && propertyInfo.namespace_.Length > 0)
                    {
                        namespace_ = propertyInfo.namespace_;
                    }
                    else
                    {
                        namespace_ = (String)qName[QNAME_NAMESPACE];
                    }

                    writer.startTag(namespace_, name);
                    if (!implicitTypes)
                    {
                        String prefix = writer.getPrefix(namespace_, true);
                        writer.attribute(xsi, TYPE_LABEL, prefix + ":" + type);
                    }
                    writeObjectBodyWithAttributes(writer, nestedSoap);
                    writer.endTag(namespace_, name);
                }
            }
            if (obj is HasInnerText)
            {
                if (((HasInnerText)obj).getInnerText() != null)
                {
                    writer.cdsect(((HasInnerText)obj).getInnerText());
                }
            }
        }