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を作成することにより、タイプの代表を作成します。 SoapObjectfilefilenamebyte[].classString.class

次に、これらのオブジェクトを一般的なベクター (imgFileアイテムの多様性を表すため) に追加し、そのベクターをプロパティとしてエンベロープに添付します。これにより、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 に答える