0

複数のメソッドを持つ Web サービスがあります。それらをテストするには、firefox soaclient プラグインを使用します。すべての方法が適切に機能します。これらは今まで正常です。これらの.net Webサービスを呼び出すために、Androidでライブラリを作成しました。私にはメソッドがあります。最初の 1 つはエンベロープを準備し、もう 1 つはメソッドを呼び出します。1 つを除くすべてのメソッドは、これらの方法で機能します。lib から準備されたエンベロープのメソッドが機能せず、このエンベロープを Firefox SOAP クライアントで使用すると、正しい方法で応答が返されます。Web サービスを呼び出す独自のメソッドは正しく動作せず、空の結果を返すだけです。エラーは何ですか?

ここに画像の説明を入力

private void createEnvelope() {
    // Her bir parametrenin kalıbı
    String params = "<%s>%s</%s>";
    // Her parametre kalıbına değer atandığında geçici olarak tutulan string
    String paramsTemp = "";
    // Hazırlanan tüm parametrelerin tutulduğu değişken
    String paramsAll = "";

    // Parametreler ekleniyor
    for (int i = 0; i < parameterKeys.size(); i++) {
        paramsTemp = String.format(params, parameterKeys.get(i),
                parameterValues.get(i), parameterKeys.get(i));
        paramsAll += paramsTemp;
    }

    // soap mesajını hazılıyoruz
    String soapTemplate = "<?xml version=\"%s\" encoding=\"%s\"?>"
            + "<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>" + "<%s xmlns=\"%s\">" + "%s" + "</%s>"
            + "</soap:Body>" + "</soap:Envelope>";
    envelope = String.format(soapTemplate, version, charEncoding,
            methodName, namespace, paramsAll, methodName);
    Logger.log("request:" + envelope);
}


public String callWebService() {

    createEnvelope();
    // request parameters
    HttpParams params = httpClient.getParams();
    HttpConnectionParams.setConnectionTimeout(params, connectionTimeOut);
    HttpConnectionParams.setSoTimeout(params, soTimeOut);

    // set parameter
    HttpProtocolParams.setUseExpectContinue(httpClient.getParams(), true);

    // POST the envelope
    HttpPost httppost = new HttpPost(url);

    // add headers
    httppost.setHeader("SOAPAction", soapAction);
    httppost.setHeader("Content-Type", contentType);

    try {

        // the entity holds the request
        HttpEntity entity = new StringEntity(envelope);
        httppost.setEntity(entity);

        // Response handler
        ResponseHandler<String> rh = new ResponseHandler<String>() {
            // invoked when client receives response
            public String handleResponse(HttpResponse responseTemp)
                    throws ClientProtocolException, IOException {

                // get response entity
                HttpEntity entity = responseTemp.getEntity();
                StatusLine statusLine = responseTemp.getStatusLine();

                // read the response as byte array
                StringBuffer out = new StringBuffer();
                byte[] b = EntityUtils.toByteArray(entity);

                // write the response byte array to a string buffer
                out.append(new String(b, 0, b.length));
                return out.toString();
            }
        };

        response = httpClient.execute(httppost, rh);

    } catch (Exception e) {
        Log.v("Soap Service Exception:", e.toString());
    }

    // close the connection
    httpClient.getConnectionManager().shutdown();
    return response;
}

編集

logcat のリクエスト テンプレート:

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <soap:Body>
      <Method_Name xmlns="url">
         <param1>12345</param1>
         <param2>ügıtç</param2>
         <param3>qwert</param3>
      </Method_Name>
   </soap:Body>
</soap:Envelope>

logcat の応答テンプレート

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <soap:Body>
      <Method_Name_Response xmlns="url">
         <Method_Name_Result>
            <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="NewDataSet">
               <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
                  <xs:complexType>
                     <xs:choice minOccurs="0" maxOccurs="unbounded">
                        <xs:element name="Temp">
                           <xs:complexType>
                              <xs:sequence>
                                 <xs:element name="response1" type="xs:long" minOccurs="0" />
                                 <xs:element name="response2" type="xs:string" minOccurs="0" />
                              </xs:sequence>
                           </xs:complexType>
                        </xs:element>
                     </xs:choice>
                  </xs:complexType>
               </xs:element>
            </xs:schema>
            <diffgr:diffgram xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" />
         </Method_Name_Result>
      </Method_Name_Response>
   </soap:Body>
</soap:Envelope>

同じエンベロープを持つ Firefox プラグインの応答テンプレート

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <soap:Body>
      <Method_Name_Response xmlns="url">
         <Method_Name_Result>
            <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="NewDataSet">
               <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
                  <xs:complexType>
                     <xs:choice minOccurs="0" maxOccurs="unbounded">
                        <xs:element name="Temp">
                           <xs:complexType>
                              <xs:sequence>
                                 <xs:element name="response1" type="xs:long" minOccurs="0" />
                                 <xs:element name="response2" type="xs:string" minOccurs="0" />
                              </xs:sequence>
                           </xs:complexType>
                        </xs:element>
                     </xs:choice>
                  </xs:complexType>
               </xs:element>
            </xs:schema>
            <diffgr:diffgram xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
               <NewDataSet xmlns="">
                  <Temp diffgr:id="Temp1" msdata:rowOrder="0">
                     <response1>123456789</response1>
                     <response2>Android</response2>
                  </Temp>
               </NewDataSet>
            </diffgr:diffgram>
          </Method_Name_Result>
      </Method_Name_Response>
   </soap:Body>
</soap:Envelope>
4

1 に答える 1

0

問題が見つかりました。トルコ語の文字が原因でエラーが発生します。「ü」を使用するとエラーが発生しますが、使用しない場合は問題なく動作します。

于 2013-01-01T11:21:14.710 に答える