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.

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top