Announcement

Collapse
No announcement yet.

Wann welcher Weg?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Wann welcher Weg?

    Es gibt ja so viele Arten, wie man auf einen Web Service zugreifen kann. Ich blick einfach nicht mehr durch welches für mich der richtige ist!

    Als Vorlage habe ich http://www.ibm.com/developerworks/we...ent/index.html genommen

    a) der Lookup

    Version 1
    Code:
    String wsdlURL = http://localhost:6080/HelloWebService/services/Hello?wsdl";
    String namespace = "http://Hello.com";
    String serviceName = "HelloWebService";
    QName serviceQN = new QName(namespace, serviceName);
            
    ServiceFactory serviceFactory = ServiceFactory.newInstance();
    /* The "new URL(wsdlURL)" parameter is optional */
    Service service = serviceFactory.createService(new URL(wsdlURL), serviceQN);
    Da findet Eclipse bei mir den import "javax.xml.rpc.ServiceFactory" nicht!

    Version 2
    Code:
                Context ic = new InitialContext();
                Service service = (Service) ic.lookup("java:comp/env/service/HelloService");
    Das geht, also hab ichs mal genommen.
    Welches man braucht hat doch irgendwas mit J2SE und J2EE zu tun? Bei mit ist Java 6 Standard Edition installiert - dann bräuchte ich doch genau das andere?!


    b) der Zugriff

    Version 1
    Code:
    Hello myStub = (Hello) service.getHello();
    System.out.println(myStub.getGreeting("Jane");
    Da weiß ich nicht was ich mit "Hello" machen soll. Ich nehme an ich muss eine Klasse erzeugen? Gibts dafür eine Funktion in Eclipse?

    Version 2
    Code:
    String namespace = "http://Hello.com";
    String portName = "Hello";
    QName portQN = new QName(namespace, portName);
          
    Hello myProxy = service.getPort(portQN, Hello.class);
    System.out.println(myProxy.getGreeting("Jane"));
    genau das gleiche Problem...

    Version 3 über die dll-Methode habe ich noch nicht ausprobiert.

    Ich hoffe jemand kann mir mit diesem grundlegenden Problem helfen!

  • #2
    Code:
    public class Hello {
    
         String getGreeting(String name){
            return "Hello 2 "+ name;
                }
    }

    Code:
    try {
                    Context    ic = new InitialContext();
                Service service = (Service) ic.lookup("java:comp/env/service/HelloService");
    
                String namespace = "http://Hello.com";
                String portName = "Hello";
                QName portQN = new QName(namespace, portName);
                      
                Hello myProxy = service.getPort(portQN, Hello.class);
                System.out.println(myProxy.getGreeting("Jane"));
    
                } catch (NamingException e) {
                    System.out.println("Fehler beim Ausführen. "+e.getMessage());
                }

    Meldet mir "Fehler beim Ausführen. Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial"

    Ich verstehe aber leider nicht, was der mir versucht zu sagen. Ich denke mal mit class name ist Hello.class gemeint? Was muss ich da noch zusätzlich angeben?

    Comment


    • #3
      Jar fehlt

      Hallo CLL,

      Da findet Eclipse bei mir den import "javax.xml.rpc.ServiceFactory" nicht!
      Diese Klasse ist, wie Du schon richtig vermutet hast nicht Bestandteil der Java Standard Edition. D.h. Du brauchst irgend ein jar, wo die drinen ist. Welches jar man nun braucht, ist manchmal nicht ganz leicht zu erraten. Da kann der folgende Link weiterhelfen: http://www.jarvana.com/jarvana/searc...ServiceFactory

      Zu Deinen WS-spezifischen Fragen kann ich leider nichts sagen. Hab sowas selbst noch nie gemacht.

      Gruß ngomo
      http://www.winfonet.eu

      Comment


      • #4
        Danke für den Hinweis! Jetzt funktioniert der Import
        Verwendet habe ich
        javax.xml.rpc.ServiceFactory javax javaee-api 6.0

        Ich bin mir aber nicht sicher obs der richtige ist oder ob ich einfach noch einen Fehler habe. Ich vermute aber ersteres.
        Jetzt bekomme ich beim Starten nämlich die Meldung:
        Exception in thread "main" java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/xml/rpc/ServiceFactory
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClassCond(Unknown Source)
        at java.lang.ClassLoader.defineClass(Unknown Source)
        at java.security.SecureClassLoader.defineClass(Unknow n Source)
        at java.net.URLClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.access$000(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at nutzeService.main(nutzeService.java:18)
        Mein momentaner Code:

        Code:
        try {
                    String wsdlURL = "http://localhost:6080/HelloWebService/services/Hello?wsdl";
                String namespace = "http://Hello.com";
                String serviceName = "HelloWebService"; 
                QName serviceQN = new QName(namespace, serviceName);
                Service service = (Service) ServiceFactory.newInstance().createService(new URL(wsdlURL), serviceQN);
        Hello myProxy = service.getPort(serviceQN, Hello.class);
        			System.out.println(myProxy.getGreeting("Jane"));
        
        			} catch (Exception e) {
        				System.out.println("Fehler beim Ausführen. " + e.getMessage());
        			}

        Kann es vllt sein dass ich noch jars für java.lang.ClassLoader, java.security.SecureClassLoader, java.net.URLClassLoader und sun.misc.Launcher$AppClassLoader herunterladen muss?
        Zuletzt editiert von CLL; 14.10.2010, 16:30.

        Comment


        • #5
          Nein die sind Core Klassen

          Kann es vllt sein dass ich noch jars für java.lang.ClassLoader, java.security.SecureClassLoader, java.net.URLClassLoader und sun.misc.Launcher$AppClassLoader herunterladen muss?
          Nein, wenn Du Klassen im Stacktrace siehst, weißt Du, dass die geladen wurden. Ich würde mal vermuten, dass Deine Java-Version nicht zu dem jar passt. Schau mal auf der Seite, wo Du es her hast, ob da etwas zu Systemvoraussetzungen steht.

          Gruß ngomo
          http://www.winfonet.eu

          Comment


          • #6
            Die Exception fällt in Zeile 21, also:
            service = (Service) ServiceFactory.newInstance().createService(new URL(wsdlURL), serviceQN);
            Dann ist die Vermutung mit dem falschen JAR wohl richtig.

            Deshalb habe ich jaxrpc.jar von http://www.codecase.cn/Code/Jar/JKL/...djaxrpcjar.htm heruntergeladen.
            Die Fehlermeldung hat sich geändert:
            Fehler beim Aufrufen. java.lang.ClassNotFoundException: org.apache.axis.client.ServiceFactory
            Wird da die ServiceFactory nicht gefunden oder meine URL, die ich der ServiceFactory übergeben habe?

            Comment


            • #7
              Jetzt fehlt wieder eine Klasse

              Hallo CLL,

              jetzt fehlt Dir wieder eine Klasse.
              java.lang.ClassNotFoundException: org.apache.axis.client.ServiceFactory
              Das müsstest Du doch aber schon in der IDE sehen. Beim entsprechenden import statement (import org.apache.axis.client.ServiceFactory) müsste die IDE schon einen fehler anzeigen.

              Ich würde Dir empfehlen, Dir ein Webservice-Framework Deiner Wahl (z.B. axis von Apache) auszusuchen und Schritt für Schritt die Integrationsanweisungen auf deren Seite zu befolgen. Dann klappt es auch. Sich wahllos irgendwelche jars runterladen, die entweder nicht zur Java-Version passen oder die benötigten Klassen überhaupt nicht enthalten bringt jedenfalls nichts.

              Gruß ngomo
              http://www.winfonet.eu

              Comment


              • #8
                Nein, die imports funktionieren fehlerfrei!

                Comment


                • #9
                  Jars

                  Hallo CLL,

                  die Methode ServiceFactory.newInstance() versucht, eine Default-Factory zurück zu geben. In Deinem Fall "org.apache.axis.client.ServiceFactory". Die muss in irgend einem anderen jar drinnen sein, damit sie geladen werden kann. Da ich nicht weiß, was Du sonst noch alles eingebunden hast, kann ich (wie vorher auch schon) nur vermuten: In Axis2 gibt es diese Klasse nicht (mehr), nur in Axis. Also entweder Axis benutzen oder es anders machen.

                  Nochmal die Bitte, such Dir das Framework Deiner Wahl aus und mach die Installationsschritte in dessen Doku durch. Das wird Dir besser helfen.

                  Gruß ngomo
                  http://www.winfonet.eu

                  Comment


                  • #10
                    Merkwürdig! Ist mir gar nicht aufgefallen, dass der auf org.apache.axis.client.ServiceFactory greift! Ich habe nämlich javax.xml.rpc.ServiceFactory importiert!

                    Wenn es irgendwie geht, würde ich es gern mit Eclipse zu Ende bringen! Das ganze ist für eine Arbeit im Studium. Als Vorraussetzungen (für den Vergleich von Programmiersprachen) habe ich ausgewählt, dass jede Entwicklungsumgebung in der Standardversion ohne Erweiterungen installiert wurde!

                    Zitat: "Deshalb habe ich jaxrpc.jar von http://www.codecase.cn/Code/Jar/JKL/...djaxrpcjar.htm heruntergeladen"
                    Welche Angabe fehlt noch? Außer dem JAR habe ich nichts eingebunden!

                    Comment


                    • #11
                      Ja, aber

                      Merkwürdig! Ist mir gar nicht aufgefallen, dass der auf org.apache.axis.client.ServiceFactory greift! Ich habe nämlich javax.xml.rpc.ServiceFactory importiert!
                      Dass es Dir nicht auffält, heißt nicht, dass er es nicht macht. Offensichtlich versucht die Methode "newInstance()" Deiner javax.xml.rpc.ServiceFactory eine "org.apache.axis.client.ServiceFactory" zurück zu liefern. Der von Dir gepostete Link enthält leider nur die Binärdateien. Die Quellen dazu habe ich auf der Seite nicht gefunden. Sonst könnte ich es Dir im Quellcode zeigen.
                      Nachfolgend noch ein paar Links, wie man mit Eclipse Webservices baut:
                      Beide Dokus setzen Axis2 und Apache Tomcat voraus. Alleine mit Eclipse geht es wohl nicht.

                      Ich bin raus.

                      Gruß ngomo
                      http://www.winfonet.eu

                      Comment


                      • #12
                        Jetzt habe ich mir die Web Tools Platform runtergeladen (All-In-One Package mit Eclipse Europe) und habe das gleiche wie vorher! (sollte aber komplett sein, laut Eclipse muss man nichts mehr zusätzlich herunterladen!)
                        -Bei Preferences sind jetzt Web Services zu finden-

                        Dann habe ich Apache Tomcat 6.0 heruntergeladen - keine Änderung.
                        BRAUCHE ich das überhaupt wennn ich nur einen CLIENT generieren will?! Dazu brauche ich doch keinen Server!

                        Dann habe ich noch die neueste Version von Axis2 von http://ws.apache.org/axis2/index.html installiert (welche Version man braucht stand nirgends wirklich verständlich)

                        -Die AXIS2 Runtime Location in den Preferences hat er genommen (sucessfully).
                        -Unter Server&Runtime hab ich dann Tomcat 6.0 und Axis2 eingegeben.
                        -Unter Server hab ich noch den Tomcat hinzugefügt.

                        FAZIT: NICHTS hat sich geändert. Ich bin völlig am Ende! Ich weiß nicht mehr weiter!
                        Den Client muss ich doch nicht als Dynamic Web Project anlegen?

                        - - - - - -- - - - - -- - - - - - - - - - -- - - - - - - -- -- - -

                        Ich habe noch eine zweite Version Quellcode aus dem Internet kopiert, die aber auch nicht fehlerfrei läuft.
                        Code:
                        String endpoint = "http://localhost:8080/TestWebService/services/DoesMagic";
                        	       Service service = new Service();
                        	       Call call = (Call) service.createCall();
                        	       call.setTargetEndpointAddress( new java.net.URL(endpoint) );
                        	       call.setOperationName( new QName("http://testPackage.fc.com", "doBasicStuff") );
                        	 
                        	       String ret = (String) call.invoke( new Object[] {"Hello World"} );
                        	       System.out.println(ret);
                        Bei Service() kommt "cannot instatiate the Type Service"
                        Und bei setTargetEndpotintAddress() kommt "Method ist not applicable for the arguments (URL)"

                        Comment


                        • #13
                          Dann habe ich Apache Tomcat 6.0 heruntergeladen - keine Änderung.
                          BRAUCHE ich das überhaupt wennn ich nur einen CLIENT generieren will?! Dazu brauche ich doch keinen Server!
                          Mit wem soll sich den dein Client verbinden?

                          Den Client muss ich doch nicht als Dynamic Web Project anlegen?

                          File -> New -> Other -> Webservice Client
                          Christian

                          Comment


                          • #14
                            danke für den Hinweis mit dem Projekttyp!
                            Da legt mir Eclipse dann ein Interface und mehrere Klassen IN einem schon bestehenden Projekt an! (habe http://www.thomas-bayer.com/axis2/se...LZService?wsdl eingegeben)

                            Den Rest muss ich dann doch per Hand machen?

                            Code:
                            String wsdlURL = "http://www.thomas-bayer.com/axis2/services/BLZService?wsdl";
                            		String namespace = "http://thomas-bayer.com/blz/";
                            		String serviceName = "BLZService";
                            		serviceQN = new QName(namespace, serviceName);
                            		service = (Service) ServiceFactory.newInstance().createService(new URL(wsdlURL), serviceQN);
                                            blz.BLZServicePortType myProxy = service.getPort(serviceQN, blz.BLZServicePortType.class);
                                            System.out.println(myProxy.getBank("76069601"));
                            Zumindest wird nichts mehr rot unterringelt. Aber laufen tuts immer noch nicht!

                            Wenn ich javax.xml.ws.Service importiere, dann kommt "org.apache.axis.client.Service cannot be cast to javax.xml.ws.Service" und in rot "25.10.2010 16:28:54 org.apache.axis.utils.JavaUtils isAttachmentSupported
                            WARNUNG: Unable to find required classes (javax.activation.DataHandler and javax.mail.internet.MimeMultipart). Attachment support is disabled."

                            Wenn ich org.apache.axis.client.Service importiere, dann kommt schon vor dem Ausführen bei service.getPort "Type mismatch: cannot convert from Remote to BLZServicePortType" (direktes casten klappt nicht)
                            Das Interface von der Klasse:
                            Code:
                            public interface BLZServicePortType extends java.rmi.Remote {
                                public com.thomas_bayer.blz.DetailsType getBank(java.lang.String blz) throws java.rmi.RemoteException;
                            }
                            Wo könnte mein Fehler noch liegen?
                            Zuletzt editiert von CLL; 25.10.2010, 16:38.

                            Comment


                            • #15
                              -herausgenommen-
                              Zuletzt editiert von CLL; 06.11.2010, 15:10.

                              Comment

                              Working...
                              X