Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/212.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用SAP WSDL Web服务时的XmlPullParserException_Android_Wsdl_Sap_Ksoap2 - Fatal编程技术网

Android 使用SAP WSDL Web服务时的XmlPullParserException

Android 使用SAP WSDL Web服务时的XmlPullParserException,android,wsdl,sap,ksoap2,Android,Wsdl,Sap,Ksoap2,我正在拼命寻找KSOAP2 Android中出现这种XmlPullParserException的原因。 代码如下: String NAMESPACE = "urn:sap-com:document:sap:soap:functions:mc-style"; String METHOD_NAME = "ZFanTestWs"; String SOAP_ACTION = NAMESPACE + "/" + METHOD_NAM

我正在拼命寻找KSOAP2 Android中出现这种XmlPullParserException的原因。 代码如下:

            String NAMESPACE = "urn:sap-com:document:sap:soap:functions:mc-style";
            String METHOD_NAME = "ZFanTestWs";
            String SOAP_ACTION = NAMESPACE + "/" + METHOD_NAME;
            String URL = "http://xxxx.xxx.xx:8000/sap/bc/srt/wsdl/bndg_xxx/wsdl11/allinone/standard/rpc?sap-client=xxx";

            SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);

            PropertyInfo pi = new PropertyInfo();
            pi.setName("arg0");
            pi.setValue(42);
            pi.setType(PropertyInfo.INTEGER_CLASS);
            request.addProperty(pi);

            SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
            envelope.setOutputSoapObject(request);

            HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
            androidHttpTransport.debug = true;

            try
            {
                androidHttpTransport.call(SOAP_ACTION, envelope);
                SoapPrimitive  resultsRequestSOAP = (SoapPrimitive) envelope.getResponse();
                result = resultsRequestSOAP.toString();
            }
            catch(Exception e)
            {
                e.printStackTrace();
            }
异常发生在“androidHttpTransport.call(SOAP_操作,信封);”上

HttpTransportSE的responeDump看起来与我生成的WSDL完全相同:

<wsdl:definitions targetNamespace="urn:sap-com:document:sap:soap:functions:mc-style"><wsdl:documentation><sidl:sidl/></wsdl:documentation><wsdl:types><xsd:schema attributeFormDefault="qualified" targetNamespace="urn:sap-com:document:sap:soap:functions:mc-style"><xsd:element name="ZFanTestWs"><xsd:complexType><xsd:sequence><xsd:element name="IvImporting" type="xsd:int"/></xsd:sequence></xsd:complexType></xsd:element><xsd:element name="ZFanTestWsResponse"><xsd:complexType><xsd:sequence><xsd:element name="EvExporting" type="xsd:int"/></xsd:sequence></xsd:complexType></xsd:element></xsd:schema></wsdl:types><wsdl:message name="ZFanTestWs"><wsdl:part name="parameters" element="tns:ZFanTestWs"/></wsdl:message><wsdl:message name="ZFanTestWsResponse"><wsdl:part name="parameter" element="tns:ZFanTestWsResponse"/></wsdl:message><wsdl:portType name="Z_FAN_TEST_WS"><wsdl:operation name="ZFanTestWs"><wsdl:input message="tns:ZFanTestWs"/><wsdl:output message="tns:ZFanTestWsResponse"/></wsdl:operation></wsdl:portType><wsdl:binding name="DEFAULT" type="tns:Z_FAN_TEST_WS"><soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/><wsdl:operation name="ZFanTestWs"><soap:operation soapAction="" style="document"/><wsdl:input><soap:body use="literal"/></wsdl:input><wsdl:output><soap:body use="literal"/></wsdl:output></wsdl:operation></wsdl:binding><wsdl:service name="Z_FAN_TEST_WS"><wsdl:port name="DEFAULT" binding="tns:DEFAULT"><soap:address location="http://xxxx.xxx.xx:8000/sap/bc/srt/rfc/sap/z_fan_test_ws/xxx/z_fan_test_ws/default"/></wsdl:port></wsdl:service></wsdl:definitions>

它接受一个整数作为参数并返回它。 我的命名空间和SOAP\u操作字符串是否正确? 请分享你的想法。谢谢

编辑:堆栈跟踪

01-17 10:12:11.090: W/System.err(555): org.xmlpull.v1.XmlPullParserException: expected: START_TAG {http://schemas.xmlsoap.org/soap/envelope/}Envelope (position:START_TAG <{http://schemas.xmlsoap.org/wsdl/}wsdl:definitions targetNamespace='urn:sap-com:document:sap:soap:functions:mc-style'>@1:429 in java.io.InputStreamReader@41076710) 
01-17 10:12:11.180: W/System.err(555):  at org.kxml2.io.KXmlParser.require(KXmlParser.java:2046)
01-17 10:12:11.190: W/System.err(555):  at org.ksoap2.SoapEnvelope.parse(SoapEnvelope.java:127)
01-17 10:12:11.210: W/System.err(555):  at org.ksoap2.transport.Transport.parseResponse(Transport.java:100)
01-17 10:12:11.221: W/System.err(555):  at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:195)
01-17 10:12:11.241: W/System.err(555):  at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:95)
01-17 10:12:11.260: W/System.err(555):  at webservice.test.WebServiceTestActivity$ServiceCall.doInBackground(WebServiceTestActivity.java:111)
01-17 10:12:11.281: W/System.err(555):  at webservice.test.WebServiceTestActivity$ServiceCall.doInBackground(WebServiceTestActivity.java:1)
01-17 10:12:11.292: W/System.err(555):  at android.os.AsyncTask$2.call(AsyncTask.java:264)
01-17 10:12:11.310: W/System.err(555):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
01-17 10:12:11.331: W/System.err(555):  at java.util.concurrent.FutureTask.run(FutureTask.java:137)
01-17 10:12:11.340: W/System.err(555):  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
01-17 10:12:11.361: W/System.err(555):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
01-17 10:12:11.371: W/System.err(555):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
01-17 10:12:11.390: W/System.err(555):  at java.lang.Thread.run(Thread.java:856)
01-17 10:12:11.090:W/System.err(555):org.xmlpull.v1.XmlPullParserException:应为:开始标记{http://schemas.xmlsoap.org/soap/envelope/}信封(位置:java.io中的START_标记@1:429)。InputStreamReader@41076710) 
01-17 10:12:11.180:W/System.err(555):位于org.kxml2.io.KXmlParser.require(KXmlParser.java:2046)
01-17 10:12:11.190:W/System.err(555):位于org.ksoap2.SoapEnvelope.parse(SoapEnvelope.java:127)
01-17 10:12:11.210:W/System.err(555):位于org.ksoap2.transport.transport.parseResponse(transport.java:100)
01-17 10:12:11.221:W/System.err(555):位于org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:195)
01-17 10:12:11.241:W/System.err(555):位于org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:95)
01-17 10:12:11.260:W/System.err(555):在webservice.test.webservicestactivity$ServiceCall.doInBackground(webservicestactivity.java:111)
01-17 10:12:11.281:W/System.err(555):在webservice.test.webservicestactivity$ServiceCall.doInBackground(webservicestactivity.java:1)
01-17 10:12:11.292:W/System.err(555):位于android.os.AsyncTask$2.call(AsyncTask.java:264)
01-17 10:12:11.310:W/System.err(555):在java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
01-17 10:12:11.331:W/System.err(555):位于java.util.concurrent.FutureTask.run(FutureTask.java:137)
01-17 10:12:11.340:W/System.err(555):在android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
01-17 10:12:11.361:W/System.err(555):位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
01-17 10:12:11.371:W/System.err(555):位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
01-17 10:12:11.390:W/System.err(555):位于java.lang.Thread.run(Thread.java:856)

您的soapaction应该是一个空字符串,如下所示:

String SOAP_ACTION = "";

我向KSOAP提供了WSDL文件的URL,这是完全错误的。 您必须提供SOAP服务本身的URL,该URL列在WSDL文件中:

<soap:address location="http://xxxx.xxx.xx:8000/sap/bc/srt/rfc/sap/z_fan_test_ws/xxx/z_fan_test_ws/default"/>

字符串SOAP\u ACTION=NAMESPACE+“/”+方法\u NAME; 对我来说很好用


感谢Manfred Moser和JPriest的回答

异常的堆栈跟踪将告诉您..不幸的是,堆栈跟踪没有多大帮助-我已经在上面添加了它。它在正确接收的WSDL中不知何故看不到开始标记。您必须调试它并查看发生了什么。它可能是出了故障或是什么的,弄得一团糟。有一件事让我觉得您做错了,那就是响应看起来像wsdl。。它不应该。。