Webservice (Server Java, Client Android)

M

mkl

Erfahrenes Mitglied
44
Hallo,

ich habe folgendes probiert:

WebService in Java

Wenn ich exakt das gleiche Projekt in Java erstelle und den Client ebenso in Java erstelle funktioniert alles Problemlos. Wenn ich hingegen den Client nicht in Java erstelle sondern als Android-Projekt hagelt es mir Exceptions...

Da der localhost im Emulator ein anderer ist, verwende ich die verwiesene IP-Adresse 10.0.2.2:8080 statt localhost:8080.

Der angepasste Clientcode sieht demnach so aus:

Code:
@WebServiceClient(name = "CalculatorService", targetNamespace = "http://Webserver_V2.daimler.de/", wsdlLocation = "http://10.0.2.2:8080/calculator?wsdl")
public class CalculatorService
    extends Service
{

    private final static URL CALCULATORSERVICE_WSDL_LOCATION;
    private final static WebServiceException CALCULATORSERVICE_EXCEPTION;
    private final static QName CALCULATORSERVICE_QNAME = new QName("http://Webserver_V2.daimler.de/", "CalculatorService");

    static {
        URL url = null;
        WebServiceException e = null;
        try {
            url = new URL("http://10.0.2.2:8080/calculator?wsdl");
        } catch (MalformedURLException ex) {
            e = new WebServiceException(ex);
        }
        CALCULATORSERVICE_WSDL_LOCATION = url;
        CALCULATORSERVICE_EXCEPTION = e;
    }

    public CalculatorService() {
        super(__getWsdlLocation(), CALCULATORSERVICE_QNAME);
    }
...

Der App habe ich natürlich auch die Permission gegeben ins Internet zu gehen, daran sollte es also nicht liegen...

Folgende Exceptions fange ich:

Code:
04-23 09:22:32.464: E/AndroidRuntime(1305): FATAL EXCEPTION: main
04-23 09:22:32.464: E/AndroidRuntime(1305): java.lang.NoClassDefFoundError: de.projekt.webserver_v2.CalculatorService
04-23 09:22:32.464: E/AndroidRuntime(1305):     at de.projekt.Webserver_V2_Client_Android.Main.onCreate(Main.java:16)
04-23 09:22:32.464: E/AndroidRuntime(1305):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
04-23 09:22:32.464: E/AndroidRuntime(1305):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
04-23 09:22:32.464: E/AndroidRuntime(1305):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
04-23 09:22:32.464: E/AndroidRuntime(1305):     at android.app.ActivityThread.access$1500(ActivityThread.java:117)
04-23 09:22:32.464: E/AndroidRuntime(1305):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
04-23 09:22:32.464: E/AndroidRuntime(1305):     at android.os.Handler.dispatchMessage(Handler.java:99)
04-23 09:22:32.464: E/AndroidRuntime(1305):     at android.os.Looper.loop(Looper.java:123)
04-23 09:22:32.464: E/AndroidRuntime(1305):     at android.app.ActivityThread.main(ActivityThread.java:3683)
04-23 09:22:32.464: E/AndroidRuntime(1305):     at java.lang.reflect.Method.invokeNative(Native Method)
04-23 09:22:32.464: E/AndroidRuntime(1305):     at java.lang.reflect.Method.invoke(Method.java:507)
04-23 09:22:32.464: E/AndroidRuntime(1305):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
04-23 09:22:32.464: E/AndroidRuntime(1305):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
04-23 09:22:32.464: E/AndroidRuntime(1305):     at dalvik.system.NativeStart.main(Native Method)
04-23 09:22:35.944: I/Process(1305): Sending signal. PID: 1305 SIG: 9

Die Exceptions fangen an, wenn ich die Klasse CalculatorService erstellen will und dieser im Konstruktor die Basisklasse Service erstellen möchte:

Code:
public CalculatorService() {
        super(__getWsdlLocation(), CALCULATORSERVICE_QNAME);
    }

Vielleicht sollte ich noch erwähnen, dass ich die JRE Library extra hinzufügen musste, da er mir die Befehle im generierten Clientcode sonst nicht kannte.

Hoffe jemand von euch ist so schlau auf die passende Lösung zu kommen ich habs nun mehrere Stunden probiert...
 
mkl schrieb:
Vielleicht sollte ich noch erwähnen, dass ich die JRE Library extra hinzufügen musste, da er mir die Befehle im generierten Clientcode sonst nicht kannte.

Das KANN auf jeden Fall nicht funktionieren. Die komplette JRE in ein Android Projekt einbinden geht nicht, weil auf Android keine komplette JVM läuft, sondern "nur" die Dalvik VM.

Dazu ist das Tutorial etwas kurz gehalten. Statt den kompletten Calculator zu importieren solltest du für diesen ein Interface schreiben und nur dieses importieren. Die Implementierung macht ja der Server.

Noch was aus meinen Erfahrungen mit WebServices unter Android: Für welche Android Version baust du denn? Einige der Klassen die ich gebraucht habe waren erst ab 2.0 verfügbar. Wenn du also für 1.6 versuchst zu bauen kann das schief gehen. Ich habe mir damals (2.0 war noch nicht verbreitet) mit ksoap2 weitergeholfen. Ist aber sehr viel hässlicher als das native Java Zeug.

Ansonsten kann ich dir Java Web Services: Up and Running: Amazon.de: Martin Kalin, Robert Romano: Englische Bücher empfehlen. Damit habe ich das ganze gebaut. Falls das eine Exemplar dass noch übrig ist bei Amazon vergriffen ist, schreib mir mal ne PM, vielleicht kann ich dir helfen.
 
Zuletzt bearbeitet von einem Moderator:

Ähnliche Themen

D
Antworten
23
Aufrufe
2.498
Data2006
D
Jansenwilson
Antworten
1
Aufrufe
747
swa00
swa00
M
Antworten
4
Aufrufe
1.168
swa00
swa00
Zurück
Oben Unten