使用 SAP WSDL WebService 时出现 XmlPullParserException
我正在拼命寻找 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_ACTION, Envelope);”
上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>
它接受一个整数作为参数并返回它。 我的 NAMESPACE 和 SOAP_ACTION 字符串正确吗? 请分享您的想法。谢谢。
编辑:堆栈跟踪
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)
I'm desperately 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)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我已向 KSOAP 提供了 WSDL 文件的 URL,这是完全错误的。
您必须提供 SOAP 服务本身的 URL,该 URL 在 WSDL 文件中列出:
String SOAP_ACTION = NAMESPACE + "/" + METHOD_NAME;
在我的情况下效果很好。
感谢 Manfred Moser 和 JPriest 的回答!
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:
String SOAP_ACTION = NAMESPACE + "/" + METHOD_NAME;
works fine in my case.
Thanks Manfred Moser and JPriest for your answers!
您的肥皂操作应该是一个空字符串,如下所示:
Your soapaction should an empty string, as follow: