Xmlparsing с помощью Ksoap - PullRequest
       22

Xmlparsing с помощью Ksoap

2 голосов
/ 08 февраля 2011

Я делаю xmlparsing с помощью ksoap2. Я добавил файл ksoap2.jar в свою библиотеку. И сделал эту кодировку

import java.io.IOException;
import java.util.Vector;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.SoapFault;

import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransport;


public class KsoapMidlet extends MIDlet {

Display display;
String strUserName= "Hello";
String strPassword = "World";
long ParentID;
String ChildIMEINumber;
String ChildName;
String serviceUrl = "http://www.semaphore.co.in/ChildTrackerService/ChildTrackerService.asmx";
String serviceNameSpace = "http://tempuri.org/";
String soapAction ="http://tempuri.org/AddChild";
String methodName = "AddChild";
Vector v=new Vector();



public void startApp() {
display = Display.getDisplay(this);
parsing();
// v.addElement("Hello");
// v.addElement("World");
// Constants d=new Constants();
// d.callSoap(methodName,v);
}

public void pauseApp() {
}

public void destroyApp(boolean unconditional) {
notifyDestroyed();
}
public void parsing(){
SoapObject request = new SoapObject(serviceNameSpace,methodName);
request.addProperty("strUserName", strUserName);
request.addProperty("strPassword", strPassword);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
envelope.bodyOut = request;
envelope.encodingStyle = SoapSerializationEnvelope.ENC;
HttpTransport transport = new HttpTransport("http://www.semaphore.co.in/ChildTrackerService/ChildTrackerService.asmx");
transport.setXmlVersionTag("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
transport.debug = true;
String result = null;

try {
transport.call("http://tempuri.org/" + methodName, envelope);
result = (envelope.getResponse()).toString();
System.out.println("***********************result********************************");
System.out.println("result=="+result);
System.out.println("Result :" + result.toString());
}
catch (org.xmlpull.v1.XmlPullParserException ex2) {
System.out.println("XmlPullParserException :" + ex2.toString());
System.out.println("Request \n" + transport.requestDump);
System.out.println("Response \n" + transport.responseDump);
} catch (SoapFault sf) {
System.out.println("SoapFault :" + sf.faultstring);
System.out.println("Request \n" + transport.requestDump);
System.out.println("Response \n" + transport.responseDump);
} catch (IOException ioe) {
System.out.println("IOException :" + ioe.toString());
System.out.println("Request \n" + transport.requestDump);
System.out.println("Response \n" + transport.responseDump);
}
}
}

Но я получаю IO исключение в строке ----- transport.call("http://tempuri.org/" + methodName, envelope);

Сообщение об ошибке: -

IOException :java.io.IOException: malformed header field <html>

Запрос <<code>?xml version="1.0" encoding="UTF-8"?><v:Envelope xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:d="http://www.w3.org/2001/XMLSchema" xmlns:c="http://schemas.xmlsoap.org/soap/encoding/" xmlns:v="http://schemas.xmlsoap.org/soap/envelope/"><v:Header /><v:Body><AddChild xmlns="http://tempuri.org/" id="o0" c:root="1"><strUserName i:type="d:string">Hello</strUserName><strPassword i:type="d:string">World</strPassword></AddChild></v:Body></v:Envelope>

Ответ

null

Ответы [ 2 ]

2 голосов
/ 25 июля 2011

Я столкнулся с этой же проблемой.Способ, которым я решил это, состоял в том, чтобы изменить настройки профиля на телефоне.Перейдите в настройки соединения GPRS и измените протокол на HTTP (раньше это было на WAP).

1 голос
/ 16 мая 2011

Я предполагаю, что ответ HTTP - это HTTP 404 с пользовательской страницей ошибок HTML. Это единственная возможность, которую я мог себе представить, как получить ответ в веб-сервисе.

Возможно, ваш URL в transport.call (..) был неправильным или веб-служба на стороне сервера не была активна.

Я бы предложил использовать локальный http-прокси, такой как WebScarab (Java) или Fiddler (.Net), и перенаправлять вызовы на этот локальный прокси. Затем вы увидите, что сервер отправляет в ответ.

...