Newsgroup: it.comp.java
Titolo: Re: wsdl2java

 creare il mio client ?
Non ho capito bene cosa vuoi fare.
Comunque, Axis crea un TestClient se specifichi un'opzione quando lanci 
il tool. Questo client, che e' basato si Junit, fa tutto quello che 
serve per connettersi al WebService.
Achille

Ciao,
devo interrogare un web service, di cui ho il file wsdl (in realtà ho 3 wsdl
per tre diverse operazioni).
Ho visto in rete axis e il suo tool wsdl2java, che crea automaticamente un
po' di classi per interrogare il web service.
La mia idea è quella di creare un jar con le classi generate, da inserire
nella mia appicazione che sarà il client del WS.
ho così utilizzato il tool con l'opzione --classpath per mettere le classi
enerate in 3 diversi package (anziche in 6 di default).
Qualcuno sa indicarmi un esempio su come usare le classi così generate per
creare il mio client ?
 
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 creare il mio client ?
dunque, axis ti dovrebbe aver generato:
* un bean per ogni tipo definito nel wsdl
* una interfaccia per ogni porttype
* uno stub per ogni binding
* una interfaccia remota
* una classe per la risoluzione del servizio per ogni service 
(implementa l'interfaccia remota)
quello che interessa a te sono l'interfaccia per il porttype, 
l'interfaccia remota e la classe che la implementa, axis le chiama 
rispettivamente come il porttype, come NomeServizioService e 
NomeServizioServiceLocator.
l'utilizzo tipico da lato client è:
NomeServizioService service = new NomeServizioServiceLocator();
NomePortType port = service.getNomeServizio();
port.nomeOperazione(args);
gli argomenti che passi all'operazione chiamata devono essere ovviamente 
compatibili con il tipo definito nel wsdl (es. String per xsd:string) 
oppure, se non si tratta di un tipo primitivo di XSD, devono essere 
oggetti di una delle classi generate da Axis (es. io avevo definito il 
tipo PurchaseOrderType in WSDL, Axis mi ha generato la classe 
PurchaseOrderType):
PurchaseOrderType PO = new PurchaseOrderType();
PO.set....(...);
...
port.buy(PO);
il trucco della semplicità di wsdl2java sta tutto nel metodo 
getNomeServizio() che in realtà ti ritorna una istanza dello stub 
generato da axis e quindi ti maschera la complessità di soap che sta sotto.
spero di esserti stato utile e di non aver scritto cavolate! :)
--
-ale-

 L'utilizzo di tali classi è performante?ù
qui si va sul difficile. se cerchi sulle varie mailing list di axis, 
trovi sicuramente dei benchmark e delle valutazioni di prestazione e 
risposte più esaurienti a questa domanda.
le mie considerazioni sono:
1. i web service sono basati su xml, ed xml è di natura afflitto da due 
problemi (che in realtà sono anche la sua forza): è testuale ed è molto 
ridontante nelle informazioni (specie se si usa soap con rpc-encoded), 
quindi non è che sia il massimo in termini di prestazioni lavorare con xml
2. il modello delle rpc basato su stub/skeleton e 
serializzazione/deserializzazione introduce parecchio overhead, ed anche 
questo non giova sicuramente alle prestazioni
3. l'alternativa qual è, almeno nel tuo caso specifico? secondo me, è 
catturare ed analizzare i messaggi soap che vengono inviati al servizio 
e scriversi una classe che prepari tali messaggi a basso livello, magari 
usando saaj o a livello ancora più basso con una connessione http. chi 
ti assicura che la tua classe sarà molto più performante di axis? se hai 
tempo da perdere, puoi scriverti la classe, fare un benchmark con lo 
stub di axis e permetterti di scegliere. io personalmente non rinuncerei 
mai alla comodità di wsdl2java...
(cmq il problema delle chiamate sincrone a web service in java è 
cronico, specialmente con axis, c'ho fatto mezza tesi di laurea sopra :)
ciao
--
-ale-

Grazie 1000, sei stato molto chiaro!!!
Ho un altra domanda,alla quale magari sai rispondere..
In questo modo, in maniera molto semplice riesco ad utilizzare servizi
abbastanza complessi.
L'utilizzo di tali classi è performante?
il mio possibile problema è che devo eseguire tale chiamate in maniera
sincrona con altre operazioni, e vorrei sapere quanto ciò può incidere sul
mio sistema...
Avevo pensato anche di crearmi direttamente le classi per utilizzare il WS,
ma mi sembra troppo complicato e non ho trovato nulla che possa essermi
d'aiuto..
Grazie ancora
 



 mai alla comodità di wsdl2java...
neppure io... ma i requisiti vanno rispettati... :)
ciao
Ale


 chiamate al minuto!!).
Se un client fa 7000 chiamate al minuto, vuol dire che il server
corrispondente deve - spannometricamente - reggerne altrettante
moltiplicato il numero di client. La vedo male :)
Sei sicuro dei numeri?
uL
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 sembra la cosa più performante..)?
scusa la risp precedente, avevo letto male...
io userei HttpURLConnection, e, se il messaggio SOAP è semplice e visto 
che lo vuoi fare performante, eviterei di usare DOM e SAX (e quindi 
anche SAAJ) e passerei direttamente a scrivere il testo.
magari ti conviene prima usare un monitor per andarti a catturare i 
messaggi SOAP inviati dagli stub di Axis e clonarli, modificando 
soltanto le parti che ti interessano.
come monitor puoi usare lo stesso tcp monitor di axis - la guida la 
trovi sulla pagina user guide del toolkit.
ciao
--
-ale-

 sembra la cosa più performante..)?
HttpURLConnection... e auguroni! :))
ciao
--
-ale-

Assolutamente si!!
sono picchi di traffico già registrati senza l'utilizzo del WS (che servirà
per ottenere l'autorzzazione ad eseguire determinate operazioni).



 vien fuori 200 cpu  poi però fallo vedere al tuo capo con molta calma!
Un po' di pubblicità: il ns Sun Java Application Server ha le migliori
performance per web services, secondo uno studio che lo ha confrontato con
BEA, Websphere e gli altri. Ti mando il link se ti serve :)
ciao


 per ottenere l'autorzzazione ad eseguire determinate operazioni).
la vedo male... a meno che non abbiate molti soldi per fare un bel
clusterone separato di macchine di una certa dimensione. O che possiate
cachare o altro per fare una serie di trade off fra le prestazioni e
l'accuratezza.
BTW, se hai il throughput e tutti gli altri dati la maggior parte degli
application server ti permette di fare un sizing "spannometrico". Se ti
vien fuori 200 cpu  poi però fallo vedere al tuo capo con molta calma!
uL
