0

我在 Android 项目上使用 ksoap2-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[].classString.class

然后我将这些对象添加到通用 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 信封?

4

1 回答 1

0

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

于 2011-06-10T05:32:29.447 回答