J'utilise ksoap2-Android sur un projet Android pour télécharger un fichier. Ça ne fonctionne pas.Envoyer des objets complexes, des pièces jointes avec ksoap2-Android
D'abord, mon wsdl ressemble à ceci:
<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>
Et "tns: pièce jointe" est définie comme suit:
<xsd:complexType name="Attachment">
<xsd:sequence>
<xsd:element name="file" type="xsd:base64Binary"/>
<xsd:element name="filename" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
Je crée un SoapSerializationEnvelope
et en ajoutant dans la propriété avec le nom date
et la valeur en tant que représentation sous forme de chaîne de la date actuelle. Cela fonctionne correctement, même si je n'ajoute pas de fichier (notez le minOccurs="0"
). Cependant, lorsque je tente d'ajouter un fichier, il échoue horriblement:
Tout d'abord, je fais un représentant du type Attachment
en créant un SoapObject
qui a les propriétés file
et filename
, des types byte[].class
et String.class
respectivement.
Ensuite, j'ajoute ces objets à un vecteur générique (pour représenter la multiplicité de l'élément imgFile
) et j'attache le vecteur en tant que propriété à l'enveloppe. Cela crée un message SOAP avec succès, et la réponse du serveur soulève une exception (car il est un message d'erreur, au lieu d'une réponse appropriée, car en quelque sorte mon entrée est pas bon ...):
WARN/System.err(438): SoapFault - faultcode: 'soapenv:Server'
faultstring:'org.apache.axis2.databinding.ADBException: Unexpected subelement imgFile'
faultactor: 'null' detail: [email protected]
Ok , alors qu'est-ce que je fais mal? Est-il possible de voir l'enveloppe SOAP de la demande que j'envoie?
Je suis sûr que mon service Web fonctionne bien, d'ailleurs. J'ai fait des clients pour cela avec d'autres outils: wsdl2objc pour iPhone, wsdl2java pour Java non-Android. – bdares