kSOAP2 Ausgang / org.xmlpull.v1.xmlpullparserexception erwartet start_tag
-
10-10-2019 - |
Frage
Ich habe einen Standard-Code ein .net webservice
anrufen
ich exception "org.xmlpull.v1.xmlpullparserexception expected start_tag"
in Zeile
transportSE.call(SOAP_ACTION,soapSerializationEnvelope);
Wenn ich jedoch die gleiche Webservice von einem .NET code
nenne ich eine gut strukturierte korrekte Ausgabe erhalten, wie gewünscht.
Es scheint in erster Linie, dass von kSOAP2
, gibt es eine bestimmte Ausgabe ist, dass es nur geht, aber wenn es weiter zu analysieren geht w.r.t SoapPrimitive Objekte, versagt es.
Also, gibt es andere Art und Weise zu Blick auf die aktuelle Ausgabe (Ist-Seife Umschlag) empfangen und dann Parse es sein kann, mich angemessen.
Lösung
Nun gut, dass ich mein ursprüngliches Problem gelöst habe schlugen diese!
fand ich, dass ksoap2 konnte die Antwort nicht analysiert ... speziell org.kxml2.io.KXmlParser.require (Typ, Namespace, Name) wirft die folgende Ausnahme.
WARN/System.err(2330): org.xmlpull.v1.XmlPullParserException: expected: START_TAG {http://www.w3.org/2001/12/soap-envelope}Envelope (position:START_TAG <h1>@1:4 in java.io.InputStreamReader@47ff3050)
Beachten Sie, dass h1-Tag. Das kommt von <h1>404 Not Found</h1>
... also ja, beachten Sie Ihre Antwort von einer Website sein kann, aber nicht Ihren Web-Service:)
Ich hoffe, das hilft jemand 1 Tag
Andere Tipps
Ich untersuche ein ähnliches Problem, das ich bin. Stolperte über diesen Kommentar
Wenn ich SoapEnvelope.VER11 verwenden, es funktioniert gut, aber wenn ich SoapEnvelope.VER12, es gibt mir eine Fehlermeldung: "Org.xmlpull.v1.XmlPullParserException: erwartet: START_TAG".
http://groups.google.com/group/android- Entwickler / browse_thread / thread / b585862b6e939fd2
Vielleicht haben wir Kompatibilitätsprobleme in Bezug auf die Seife Version. Auch einen Verbindungs ??dot net Service, den Sie Satz envelope.dotNet = true;
benötigen .. aber du hast wohl getan,
Ich habe diese START_TAG Ausnahme erhalten, aber in meinem Fall war es, weil meine Werte für
METHOD_NAME="";
NAMESPACE ="";
SOAP_ACTION ="";
URL ="";
war nicht korrekt.
Wie jetzt die richtigen Werte dieser Parameter, um herauszufinden, können Sie hier meine andere Antwort Check out
SoapObject req = new SoapObject(NAMESPACE,METHOD_NAME);
//SoapObject req = new SoapObject(Namespace_Server,MethodName_Server);
//req.addProperty("ImageData", Base64.encode(data));
req.addProperty("ImageData", data);
req.addProperty("login", CommonStaticData.getusername());
req.addProperty("password",CommonStaticData.getpassword());
req.addProperty("recipeId",FileID);
MarshalBase64 mbase = new MarshalBase64();// marshal is used to serialize the byte array
SoapSerializationEnvelope envelop = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelop.bodyOut = req;
envelop.encodingStyle = SoapSerializationEnvelope.ENC2001;
envelop.dotNet = true;
envelop.setOutputSoapObject(req);
HttpTransportSE aht = new HttpTransportSE(URL);
mbase.register(envelop);
aht.call(SOAP_ACTION,envelop);
Ich hatte fast den gleichen Fehler, meine Ausnahme war diese "Position: START_TAG @ 2: 7"
aber ich behoben haben, weil ich in einer falschen Weise einen Parameter wurde die Benennung, muss der Name genau wie wird auf dem XSD angegeben.
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
request.addProperty("arg0_java_lang_String", "Club");
in der addPropery Methode, die ich einen falschen Parameternamen verwendet hat.
Nachdem sichergestellt ist die URL der Webservice ist erreichbar , indem Sie den folgenden Code unter Verwendung von Variable beobachten urlc.getResponseCode()
für Response-Code, während der Änderung der IP von localhost, fest, externe und schließlich auf 10.0.2.2
public static boolean isNetworkAvailable() {
//http://stackoverflow.com/questions/1560788/how-to-check-internet-access-on-android-inetaddress-never-timeouts/4009133#comment24565402_4009133
/* ConnectivityManager cm =
(ConnectivityManager) _context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
if (netInfo != null && netInfo.isConnected()) {//netInfo.isConnectedOrConnecting()
return true;
}
return false;*/
//http://stackoverflow.com/questions/5474089/how-to-check-currently-internet-connection-is-available-or-not-in-android?rq=1
boolean connected = false;
ConnectivityManager connectivityManager = (ConnectivityManager)_context.getSystemService(Context.CONNECTIVITY_SERVICE);
if(connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.CONNECTED ||
connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.CONNECTED) {
//we are connected to a network
connected=true;
return connected;
}
else
{
connected=false;
return false;
}
}
public static boolean hasActiveInternetConnection() {
if (isNetworkAvailable()) {
try {
//String url = "http://www.google.com",
String url = "http://10.0.2.2:8089/UNIV_AXIS_DYN_WEB/services/ServiceMethods?wsdl",
proxy = "proxy.rss.jo",
port= "8080";
URL server = new URL(url);
Properties systemProperties = System.getProperties();
/*systemProperties.setProperty("http.prosyHost",proxy);
systemProperties.setProperty("http.prosyHost",port);*/
HttpURLConnection urlc = (HttpURLConnection) (server.openConnection());
urlc.setRequestProperty("User-Agent", "Test");
urlc.setRequestProperty("Connection", "close");
urlc.setConnectTimeout(500);
urlc.connect();
System.out.println(urlc.getResponseCode());
return (urlc.getResponseCode() == 200);
} catch (IOException e) {
Log.e(LOG_TAG, "Error checking internet connection", e);
return false;
}
} else {
Log.d(LOG_TAG, "No network available!");
return false;
}
}
Für mich habe ich diesen Hinweis "nicht das fehlende Zeichen s in der unter"
[ERROR] Exception occurred while trying to invoke service method login
org.apache.axis2.AxisFault: namespace mismatch require http://services.univ.rss found http://service.univ.rss
Der Rest der Log-tomcat etc
at org.apache.axis2.rpc.receivers.RPCUtil.invokeServiceClass(RPCUtil.java:190)
at org.apache.axis2.rpc.receivers.RPCMessageReceiver.invokeBusinessLogic(RPCMessageReceiver.java:117)
at org.apache.axis2.receivers.AbstractInOutMessageReceiver.invokeBusinessLogic(AbstractInOutMessageReceiver.java:40)
at org.apache.axis2.receivers.AbstractMessageReceiver.receive(AbstractMessageReceiver.java:114)
at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:181)
at org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRequest(HTTPTransportUtils.java:172)
at org.apache.axis2.transport.http.AxisServlet.doPost(AxisServlet.java:146)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Unknown Source)
Und ja nach dem LogCat Tracing i nicht überprüfen th log Vorabend Tomcatbediener, wenn der Dienst von soapUI erfolgreich, sollten Sie alle Protokolle in jeder Änderung Test überwachen, ich vergaß sogar auf den ersten sein, die Datenbank-Dienst zu starten, so vorsicht:)
Die Soap Anruf
public SoapObject SoapCall(Vector<PropertyInfo> propertyInfo)
{
Integer parametersSize = propertyInfo.size();
//Initialize soap request + add parameters
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
for(int i=0;i<parametersSize;i++)
{
request.addProperty(propertyInfo.get(i));
}
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
//envelope.dotNet = false; if service of type asmx .NET
envelope.setOutputSoapObject(request);
Log.d("App Log c ","c");
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
try {
System.out.println(androidHttpTransport.getPort());
// Make the soap call.
//this is the actual part that will call the webservice
androidHttpTransport.call(SOAP_ACTION, envelope);
SoapPrimitive response = (SoapPrimitive)envelope.getResponse();
//Log.i("App Log 1 ", response.toString());
} catch (Exception e) {
e.printStackTrace();
}
// Get the SoapResult from the envelope body.
SoapObject result = (SoapObject)envelope.bodyIn;
Log.i("App Log 2 ", result.toString());
Log.i("App Log 2 ", result.getProperty(0).toString());
return result;
}
Vector<PropertyInfo> vectorProperyInfo = new Vector<PropertyInfo>();
PropertyInfo userProp = new PropertyInfo();
userProp.setName("userName");
userProp.setValue(username);
userProp.setType(String.class);
vectorProperyInfo.addElement(userProp);
PropertyInfo passProp = new PropertyInfo();
passProp.setName("pass");
passProp.setValue(password);
passProp.setType(String.class);
vectorProperyInfo.addElement(passProp);
SoapObject result = soapUtil.SoapCall(vectorProperyInfo);
if (result != null && result.getProperty(0).toString().equals("1")) {
return "LOGIN_SUCCESS";// for a student
}
PS Mein Db Oracle und Webservice ist und Seife verwendet axis2-1.2 sind Und war 500 auf Android 4.0 der obigen Fehlerantwortcode getestet Interner Fehler