Pomoč pri vračanju podatkov iz webservisa

Pripombe, komentarji ali pohvale o Delphi-SI.
tantadruj
Prispevkov: 71
Pridružen: 31.12.2003 09:34:21

Pomoč pri vračanju podatkov iz webservisa

Odgovor Napisal/-a tantadruj » 11.02.2008 12:18:44

Ti si na začetku teme rekel, da sploh ne veš, kje začeti z vprašanji. No, jaz pa ne vem, kje začeti z odgovori. Kar počneš se mi zdi narobe tako iz stališča razvoja kot iz stališča bodočih javnih vmesnikov (wsdl). Jaz bi raznorazna fancy enterprise orodja enostavno prepovedal, ker ljudem samo mešajo glavo. Zmogljiv editor + aplikacijski strežnik + baza, to je vse kar človek potrebuje. Razen za GUI je fajn imeti nek klikabilen IDE.

Nič, povedal ti bom, kako počnem sam. Izberem si neko knjižnico za delo z web servisi. V Javi 6 je JAX-WS že kar zmogljiv, ampak recimo, da delaš z axisom. Vsaka knjižnica (vsaj tiste, ki sem jih preizkusil) ima nek način za generiranje WSDL opisa iz javanskih classov in obratno, generiranje classov iz WSDLja. V axisu (če me spomin ne vara) imaš classa WSDL2Java in Java2WSDL, s katerima lahko na razmeroma preprost način generiraš WSDL na eni strani in Java classe na drugi. Kako začeti ?
1. Napišeš interface, npr. :

Koda: Izberi vse

public interface EuroTaxService
{
    String getEuroTaxData();
}
2. Z uporabo Java2WSDL dobiš neko wsdl datoteko, ki jo pošlješ bodočim uporabnikom. Oni jo bodo potrebovali za komunikacijo s tvojim strežnikom in fajn je, da vzporedno z razvojem na tvoji strani tudi oni že kaj naredijo. Sicer se projekt lahko zavleče še in še časa. Ker želiš poslati XML, je dovolj če javanska metoda vrne enostavno kar String. To se mi zdi sicer slabo (pošiljanje XML kot rezultat klica web service operacije, razen ko gre za kakšne dokumente) in sam raje operiram z objekti oz. s seznami teh objektov. AMpak dobro, to nima veze, ti konkretno želiš vračati XML.

3. Napišeš implementacijo tvojega interface-a. V tej implementaciji boš potreboval DataSource oz. neko referenco do objekta, ki zna delati z JDBC konekcijami. Glede transakcij je pa tako : v osnovi je najlažje izklopiti autocommit na konekciji in ob koncu metode kličeš commit (ali rollback, če je prišlo do kakšne napake). Lepše je seveda uporabiti nekaj takega kot je spring framework, s katerim lahko deklarativno (z anotacijami in po potrebi tudi xml konfiguracijo) označiš metode kot transakcijske in s tem aspekt transakcij pred samim seboj "skriješ".

4. Ko iz baze potegneš k sebi nek rowset, pač preprosto iteriraš čez vse vrstice in gradiš xml drevo, ki je v tvojem primeru zelo preprosto, v bistvu flat seznam avtomobilov. Za xml uporabiš ali nekaj priloženega Javi ali pa recimo dom4j, ki je res preprost za uporabo. No, xml drevesu potem enostavno rečeš toString() ali kaj podobnega (odvisno od xml knjižnice) in tisti string vrneš kot rezultat.

To je tako na kratko in po mojem mnenju tudi zelo preprosto. Tak primer imam narejen prej kot v eni uri, skupaj z zapakirano aplikacijo za deploy na strežnik.

tantadruj
Prispevkov: 71
Pridružen: 31.12.2003 09:34:21

Pomoč pri vračanju podatkov iz webservisa

Odgovor Napisal/-a tantadruj » 11.02.2008 12:22:42

Pozabil sem dodati, da moraš seveda v končni fazi svoji implementaciji priložiti nek dodaten opis web servisa za deploy na aplikacijski strežnik. Pri axisu nimaš težav, ker ti Java2WSDL zgenerira tudi nek wsdd fajl, ki ga poturiš konfiguraciji svoje web aplikacije.

peterv
Prispevkov: 987
Pridružen: 29.03.2002 13:24:32

Pomoč pri vračanju podatkov iz webservisa

Odgovor Napisal/-a peterv » 11.02.2008 21:23:51

Točno tako kot praviš...
Wizzardi so ena čudna reč ;)

No najprej naj povem da smo se danes sestali in definirali stvari :) webservisi odpadejo ker pri razvoju internega informacijskega sistema je brezveze komplicirati z webservisi.. če imamo že pripravljene pl/sql procedure in funkcije ter direkten dostop do baze..

Drugača pa sem si prebral med vikendom poglavja iz knjige SOA using Java Webservices in ko sem pregledal par ključnih stvari mi je stvar postala jasna..
Za vračanje nekega result-a iz baze lahko kot praviš ti Tantadruj generiram nek xml string z atributi.. ali pa naredim Classo z set/get metodami ki predstavlja rowset neke tabele ali pa vračam array nekega objekta..


primer ki vrača listo z objektom...

Koda: Izberi vse

 
package pet;

import java.util.ArrayList;
import java.util.List;

public class webservis {
    protected List<MyAddress> itemList;
    protected MyAddress address;
    
    public webservis() {
        
    }

    public List<MyAddress> getItemList(int num) {
        itemList = new ArrayList();
        for (int i = 0; i++ < num; ) {
            itemList.add(new MyAddress("PETER", "PRISOJNA", "IZOLA", "SLOV", 
                                       "6310", "121212121"));
        }
        return itemList;
    }
}
 

Odgovori