Выходной сигнал kSOAP2 / org.xmlpull.v1.xmlpullparserexception ожидается start_tag - PullRequest
3 голосов
/ 09 декабря 2010

У меня есть стандартный код для вызова .net webservice

Я получаю exception "org.xmlpull.v1.xmlpullparserexception expected start_tag" в строке

transportSE.call(SOAP_ACTION,soapSerializationEnvelope);

Однако, если я вызываю тот же веб-сервис из .NET code, я получаю правильно структурированный правильный вывод.

В первую очередь кажется, что из kSOAP2 есть определенный вывод, который он получает, но когда он идет на дальнейший анализ объектов w.r.t SoapPrimitive, он завершается неудачей.

Итак, есть ли другой способ посмотреть на фактический результат (фактический конверт мыла), который получен, и затем может быть обработан сам соответствующим образом.

Ответы [ 5 ]

2 голосов
/ 06 июня 2013

Я получаю это исключение START_TAG, но в моем случае это было потому, что мои значения для

METHOD_NAME="";
NAMESPACE ="";      
SOAP_ACTION ="";
URL ="";

были неверны.

Теперь Как узнать правильные значения этих параметров вы можете Посмотрите мой другой ответ здесь

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);
2 голосов
/ 07 апреля 2011

Я расследую похожую проблему, которая у меня возникла.Наткнулся на этот комментарий

Когда я использую SoapEnvelope.VER11, он работает нормально, но когда я использую SoapEnvelope.VER12, он выдает мне ошибку: "org.xmlpull.v1.XmlPullParserException: Ожидается: START_TAG",

http://groups.google.com/group/android-developers/browse_thread/thread/b585862b6e939fd2

Возможно, у нас возникли проблемы с совместимостью версии мыла.Кроме того, при подключении к службе точка-сеть вам может потребоваться установить envelope.dotNet = true; .. но вы, вероятно, сделали это

1 голос
/ 07 апреля 2011

Хорошо, теперь, когда я решил мою первоначальную проблему, ударил эту!

Я обнаружил, что ksoap2 не может проанализировать ответ ... в частности, org.kxml2.io.KXmlParser.require (тип, пространство имен, имя) выдал следующее исключение.

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) 

Обратите внимание, что тег h1. Это приходит от <h1>404 Not Found</h1> ... так что, да, учтите, что ваш ответ может быть с веб-сайта, но не с вашего веб-сервиса:)

Надеюсь, что однажды кому-нибудь поможет

0 голосов
/ 26 октября 2013


Убедившись, что URL веб-сервиса достижим с помощью приведенного ниже кода, просмотрите переменную urlc.getResponseCode() для кода ответа при изменении ip с localhost, fixed, внешний и наконец 10.0.2.2

public static boolean isNetworkAvailable() {
///1384221/kak-proverit-dostup-v-internet-na-android-inetaddress-nikogda-ne-istekaetcomment24565402_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;
        }

    }

Для меня я получил эту подсказку "не пропущенный символ s ниже"

[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

Остальная часть журнала Tomcat и т. Д.

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)

И да, после отслеживания LogCat я не проверил журнал сервера Tomcat, если сервис был успешно протестирован SoapUi , вы должны отслеживать все журналы в каждом тесте изменений, я даже забыл сначала запустить служба базы данных, так что будьте осторожны:)

Мыльный звонок

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 My Db Is Oracle и веб-сервис мыльные и используются axis2-1.2 bin И протестировано на Android 4.0 выше код ответа ошибки 500 Внутренняя ошибка

0 голосов
/ 16 декабря 2011

У меня была почти такая же ошибка, моим исключением была эта "позиция: START_TAG @ 2: 7"

, но я исправил, потому что я неправильно назвал параметр, имя должно быть точнокак указано в XSD.

     SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
     request.addProperty("arg0_java_lang_String", "Club");

в методе addPropery Я использовал неправильное имя параметра.

...