2011-06-09 82 views
0

我使用的Android项目ksoap2,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:附件” 的定义是这样的:

<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其具有的属性分别filefilename,类型byte[].classString.class

然后我将这些对象添加到一个通用向量(以表示imgFile项目的多样性)并将Vector作为属性附加到信封。这成功地创建了一个SOAP消息,从服务器的响应会引发异常(因为它是一个错误消息,而不是一个适当的反应,因为不知我的输入不好......):

WARN/System.err(438): SoapFault - faultcode: 'soapenv:Server' 
faultstring:'org.apache.axis2.databinding.ADBException: Unexpected subelement imgFile' 
faultactor: 'null' detail: [email protected] 

好,所以我做错了什么?有没有办法看到我发送的请求SOAP信封?

+0

我敢肯定,我的web服务工作正常,顺便说一句。我已为它的客户提供其他工具:wsdl2objc为iPhone,为WSDL2Java的非Android的Java。 – bdares 2011-06-09 09:17:17

回答

0

我可以通过调用SoapSerializationEnvelope getRequest()看到请求SOAP信封。这让我看到了矢量对象实际上每个地方(文件,文件名)对成<item></item>标签,它打破了格式。现在我正在根据wsdl的要求连续插入多个项目。