2

私は Android で Web サービスを使い始めており、次のチュートリアルに従いました。Apache Axis2 と Eclipseを使用して Java で Web サービスを作成し、Web サービスを作成して使用します。このチュートリアルでは、Java でのクライアント側アプリケーションについて説明しますが、他のいくつかのチュートリアルでは、次のように Android で WS を使用することができました。

package com.android.webservices;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class AddNumbersWSActivity extends Activity {
/** Called when the activity is first created. */

private String METHOD_NAME = "addTwoNumbers"; // our webservice method name
private String NAMESPACE = "http://sencide.com"; // Here package name in webservice with reverse order.
private String SOAP_ACTION = "http://sencide.com/addTwoNumbers"; // NAMESPACE + method name
private static final String URL = "http://192.168.1.214:8080/axis2/services/FirstWebService?wsdl"; // you must use ipaddress here, don’t use Hostname or localhost

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Button addButton = (Button) findViewById(R.id.button1);

    addButton.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            try
            {
                SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
                EditText num1 = (EditText) findViewById(R.id.editText1);
                EditText num2 = (EditText) findViewById(R.id.editText2);
                request.addProperty("firstNumber", Integer.valueOf(num1.getText().toString()));
                request.addProperty("secondNumber", Integer.valueOf(num2.getText().toString()));
                SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
//                  envelope.dotNet = true;
                    envelope.setOutputSoapObject(request);
                    HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
                    androidHttpTransport.call(SOAP_ACTION,envelope);
                    Object result = envelope.getResponse();
                    System.out.println("Result : " + result.toString());
                    ((TextView) findViewById (R.id.textView4)).setText(result.toString());
                } catch (Exception E) {
                    E.printStackTrace();
                }
            }
        });

    }
}

しかし、Android での WS の使用についていくつか質問があります。

  1. ここでわかるように、kSOAP2 ライブラリは非推奨です...このライブラリを引き続き使用する必要がありますか、それとも別のツールが必要ですか? はいの場合、どちらですか?
  2. サービスの WSDL だけを使用してNAMESPACEMETHOD_NAME、を知ることは可能ですか?SOAP_ACTION
  3. WSDL (Java アプリケーションに使用される WSDL2Java ツールなど) を使用してコードを自動的に生成できますか?
  4. そのaddProperty(String name, Object value)方法は任意nameでいいのか、それともルールに従えばいいのか。

前もって感謝します!

4

1 に答える 1

1

Apache AxisはJava用であり、Androidプラットフォームでは機能しません。Ksoap2ライブラリは、これに代わるものであり、AndroidでWebサービスを利用するために主に使用されるツールです。あなたの質問のために:

1-今日[15.5.2012]ここで4日前の最後のコミットを見ることができます

2-はい、可能です。名前空間は次のように記述されます。

<wsdl:definitions targetNamespace="http://tempuri.org/">

また、メソッド名は次のように記述されます。

<s:element name="YourMethodName">

また、SOAPアクションは、一般的にNAMESPACE+METHOD_NAMEで構成されます。

3-私が知っているように、今のところよく書かれたプロジェクトはありません。

4-WSDLの属性名と大文字と小文字の区別に一致する必要があるルールに従う必要があります

于 2012-05-15T10:40:02.940 に答える