getting java.io.IOException: HTTP request failed, HTTP status: 404 in ksoap2 while passing xml data to soap1.2 android

匿名 (未验证) 提交于 2019-12-03 01:54:01

问题:

i have to pass

test@test.comtest

to

Wsdl

http://myurl.com/Service.svc/Service.svc

Code Tried :

import android.os.AsyncTask; import android.os.Bundle;  import android.util.Log; import android.widget.TextView; import android.app.Activity; import android.app.Dialog; import android.app.ProgressDialog; import android.content.DialogInterface; import android.content.DialogInterface.OnCancelListener;  import java.io.Writer;  import org.ksoap2.*; import org.ksoap2.serialization.*; import org.ksoap2.transport.*; import org.xmlpull.v1.XmlSerializer;  public class MainActivity extends Activity {      private static final String METHOD_NAME = "Service";      private static final String NAMESPACE = "http://tempuri.org/";      private static final String URL = "http://myurl.com/Service.svc";     final String SOAP_ACTION = "http://tempuri.org/ISilentManagerAPI/Service";      TextView tv;     StringBuilder sb;     private XmlSerializer writer;      @Override     public void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         tv = new TextView(this);         sb = new StringBuilder();         new testReq().execute();         tv.setText(sb.toString());         setContentView(tv);     }      class testReq extends AsyncTask {         Dialog dialog;          @Override         protected void onPreExecute() {             // TODO Auto-generated method stub             super.onPreExecute();             dialog = ProgressDialog.show(MainActivity.this, "Please Wait...",                     "Testing........");             dialog.setCancelable(true);             dialog.setOnCancelListener(new OnCancelListener() {                  @Override                 public void onCancel(DialogInterface dialog) {                     // TODO Auto-generated method stub                     cancel(true);                 }             });          }          @Override         protected void onPostExecute(Void result) {             // TODO Auto-generated method stub             super.onPostExecute(result);             dialog.dismiss();         }          @Override         protected Void doInBackground(Void... params) {             // TODO Auto-generated method stub             call();             return null;         }     }      public void call() {         try {              SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);              PropertyInfo req = new PropertyInfo();             req.name = "hello";             req.type = String.class;             req.setValue("" + "test@test.com"                     + "test123" + "");             request.addProperty(req);              SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(                     SoapEnvelope.VER11);             envelope.dotNet = true;             envelope.setOutputSoapObject(request);              HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);             androidHttpTransport.call(SOAP_ACTION, envelope);             SoapPrimitive result = (SoapPrimitive) envelope.getResponse();              String resultData = result.toString();             Log.i("Result", "" + resultData);              sb.append(resultData + "\n");         } catch (Exception e) {             sb.append("Error:\n" + e.getMessage() + "\n");             e.printStackTrace();         }      } }

i am using internet permission in AndroidManifest.xml

  

and output will be like

any     .     . return data     .       

After Trying this code getting exception

LogCat

08-01 13:27:53.240: W/System.err(10915): java.io.IOException: HTTP request failed, HTTP status: 404 08-01 13:27:53.300: W/System.err(10915):    at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:195) 08-01 13:27:54.370: W/System.err(10915):    at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:116) 08-01 13:27:54.390: W/System.err(10915):    at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:111) 08-01 13:27:54.410: W/System.err(10915):    at com.example.testeset.MainActivity.call(MainActivity.java:105) 08-01 13:27:54.440: W/System.err(10915):    at com.example.testeset.MainActivity$testReq.doInBackground(MainActivity.java:80) 08-01 13:27:54.460: W/System.err(10915):    at com.example.testeset.MainActivity$testReq.doInBackground(MainActivity.java:1) 08-01 13:27:54.470: W/System.err(10915):    at android.os.AsyncTask$2.call(AsyncTask.java:264) 08-01 13:27:54.480: W/System.err(10915):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 08-01 13:27:54.490: W/System.err(10915):    at java.util.concurrent.FutureTask.run(FutureTask.java:137) 08-01 13:27:54.500: W/System.err(10915):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208) 08-01 13:27:54.500: W/System.err(10915):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 08-01 13:27:54.500: W/System.err(10915):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 08-01 13:27:54.500: W/System.err(10915):    at java.lang.Thread.run(Thread.java:856)

Here i am getting Exception:

androidHttpTransport.call(SOAP_ACTION, envelope);

回答1:

If still relevant..

First of all, you should change URL to http://myurl.com/Service.svc/Service.svc. It will solve 404 error.

Further you should change

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);

to

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER12);

Further you should add wsa:To and wsa:Action headers like this:

        Element e = new Element();         e.setName("To");         e.setNamespace("http://www.w3.org/2005/08/addressing");         e.addChild(Node.TEXT,"http://myurl.com/Service.svc/Service.svc");          Element e1 = new Element();         e1.setName("Action");         e1.setNamespace("http://www.w3.org/2005/08/addressing");         e1.addChild(Node.TEXT,"http://tempuri.org/ISilentManagerAPI/Service");          envelope.headerOut = new Element[]{e,e1};

I hope it is helpful.

Edit: Try to change req to:

 PropertyInfo req = new PropertyInfo();         req.name = "xmlstring";         req.namespace=NAMESPACE;         req.type = String.class;         req.setValue("test@test.comtest");         request.addProperty(req);

ie change req.name to xmlstring and set namespace.



回答2:

Try the below

PropertyInfo req = new PropertyInfo(); req.name="silent"; req.type=String.class; req.setValue("" +""+logon+"" +""+mygameid+"" +""+mypwd+"" +"" +""+test@test.com+"" +""+test+"" +"" +""); request.addProperty(req);   


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!