我在Android应用中使用KSOAP2库来调用SOAP服务。代码在2.2版的模拟器中运行良好。但是当我尝试在我的手机(HTC Wildfire)中运行应用程序(也是2.2)时,我得到XMLPullParser异常...看到这个link但是没有人回复那个。另外,看到另一个讨论{ {3}}但并不完全明白那里的建议。有人可以告诉我如何解决这个问题吗?或者是否有其他可靠的方法来使用我可以使用的SOAP服务?请在下面找到我的代码和日志。
SoapObject request=new SoapObject(NAMESPACE, METHOD_NAME);
SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet=true;
envelope.setOutputSoapObject(request);
envelope.setOutputSoapObject(request);
envelope.implicitTypes = false;
HttpTransportSE transport=new HttpTransportSE(URL);
try{
Log.v("Inside","Inside try");
transport.debug = true;
transport.call(SOAP_ACTION, envelope);
String xml=transport.responseDump;
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser xpp = factory.newPullParser();
xpp.setInput( new StringReader ( xml ) );
int eventType = xpp.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
if(eventType == XmlPullParser.START_DOCUMENT) {
System.out.println("Start document");
} else if(eventType == XmlPullParser.START_TAG) {
if(xpp.getName().equals("MMDraw")){
System.out.println("Start tag "+xpp.getName());
megaMResult=new HashMap<String, String>();
boolean endParse=false;
while(!endParse){
xpp.nextTag();
if(xpp.getEventType()==XmlPullParser.END_TAG && xpp.getName().equals("MMDraw") )
{
endParse=true;
System.out.println("End Tag of MMDraw Reached");
}
else{
String key=xpp.getName();
megaMResult.put(xpp.getName(), xpp.nextText());
}
}
在真实设备上运行时来自日志的消息
05-11 00:00:19.413: W/System.err(8531): org.xmlpull.v1.XmlPullParserException: unexpected type (position:END_DOCUMENT null@1:0 in java.io.InputStreamReader@44830068)
答案 0 :(得分:1)
您的xml写得正确吗? 这个错误是一个解析器异常,尝试在soapUI程序之前读取你的xml。