1. Contoh 1 (terutama lihat [2])
1.1. Fungsi Sistem:
Kembangkan Layanan Kalkulator CalculateService, yang mencakup operasi seperti plus, pengurangan, gandakan, dan membagi.
1.2. Persiapan sebelum pengembangan:
Instal Eclipse-jee;
Unduh versi terbaru Axis2, URL adalah http://axis.apache.org/axis2/java/core/download.cgi, pilih paket zip distribusi biner standar, dan unzip nama direktori Axis2-1.4.1. Struktur file dalam direktori adalah sebagai berikut:
1.3. Konfigurasi pra-pengembangan:
Di bilah menu Eclipse, Window -> Preferences -> Web Service -> Axis2 Perferences, pilih lokasi paket dekompresi Axis2 di lokasi runtime Axis2. Setelah mengaturnya, klik "OK". (Seperti yang ditunjukkan pada gambar)
1.4. Kembangkan Layanan Web:
(1) Buat proyek Java baru dan beri nama "WebServICetest1"
(2) Buat kelas baru dan beri nama "CalculateService". Kode lengkapnya adalah sebagai berikut:
paket edu.sjtu.webservice; /*** operasi kalkulator* @author rongxinhua*/kelas publik CalculateService {// tambahan float publik plus (float x, float y) {return x + y; } // pengurangan float publik minus (float x, float y) {return x - y; } // Multiple Public Float Multiply (float x, float y) {return x * y; } // dividasi float public divide (float x, float y) {if (y! = 0) {return x /y; } lain return -1; }}(3) pada proyek "WebServICeTest1" baru -> Lainnya, temukan "layanan web" di bawah "layanan web";
(4) Langkah Berikutnya (Berikutnya), di kotak objek Layanan Web yang muncul, klik "Browse" dalam implementasi Layanan, masukkan kotak objek Browse Class, dan temukan kelas CalculateService yang baru saja kami tulis. (Gambar di bawah). Klik "OK", dan Anda akan kembali ke kotak dialog Layanan Web.
(5) Di kotak dialog Layanan Web, sesuaikan slider di jenis layanan web dengan posisi "Layanan Mulai" dan sesuaikan slider dalam jenis klien dengan posisi "uji klien".
(6) Ada "konfigurasi" di sisi kanan diagram Slider Jenis Layanan Web. Klik Opsi di bawahnya untuk memasukkan kotak Objek Konfigurasi Penyebaran Layanan, dan pilih server yang sesuai (saya menggunakan TomCat6.0 di sini) dan runtime layanan web (pilih Apache Axis2), seperti yang ditunjukkan pada gambar di bawah ini:
(7) Setelah mengklik OK, itu akan kembali ke kotak dialog Layanan Web. Demikian pula, ada juga "konfigurasi" di sisi kanan slider dalam jenis klien, dan pengaturan yang sesuai harus dilakukan. Langkah -langkahnya sama seperti di atas. Setelah selesai, Next -> Next sudah siap. Memasuki Layanan Web AXIS2 Konfigurasi kacang java, kami memilih menghasilkan layanan default.xml, seperti yang ditunjukkan pada gambar di bawah ini:
(8) Ketika Anda tiba di kotak dialog Startup Server, ada tombol "Mulai Server" (seperti yang ditunjukkan di bawah). Klik untuk memulai server Tomcat.
(9) Setelah menunggu startup, klik "Berikutnya -> Berikutnya", semuanya akan dilakukan secara default, dan akhirnya, klik Finish. Akhirnya, antarmuka berikut muncul: (Web Service Explorer), di mana kami dapat menguji layanan web kami. (Jika Anda membukanya dengan browser, gunakan alamat berikut: http://127.0.0.1:19189/wse/wsexplorer/wsexplorer.jsp?org.eclipse.wst.ws.explorer=3). Seperti yang ditunjukkan pada gambar di bawah ini:
Catatan: Buka Web Service Explorer di browser (kadang -kadang penjelajah web ditutup di gerhana, yang dapat dibuka dengan cara ini)
Alamat login pertama: http://127.0.0.1:19189/wse/wsexplorer/wsexplorer.jsp. Kemudian pilih tab Web Service Explorer di sudut kanan atas halaman web. Kemudian masukkan alamat WSDL: http: // localhost: 8080/webservicetest1/services/calculateService? Wsdl. Alamat WSDL ini adalah WSDL yang baru saja kami rilis. Klik GO, seperti yang ditunjukkan pada gambar berikut:
Kemudian Anda dapat melihat antarmuka berikut:
(10) Tes ini relatif sederhana. Misalnya, kami memilih operasi "plus" (harus dihitung padaVicesOap11binding). Gambar berikut muncul. Masukkan 1 di kotak input x, masukkan 2 di kotak input y, dan klik "go", dan hasil 3.0 akan ditampilkan di bilah status. Tes metode lain serupa. Hasilnya ditunjukkan pada gambar di atas.
1.5. CalculateService Client memanggil program
Kami telah mendefinisikan metode penambahan, pengurangan, perkalian dan divisi dan menerbitkan metode ini sebagai layanan. Sekarang yang perlu kita lakukan adalah menghubungi layanan ini. Program panggilan klien seperti yang ditunjukkan dalam kode berikut: CalculateServicetest.java
paket edu.sjtu.webservice.test; impor javax.xml.namespace.qname; impor org.apache.axis2.axisfault; impor org.apache.axis2.addressing.endpointreference; impor org.apache.axis2.client.options; impor org.apache.axis2.rpc.client.rpcServiceClient; public class CalculateServiceTest { /** * @param args * @throws AxisFault */ public static void main(String[] args) throws AxisFault { // TODO Auto-generated method stub // Call WebService using RPC method RPCServiceClient serviceClient = new RPCServiceClient(); Opsi opsi = serviceClient.getOptions (); // Tentukan URL untuk memanggil WebService Endpointreference targetEpr = endpointreference baru ("http: // localhost: 8080/webservicetest1/services/calculateService"); options.setto (TargetEpr); // Tentukan metode dan namespace dari file WSDL di komputer untuk dipanggil: edu.sjtu.webservice. QName opaddentry = qname baru ("http://webservice.sjtu.edu", "plus"); // addqname opaddentryminus = qname baru ("http://webservice.sjtu.edu", "minus");////webservice.sjtu.edu "," minus ");////webservice.sjtu.edu", "minus");///castractionservice.sjtu.edu "," Minus ");///SUBTRACTICE. QName("http://webservice.sjtu.edu","multiply");//Multiply QName opAddEntrydivide = new QName("http://webservice.sjtu.edu","divide");//Divide// Specify the parameter values of the plus method are two, namely the adder and the added number Object[] opaddentryargs = objek baru [] {1,2}; // Tentukan tipe data dari nilai pengembalian dari kelas plus class [] class = kelas baru [] {float.class}; // Panggil metode plus dan output nilai pengembalian dari metode metode.out.println (serviceClient.invokeblocking (opaddentry, opaddentryargs, kelas) [0]); System.out.println (serviceClient.invokeBlocking (opaddentryminus, opaddentryargs, kelas) [0]); System.out.println (serviceClient.invokeBlocking (opaddentrymultiply, opaddentryargs, kelas) [0]); System.out.println (serviceClient.invokeBlocking (opaddentrydivide, opaddentryargs, kelas) [0]); }}Hasil Menjalankan:
3.0
-1.0
2.0
0,5
2. Contoh
2. HelloService
(1) Pertama menentukan metode layanan, kode ini adalah sebagai berikut:
paket edu.sjtu.webservice; kelas publik HelloService {public string sayshellOnew () {return "hello"; } public String SayshelloToVersNonNew (name string) {if (name == null) {name = "NOTOH"; } return "halo," + nama; } public void updateData (string data) {System.out.println (data + "diperbarui."); }} (2) Lihat Contoh 1 untuk mempublikasikan metode ini sebagai layanan.
(3) Tulis kode klien untuk menghubungi WebService (referensi utama [5])
Perbedaan terbesar antara contoh ini dan contoh lainnya ada di sini. Contoh lain umumnya perlu menghasilkan rintisan klien berdasarkan layanan WSDL sekarang, dan kemudian hubungi layanan melalui stub. Metode ini tampaknya relatif lajang. Klien harus membutuhkan rintisan rintisan untuk mengakses layanan, yang sangat tidak adil. Klien dalam contoh ini tidak menggunakan metode Stub, tetapi mengimplementasikan metode panggilan umum, dan tidak memerlukan rintisan klien untuk mengakses layanan. Anda hanya perlu menentukan alamat Web ServCE, nama operasi, parameter, dan tipe pengembalian fungsi. Kode terlihat seperti ini:
HelloServicetest2.javapackage edu.sjtu.webservice.test; impor javax.xml.namespace.qname; impor org.apache.axis2.axisfault; impor org.apache.axis2.addressing.endpointreference; impor org.apache.axis2.client.options; impor org.apache.axis2.rpc.client.rpcServiceClient; kelas publik HelloServiceTest2 {private rpcServiceCeClient serviceClient; opsi opsi pribadi; target endpointreference pribadi; public helloServicetest2 (string endpoint) melempar Axisfault {serviceClient = baru rpcserviceClient (); opsi = serviceClient.getOptions (); targetEpr = endpointreference baru (titik akhir); options.setto (TargetEpr); } Objek publik [] Invokeop (String targetNaSpace, string opname, objek [] OpArgs, class <?> [] OpReturnType) melempar Axisfault, ClassNotFoundException {// Atur nama Operasi QName Opqname = QNAME baru (TargetNaSpace, OpName); // atur nilai return // class <?> [] Opreturn = kelas baru [] {opreturnType}; // Parameter yang harus dilewati operasi sudah diberikan dalam parameter. Di sini kami secara langsung menelepon pengembalian 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"; string final targetNeNespace = "http://webservice.sjtu.edu"; HelloServicetest2 klien = helloServicetest2 baru (endpointreference); String opname = "SayHelloTooperSNonNew"; Objek [] opargs = objek baru [] {"teman saya"}; Kelas <?> [] OpReturnType = kelas baru [] {string []. Class}; Objek [] respons = client.invokeop (targetNamespace, opname, opargs, opreturntype); System.out.println ((((String []) Respons [0]) [0]); }}Jalankan program dan klik Jalankan Aplikasi As-> Java. Anda dapat melihat bahwa output dari port konsol adalah: halo, teman -teman saya, menunjukkan bahwa panggilan klien berhasil. Perbedaan dan keuntungan terbesar dari contoh ini tercermin dalam metode panggilan klien, atau dengan kata lain, cara untuk memulai panggilan layanan. Meskipun ada sedikit lebih banyak kode daripada rintisan rintisan rintisan klien, metode ini disatukan dan tidak memerlukan produksi stub stub kode, yang memecahkan masalah bahwa klien memiliki banyak kelas. Jika pembaca lebih lanjut merangkum kode -kode ini, saya pikir metode panggilan sederhana, lulus saja parameter yang relevan, yang lebih baik menggambarkan keuntungan dari panggilan layanan. Selain itu, metode ini lebih sederhana dan lebih jelas, dan Anda dapat mengetahui makna spesifik sekilas. Tidak perlu membuat beberapa mekanisme kelas rintisan.
(4) Tulis ulang kode layanan panggilan klien
(3) Kode aplikasi klien yang disebutkan di berikut ini sedikit rumit untuk ditulis. Klien di atas memanggil program layanan ditulis ulang, yang jauh lebih sederhana. Kodenya adalah sebagai berikut:
HelloServicetest.javaimport javax.xml.namespace.qname; impor org.apache.axis2.axisfault; impor org.apache.axis2.addressing.endpointreference; impor org.apache.axis2.client.options; impor org.apache.axis2.rpc.client.rpcServiceClient; kelas publik HelloServicetest {public static void main (String args []) melempar Axisfault {// Call WebService RPCServiceClient menggunakan rpc serviceClient = baru rpcserviceClient (); Opsi opsi = serviceClient.getOptions (); // Tentukan URL untuk memanggil WebService Endpointreference targetEpr = endpointreference baru ("http: // localhost: 8080/webservicetest1/services/helloService"); options.setto (TargetEpr); // Tentukan metode Sayhellotoperson yang akan dipanggil dan namespace dari file wsdl qname opaddentry = qname baru ("http://webservice.sjtu.edu", "sayhellotopersonnew"); // Tentukan nilai parameter dari objek Metode Sayhellotoperson [] opaddentryargs = objek baru [] {"xuwei"}; // Tentukan objek kelas dari tipe data yang metode SayhelloToPerson Mengembalikan kelas nilai [] kelas = kelas baru [] {string.class}; // Panggil metode Sayhellotoperson dan output nilai pengembalian dari metode metode.out.println (serviceClient.invokeBlocking (opaddentry, opaddentryargs, kelas) [0]); }}Melalui konten di atas, saya akan memperkenalkan contoh pengembangan sederhana dari Eclipse+WebService, dan saya harap ini akan membantu semua orang!