Запрос с массивом объектов (complextype) в Android с использованием KSOAP - PullRequest
1 голос
/ 21 марта 2012

У меня есть этот веб-сервис:

<message name="getListOB3Request">
<part name="user" type="xsd:string"/>
<part name="pass" type="xsd:string"/>
<part name="server" type="xsd:string"/>
<part name="tableName" type="xsd:string"/>
<part name="fields" type="tns:ArrayOfFieldOB"/>
<part name="sql" type="xsd:string"/>
</message>

Массив FieldOB:

<xsd:complexType name="ArrayOfFieldOB">
<xsd:complexContent>
<xsd:restriction base="SOAP-ENC:Array">
<xsd:attribute ref="SOAP-ENC:arrayType" wsdl:arrayType="FieldOB[]"/>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>

и FieldOB:

<xsd:complexType name="FieldOB">
<xsd:all>
<xsd:element name="St_field" type="xsd:string"/>
</xsd:all>
</xsd:complexType>

У меня есть класс OBField, который реализует kvmSerializable

public class OBField implements Serializable, KvmSerializable
{
  ...
}

и класс ArrayOBField, реализующий kvmSerializable

public class OBArrayListSerializable extends ArrayList<OBField> implements Serializable, KvmSerializable
{
  ....
public void getPropertyInfo(int index, Hashtable arg1, PropertyInfo propertyInfo)
    {
        // TODO Auto-generated method stub
        switch (index)
        {
            case 0:
            {
                propertyInfo.name = "ArrayOfFieldOB";
                propertyInfo.type = new OBField().getClass();
                break;
            }
        }
    }
    }

вызов веб-службы:

  envelope.addMapping(NAMESPACE, "fields", new OBArrayListSerializable().getClass());

  HttpTransportSE androidHttpTransport = new HttpTransportSE(URL_GENERAL+url);

  try
   {
        androidHttpTransport.call(SOAP_ACTION_GENERAL+metodo, envelope);
        SoapObject response (SoapObject)envelope.bodyIn;
   }

это мой запрос (envelope.bodyOut)

getListOB3{user=myUser; pass=myPass; 
    server=http://localhost/test; 
    tableName=BusinessPartner; 
    fields=[com.androidTest.ws.OBField@44e8c988, com.androidTest.ws.OBField@44e8ca20]; 
    sql=; }

проблема в "полях", представляющих собой массив OBField.

кажется, что веб-сервис неправильно получает "поля"

спасибо

...