如何将localhost SOAP webservice连接到我的android

时间:2013-09-26 05:18:16

标签: android web-services soap wsdl

My server image

我正在研究webservice我对网络服务没有任何想法。我看起来相同的样本webservices(如实时SOAP服务)它工作正常。我将在localhost i dont know whether my URL,Namespace and methodName are declared correctly中运行web服务。

以下代码是我的WSDL代码

<definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"   
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:xs="http://www.w3.org/2001/XMLSchema" 
xmlns:xs0="http://www.processmaker.com"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"   
xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" 
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" 
xmlns="http://schemas.xmlsoap.org/wsdl/" 
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" 
targetNamespace="http://www.processmaker.com">
<types>
<xs:schema elementFormDefault="qualified"     
targetNamespace="http://www.processmaker.com">
<xs:element name="login">
<xs:complexType>
<xs:sequence>
<xs:element name="userid" type="xs:string"/>
<xs:element name="password" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</definitions>

我调用上述服务的android代码:

public class MainActivity extends Activity {
String str = null;
private static final String SOAP_ACTION = "http://www.processmaker.com/Login";
private static final String METHOD_NAME = "Login";
private static final String NAMESPACE = "http://www.processmaker.com/";
private static final String URL = "http://192.168.1.5/sysworkflow/en/neoclassic/setup/main";
SoapObject request;
TextView tv;

@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
            .permitAll().build();
    StrictMode.setThreadPolicy(policy);
    setContentView(R.layout.activity_main);

    tv = (TextView) findViewById(R.id.textView1);


    DownloadWebPageTask task = new DownloadWebPageTask();
    task.execute();
}


private class DownloadWebPageTask extends AsyncTask<String, Void, String> {
    @Override
    protected String doInBackground(String... urls) {
      String response = "";

        try {
            request = new SoapObject(NAMESPACE, METHOD_NAME);
            PropertyInfo weightProp = new PropertyInfo();
            weightProp.setName("USER_ID");
            weightProp.setValue("admin");
            weightProp.setType(String.class);
            request.addProperty(weightProp);

            PropertyInfo fromProp = new PropertyInfo();
            fromProp.setName("PASSWORD");
            fromProp.setValue("admin");
            fromProp.setType(String.class);
            request.addProperty(fromProp);

            /*
             * PropertyInfo toProp =new PropertyInfo(); toProp.setName("ToUnit");
             * toProp.setValue(toUnit); toProp.setType(String.class);
             * request.addProperty(toProp);
             */
            final SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
                    SoapEnvelope.VER11);
            envelope.dotNet = true;
            envelope.setOutputSoapObject(request);
            final HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);

            try {
                androidHttpTransport.call(SOAP_ACTION, envelope);
                SoapPrimitive response1 = (SoapPrimitive) envelope.getResponse();
                Log.i("myApp", response1.toString());
            //  tv.setText(response.toString());
                Toast.makeText(getApplicationContext(), response.toString(),
                        Toast.LENGTH_LONG).show();

            } catch (Exception e) {
                tv.setText(e.toString());

                e.printStackTrace();

            }
          }

         catch (Exception e) {
          e.printStackTrace();
        }
      return response;
    }

    @Override
    protected void onPostExecute(String result) {
      tv.setText(result);
    }
  }
请一些人帮我做这个..

1 个答案:

答案 0 :(得分:1)

你喜欢这样使用。

 private static final String SOAP_ACTION = "http://www.processmaker.com/Login";
private static final String METHOD_NAME = "Login";
private static final String NAMESPACE = "http://www.processmaker.com";
private static final String URL = "http://10.0.2.2/sysworkflow/en/classic/services/wsdl2";

SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
request.addProperty("userid", "admin");
request.addProperty("password", "admin");

  SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
  SoapEnvelope.VER11);
  envelope.dotNet = true;
  envelope.setOutputSoapObject(request);

  HttpTransportSE ht = new HttpTransportSE(URL);

 try {
    ht.call(SOAP_ACTION, envelope);
    final SoapPrimitive response = (SoapPrimitive) envelope.getResponse();
    str = response.toString();

   } catch (Exception e) {
 e.printStackTrace();

  }
    Log.d("WebRespone", str);

希望这会对你有所帮助。