1

SAP SOAP Web サービスから応答を取得したいのですが、例外が発生します。

私は次のコードを使用しています:

package com.veee.pack;
import java.io.IOException;
import android.app.Activity;
import android.os.Bundle;
import java.io.IOException;
import org.apache.http.client.HttpClient;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.SoapFault;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.AndroidHttpTransport;
import org.ksoap2.transport.HttpTransportBasicAuth;
import org.ksoap2.transport.HttpTransportSE;
import org.w3c.dom.Element;
import org.xmlpull.v1.XmlPullParserException;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class WeservicesExampleActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        //getting these values from wsdl file
       //username and password appended as URL Parameters
         final String NAMESPACE = "urn:sap-com:document:sap:soap:functions:mc-style";
         final String URL = "http://*********:8000/sap/bc/srt/wsdl/srvc_14DAE9C8D79F1EE196F1FC6C6518A345/wsdl11/allinone/ws_policy/document?sap-client=800&sap-user******&sap-password=************";
         final String METHOD_NAME = "Z_GET_CUST_GEN";
         final String SOAP_ACTION = "urn:sap-com:document:sap:soap:functions:mc-style/Z_GET_CUST_GEN";

        SoapObject request =new SoapObject(NAMESPACE, METHOD_NAME);

        request.addProperty("Input", "1460");
        request.addProperty("Langu", "d");

        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER12);

        envelope.setOutputSoapObject(request);

        HttpTransportSE httptransport=new HttpTransportSE(URL);
        httptransport.debug = true;
        try {

          //calling the services
         httptransport.call(SOAP_ACTION, envelope);

         Object result = (Object) envelope.getResponse();

        //getting the Response Here.

         System.out.println("Result" + result.toString());

        }
        catch (IOException e) 
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (XmlPullParserException e) {
        // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

アプリケーションをデバッグすると、終了します

httptransport.call(SOAP_ACTION, envelope); 

Androidでksoap2を使用していくつかの例を実行しましたが、正常に動作しています。logcat で次の例外が発生しました。

04-24 12:19:17.935: WARN/System.err(1569): java.net.SocketTimeoutException
04-24 12:19:17.935: WARN/System.err(1569):     at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:130)

この問題を克服するための提案をするか、Android で XML を介してリクエストを送信し、レスポンスを受信する方法を送信してください。

前もって感謝します.....

4

3 に答える 3

1

推奨されていないため、Android で SOAP を使用しないでください。

Android で公式にサポートされている Restful Web サービスを使用します。Web サービス プロバイダーが Restful サービスを提供できない場合は、アプリが機能しない場合や、一部の Android デバイスで機能しない場合があるなどの問題が発生することがあります。

複数の ksoap2 ドライバーを使用した ksoap2 実装の問題を解決するには、ネットワーク呼び出しのロジックを別のスレッドに配置します。

httptransport.call(SOAP_ACTION, エンベロープ); への呼び出し 大量のメモリを消費し、より多くの時間を消費するため、メイン スレッドでこの呼び出しを使用しないでください。新しい作成エミュレーターとデバイスの 1 つを試してください。KSOAP2 は、Android デバイスの 20 ~ 50% で動作します。同じメーカーのデバイスでは機能しない場合があります。たとえば、HTC Sense 2.3.4 では機能し、HTC Sense のバージョン 2.3.5 では機能しない場合があります。

Restful Webservices を使用することをお勧めします。

于 2012-07-12T06:14:03.567 に答える
0

依存関係のある ksoap2 ライブラリ 2.5.2 を使用して、タイムアウト制限を手動で設定できます。

HttpTransportSE androidHttpTransport = new HttpTransportSE(URL,Time_Out);
于 2012-04-26T06:46:48.403 に答える
0

socketTimeoutException は、ソケットが特定の間隔内で読み取りまたは受け入れを行うことができない場合に発生します。このような事態に備え、コード内で try/catch を使用してこれらの状況に対処する必要があります。

Web サービス全般にアクセスするため。アプリandroid.permission.INTERNETのマニフェストに が含まれていることを確認し、エミュレーターから Web サービスにアクセスできることを確認してください。この投稿のコードを使用して、サービスに到達できるかどうかを確認できます。

于 2012-04-26T06:40:45.113 に答える