Newsgroup: it.comp.java
Titolo: Web Services e risultati query a DB [Ancora]

Per favore datemi una mano!!
Il problema e' sempre il solito...mi fa impazzire gia' da alcuni giorni...
Ho deployato con Axis un web services che interroga un db sul server.
Pero' non riesco a far ritornare oggetti complessi (array), ma solo tipi 
semplici.
Da quanto ho capito e' un problema di serializzazione.
Ho provato con il pattern VO, ma non mi funziona neppure l'esempio 
ufficiale...
Cosa si fa in questi casi si costruisce un 
serializzatore/deserializzatore? Se si', come si fa?
Grazie 1000
Willy

"Willy" <willy...@libero.it.spammatemi.pure> ha scritto nel messaggio
news:_E0ce.1301324$35.48...@news4.tin.it...

prova con le hashmap al posto dei vettori
ciao

 semplici.
Che tipo di array vuoi tornare?
Array di tipi semplici (int, String ...) o array di oggetti
"personalizzati"?
-- 
Sergio Bossa
Author and Developer of:
- Montag, Web Services System for XML Database Interaction:
 
http://montag.sourceforge.net
- QuickNote:
 
http://quicknote.sourceforge.net


La cosa migliore sarebbe un array Object[2] formato da String[] e 
String[][], mi accontenterei di riuscire a ritornare String[]
Willy


Grazie
Willy

 String[][], mi accontenterei di riuscire a ritornare String[]
Guarda, con Axis, studiando ed impazzendo per bene, puoi tornare di tutto, i
problemi arrivano quando devi farlo interoperare con client non-Axis e
soprattutto non-Java ... e poichè i Web Services sono nati proprio per
favorire l'interoperabilità, e non hanno molto senso se client e server
sono conosciuti a priori, ti consiglio di non scambiare strutture
complesse.
Ci sarà sicuramente chi ti dirà che è possibile scambiare JavaBean con
semplicità, o di scambiare HashMap, come è capitato, ma ... il mio
consiglio è diverso.
Optando dunque per il ritorno di un array di tipo String[], e ponendo che il
tuo metodo sia una cosa del genere:
public String[] myMethod(......)
Devi:
1. Dichiarare i tuoi web services di tipo "wrapped", che garantisce la
massima interoperabilità, utilizzando l'attributo: style="wrapped",
all'interno del tag "service" del tuo WSDD.
2. Strutturare il tuo WSDL in maniera che i tuoi servizi risultino in stile
"document/literal".
3. Dichiarare il tuo array, all'interno dello schema del WSDL, in questo
modo:
<element name="myMethodResponse">
    <complexType>
     <sequence>
      <element minOccurs="0" maxOccurs="unbounded" name="return" 
               type="xsd:string"/>
     </sequence>
    </complexType>
</element>
Se non conosci ciò di cui ti sto parlando, ti consiglio di informarti un
po', prima .... puoi dare un'occhiata anche a questi due articoli:
http://atmanes.blogspot.com/2005/03/wrapped-documentliteral-convention.html
http://wiki.apache.org/ws/DotNetInteropArrays
In bocca al lupo!
Sergio B.



Per adesso (progettino x scuola per il quale non voglio perdere piu' 
tempo) ho trovato una soluzione, a mio avviso orrenda pero' funzionale:
l'applicazione server esegue la query sul db e mette i risultati su 2 
array String[] e String[][], e attraverso dei metodi get prelevo i dati 
"uno ad uno" e ricostruisco i miei array sul client.
Quando avro' tempo provero' il metodo che mi hai detto tu che offre una 
soluzione molto piu' funzionale ed elegante :)
Grazie
Willy