Útmutató az Apache CXF-hez tavasszal

1. Áttekintés

Ez az oktatóanyag a és a konfigurálásra összpontosít az Apache CXF keretrendszer használata Spring-szel együtt - Java vagy XML konfigurációval.

Ez az Apache CXF sorozat második része; az első a CXF alapjaira összpontosított, mint a JAX-WS szabványos API-k implementációja.

2. Maven-függőségek

Az előző oktatóanyaghoz hasonlóan a következő két függőséget is fel kell venni:

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

Az Apache CXF műtermékek legújabb verzióinak megtekintéséhez keresse fel az apache-cxf fájlt.

Ezenkívül a következő függőségekre van szükség a tavasz támogatásához:

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

A tavaszi leletek legújabb verziói itt találhatók.

Végül, mivel programozatosan konfiguráljuk az alkalmazást a hagyományos helyett a Java Servlet 3.0+ API-val web.xml telepítési leíró, szükségünk lesz az alábbi műtárgyra:

 javax.servlet javax.servlet-api 3.1.0 

Itt találhatjuk meg a Servlet API legújabb verzióját.

3. Szerveroldali alkatrészek

Most nézzük meg azokat az összetevőket, amelyeknek jelen kell lenniük a szerver oldalon a webszolgáltatás végpontjának közzétételéhez.

3.1. WebApplicationInitilizer Felület

A WebApplicationInitializer interfész van megvalósítva a ServletContext felület az alkalmazáshoz. Amikor az osztályúton van, annak Indításkor metódust a servlet tároló automatikusan meghívja, majd a ServletContext példányosított és inicializált.

Így határozható meg egy osztály a WebApplicationInitializer felület:

public class AppInitializer implementálja a WebApplicationInitializer {@Override public void onStartup (ServletContext container) {// Metód implementáció}}

A Indításkor() A módszer az alább látható kódrészletek segítségével valósul meg.

Először egy Spring alkalmazáskörnyezetet hoznak létre és konfigurálnak egy konfigurációs metaadatokat tartalmazó osztály regisztrálására:

AnnotationConfigWebApplicationContext context = új AnnotationConfigWebApplicationContext (); context.register (ServiceConfiguration.class);

A ServiceConfiguration osztályt a @ Konfiguráció annotáció a babdefiníciók megadásához. Ezt az osztályt a következő alfejezet tárgyalja.

A következő részlet azt mutatja be, hogy a tavaszi alkalmazáskörnyezet hogyan kerül hozzáadásra a szervlet kontextushoz:

container.addListener (új ContextLoaderListener (context));

A CXFServlet osztályt, amelyet az Apache CXF határoz meg, generálják és regisztrálják a bejövő kérések kezelésére:

ServletRegistration.Dynamic diszpécser = container.addServlet ("diszpécser", új CXFServlet ());

Az alkalmazás kontextusa betölt egy konfigurációs fájlban definiált Spring elemeket. Ebben az esetben a szervlet neve az cxf, ezért a kontextus a megnevezett fájlban keresi az elemeket cxf-servlet.xml alapértelmezés szerint.

Végül a CXF szervlet egy relatív URL-hez van hozzárendelve:

diszpécser.addMapping ("/ szolgáltatások");

3.2. A jó öreg web.xml

Alternatív megoldásként, ha egy (kissé régimódi) telepítési leírót akarunk használni, nem pedig a WebApplicationInitilizer interfész, a megfelelő web.xml a fájlnak a következő servlet-definíciókat kell tartalmaznia:

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

3.3. ServiceConfiguration Osztály

Vessünk egy pillantást a szolgáltatás konfigurációjára - először egy alapvető csontváz, amely mellékeli a webes szolgáltatás végpontjának babdefinícióit:

@Configuration public class ServiceConfiguration {// Bean definíciók}

Az első szükséges bab a SpringBus - amely az Apache CXF kiterjesztéseit biztosítja a Spring Framework használatához:

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

An EnpointImpl babot is létre kell hozni a SpringBus bab és egy webes szolgáltatás megvalósító. Ezt a babot használják a végpont közzétételéhez a megadott HTTP-címen:

@Bean public Endpoint endpoint () {EndpointImpl endpoint = new EndpointImpl (springBus (), new BaeldungImpl ()); endpoint.publish ("// localhost: 8080 / services / baeldung"); visszatérési végpont; }

A BaeldungImpl osztály a webszolgáltatási felület megvalósítására szolgál. Meghatározását a következő alfejezet tartalmazza.

Alternatív megoldásként deklarálhatjuk a szerver végpontját egy XML konfigurációs fájlban is. Pontosabban az cxf-servlet.xml Az alábbi fájl a web.xml a 3.1. szakaszban definiált telepítési leíró, és pontosan ugyanazt a végpontot írja le:

Ne feledje, hogy az XML konfigurációs fájl a kiszolgálónévről van elnevezve, amely a telepítési leíróban van megadva cxf.

3.4. Típusdefiníciók

Következő - itt van a megvalósító amelyet már említettünk az előző alfejezetben:

@WebService (endpointInterface = "com.baeldung.cxf.spring.Baeldung") nyilvános osztály BaeldungImpl valósítja meg Baeldung {private int counter; public String hello (String name) {return "Hello" + név + "!"; } nyilvános húrregiszter (hallgató) {számláló ++; return student.getName () + "a regisztrált hallgató száma" + számláló; }}

Ez az osztály biztosítja a Baeldung végpont interfész, amelyet az Apache CXF tartalmazni fog a közzétett WSDL metaadatokban:

@WebService nyilvános felület Baeldung {String hello (String name); Vonós regiszter (hallgató hallgató); }

Mind a végpont interfész, mind a megvalósító használja ki a Diák osztály, amelyet a következőképpen határozunk meg:

public class Student {private String name; // kivitelezők, szerelvények és beállítók}

4. Ügyféloldali bab

A tavaszi keret előnyeinek kihasználásához babot hirdetünk az a @ Konfiguráció kommentált osztály:

@Configuration public class ClientConfiguration {// Bean definíciók}

Bab nevű bab ügyfél meghatározása:

@Bean (név = "kliens") public Object geneProxy () {return proxyFactoryBean (). Create (); }

A ügyfél bab képviseli a Baeldung webes szolgáltatás. Létrehozása a teremt módszer a JaxWsProxyFactoryBean bab, gyár a JAX-WS proxyk létrehozására.

A JaxWsProxyFactoryBean Az objektum létrehozása és konfigurálása a következő módszerrel történik:

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

A gyáré serviceClass tulajdonság a webszolgáltatás felületét jelöli, míg a cím tulajdonság a proxy URL-címét jelzi a távoli meghívásokhoz.

Az ügyféloldali tavaszi bab esetében is visszatérhet egy XML konfigurációs fájlba. A következő elemek ugyanazokat a babokat deklarálják, mint amelyeket a fentiekben programozottan konfiguráltunk:

5. Tesztesetek

Ez a szakasz az Apache CXF Spring támogatásának bemutatásához használt teszteseteket ismerteti. A teszteseteket egy megnevezett osztályban határozzuk meg StudentTest.

Először be kell töltenünk egy Spring alkalmazás kontextust a fentiekből ServiceConfiguration konfigurációs osztály, és tárolja a kontextus terület:

privát ApplicationContext context = új AnnotationConfigApplicationContext (ClientConfiguration.class);

Ezután a szolgáltatás végpont interfészének proxyját deklaráljuk és töltjük be az alkalmazáskörnyezetből:

privát Baeldung baeldungProxy = (Baeldung) context.getBean ("kliens");

Ez Baeldung a proxyt az alábbiakban leírt tesztesetekben kell használni.

Az első tesztesetben bebizonyítjuk, hogy amikor a Helló metódust lokálisan meghívják a proxyn, a válasz pontosan megegyezik a végponttal megvalósító visszatér a távoli webszolgáltatásból:

@Test public void whenUsingHelloMethod_thenCorrect () {String response = baeldungProxy.hello ("John Doe"); assertEquals ("Hello John Doe!", válasz); }

A második tesztesetben a hallgatók regisztrálódnak a Baeldung tanfolyamokra azáltal, hogy helyileg meghívják a Regisztráció metódus a proxyn, amely viszont felhívja a webszolgáltatást. Ez a távoli szolgáltatás ezután kiszámítja a hallgatói számokat, és visszaadja azokat a hívónak. A következő kódrészlet megerősíti a várakozásokat:

@Test public void whenUsingRegisterMethod_thenCorrect () {Student student1 = new Student ("Adam"); Student student2 = new Student ("Éva"); Karakterlánc hallgató1Válasz = baeldungProxy.register (tanuló1); Karakterlánc student2Response = baeldungProxy.register (hallgató2); assertEquals ("Ádám regisztrált hallgatói száma 1", student1Response); assertEquals ("Éva be van jegyezve a 2. számú tanuló", student2Response); }

6. Integrációs tesztelés

Ahhoz, hogy webalkalmazásként telepíthető legyen a szerveren, az oktatóanyag kódrészleteit először WAR fájlba kell csomagolni. Ezt a csomagolás tulajdonság a POM fájlban:

háború

A csomagolási feladatot a Maven WAR plugin valósítja meg:

 maven-war-plugin 2.6 hamis 

Ez a bővítmény a lefordított forráskódot WAR fájlba csomagolja. Mivel a szervlet kontextust a Java kód használatával konfiguráljuk, a hagyományos web.xml a telepítési leírónak nem kell léteznie. Ennek eredményeként a failOnMissingWebXml tulajdonságot kell beállítani hamis a hiba elkerülése érdekében a plugin végrehajtásakor.

Ezt a linket követhetjük a Maven WAR plugin legújabb verziójához.

A webszolgáltatás működésének szemléltetése céljából létrehozunk egy integrációs tesztet. Ez a teszt először létrehoz egy WAR fájlt, elindít egy beágyazott szervert, majd az ügyfeleket felhívja a webszolgáltatásra, ellenőrzi a későbbi válaszokat és végül leállítja a szervert.

A következő bővítményeket kell beépíteni a Maven POM fájlba. További részletekért olvassa el ezt az integrációs tesztelési oktatóanyagot.

Itt van a Maven Surefire bővítmény:

 maven-surefire-plugin 2.19.1 StudentTest.java 

A bővítmény legújabb verziója itt található.

A profil szakasz a id nak,-nek integráció bejelentette, hogy megkönnyíti az integrációs tesztet:

  integráció ... 

A Maven Cargo plugint a integráció profil:

 org.codehaus.cargo cargo-maven2-plugin 1.5.0 jetty9x beágyazott localhost 8080 start-server pre-integráció-teszt start stop-szerver post-integráció-teszt stop 

Vegye figyelembe, hogy a cargo.hostname és cargo.servlet.port a konfigurációs tulajdonságok csupán az egyértelműség kedvéért szerepelnek benne. Ezek a konfigurációs tulajdonságok kihagyhatók az alkalmazásra gyakorolt ​​hatás nélkül, mivel értékeik megegyeznek az alapértelmezett értékekkel. Ez a bővítmény elindítja a szervert, megvárja a kapcsolatokat, és végül leállítja a szervert a rendszererőforrások felszabadítása érdekében.

Ez a link lehetővé teszi számunkra, hogy megnézzük a Maven Cargo plugin legújabb verzióját.

A Maven Surefire bővítmény újra deklarálásra kerül, a integráció profil, hogy felülbírálja a konfigurációt épít szakaszban és az előző szakaszban leírt tesztesetek végrehajtására:

 maven-surefire-plugin 2.19.1 integrációs teszt teszt nincs 

Most a teljes folyamat a következő paranccsal futtatható: mvn -Pintegration tiszta telepítés.

7. Következtetés

Ez az oktatóanyag az Apache CXF támogatását illusztrálta a Spring számára. Különösen azt mutatták be, hogy miként lehet egy webes szolgáltatást közzétenni egy Spring konfigurációs fájl segítségével, és hogy az ügyfél hogyan léphet kapcsolatba a szolgáltatással egy Apache CXF proxy gyár által létrehozott proxyn keresztül, amelyet egy másik konfigurációs fájlban deklaráltak.

Mindezen példák és kódrészletek megvalósítása megtalálható a kapcsolt GitHub projektben.


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