Ich versuche, eine webservice
in Android über Ksoap2
für Android zuzugreifen.HttpTransportSE requestDump gibt NullPointerException
Die SoapObject
wird erstellt, OK, die S.O.P der bodyOut
gibt die gewünschten Zeichenfolgen aus. Aber wenn ich ein requestDump
des HttpTransportSE
Objekts mache, das ich erstelle, um den Anruf zu machen, passiert ein NullPointerException
. Mit anderen Worten, das Transportobjekt ist null. Wie kann das passieren?
Web Service ist bei http://srilanka.lk:9080/services/CropServiceProxy?wsdl
Dieser Dienst funktioniert sehr gut mit SoapUI.
SoapUI Anfrage:
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:v1="http://schemas.icta.lk/xsd/crop/handler/v1/">
<soap:Header/>
<soap:Body>
<v1:getCropDataList>
<v1:code>ABK</v1:code>
</v1:getCropDataList>
</soap:Body>
</soap:Envelope>
SoapUI Antwort:
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
<soapenv:Body>
<ns1:getCropDataListResponse xmlns:ns1="http://schemas.icta.lk/xsd/crop/handler/v1/">
<ns1:cropInfo>
<ns1:name>Ambul Kesel</ns1:name>
<ns1:price>35.0</ns1:price>
<ns1:location>Dambulla</ns1:location>
</ns1:cropInfo>
<ns1:cropInfo>
<ns1:name>Ambul Kesel</ns1:name>
<ns1:price>40.0</ns1:price>
<ns1:location>Dambulla</ns1:location>
</ns1:cropInfo>
</ns1:getCropDataListResponse>
</soapenv:Body>
</soapenv:Envelope>
Client Side Complex Typ KvmSerializable
Implementierung:
public class CropInfo implements KvmSerializable {
private String name;
private float price;
private String location;
@Override
public Object getProperty(int arg0) {
switch (arg0){
case 0:
return name;
case 1:
return price;
case 2:
return location;
default:
return null;
}
}
@Override
public int getPropertyCount() {
return 3;
}
@Override
public void getPropertyInfo(int arg0, Hashtable arg1, PropertyInfo arg2) {
switch (arg0){
case 0:
arg2.type = PropertyInfo.STRING_CLASS;
arg2.name = "Name";
break;
case 1:
arg2.type = Float.class;
arg2.name = "Price";
break;
case 2:
arg2.type = PropertyInfo.STRING_CLASS;
arg2.name = "Location";
break;
default:
break;
}
}
@Override
public void setProperty(int arg0, Object arg1) {
switch(arg0){
case 0:
name = arg1.toString();
break;
case 1:
price = Float.parseFloat(arg1.toString());
case 2:
location = arg1.toString();
default:
break;
}
}
}
Anruf
Web Service:
public void btnOnClick(View v){
String NAMESPACE = "http://schemas.icta.lk/xsd/crop/handler/v1/";
String URL = "http://220.247.225.202:9080/services/CropServiceProxy.CropServiceProxyHttpSoap12Endpoint";
String method_name = "getCropDataList";
String SOAP_ACTION = "http://schemas.icta.lk/xsd/crop/handler/v1/getCropDataList";
SoapObject soap_request = new SoapObject(NAMESPACE, method_name);
soap_request.addProperty("code", "ABK");
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER12);
envelope.setOutputSoapObject(soap_request);
envelope.addMapping(NAMESPACE, "cropInfo", CropInfo.class);
//envelope.dotNet=true;
Marshal floatMarshal = new MarshalFloat();
floatMarshal.register(envelope);
System.out.println("body out : " + envelope.bodyOut.toString());
//AndroidHttpTransport http_transport = new AndroidHttpTransport(URL);
HttpTransportSE http_transport = new HttpTransportSE(URL);
try {
//NullPointerException HERE
System.out.println(http_transport.requestDump);
http_transport.call(SOAP_ACTION, envelope);
//because we should expect a vector, two kinds of prices are given
Vector<CropInfo> result_array = (Vector<CropInfo>)envelope.getResponse();
if(result_array != null){
for (CropInfo current_crop: result_array){
System.out.println(current_crop.getName());
System.out.println(Float.toString(current_crop.getPrice()));
}
}
} catch (Exception e) {
e.printStackTrace();
answer.setText("error caught");
//System.out.println(http_transport.responseDump);
}
// String result_string[] = (String[])result;
//answer.setText("returned");
}
Kann das jemand erklären?
Dank Daniel. Ich habe die Bestellung falsch verstanden. Die von Ihnen vorgeschlagenen Korrekturen vorgenommen und ich erhalte jetzt einen XMLPullParser Error bei der Aufrufmethode. Ich habe damit zu kämpfen http://stackoverflow.com/questions/4557180/ksoap2-for-android-gives. – Chamila
@Daniel Kumpel Ich liebe dich von der Unterseite meines Herzens ** where_ erhalten Sie Informationen über diese kleinen Dinge von ??! Ich fragte eine andere [Frage] (http://stackoverflow.com/q/11048426/1434372), deren Antwort mich zu einem Problem führte, das @chamila hatte, sogar der Antworter vergaß, diese kleine Linie bezüglich der Einstellung von httpTransport zu erwähnen .debug = true; '... wow, ich steckte für ** 2 Stunden fest ** ** Zwei ** Ich bin gerade sehr glücklich. Entschuldigen Sie meinen _long_ Kommentar. Noch einmal Danke** !! – Shark