使用kso​​ap2-Android发送复杂对象,附件

时间:2011-06-09 09:06:37

标签: serialization android-ksoap2

我在Android项目上使用kso​​ap2-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>

我正在创建SoapSerializationEnvelope并在名称为date的属性中添加,并将值作为当前日期的字符串表示形式。这成功,即使我没有添加文件(请注意minOccurs="0")。但是,当我尝试添加文件时,它会失败:

首先,我通过创建Attachment来创建SoapObject类型的代表,该file具有属性filenamebyte[].class,类型String.class和{分别为{1}}。

然后我将这些对象添加到通用Vector(表示imgFile项的多重性)并将Vector作为属性附加到信封。这会成功创建一个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 :(得分:0)

我可以通过在SoapSerializationEnvelope上调用getRequest()来查看请求SOAP信封。这让我看到向量对象实际上将每个(文件,文件名)对放入<item></item>标记,这打破了格式。我现在正在按照wsdl的要求连续插入多个项目。