G
Gelöschtes Mitglied 12486
Gast
Hallo,
ich entwickle derzeit eine Android Anwendung, welche mit ksoap2 einen Webservice konsumieren soll. Mein Problem bei der ganzen Sache liegt derzeit aber weniger auf der Androidseite, sondern eher auf der Serverseite. Der Server ist im Grunde nur eine einfache Version dessen, was später eingesetzt werden soll und implementiert ausschließlich einen Webservice, welcher ein paar primitive Datentypen zurückgeben soll. Um jedoch an die Daten zu kommen, muss vorher natürlich eine Authentifizierung stattfinden, was durch Benutzername- und Passwortübergabe gemacht werden soll (Sicherheit ist hier mal außen vor). Der Server wurde mit Hilfe von NetBeans erzeugt, d.h. auch der Webservice wurde mit Hilfe der Tools von NetBeans erzeugt.
Hier mal Auszüge des Codes auf der Serverseite, ich hab mal nur die vermeintlich wichtigen Teile rausgesucht.
Zuerst der Webservice:
Dieser verweist auf die Klasse ItemControl, welche an der Stelle wie folgt aussieht:
Die Klasse ItemStruct kann ich hier vernachlässigen, da sie nur einfache Datentypen kapselt.
Auf der Androidseite füge ich dem SoapRequest über folgende Zeilen die Parameter hinzu und führe dann den SoapRequest durch.
Ich kann gern noch weitere Informationen posten, jedoch stehen in den Klassen noch viele andere Methoden und es wird schnell unübersichtlich.
Mein Problem ist nun, dass jedes Mal wenn ich per Android auf diesen Webservice zugreife, dass der Server eine EJBException aufgrund einer NullPointerException wirft. Und zwar tritt jedes Mal in der Zeile
" if(username.equals(name) && pwd.equals(pass))" der Methode checkLoginDetails() der NullPointer auf. Also bekommt der Server entweder keine Parameter übergeben oder er "verschluckt" diese irgendwie. Ich habe aber absolut keine Ahnung, woran das liegen könnte. Bei anderen Webservices funktioniert die Parameterübergabe auf diese Weise problemlos.
Kann mir da jemand weiterhelfen? Woran könnte es liegen, dass der Webservice hier den NullPointer wirft?
Gruß
huetz
ich entwickle derzeit eine Android Anwendung, welche mit ksoap2 einen Webservice konsumieren soll. Mein Problem bei der ganzen Sache liegt derzeit aber weniger auf der Androidseite, sondern eher auf der Serverseite. Der Server ist im Grunde nur eine einfache Version dessen, was später eingesetzt werden soll und implementiert ausschließlich einen Webservice, welcher ein paar primitive Datentypen zurückgeben soll. Um jedoch an die Daten zu kommen, muss vorher natürlich eine Authentifizierung stattfinden, was durch Benutzername- und Passwortübergabe gemacht werden soll (Sicherheit ist hier mal außen vor). Der Server wurde mit Hilfe von NetBeans erzeugt, d.h. auch der Webservice wurde mit Hilfe der Tools von NetBeans erzeugt.
Hier mal Auszüge des Codes auf der Serverseite, ich hab mal nur die vermeintlich wichtigen Teile rausgesucht.
Zuerst der Webservice:
Java:
@WebService()
public class ItemService {
@EJB
private ItemControl ejbRef;
@WebMethod(operationName = "getNextItem")
public ItemStruct getNextItem(@WebParam(name = "username")
String username, @WebParam(name = "pwd")
String pwd) {
return ejbRef.getNextItem(username, pwd);
}
}
Dieser verweist auf die Klasse ItemControl, welche an der Stelle wie folgt aussieht:
Java:
@Stateless
public class ItemControl {
private static final String name = "name";
private static final String pass = "pass";
public ItemStruct getNextItem(String username, String pwd) {
ItemStruct is = getIs(true);
//falls nicht korrekte name u pwd - leeres struct mit fehlerMsg senden
if(!checkLoginDetails(username, pwd)){
is.setErrorMsg("Falscher Benutzername oder Passwort");
is.setFlag(true);
}
return is;
}
public boolean checkLoginDetails(String username, String pwd){
if(username.equals(name) && pwd.equals(pass))
return true;
else
return false;
}
private ItemStruct getIs(boolean valid){
ItemStruct is = new ItemStruct();
if(!valid){
is.setFlag(true);
is.setErrorMsg("Ein Fehler trat auf. Falscher LogIn?");
}
else{
is.setFlag(false);
is.setMsg("Alles Super, weiter so!");
}
return is;
}
Die Klasse ItemStruct kann ich hier vernachlässigen, da sie nur einfache Datentypen kapselt.
Auf der Androidseite füge ich dem SoapRequest über folgende Zeilen die Parameter hinzu und führe dann den SoapRequest durch.
Java:
SoapObject request = new SoapObject(NAMESPACE, METHOD);
PropertyInfo pi1 = new PropertyInfo();
pi1.setName("username");
pi1.setValue("name");
PropertyInfo pi2 = new PropertyInfo();
pi2.setName("pwd");
pi2.setValue("pass");
request.addProperty(pi1);
request.addProperty(pi2);
SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
soapEnvelope.dotNet = true;
soapEnvelope.setOutputSoapObject(request);
AndroidHttpTransport aht = new AndroidHttpTransport (URL);
aht.debug = true;
aht.call(soapMap.getSoapAction(method), soapEnvelope);
Log.e("SOAP_DUMP", aht.requestDump);
SoapObject response = (SoapObject) soapEnvelope.getResponse();
Log.e("SOAP_DUMP", aht.responseDump);
... // Verarbeitung der response-nachricht
Ich kann gern noch weitere Informationen posten, jedoch stehen in den Klassen noch viele andere Methoden und es wird schnell unübersichtlich.
Mein Problem ist nun, dass jedes Mal wenn ich per Android auf diesen Webservice zugreife, dass der Server eine EJBException aufgrund einer NullPointerException wirft. Und zwar tritt jedes Mal in der Zeile
" if(username.equals(name) && pwd.equals(pass))" der Methode checkLoginDetails() der NullPointer auf. Also bekommt der Server entweder keine Parameter übergeben oder er "verschluckt" diese irgendwie. Ich habe aber absolut keine Ahnung, woran das liegen könnte. Bei anderen Webservices funktioniert die Parameterübergabe auf diese Weise problemlos.
Kann mir da jemand weiterhelfen? Woran könnte es liegen, dass der Webservice hier den NullPointer wirft?
Gruß
huetz