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
Post a Comment