1. Beispiel 1 (hauptsächlich [2])
1.1. Systemfunktionen:
Entwickeln Sie einen Calculator -Service CalculateService, der Operationen wie Plus, Subtraktion, Multiplizieren und Dividieren umfasst.
1.2. Vorbereitung vor der Entwicklung:
Eclipse-jee installieren;
Laden Sie die neueste Version von Axis2 herunter, die URL ist http://axis.apache.org/axis2/java/core/download.cgi, wählen Sie das ZIP-Paket der Standard-Binärverteilung und entpacken Sie den Verzeichnisnamen AXIS2-1.4.1. Die Dateistruktur im Verzeichnis lautet wie folgt:
1.3. Vorentwicklungskonfiguration:
Wählen Sie in der Menüleiste von Eclipse, Fenster -> Einstellungen -> Webdienst -> AXIS2 -Perferenzen den Standort des AXIS2 -Dekompressionspakets im Laufzeitort Axis2 Wählen Sie aus. Klicken Sie nach dem Einstellen auf "OK". (Wie im Bild gezeigt)
1.4. Webdienst entwickeln:
(1) Erstellen Sie ein neues Java -Projekt und nennen Sie es "WebServicetest1"
(2) Erstellen Sie eine neue Klasse und nennen Sie sie "CalculateService". Der vollständige Code lautet wie folgt:
Paket edu.sjtu.webservice; /*** Taschenrechnerbetrieb* @Author rongxinhua*/öffentliche Klasse CalculateService {// Addition public float plus (float x, float y) {return x + y; } // subtraction public float minus (float x, float y) {return x - y; } // Multiple öffentliche Float multiplizieren (float x, float y) {return x * y; } // Dividation public float Divide (float x, float y) {if (y! = 0) {return x /y; } sonst return -1; }}(3) auf dem "WebServicetest1" -Projekt neu -> andere "Webdienst" unter "Web Services" finden;
. (Abbildung unten). Klicken Sie auf "OK", und Sie kehren zum Dialogfeld "Webdienst" zurück.
(5) Passen Sie im Dialogfeld Webdienst den Schieberegler im Webdiensttyp an die Position des "Startdienstes" an und passen Sie den Schieberegler im Client -Typ an die Position des "Test -Clients" ein.
(6) Auf der rechten Seite des Slider -Diagramms vom Webdiensttyp befindet sich eine "Konfiguration". Klicken Sie auf die Option unten, um das Feld "Service Deployment Configuration" einzugeben, und wählen Sie den entsprechenden Server (ich verwende hier Tomcat6.0) und die Web -Service -Laufzeit (APache AXIS2 auswählen), wie in der folgenden Abbildung gezeigt:
(7) Nach dem Klicken auf OK kehrt es zum Dialogfeld "Webdienst" zurück. In ähnlicher Weise gibt es auch "Konfiguration" auf der rechten Seite des Schiebereglers im Client -Typ, und die entsprechende Einstellung muss durchgeführt werden. Die Schritte sind die gleichen wie oben. Nach Fertigstellung ist als nächstes -> als nächstes fertig. Eingänge von Axis2 Web Service Java Bean Konfiguration, wir wählen eine Standarddienste für dienste.xml, wie in der folgenden Abbildung gezeigt:
(8) Wenn Sie das Dialogfeld "Serverstart" ankommen, gibt es eine Schaltfläche "Startserver" (wie unten gezeigt). Klicken Sie darauf, um den Tomcat -Server zu starten.
(9) Nachdem Sie auf das Start gewartet haben, klicken Sie auf "Weiter -> Weiter", und schließlich klicken Sie auf Fertig stellen. Schließlich wird die folgende Schnittstelle angezeigt: (Webdienst Explorer), wo wir unsere Webdienste testen können. (Wenn Sie es mit einem Browser öffnen, verwenden Sie die folgende Adresse: http://127.0.0.1:19189/wse/wsexplorer/wsexplorer.jsp?org.eclipse.wst.ws.Explorer=3). Wie in der Abbildung unten gezeigt:
Hinweis: Öffnen Sie den Webdienst Explorer im Browser (manchmal wird der Webservice Explorer in Eclipse geschlossen, was auf diese Weise geöffnet werden kann)
Erste Login -Adresse: http://127.0.0.1:19189/wse/wsexplorer/wsexplorer.jsp. Wählen Sie dann die Registerkarte "Webdienst Explorer" in der oberen rechten Ecke der Webseite aus. Geben Sie dann die WSDL -Adresse ein: http: // localhost: 8080/webServicetest1/dienste/calculateService? WSDL. Diese WSDL -Adresse ist die WSDL, die wir gerade den Dienst veröffentlicht haben. Klicken Sie auf Go, wie in der folgenden Abbildung gezeigt:
Dann sehen Sie die folgende Schnittstelle:
(10) Der Test ist relativ einfach. Zum Beispiel wählen wir einen "Plus" -Operation (MUSS CALCUSEVICESOOP11BINDING). Die folgende Abbildung erscheint. Geben Sie 1 in das Eingabefeld von X ein, geben Sie 2 in das Eingabefeld von Y ein und klicken Sie auf "GO", und das Ergebnis 3.0 wird in der Statusleiste angezeigt. Die Tests anderer Methoden sind ähnlich. Die Ergebnisse sind in der obigen Abbildung dargestellt.
1.5. CalculateService Client ruft das Programm auf
Wir haben die Methoden von Addition, Subtraktion, Multiplikation und Teilung definiert und diese Methoden als Dienste veröffentlicht. Jetzt müssen wir nur noch diese Dienste anrufen. Das Client -Anrufprogramm wie im folgenden Code gezeigt: CalculateServicetest.java
Paket edu.sjtu.webservice.test; importieren javax.xml.namespace.qname; import org.apache.axis2.axisfault; import org.apache.axis2.addressing.endpoIntreference; import org.apache.axis2.client.options; import org.apache.axis2.rpc.client.rpcServiceClient; öffentliche Klasse CalculateServicetest { / ** * @param args * @throws axisfault * / public static void main (String [] args) löst Axisfault {// Todo automatisch generierter Methode Stub // mithilfe von RPC-Methoden rpcServiceClient serviceClient = new RPCService () auf. Optionen Optionen = serviceClient.getOptions (); // Geben Sie die URL an, um WebService EndPoIntreferenz zu rufen. options.setto (targetePR); // Geben Sie die Methode und den Namespace der WSDL -Datei im Computer an: edu.sjtu.webservice. Qname opadDentry = new qname ("http://webservice.sjtu.edu", "plus"); // Addqname opadDentryminus = new qname ("http://webService.sjtu.edu", "minus"); Qname ("http://webservice.sjtu.edu", "multiply"); // Multiply qname opadDentryDivide = new qname ("http://webservice.sjtu.edu", "Divide"). opadDentryArgs = neues Objekt [] {1,2}; // Geben Sie den Datentyp des Rückgabewerts der Plus -Methodenklasse [] classes = new class [] {float.class} an; // Rufen Sie die Plus -Methode auf und geben Sie den Rückgabewert des Method Systems.out.println (serviceClient.invokeBlocking (OpadDentry, OpadDentryArgs, Klassen) [0]) auf; System.out.println (serviceClient.invokeBlocking (opadDentryMinus, opadDentryargs, Klassen) [0]); System.out.println (serviceClient.invokeBlocking (opadDEntryMultiply, opadDentryargs, Klassen) [0]); System.out.println (serviceClient.invokeBlocking (opadDentryDivide, opadDentryargs, Klassen) [0]); }}Auslaufergebnisse:
3.0
-1.0
2.0
0,5
2. Beispiel
2. HelloService
(1) Definieren Sie zuerst die Dienstmethode, der Code ist wie folgt:
Paket edu.sjtu.webservice; public class helloService {public String SayShellonew () {return "hello"; } public String SayShellotOperFersonNew (String -Name) {if (name == null) {name = "nobody"; } zurück "Hallo", + Name; } public void updatedata (String -Daten) {System.out.println (Daten + "Aktualisiert."); }} (2) Siehe Beispiel 1, um diese Methode als Dienst zu veröffentlichen.
(3) Schreiben Sie den Client -Code, um WebService anzurufen (Hauptreferenz [5])
Der größte Unterschied zwischen diesem Beispiel und anderen Beispielen ist hier. Andere Beispiele müssen im Allgemeinen jetzt einen Client -Stub erstellen, der auf dem Service WSDL basiert, und dann den Dienst über den Stub aufrufen. Diese Methode scheint relativ einzeln zu sein. Der Kunde muss einen Stub benötigen, um auf den Service zuzugreifen, was sehr unfair ist. Der Kunde in diesem Beispiel verwendet die Stub -Methode nicht, implementiert jedoch eine allgemeine Aufrufmethode und erfordert keinen Client -Stub, um auf den Dienst zuzugreifen. Sie müssen nur die Web -Servce -Adresse, den Betriebsnamen, den Parameter und die Funktionsrückgabeart angeben. Der Code sieht so aus:
HelloServicetest2.javapackage edu.sjtu.webservice.test; importieren javax.xml.namespace.qname; import org.apache.axis2.axisfault; import org.apache.axis2.addressing.endpoIntreference; import org.apache.axis2.client.options; import org.apache.axis2.rpc.client.rpcServiceClient; public class HelloServicetest2 {private rpcServiceClient serviceClient; private Optionen; privates Endpointreferenzziel; public HelloServicetest2 (Stringendpoint) löscht Axisfault {serviceClient = new rpcServiceClient (); options = serviceClient.getOptions (); targetePr = New EndPoIntreference (Endpunkt); options.setto (targetePR); } public Object [] InvokeOP (String targetNamePace, String opName, Object [] Opargs, Klasse <?> [] OpReturnType) löscht Axisfault, classNotFoundException {// Setzen Sie den Namen des Operation qname opqname = new qname (targetNameSpace, opname); // Setzen Sie den Rückgabewert // Klasse <?> [] Opreturn = new class [] {OpReturnType}; // Die Parameter, in denen die Operation übergeben werden muss, sind bereits in den Parametern angegeben. Hier nennen wir direkt return serviceClient.invokeBlocking (OpqName, Opargs, OpReturnType); } /** * @param args * @throws AxisFault * @throws ClassNotFoundException */ public static void main(String[] args) throws AxisFault, ClassNotFoundException { // TODO Auto-generated method stub final String endPointReference = "http://localhost:8080/WebServiceTest1/services/HelloService"; Finale String targetNameSpace = "http://webservice.sjtu.edu"; HelloServicetest2 Client = new HelloServicetest2 (EndpoIntreferenz); String opname = " Object [] opargs = new Object [] {"My Friends"}; Class <?> [] OpReturnType = new class [] {string []. Class}; Object [] response = client.invokeop (targetNamePace, opname, Opargs, OpReturnType); System.out.println (((String []) Antwort [0]) [0]); }}Führen Sie das Programm aus und klicken Sie auf AS-> Java-Anwendung ausführen. Sie können sehen, dass die Ausgabe des Konsolenports lautet: Hallo, meine Freunde, die darauf hinweisen, dass der Kundenanruf erfolgreich ist. Der größte Unterschied und Vorteil dieses Beispiels spiegelt sich in der Aufrufmethode des Kunden oder mit anderen Worten auf die Art und Weise, wie er Dienstanrufe einleiten. Obwohl es etwas mehr Code als der Stub Stub des Kunden gibt, ist diese Methode einheitlich und erfordert keine Produktion von Stub -Stub -Code, was das Problem löst, dass der Client viele Klassen hat. Wenn der Leser diese Codes weiter zusammenfasst, denke ich, dass die Anrufmethode einfach relevante Parameter übergeben wird, was die Vorteile von Dienstanrufen besser veranschaulicht. Darüber hinaus ist diese Methode einfacher und klarer, und Sie können die spezifische Bedeutung auf einen Blick erkennen. Es besteht keine Notwendigkeit, einige Mechanismen der Stub -Klasse zu erstellen.
(4) Schreiben Sie den Code des Client -Rufdienstes neu um
(3) Der im Folgende erwähnte Client -Anwendungscode ist etwas kompliziert zu schreiben. Das obige Kunde, das das Serviceprogramm anruft, wird umgeschrieben, was viel einfacher ist. Der Code ist wie folgt:
HelloServicetest.javaimport javax.xml.namespace.qname; import org.apache.axis2.axisfault; import org.apache.axis2.addressing.endpoIntreference; import org.apache.axis2.client.options; import org.apache.axis2.rpc.client.rpcServiceClient; public class helloServicetest {public static void main (String args []) löst Axisfault aus {// nenne WebService RPCServiceClient unter Verwendung von RPC serviceClient = new rpcServiceClient (); Optionen Optionen = serviceClient.getOptions (); // Geben Sie die URL an, um WebService EndPoIntreferenz anzurufen. options.setto (targetePR); // Geben Sie die Sayhellotoperson -Methode an und den Namespace der WSDL -Datei Qname opadDentry = new qname ("http://webservice.sjtu.edu", "SayhellotoperDeNew"); // Geben Sie den Parameterwert des Sayhellotoperson -Methodenobjekts an [] opadDentryArgs = new Object [] {"xuwei"}; // Geben Sie das Klassenobjekt des Datentyps an, den die Sayhellotoperson -Methode die Wertklasse [] classes = new class [] {string.class} zurückgibt; // rufen Sie die Sayhellotoperson -Methode an und geben Sie den Rückgabewert des Method Systems.out.println (serviceClient.invokeBlocking (OpadENTry, OpadDentryargs, Klassen) [0]) aus; }}Durch den obigen Inhalt werde ich ein einfaches Entwicklungsbeispiel für Eclipse+WebService vorstellen und hoffe, dass es für alle hilfreich sein wird!