Android kSOAP2输出/org.xmlpull.v1.xmlpullparserexception预期开始标记

Android kSOAP2输出/org.xmlpull.v1.xmlpullparserexception预期开始标记,android,android-ksoap2,Android,Android Ksoap2,我有一个标准的代码来调用.net webservice 我在第行获得异常“org.xmlpull.v1.xmlpullparserexception预期开始标记” transportSE.call(SOAP_ACTION,soapSerializationEnvelope); 但是,如果我从.netcode调用相同的Web服务,我会得到结构良好的适当输出 主要似乎是从kSOAP2中,它得到了一个明确的输出,但是当它进一步解析w.r.t SoapPrimitive对象时,它失败了 那么,是否有其

我有一个标准的代码来调用
.net webservice

我在第行获得异常“org.xmlpull.v1.xmlpullparserexception预期开始标记”

transportSE.call(SOAP_ACTION,soapSerializationEnvelope);
但是,如果我从
.netcode
调用相同的Web服务,我会得到结构良好的适当输出

主要似乎是从
kSOAP2
中,它得到了一个明确的输出,但是当它进一步解析w.r.t SoapPrimitive对象时,它失败了


那么,是否有其他方法可以查看接收到的实际输出(实际的soap信封),然后自己对其进行适当的解析。

我正在调查一个类似的问题。无意中发现了这一评论

当我使用SoapEnvelope.VER11时,它工作正常,但当我使用 SoapEnvelope.VER12,它给了我一个错误: “org.xmlpull.v1.XmlPullParserException:应为:开始标记”


也许我们在soap版本方面存在兼容性问题。此外,连接到点网服务时,您可能需要设置
envelope.dotNet=true。。但是你可能已经做到了

现在我已经解决了我原来的问题,点击这个

我发现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) 
WARN/System.err(2330):org.xmlpull.v1.XmlPullParserException:应为:开始标签{http://www.w3.org/2001/12/soap-envelope}信封(位置:java.io中的START_标记@1:4)。InputStreamReader@47ff3050) 
请注意h1标记。来自
404未找到的
。。。因此,是的,请注意您的响应可能来自网站,而不是您的web服务:)


希望有一天能帮助别人我也犯了同样的错误,我的例外是“位置:开始标记@2:7”

但我已经修复了,因为我以错误的方式命名了一个参数,该名称必须与XSD上指定的完全相同

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

addProperty方法中,我使用了一个错误的参数名。

我得到了这个开始标记异常,但在我的情况下,这是因为

METHOD_NAME="";
NAMESPACE ="";      
SOAP_ACTION ="";
URL ="";
这是不对的

现在,如何找出这些参数的正确值,您可以


确保Web服务的url可访问后,使用以下代码查看变量
urlc.getResponseCode()
获取响应代码,同时将ip从本地主机、固定、外部更改为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;
        }

    }
对我来说,我得到的提示是“不是下面缺少的字符s

尝试调用服务方法登录时发生异常 org.apache.axis2.AxisFault:命名空间不匹配要求http://services.univ.rss 建立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服务器日志eve如果服务测试成功,您应该在每次更改测试中监视所有日志,我甚至一开始忘记启动数据库服务,所以请小心:)

Soap调用

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;

    }
public SoapObject SoapCall(Vector propertyInfo)
{       
整数参数ssize=propertyInfo.size();
//初始化soap请求+添加参数
SoapObject请求=新的SoapObject(名称空间、方法名称);

对于(int i=0;iis)您的.NET Web服务返回一个基元类型?如果不是,那么您应该尝试使用SoapObject代替SoapPrimitive类型。它返回一个字符串,所以是的……SoapObject应该在这里,但这不是我面临的问题。它在transportSE.call(SOAP\u操作,soapSerializationEnvelope)上卡住了;那么,我如何查看实际/原始soapenvelope…以进行验证,因为在调用方法中,解析异常发生时,我看到调用“transportSE.requestDump”时信封完全符合要求,调用“transportSE.responseDump”时获得空字符串,调用“soapSerializationEnvelope.bodyIn”时获得空o/p…任何输入的家伙…我真的卡住了…我的意思是我看不出有什么不同的事情要做,主要是其他非移动客户端能够从相同的给定web服务获取所需的响应
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
        }