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


i have pass

<?xml version='1.0' encoding='utf-8' ?> <hello><username>test@test.com</username> <password>test</password></hello> 

to

wsdl

<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:xsd="http://www.w3.org/2001/xmlschema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:tns="http://tempuri.org/" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract" xmlns:wsa10="http://www.w3.org/2005/08/addressing" xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" name="silentmanagerapi" targetnamespace="http://tempuri.org/"> <wsp:policy wsu:id="wshttpbinding_isilentmanagerapi_policy"> <wsp:exactlyone> <wsp:all> <wsaw:usingaddressing/> </wsp:all> </wsp:exactlyone> </wsp:policy> <wsdl:types> <xsd:schema targetnamespace="http://tempuri.org/imports"> <xsd:import schemalocation="http://myurl.com/service.svc?xsd=xsd0" namespace="http://tempuri.org/"/> <xsd:import schemalocation="http://myurl.com/service.svc?xsd=xsd1" namespace="http://schemas.microsoft.com/2003/10/serialization/"/> </xsd:schema> </wsdl:types> <wsdl:message name="isilentmanagerapi_service_inputmessage"> <wsdl:part name="parameters" element="tns:service"/> </wsdl:message> <wsdl:message name="isilentmanagerapi_service_outputmessage"> <wsdl:part name="parameters" element="tns:serviceresponse"/> </wsdl:message> <wsdl:porttype name="isilentmanagerapi"> <wsdl:operation name="service"> <wsdl:input wsaw:action="http://tempuri.org/isilentmanagerapi/service" message="tns:isilentmanagerapi_service_inputmessage"/> <wsdl:output wsaw:action="http://tempuri.org/isilentmanagerapi/serviceresponse" message="tns:isilentmanagerapi_service_outputmessage"/> </wsdl:operation> </wsdl:porttype> <wsdl:binding name="wshttpbinding_isilentmanagerapi" type="tns:isilentmanagerapi"> <wsp:policyreference uri="#wshttpbinding_isilentmanagerapi_policy"/> <soap12:binding transport="http://schemas.xmlsoap.org/soap/http"/> <wsdl:operation name="service"> <soap12:operation soapaction="http://tempuri.org/isilentmanagerapi/service" style="document"/> <wsdl:input> <soap12:body use="literal"/> </wsdl:input> <wsdl:output> <soap12:body use="literal"/> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:service name="silentmanagerapi"> <wsdl:port name="wshttpbinding_isilentmanagerapi" binding="tns:wshttpbinding_isilentmanagerapi"> <soap12:address location="http://myurl.com/service.svc/service.svc"/> <wsa10:endpointreference> <wsa10:address> http://myurl.com/service.svc/service.svc </wsa10:address> </wsa10:endpointreference> </wsdl:port> </wsdl:service> </wsdl:definitions> 

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<void, void, void> {         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("<hello>" + "<username>test@test.com</username>"                     + "<password>test123</password>" + "</hello>");             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 using internet permission in androidmanifest.xml

  <uses-permission android:name="android.permission.internet"/> 

and output like

<hello>   <username>any</username>   <myoutputdata>     .     . return data     .       </myoutputdata> </silent> 

after trying 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):    @ org.ksoap2.transport.httptransportse.call(httptransportse.java:195) 08-01 13:27:54.370: w/system.err(10915):    @ org.ksoap2.transport.httptransportse.call(httptransportse.java:116) 08-01 13:27:54.390: w/system.err(10915):    @ org.ksoap2.transport.httptransportse.call(httptransportse.java:111) 08-01 13:27:54.410: w/system.err(10915):    @ com.example.testeset.mainactivity.call(mainactivity.java:105) 08-01 13:27:54.440: w/system.err(10915):    @ com.example.testeset.mainactivity$testreq.doinbackground(mainactivity.java:80) 08-01 13:27:54.460: w/system.err(10915):    @ com.example.testeset.mainactivity$testreq.doinbackground(mainactivity.java:1) 08-01 13:27:54.470: w/system.err(10915):    @ android.os.asynctask$2.call(asynctask.java:264) 08-01 13:27:54.480: w/system.err(10915):    @ java.util.concurrent.futuretask$sync.innerrun(futuretask.java:305) 08-01 13:27:54.490: w/system.err(10915):    @ java.util.concurrent.futuretask.run(futuretask.java:137) 08-01 13:27:54.500: w/system.err(10915):    @ android.os.asynctask$serialexecutor$1.run(asynctask.java:208) 08-01 13:27:54.500: w/system.err(10915):    @ java.util.concurrent.threadpoolexecutor.runworker(threadpoolexecutor.java:1076) 08-01 13:27:54.500: w/system.err(10915):    @ java.util.concurrent.threadpoolexecutor$worker.run(threadpoolexecutor.java:569) 08-01 13:27:54.500: w/system.err(10915):    @ java.lang.thread.run(thread.java:856) 

here getting exception:

androidhttptransport.call(soap_action, envelope); 

if still relevant..

first of all, should change url http://myurl.com/service.svc/service.svc. solve 404 error.

further should change

soapserializationenvelope envelope = new soapserializationenvelope(soapenvelope.ver11); 

to

soapserializationenvelope envelope = new soapserializationenvelope(soapenvelope.ver12); 

further should add wsa:to , wsa:action headers 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 helpful.

edit: try change req to:

 propertyinfo req = new propertyinfo();         req.name = "xmlstring";         req.namespace=namespace;         req.type = string.class;         req.setvalue("<hello><username>test@test.com</username><password>test</password></hello>");         request.addproperty(req); 

ie change req.name xmlstring , set namespace.


Comments

Popular posts from this blog

basic authentication with http post params android -

vb.net - Virtual Keyboard commands -

How to get multiresult with multicondition in Sql Server -