Vodič za Apache CXF s proljećem

1. Pregled

Ovaj se vodič fokusira na konfiguriranje i koristeći Apache CXF okvir zajedno s Springom - bilo s Java ili XML konfiguracijom.

To je drugi u nizu na Apache CXF; prvi se fokusirao na osnove CXF-a kao implementaciju JAX-WS standardnih API-ja.

2. Ovisnosti Mavena

Slično prethodnom vodiču, trebaju biti uključene sljedeće dvije ovisnosti:

 org.apache.cxf cxf-rt-frontend-jaxws 3.1.6 org.apache.cxf cxf-rt-transports-http 3.1.6 

Najnovije verzije artefakata Apache CXF potražite u odjeljku apache-cxf.

Uz to, potrebne su sljedeće ovisnosti za podršku Springu:

 org.springframework spring-context 4.3.1.RELEASE org.springframework spring-webmvc 4.3.1.RELEASE 

Najnovije verzije proljetnih artefakata možete pronaći ovdje.

Konačno, zato što ćemo programski konfigurirati aplikaciju pomoću Java Servlet 3.0+ API umjesto tradicionalnog web.xml deskriptor implementacije, trebat će nam artefakt u nastavku:

 javax.servlet javax.servlet-api 3.1.0 

Ovdje možemo pronaći najnoviju verziju API-ja Servlet.

3. Komponente na poslužitelju

Pogledajmo sada komponente koje moraju biti prisutne na strani poslužitelja da bi se objavila krajnja točka web usluge.

3.1. WebApplicationInitilizer Sučelje

The WebApplicationInitializer Sučelje je implementirano za programsku konfiguraciju ServletContext sučelje za aplikaciju. Kad je prisutan na stazi, njegov Na početku metodu automatski poziva spremnik servleta, a nakon toga ServletContext je instanciran i inicijaliziran.

Evo kako je definirana klasa za implementaciju WebApplicationInitializer sučelje:

javna klasa AppInitializer implementira WebApplicationInitializer {@Override public void onStartup (spremnik ServletContext) {// Implementacija metode}}

The Na početku() metoda implementirana je pomoću isječaka koda prikazanih u nastavku.

Prvo se stvara i konfigurira kontekst aplikacije Spring za registraciju klase koja sadrži metapodatke o konfiguraciji:

AnnotationConfigWebApplicationContext context = novo AnnotationConfigWebApplicationContext (); context.register (ServiceConfiguration.class);

The Konfiguracija usluge razred označen je s @Konfiguracija napomena za davanje definicija graha. O ovom se razredu govori u sljedećem pododjeljku.

Sljedeći isječak pokazuje kako se kontekst aplikacije Spring dodaje u kontekst servleta:

container.addListener (novi ContextLoaderListener (kontekst));

The CXFServlet klasa, koju definira Apache CXF, generira se i registrira za obradu dolaznih zahtjeva:

ServletRegistration.Dynamic dispečer = container.addServlet ("dispečer", novi CXFServlet ());

Kontekst aplikacije učitava Spring elemente definirane u konfiguracijskoj datoteci. U ovom slučaju, naziv servleta je cxf, stoga kontekst traži te elemente u datoteci s imenom cxf-servlet.xml prema zadanim postavkama.

I na kraju, CXF servlet preslikava se na relativni URL:

dispečer.addMapping ("/ usluge");

3.2. Dobro staro web.xml

Alternativno, ako želimo koristiti (pomalo staromodan) deskriptor implementacije, a ne WebApplicationInitilizer sučelje, odgovarajuće web.xml datoteka treba sadržavati sljedeće definicije servleta:

 cxf org.apache.cxf.transport.servlet.CXFServlet 1 cxf / services / * 

3.3. Konfiguracija usluge Razred

Pogledajmo sada konfiguraciju usluge - prvo osnovni kostur koji obuhvaća definicije graha za krajnju točku web usluge:

@Configuration javna klasa ServiceConfiguration {// Definicije graha}

Prvo potrebno zrno graha je SpringBus - koji isporučuje proširenja za Apache CXF za rad s Spring Frameworkom:

@Bean public SpringBus springBus () {return new SpringBus (); }

An EnpointImpl grah također treba stvoriti pomoću SpringBus grah i web usluga realizator. Ovaj grah koristi se za objavljivanje krajnje točke na zadanoj HTTP adresi:

@Bean public Endpoint endpoint () {EndpointImpl endpoint = new EndpointImpl (springBus (), new BaeldungImpl ()); krajnja točka.publish ("// localhost: 8080 / services / baeldung"); povratna krajnja točka; }

The BaeldungImpl klasa koristi se za implementaciju sučelja web usluge. Njegova je definicija dana u sljedećem pododjeljku.

Alternativno, krajnju točku poslužitelja možemo proglasiti i u XML konfiguracijskoj datoteci. Konkretno, cxf-servlet.xml datoteka u nastavku radi s web.xml deskriptor implementacije kako je definirano u pododjeljku 3.1 i opisuje potpuno istu krajnju točku:

Imajte na umu da je XML datoteka za konfiguraciju imenovana po imenu servleta definiranom u deskriptoru implementacije, što je cxf.

3.4. Definicije tipa

Dalje - ovdje je definicija realizator što je već spomenuto u prethodnom pododjeljku:

@WebService (endpointInterface = "com.baeldung.cxf.spring.Baeldung") javna klasa BaeldungImpl implementira Baeldung {private int counter; javni String pozdrav (naziv niza) {return "Hello" + name + "!"; } javni registar nizova (student student) {counter ++; return student.getName () + "je registrirani broj studenta" + brojač; }}

Ova klasa pruža implementaciju za Baeldung sučelje krajnje točke koje će Apache CXF uključiti u objavljene WSDL metapodatke:

@WebService javno sučelje Baeldung {String hello (naziv niza); Registar žica (student student); }

Oba sučelja krajnje točke, kao i realizator iskoristite Student klasa, koja je definirana kako slijedi:

student javnog razreda {naziv privatnog niza; // konstruktori, getteri i postavljači}

4. Grah na strani klijenta

Da bismo iskoristili proljetni okvir, deklariramo grah u @Konfiguracija označeni razred:

@Configuration javna klasa ClientConfiguration {// Definicije graha}

Grah s imenom klijent je definirano:

@Bean (name = "client") javni objekt createProxy () {return proxyFactoryBean (). Create (); }

The klijent grah predstavlja proxy za Baeldung web usluga. Stvoren je pozivom na stvoriti metoda na a JaxWsProxyFactoryBean grah, tvornica za stvaranje JAX-WS proksija.

The JaxWsProxyFactoryBean objekt se kreira i konfigurira sljedećom metodom:

@Bean public JaxWsProxyFactoryBean proxyFactoryBean () {JaxWsProxyFactoryBean proxyFactory = new JaxWsProxyFactoryBean (); proxyFactory.setServiceClass (Baeldung.class); proxyFactory.setAddress ("// localhost: 8080 / services / baeldung"); vratiti proxyFactory; }

Tvornica classClass svojstvo označava sučelje web usluge, dok adresa svojstvo označava URL adresu proxyja za daljinsko pozivanje.

Također se za Spring grah na klijentskoj strani može vratiti u XML konfiguracijsku datoteku. Sljedeći elementi deklariraju isti grah kao i onaj koji smo upravo programski konfigurirali gore:

5. Ispitni slučajevi

Ovaj odjeljak opisuje test slučajeve koji se koriste za ilustraciju podrške Apache CXF za proljeće. Ispitni slučajevi definirani su u klasi s imenom StudentTest.

Prvo, iz prethodno spomenutog moramo učitati kontekst aplikacije Spring Konfiguracija usluge konfiguracijsku klasu i pohranite u kontekst polje:

private ApplicationContext context = new AnnotationConfigApplicationContext (ClientConfiguration.class);

Dalje se proxy za sučelje krajnje točke usluge deklarira i učitava iz konteksta aplikacije:

private Baeldung baeldungProxy = (Baeldung) context.getBean ("klijent");

Ovaj Baeldung proxy će se koristiti u dolje opisanim testnim slučajevima.

U prvom testnom slučaju dokazujemo da kada zdravo metoda se lokalno poziva na proxyju, odgovor je potpuno isti kao i krajnja točka realizator vraća se s udaljene web usluge:

@Test public void whenUsingHelloMethod_thenCorrect () {String response = baeldungProxy.hello ("John Doe"); assertEquals ("Zdravo John Doe!", odgovor); }

U drugom testnom slučaju studenti se prijavljuju za tečajeve Baeldunga lokalnim pozivanjem na Registar metoda na proxyju, koji zauzvrat poziva web uslugu. Ta će daljinska usluga tada izračunati brojeve učenika i vratiti ih pozivatelju. Sljedeći isječak koda potvrđuje što očekujemo:

@Test public void whenUsingRegisterMethod_thenCorrect () {Student student1 = novi student ("Adam"); Student student2 = novi Student ("Eve"); Niz student1Response = baeldungProxy.register (student1); Niz student2Response = baeldungProxy.register (student2); assertEquals ("Adam je registrirani student broj 1", student1Response); assertEquals ("Eve je registrirani student broj 2", student2Response); }

6. Integracijsko ispitivanje

Da bi se istrenirali kao web aplikacija na poslužitelju, isječci koda u ovom vodiču moraju se prvo spakirati u WAR datoteku. To se može postići proglašavanjem ambalaža svojstvo u POM datoteci:

rat

Posao pakiranja provodi dodatak Maven WAR:

 maven-war-plugin 2.6 false 

Ovaj dodatak pakira prevedeni izvorni kod u WAR datoteku. Budući da konfiguriramo kontekst servleta pomoću Java koda, tradicionalnog web.xml deskriptor implementacije ne mora postojati. Kao rezultat, failOnMissingWebXml svojstvo mora biti postavljeno na lažno kako bi se izbjegao neuspjeh prilikom izvršavanja dodatka.

Ovu vezu možemo pratiti za najnoviju verziju dodatka Maven WAR.

Kako bismo ilustrirali rad web usluge, kreiramo test integracije. Ovaj test prvo generira WAR datoteku i pokreće ugrađeni poslužitelj, a zatim tjera klijente da pozivaju web uslugu, provjerava naknadne odgovore i na kraju zaustavlja poslužitelj.

Sljedeći dodaci trebaju biti uključeni u Maven POM datoteku. Za više detalja pogledajte ovaj vodič za testiranje integracije.

Evo dodatka Maven Surefire:

 maven-surefire-plugin 2.19.1 StudentTest.java 

Najnoviju verziju ovog dodatka možete pronaći ovdje.

A profil odjeljak s iskaznica od integracija proglašava se za olakšavanje integracijskog testa:

  integracija ... 

Dodatak Maven Cargo uključen je u integracija profil:

 org.codehaus.cargo cargo-maven2-plugin 1.5.0 jetty9x ugrađeni localhost 8080 start-server pre-integracija-test start stop-server post-integracija-test stop 

Imajte na umu da teret.ime hosta i cargo.servlet.port svojstva konfiguracije samo su uključena radi jasnoće. Ova svojstva konfiguracije mogu se izostaviti bez ikakvog utjecaja na aplikaciju, jer su njihove vrijednosti iste kao zadane vrijednosti. Ovaj dodatak pokreće poslužitelj, čeka veze i konačno zaustavlja poslužitelj da oslobodi sistemske resurse.

Ova nam poveznica omogućuje provjeru najnovije verzije dodatka Maven Cargo.

Dodatak Maven Surefire ponovno je proglašen unutar integracija profila, da bi nadjačala njegovu konfiguraciju u glavnom izgraditi i izvršiti test slučajeve opisane u prethodnom odjeljku:

 maven-surefire-plugin 2.19.1 test integracijskog testa nema 

Sada se cijeli postupak može pokrenuti naredbom: mvn -Pintegration čista instalacija.

7. Zaključak

Ovaj je vodič ilustrirao podršku Apache CXF za proljeće. Konkretno, prikazano je kako se web usluga može objaviti pomoću konfiguracijske datoteke Spring i kako klijent može komunicirati s tom uslugom putem proxyja stvorenog u tvornici proxyja Apache CXF, koji je deklariran u drugoj konfiguracijskoj datoteci.

Provedba svih ovih primjera i isječaka koda mogu se naći u povezanom projektu GitHub.


$config[zx-auto] not found$config[zx-overlay] not found