0

複雑なオブジェクトを次のようにリクエストに送信しました。 これ で、レスポンスから複雑なオブジェクトを取得したいと思います。以下は、SOAP 1.1 応答のサンプルです。

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
      <soap:Body>
        <CommitReceiptionAgentResponse xmlns="http://mywebService.ir/">
          <CommitReceiptionAgentResult Exc="string">
            <Errors>
              <string>string</string>
              <string>string</string>
            </Errors>
            <CST>dateTime</CST>              
          </CommitReceiptionAgentResult>
        </CommitReceiptionAgentResponse>
      </soap:Body>
    </soap:Envelope>

CommitReceiptionAgentResponse クラスを作成しました:

public class CommitReceiptionAgentResponse implements KvmSerializable {
    @Element(name = "CommitReceiptionAgentResult")
    CommitReceiptionAgentResult commitReceiptionAgentResult;
.
.
.
}

CommitReceiptionAgentResult クラスも作成しました。

    public class CommitReceiptionAgentResult extends Vector<String> implements KvmSerializable {
            @ElementList(name = "Errors")
            public Errors errors;

            @Attribute(name = "Exc", required = false)    
            public String InternalServiceException;

               @Element(name = "CST", required = false)
               public Date CommitStartTime;
.
    .
    .
    }

blew として定義された CommitReceiptionAgentResult クラスの getProperty() メソッド:

@Override
    public Object getProperty(int arg0) {
        switch (arg0) {
        case 0:
            Errors errorList =  getErrors();
            SoapObject erlistObject = new SoapObject(
                    ServiceUtil.WSDL_TARGET_NAMESPACE, "errorList");
                 try{
            if (errorList.size() > 0) {
                for (String error : errorList) {
                    SoapObject erObject = new SoapObject(
                        ServiceUtil.WSDL_TARGET_NAMESPACE, "Errors");

                        PropertyInfo info = new PropertyInfo();
                        errorList.getPropertyInfo(0, null, info);
                        erObject.addProperty(info.name,
                                errorList.getProperty(0));

                    erlistObject.addSoapObject(erObject);
                }
            }       
                  }catch (Exception e) {    
                  }
            return erlistObject;                    
        case 1:
            return getInternalServiceException();
        case 2:
            return getCommitStartTime();        
        }
        return null;
    }               
        @Element(name = "CST", required = false)
        public Date CommitStartTime;        

}

そして、次のような Errors クラスを作成します。

   public class Errors extends Vector<String> implements KvmSerializable{   
    @Override
    public Object getProperty(int arg0) {
            return this.get(arg0);
    }

    @Override
    public int getPropertyCount() {
            return 1;
    }

    @Override
    public void getPropertyInfo(int arg0, Hashtable arg1, PropertyInfo arg2) {
            arg2.name = "string";
            arg2.type = PropertyInfo.STRING_CLASS;
    }

    @Override
    public void setProperty(int arg0, Object arg1) {
            this.add(arg1.toString());
    }
}

このリンクこれに従ってsoapオブジェクトとエンベロープを定義する と 、envelope.getResponse()はnullになります:

    final SoapObject response1 = new SoapObject(WSDL_TARGET_NAMESPACE,
                        "CommitReceiptionAgentResponse");

    response1.addProperty("CommitReceiptionAgentResult",
                        new CommitReceiptionAgentResult());

    final SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
                        SoapEnvelope.VER11);
    envelope.bodyOut = request;
    envelope.setOutputSoapObject(response1);                                
    envelope.addMapping(WSDL_TARGET_NAMESPACE,
                        "CommitReceiptionAgentResponse",
                        new CommitReceiptionAgentResponse().getClass());
    envelope.addMapping(WSDL_TARGET_NAMESPACE,
                        "CommitReceiptionAgentResult",
                        new CommitReceiptionAgentResult().getClass());
    envelope.addMapping(WSDL_TARGET_NAMESPACE, "Errors",
                        new Errors().getClass());
    HttpTransportSE httpTransport1 = new HttpTransportSE(SOAP_ADDRESS);
    try {

        httpTransport1.debug = true;
        httpTransport1.setXmlVersionTag("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
                    httpTransport1.call(SOAP_ACTION, envelope); // in/out
         SoapObject response = (SoapObject) soapEnvelope.getResponse();
}catch(exception){}

いろいろ検索しましたが、問題が見つかりませんでした。クラスの実装を知りたいのですが、addMappings は「true」ですか?! それが間違っている場合、正しい答えは何ですか。誰かが私を助けてくれれば幸いです。前もって感謝します

私の英語ですみません。

4

0 に答える 0