Отправка сложных объектов, вложений с помощью ksoap2-Android - PullRequest
0 голосов
/ 09 июня 2011

Я использую ksoap2-Android в проекте Android для загрузки файла.Это не работает.

Прежде всего, мой wsdl выглядит так:

<xsd:element name="Op1RequestType">
    <xsd:complexType>
        <xsd:sequence>
            <xsd:element name="date" type="xsd:dateTime"/>
            <xsd:element maxOccurs="unbounded" minOccurs="0" name="imgFile" 
                type="tns:Attachment"/>
        </xsd:sequence>
    </xsd:complexType>
</xsd:element>

И "tns: Attachment" определяется так:

<xsd:complexType name="Attachment">
    <xsd:sequence>
        <xsd:element name="file" type="xsd:base64Binary"/>
        <xsd:element name="filename" type="xsd:string"/>
    </xsd:sequence>
</xsd:complexType>

IСоздаю SoapSerializationEnvelope и добавляю в свойство имя date и значение в виде строкового представления текущей даты.Это работает успешно, даже если я не добавляю файл (обратите внимание на minOccurs="0").Однако, когда я пытаюсь добавить файл, он ужасно терпит неудачу:

Во-первых, я делаю представителя типа Attachment, создавая SoapObject, который имеет свойства file и filename,типов byte[].class и String.class соответственно.

Затем я добавляю эти объекты к универсальному вектору (для представления кратности элемента imgFile) и прикрепляю вектор как свойство к конверту.Это создает сообщение SOAP успешно, и ответ от сервера вызывает исключение (потому что это сообщение об ошибке, а не правильный ответ, потому что как-то мой ввод не подходит ...):

WARN/System.err(438): SoapFault - faultcode: 'soapenv:Server' 
faultstring:'org.apache.axis2.databinding.ADBException: Unexpected subelement imgFile'
faultactor: 'null' detail: org.kxml2.kdom.Node@4676b8a0

Ладно, так что я делаю не так?Есть ли способ увидеть конверт SOAP запроса, который я отправляю?

1 Ответ

0 голосов
/ 10 июня 2011

Я могу увидеть конверт SOAP запроса, вызвав getRequest() в SoapSerializationEnvelope.Это позволило мне увидеть, что векторный объект фактически помещает каждую пару (файл, имя файла) в тег <item></item>, что нарушает формат.Теперь я вставляю несколько элементов подряд, как того требует wsdl.

...