ksoAp2 output / org.xmlpull.v1.xmlpullparserexception ожидается start_tag

StackOverflow https://stackoverflow.com/questions/4395320

  •  10-10-2019
  •  | 
  •  

Вопрос

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

я получил exception "org.xmlpull.v1.xmlpullparserexception expected start_tag" в линии

transportSE.call(SOAP_ACTION,soapSerializationEnvelope);

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

В первую очередь кажется, что из kSOAP2, Существует определенный результат, который он получает, но когда он идет, чтобы разобраться в дальнейших возможностях, он не работает.

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

Это было полезно?

Решение

Что ж, теперь, когда я решил свою оригинальную проблему, ударила по этой!

Я обнаружил, что 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> ... так что да, имейте в виду, что ваш ответ может быть с веб -сайта, но не ваш веб -сервис :)

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

Другие советы

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

Когда я использую soapenvelope.ver11, он работает нормально, но когда я использую Soapenvelope.ver12, это дает мне ошибку: «org.xmlpull.v1.xmlpullparserexception: ожидается: start_tag».

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

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

Я получал это исключение 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);

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

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

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

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


Убедившись, что URL -адрес веб -сервиса достижимый Используя приведенный ниже код, наблюдая за переменной urlc.getResponseCode() для кода ответа при изменении IP с Localhost, фиксированный, внешний и, наконец, до 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;
        }

    }

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

[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 я не проверял журнал Thamcat Server Eve, если служба была проверена Мыло Успешно, вы должны отслеживать все журналы в каждом тесте на изменение, я даже сначала забыл запустить службу базы данных, так что будьте осторожны :)

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

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
        }

Пса Мой БД - это Oracle, а веб -сервис - мыло и используется Axis2-1.2 Bin И протестирован на Android 4.0. Приведенный выше код ответа на ошибку был 500 Внутренняя ошибка

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top