XmlPullParserException when using SAP WSDL WebService

≡放荡痞女 提交于 2020-02-05 04:53:04

问题


I'm desperatly searching for the cause of this XmlPullParserException in KSOAP2-Android. Here is the code:

            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();
            }

The exception occurs on "androidHttpTransport.call(SOAP_ACTION, envelope);"

The responeDump of the HttpTransportSE looks exactly like my generated 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>

It takes an integer as a parameter and returns it. Are my NAMESPACE and SOAP_ACTION strings correct? Please share your ideas. Thanks.

edit: stack trace

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)

回答1:


I've provided the URL of the WSDL file to KSOAP, which is completely wrong. You have to supply to URL of the SOAP service itself, which is listed in the WSDL file:

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

String SOAP_ACTION = NAMESPACE + "/" + METHOD_NAME; works fine in my case.

Thanks Manfred Moser and JPriest for your answers!




回答2:


Your soapaction should an empty string, as follow:

String SOAP_ACTION = "";


来源:https://stackoverflow.com/questions/8882963/xmlpullparserexception-when-using-sap-wsdl-webservice

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!