6.1 X-tee andmeteenuse ja kliendi loomine WSDL baasil. (Java platvormil)


6.1 Praktiline osa: X-tee andmeteenuse ja kliendi loomine WSDL baasil. (Java platvormil)

Käesolevas peatükis loome eelnevalt valmistatud X-tee andmeteenuse WSDL-kirjelduse baasil uue X-tee andmeteenuse ja testime X-tee teenust erinevate vahenditega.

X-tee andmeteenuse loomisel kasutame tööriistu: Apache CXF 3.2,  Maven.

Kasutatav meetod: “Top Down“  - ehk olemasoleva WSDL-i baasil genereerime Java koodi, mida hiljem saab käsitsi muuta vastavalt vajadusele.

6.1.1        X-tee andmeteenuse loomine

X-tee andmeteenuse loomisel kasutame Eclipse’i Mavenit, mis CXF abil genereerib vajaliku koodi. Selleks muudame pom.xml faili. Lisades valjalikud <properties>, <dependency> ja <plugin> komponendid.

Esiteks lisa <properties> ja <dependency>, et Maven tõmbaks alla kõik vajalikud jar failid. Vajadusel võib vajalikud failid tõmmata alla ka käsitsi.

 

<!-- properties -->

<properties>

<cxf.version>3.2.0</cxf.version>

<spring.version>4.3.11.RELEASE</spring.version>

<cxf.scope>compile</cxf.scope>

<compileSource>1.8</compileSource>

<maven.compiler.target>1.8</maven.compiler.target>

<maven.compiler.source>1.8</maven.compiler.source>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

</properties>

<dependencies>

<!-- apache cxf jax-ws 3.2.0 -->

<dependency>

<groupId>org.apache.cxf</groupId>

<artifactId>cxf-core</artifactId>

<version>${cxf.version}</version>

</dependency>

<dependency>

<groupId>org.apache.cxf</groupId>

<artifactId>cxf-rt-frontend-jaxws</artifactId>

<version>${cxf.version}</version>

<scope>${cxf.scope}</scope>

</dependency>

<dependency>

<groupId>org.apache.cxf</groupId>

<artifactId>cxf-rt-transports-http</artifactId>

<version>${cxf.version}</version>

<scope>${cxf.scope}</scope>

</dependency>

<!-- spring framework 4.3.11 -->

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-web</artifactId>

<version>${spring.version}</version>

<scope>compile</scope>

</dependency>

</dependencies>

 

Peale seda vali projekti peal Run As > Maven install, et Maven tõmbaks alla kõik vajalikud Jar failid.

 

Lisa <plugin>, mis võimaldab failide genereerimist. Selleks, tuleb muuta:

  • <sourceRoot>: kataloog kuhu genereeritakse java failid. Vaikimisi on selleks "target/generated-sources/cxf„. Seadista selleks näiteks „ ${basedir}/src/main/java“

  • <wsdl>: WSDL, millest genereeritakse failid

  • <wsdlLocation>: asukoht kuhu @WebService hakkab viitama

     

    <build>

    <finalName>persons_register</finalName>

    <plugins>

    <!-- plugin 4- apache cxf codegen wsdl2java goal -->

    <plugin>

    <groupId>org.apache.cxf</groupId>

    <artifactId>cxf-codegen-plugin</artifactId>

    <version>${cxf.version}</version>

    <executions><execution>

    <configuration>

    <sourceRoot>${basedir}/src/main/java</sourceRoot>

    <wsdlOptions><wsdlOption>

    <wsdl>${basedir}/src/main/resources/persons_register.wsdl</wsdl>

    <wsdlLocation>classpath:persons_register.wsdl</wsdlLocation>

     <extraargs>

    <extraarg>-impl</extraarg>

    <extraarg>-exsh</extraarg>

    <extraarg>true</extraarg>

    </extraargs>

    </wsdlOption>

    </wsdlOptions>

    </configuration>

    <goals><goal>wsdl2java</goal></goals>

    </execution></executions></plugin></plugins></build>

     

    Genereerimiseks vali projektil Run As > Maven generate-sources.

    Lisainfo pom.xml kohta: https://maven.apache.org/guides/introduction/introduction-to-the-pom.html

    Lisaks saab lugeda: http://cxf.apache.org/docs/maven-cxf-codegen-plugin-wsdl-to-java.html

     <extraargs>, mõjutavad seda, kuidas kood genereeritakse. Selle kohta saab lisaks lugeda: http://cxf.apache.org/docs/wsdl-to-java.html


6.1.2        X-tee andmeteenuse konfigureerimine

Selleks, et andmeteenus oleks kättesaadav, tuleb muuta src > main > webapp > WEB-INF > web.xml.

<param-value> beans faili nimi, kus saab määratleda teenuse endpoint’i.


<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns="http://java.sun.com/xml/ns/javaee"

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">

<display-name>persons_register</display-name>

<welcome-file-list>

<welcome-file>index.html</welcome-file>

<welcome-file>index.htm</welcome-file>

<welcome-file>index.jsp</welcome-file>

</welcome-file-list>

<servlet>

<description>Apache CXF Endpoint</description>

<display-name>cxf</display-name>

<servlet-name>cxf</servlet-name>

<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>

<load-on-startup>1</load-on-startup>

</servlet>

<servlet-mapping>

<servlet-name>cxf</servlet-name><url-pattern>/services/*</url-pattern>

</servlet-mapping>

<session-config><session-timeout>60</session-timeout></session-config>

<context-param>

<param-name>contextConfigLocation</param-name>

<param-value>WEB-INF/cxf-beans.xml</param-value>

</context-param>

<listener>

<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

</listener>

</web-app>


Luua beans fail vastavalt eelnevalt seadistatud nimele

Seadista <jaxws:endpoint> vastavalt oma andmeteenudele.

  • id: beansi nimi. Pole kohustuslik ja selle võib ära jätta.
  • implementor: teenuse java implementation
  • wsdlLocation: WSDL fail
  • address: teenuse aadress

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

      xmlns:jaxws="http://cxf.apache.org/jaxws"

      xsi:schemaLocation="

         http://www.springframework.org/schema/beans

         http://www.springframework.org/schema/beans/spring-beans.xsd

         http://cxf.apache.org/jaxws

         http://cxf.apache.org/schemas/jaxws.xsd">

    <jaxws:endpoint id="personregisterSOAP"  implementor="ee.x_road.persons_register.Person_RegisterSOAPImpl"

        wsdlLocation="classpath:persons_register.wsdl"

        address="/PersonRegisterSOAP">

    </jaxws:endpoint>

</beans>


Kontrolli genereeritud andmeteenust

Uus andmeteenus on genereeritud. Selles veendumiseks kontrolli, kas:

  • teenuse lähtekood on genereeritud src kausta;
  • loodud on uus Java package, nt: ee.x_road.persons_register (nimi sõltub WSDL-ist);
  • andmeteenuse endpoint’i ja WSDL-i kontroll.

Genereeritud teenus on käivitatud ja vastab aadressil:

http://localhost:8080/person_register/services 

NB! siin on person_register asemel igaühel oma konkreetse Eclipse projekti nimetus)


Andmeteenuse kontrollimiseks sisesta nimetatud aadress brauserisse, mille peale kuvatakse info loodud andmeteenuse kohta:

  • andmeteenuse endpoint address
  • andmeteenuse WSDL aadress (link WSDL-le)


Kontrolli, kas klikkides WSDL lingile kuvatakse andmeteenuse WSDL aadressil, näiteks: http://localhost:8080/person_register/services/person_registerSOAP?wsdl

(lingi täpne aadress sõltub konkreetsel juhul kasutatud WSDL-st)

Seda WSDL-aadressi kasutame hiljem teenuse seadistamisel X-tee turvaserveris ning testimisel SoapUI kaudu.

  

Päringuvastuse andmed

Genereeritud X-tee andmeteenus tagastab päringu vastuses konstantsed genereeritud andmed. Reaalses elus tuleb genereeritud andmed koodist eemaldada ja kasutada andmete saamiseks vastavat andmebaasipäringut.

Testimisel võib kasutada ka vastuses genereeritud andmeid või muuta neid käsitsi.

6.1.3        X-tee Java klientrakenduse loomine

Java klientrakenduse projekti loomine käib sama moodi nagu teenuse loomine (vaata moodul 5). WSDL tuleks kopeerida teenuse alt kliendirakenduse alla, kuna mõlema puhul tuleb kasutada sama WSDL faili.

 

Pom.xml failis <properties> ja <dependency> on samuti identsed teenuse loomisel lisatutele (vaata „X-tee andmeteenuse loomine“ moodulis 6). <plugin> tagis tuleb <extraarg>-impl</extraarg> asemel <extraarg>-client</extraarg> parameetrit kasutada.

Web.xml pole vaja muuta, ega beans.xml pole vaja luua.

 

Genereeritud kliendi failis tuleb lisada endpoint:

            ((javax.xml.ws.BindingProvider) port).getRequestContext().put(

            javax.xml.ws.BindingProvider.ENDPOINT_ADDRESS_PROPERTY,

            "http://localhost:8080/person_register/services/PersonRegisterSOAP");

 

Genereeriti andmeteenuse kliendi Java kood, nüüd kontrolli kas:

  • src kaustas asub genereeritud kood

  • teenuse näidisväljakutse on implementeeritud <PersonRegister_PersonRegister>SOAP_Client.java faili main() meetodis, kus PersonRegister asemel on konkreetse andmeteenuse WSDL-ist sõltuv nimetus.

  • Teenuse väljakutsumiseks on loodud genereeritud andmetega initsialiseeritud andmeobjektid.

Teenuse klientprogrammi käivitamine:

  • Vali fail  *SOAP_Client.java

  • Vali menüüst: Run as / Java Application

  • Kontrolli konsoolist programmi väljundit

 

Java kliendi testimine läbi X-tee turvaserveri:

  • muuta teenuse endpoint *SOAP_Client.java  failis, nii et see osutaks turvaserverile:

    // X-road : change service endpoint address to security server address

            ((javax.xml.ws.BindingProvider)port).getRequestContext().

            put(javax.xml.ws.BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "http:// 10.239.255.100" );

  • Kontrollida kas on genereeritud koodis õigesti:

    eu.x_road.xsd.identifiers.XRoadObjectType _personList_serviceObjectType =;

    eu.x_road.xsd.identifiers.XRoadObjectType.SERVICE;

    eu.x_road.xsd.identifiers.XRoadObjectType _personList_clientObjectType = eu.x_road.xsd.identifiers.XRoadObjectType.SUBSYSTEM;

     

  • Kohenda *SOAP_Client.java genereeritud koodi, muutes genereeritud andmetega X-tee päiseväljade sisu korrektseks (nii nagu eelneval testimisel SoapUI programmiga)

(vajadusel võib eeskuju vaadata näidisfailist PersonRegister_PersonRegisterSOAP_Client.java)


Näiteks tarbija päised:

_personList_clientVal.setXRoadInstance("ee-dev");

_personList_clientVal.setMemberClass("COM");

_personList_clientVal.setMemberCode("11333578");

_personList_clientVal.setSubsystemCode("testClient-02");


Last modified: Tuesday, 6 March 2018, 1:03 PM