1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Webservice (Server Java, Client Android)

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von mkl, 23.04.2012.

  1. mkl, 23.04.2012 #1
    mkl

    mkl Threadstarter Fortgeschrittenes Mitglied

    Beiträge:
    316
    Erhaltene Danke:
    33
    Registriert seit:
    09.01.2011
    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...
     
  2. deek, 24.04.2012 #2
    deek

    deek Fortgeschrittenes Mitglied

    Beiträge:
    442
    Erhaltene Danke:
    110
    Registriert seit:
    09.03.2011
    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 von einem Moderator bearbeitet: 17.06.2015

Diese Seite empfehlen