我在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
具有属性filename
和byte[].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信封?
答案 0 :(得分:0)
我可以通过在SoapSerializationEnvelope上调用getRequest()
来查看请求SOAP信封。这让我看到向量对象实际上将每个(文件,文件名)对放入<item></item>
标记,这打破了格式。我现在正在按照wsdl的要求连续插入多个项目。