Cxf
CXF diimplementasikan berdasarkan XFIRE.
1) Pertama -tama, itu masih menjadi masalah paket. Anda dapat mengunduh versi terbaru CXF di http://cxf.apache.org/download.html. Tentu saja, saya menggunakan versi terbaru. Berikutnya adalah omong kosong, membangun proyek web dan memasukkannya ke dalam paket JAR. Kami tidak memilih paket toples, memasukkan semuanya.
Kita akan melihat bahwa itu berisi paket jar musim semi. Ketika kita perlu menggunakan CXF sebagai proyek web, kita perlu menggunakan file konfigurasi pegas, yang akan dibahas nanti.
Atau kelas antarmuka dan kelas implementasi:
@WebService Public Interface IReaderService {Public Reader getReader (@WebParam (name = "name") nama string,@webparam (name = "password") string password); Daftar Publik <READER> getReaders (); } @WebService(endpointInterface="com.cxf.servlet.IReaderService",serviceName="readerService") public class ReaderService implements IReaderService{ public Reader getReader(@WebParam(name="name") String name,@WebParam(name="password") String password) { return new Reader(name,password); } Daftar Publik <READER> getReaders () {Daftar <Reader> readerList = ArrayList baru <READER> (); readerlist.add (pembaca baru ("shun1", "123")); readerlist.add (pembaca baru ("shun2", "123")); Return ReaderList; }} Kecuali untuk menambahkan anotasi, kedua kelas ini sama dengan yang disebutkan kemarin. Saya tidak akan membicarakannya di sini. Untuk penjelasan anotasi, Anda dapat melihat dokumentasi Javaee. Tetapi harus mudah dimengerti sesuai dengan artinya.
Berikutnya adalah Javabean, atau kelas pembaca:
pembaca kelas publik {private static final long serialversionuid = 1l; nama string pribadi; kata sandi string pribadi; pembaca publik () {} pembaca publik (nama string, kata sandi string) {this.name = name; this.password = kata sandi; } // Get/atur Metode menghilangkan string publik toString () {return "name:"+name+", kata sandi:"+kata sandi; }} Di atas telah ditulis.
2) Apakah kita ingin menggunakannya sebagai proyek web? Jangan khawatir, jangan gunakan itu sekarang. CXF hadir dengan layanan kontainer ringan, yang setara dengan Spring sendiri menyediakan wadah IOC. Kami dapat menggunakannya untuk menguji apakah penyebaran kami berhasil.
Mari kita ikuti kelas tes:
public static void main (string [] args) {System.out.println ("Server mulai ..."); Readerservice Readerservice = NEW REACEERSERVICE (); Endpoint.publish ("http: // localhost: 8080/readerservice", readerservice); System.out.println ("Server sudah dimulai ..."); } Sangat sederhana. Tidak apa -apa untuk secara langsung mempublikasikan alamat dan kemudian menentukan antarmuka atau kelas. Saya menggunakan kelas di sini, tetapi cobalah menggunakan antarmuka. Bagaimanapun, pemrograman yang berorientasi antarmuka adalah ide yang berorientasi objek yang sebenarnya.
Mari kita mulai melihat hasilnya:
Kami melihat bahwa startup telah selesai, dan kemudian memulai browser untuk melihat apakah itu berhasil.
Langsung masukkan http: // localhost: 8080/readerservice? Wsdl di browser, kita dapat melihat:
Ini menghasilkan file WSDL yang kami butuhkan, menunjukkan bahwa kami telah berhasil menggunakannya.
3) Setelah penyebaran berhasil, kami akan menyebutnya. Panggilannya juga cukup sederhana. Ini mirip dengan xfire. Anda bisa mendapatkan antarmuka dan kemudian memanggil metode seperti kelas lokal.
public static void main (string [] args) {jaxwsproxyfactorybean factorybean = new jaxwsproxyfactorybean (); factorybean.setserviceClass (ireaderservice.class); factorybean.setAddress ("http: // localhost: 8080/readerservice"); IREADERService Readerservice = (IReaderservice) factorybean.create (); Pembaca pembaca = readerservice.getreader ("shun", "123"); System.out.println ("Pembaca:"+Pembaca); } Di sini sangat sederhana. Anda bisa mendapatkan kelas pabrik, lalu langsung mengatur antarmuka dan alamat dan membuat untuk mendapatkan antarmuka yang sesuai. Seperti XFIRE, Anda juga perlu mendefinisikan prototipe antarmuka terlebih dahulu, jika tidak, panggilan ini tidak akan memiliki cara untuk memulai.
Kami berlari untuk mendapatkan hasilnya:
Tidak masalah, itu konsisten dengan hasil yang kami harapkan.
4) Tetapi dalam banyak kasus, kami tidak ingin layanan web kami dan aplikasi kami untuk memisahkan dua server, tetapi ingin mereka berada di wadah yang sama, Tomcat atau JBoss atau lainnya, jadi kami harus menggunakan layanan web yang kami selesaikan sebelumnya melalui web.
Perhatikan bahwa kita perlu menggunakan file definisi pegas di sini.
Pertama tampilan web.xml:
<? Xml Version = "1.0" encoding = "utf-8"?> <web-app xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns = "http://java.sun.com/xmlns =" http://java.com/xmlns = "http://java.com/xmlns = xmlns: web = "http://java.sun.com/xml/ns/javaee" xmlns: web = "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <context-param> <param-name>contextConfigLocation</param-name> <param-value> web-inf/beans.xml </param-value> </context-param> <dengarerer> <Distener-Class> org.springframework.web.context.contextLoadererer </listener-class> </listener> <servlet> <servlet-name> CXFSERVER </listener> </listener> <servlet> <servlet-name> cxfserv <servlet-class> org.apache.cxf.transport.servlet.cxfservlet </servlet-class> </servlet> <servlet-Mapping> <servlet-name> CXFServlet </servlet-name> <rerl-pattern>/webservice/*</url-Pattern> </servlet-mapping> </servlet>
Ini sangat sederhana di sini, tentukan saja pendengar pegas dan jalur file konfigurasi yang sesuai, dan tentukan metode intersepsi CXF.
Selanjutnya, lihatlah beans.xml:
<? XML Versi = "1.0" encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmls xmlns: jaxws = "http://cxf.apache.org/jaxws" xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.orga/beans http://www.spramework.orga/beans http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd "> <impor sumber daya =" classpath: meta-inf/cxf/cxf.xml "/<impor sumber daya =" classpath: meta-inf/cxf.xml "/<impor sumber daya =" classpath: meta-inf/cxf.xml "/<impor sumber daya =" classpath: meta-inf/cxf.xml "/<impor sumber daya =" classpath: meta-inf/cxf/cxfl "/<impor sumber daya =" classpath: meta-inf/cxf/cxfl "/<impor sumber kpath resource = "classpath: meta-inf/cxf/cxf-ekstension-soap.xml"/> <import resource = "classpath: meta-inf/cxf/cxf-servlet.xml"/> <jaxws: endpoint id = "readerservicce2" implemor = "com.cxf.serv. </boy>
Di sini sangat sederhana, cukup tentukan layanan web melalui jaxws: titik akhir. Implemor adalah kelas pemrosesan layanan web, dan alamatnya adalah jalur aksesnya, mirip dengan layanan pembaca yang kami tulis sebelumnya.
Pada saat ini, kita dapat menggunakannya ke Tomcat dan dapat diakses langsung melalui http: // localhost: 8080/cxfwebservice/webservice/readerservice2? Wsdl.
Beberapa teman akan bertanya mengapa URL yang Anda kunjungi kali ini berbeda dari yang sebelumnya. Faktanya, alamat akses sebelumnya ditentukan oleh diri kita sendiri, dan alamat layanan web di sini dikonfigurasi dalam file konfigurasi dan digunakan melalui proyek web. Nama proyek diperlukan di sini, dan kami mengkonfigurasi pola URL sebagai layanan web di CXFServlet, sehingga URL akhir sama seperti di atas.
Kita bisa melihat efeknya:
Ini membuktikan bahwa penyebaran kami berhasil.
Anda dapat menggunakan kelas tes sebelumnya untuk menguji lagi. Perhatikan bahwa Anda perlu memodifikasi alamat ke URL yang kami posting.
CXF sedikit lebih ringkas daripada xfire. Meskipun menambahkan beberapa anotasi, ini tidak berbahaya. Ini hanya memusatkan informasi dalam layanan.xml sebelumnya ke dalam kelas, yang lebih nyaman untuk dipelihara. Namun, ini masih merupakan masalah pendapat. Beberapa orang menyukai file konfigurasi, sementara yang lain tidak. Selain itu, metode panggilan CXF lebih ringkas, dan memiliki volume kode yang lebih kecil daripada XFIRE, yang merupakan peningkatan besar.
Beberapa teman memiliki beberapa masalah selama proses konstruksi, sehingga mereka dibebaskan dari membalas satu per satu. Kode ini dirilis di sini. Teman yang membutuhkan dapat mengunduhnya.
Semua paket di direktori LIB tidak dimasukkan, cukup masukkan semua paket di CXF.
Catatan: IDE yang digunakan adalah ide, dan struktur file tidak umum untuk gerhana. Jika Anda perlu menggunakannya di bawah Eclipse, Anda dapat secara langsung menyalin kode dan file ke proyek yang baru dibuat di Eclipse.
Jersey
Mari kita lihat penggunaan dasarnya.
Mari kita lihat sebuah proyek. Sebelum memulai proyek, Anda harus mengunduh paket sendiri: https://maven.java.net/content/repositories/releases/com/sun/jersey/to menjalankan contoh, Anda perlu mengunduh server dan klien. Tentu saja saya tidak ingin menemukan begitu banyak, jadi saya dapat langsung mengunduh paket zip ini. https://maven.java.net/service/local/artifact/maven/redirect?r=releases&g=com.sun.jersey&a=jersey-archive&v=1.10&e=zip
1) Lakukan saja Javabean
@Xmlrootelement Pembaca kelas publik mengimplementasikan serializable {private static final long serialversionuid = 1l; nama string pribadi; kata sandi string pribadi; pembaca publik () {} pembaca publik (nama string, kata sandi string) {this.name = name; this.password = kata sandi; } // hilangkan metode get/atur public string toString () {return "name:"+name+", kata sandi:"+kata sandi; }} Tag digunakan di sini, yang mewakili tipe saat kembali, yaitu, kelas pembaca ini dapat digunakan untuk pengembalian XML.
2) Jika Anda ingin menggunakan kelas layanan, Anda tidak perlu lagi berinteraksi seperti CXF dan XFIRE di masa lalu. Cukup gunakan kelas secara langsung.
@Path ("/readerservice/{name}/{password}") Public Class ReaderService {@get @produces (mediatype.application_json) Pembaca publik getReader (@pathparam ("name") name, @pathparam ("kata sandi") kata sandi string) {return new, name, name, name); } public static void main (string [] args) melempar ilegalargumentException, ioException, urisyntaxException {httpserver server = httpserverfactory.create ("http: // localhost: 8080/"); server.start (); }} Pada saat ini, beberapa tag digunakan. Path percaya bahwa teman -teman yang telah menggunakan SpringMVC harus mengetahui cara menulis ini, yang merupakan pencocokan URL. Jika Anda tidak jelas, Anda bisa pergi dan melihat terlebih dahulu. Tag GET menunjukkan bahwa metode ini hanya dapat diakses melalui metode GET, sementara menghasilkan menunjukkan hasil yang dihasilkan, yang berarti bahwa sistem akan melampirkan objek pembaca ke dalam hasil JSON dan mengembalikannya.
Tidak masalah jika Anda tidak mengerti, Anda dapat memahaminya setelah beberapa saat.
Dan saat ini ada metode utama, saya percaya ada pertanyaan besar. Ini adalah wadah internal ringan yang disediakan oleh Jersey. Ini dapat digunakan sementara bagi kita untuk men -debug, tetapi jelas tidak mungkin untuk menggunakan ini secara nyata.
3) Mari kita tulis kelas tes
Public Class ReaderClient {public static void main (string [] args) {client client = client.create (); WebResource Resource = Client.Resource ("http: // localhost: 8080/readerservice/shun/123213"); Reader reader = resource.get (reader.class); System.out.println (pembaca); }} Kode yang sangat sederhana, Anda harus memahaminya. Objek klien, meminta layanan web, mengembalikan sumber daya, dan kemudian sumber daya secara langsung memanggil metode yang sesuai. Tentu saja, metode ini dicocokkan melalui URL kami.
Di sini kita pertama -tama akan mengujinya dengan layanan ringan yang menyertainya. Jalankan Readerservice secara langsung, yang berisi metode utama. Setelah berjalan, kami menjalankan ReaderClient dan kami dapat melihat bahwa hasilnya adalah:
Hasilnya benar.
Tentu saja kami tidak ingin menggunakan layanan ringan yang menyertainya sebagai server kami. Kita perlu meletakkannya di server yang sama dengan proyek kita, seperti Tomcat, JBoss, dll.
4) Tentu saja, Web.xml sangat diperlukan untuk proyek web.
<? Xml Version = "1.0" encoding = "utf-8"?> <web-app xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns = "http://java.sun.com/xmlns =" http://java.com/xmlns = "http://java.com/xmlns = xmlns: web = "http://java.sun.com/xml/ns/javaee" xmlns: web = "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <servlet> <servlet-name>Jersey Web Application</servlet-name> <servlet-class> com.sun.jersey.spi.container.servlet.servletcontainer </servlet-class> <Boad-on-startup> 1 </boad-on-startup> </servlet> <servlet-mapping> <servlet--name> </piala-pitner> </podam </patner </piala </piala </-pattern> </-pattern> </resi </-pattern> </-pattern </-pattern> </patner </podsy </podsy </servlet-name> <ruml-pola>/resist/rested/Jersey </servlet-name> <rumlater> <creendaking-file> index.jsp </welcome-file> </celcome-filt-file> </seb-app>
Pada saat ini, semua jalur lainnya yang ditentukan akan dicegat oleh Jersey.
Kami menggunakan Tomcat dan memulainya dan kemudian menjalankan kembali ReaderClient. Perhatikan bahwa kita perlu memodifikasi jalur sumber daya terlebih dahulu:
WebResource Resource = Client.Resource ("http: // localhost: 8080/jerseywebservice/rest/readerservice/shun/123213"); Nama proyek saya adalah JerseyWebService, harap modifikasi sesuai dengan nama proyek Anda.
Setelah modifikasi, kami menjalankannya kembali, dan hasilnya adalah sebagai berikut:
Konsisten dengan hasil di atas, itu berarti bahwa efek penyebaran adalah sama dan juga benar.