Newsgroup: it.comp.java
Titolo: JAVA-XML-SOAP

ciao,
sto sviluppando una applicazione java che mi crea delle liste di nominativi 
con associata una mail ed un numero di telefono. Queste liste andrebbero 
salvate su di un file xml ed inviato tutto ad un servizio che mi legge i 
nominativi e invia una mail o un sms ad ogni persona della lista. Pensavo di 
utilizzare Tomcat, SOAP e XML. Tramite soap è possibile inviare un file XML, 
oppure un oggetto che contiene l' XML? non ho ben chiaro come funzionerebbe, 
ho usato SOAP solo con le stringhe, va bene se lo uso anche con oggetti? o 
solo tipi semplici? qualcosa di pronto? magari sulla creazione e passaggio 
di XML?
grazie mille
trullox :o)
 

 di XML?
La cosa che mi sembra più semplice è il passaggio diretto del documento
XML come stringa. Il client non dovrebbe far altro che recuperare la 
stringa ed utilizzare un parser XML per controllarne il contenuto.
Ad esempio, utilizzando DOM:
// invoco il metodo del servizio web
String xmlMsg = myService.getXmlMsg(myParam);
// eseguo il parsing del messaggio XML
DocumentBuilder builder = 
DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document document = builder.parse(new InputSource(new 
StringReader(xmlMsg)));
Una cosa: così stai (implicitamente) creando un messaggio XML SOAP che 
contiene a sua volta una stringa che rappresenta un documento XML.
Tu invece potresti definire un tuo tipo personalizzato e far sì che alla
serializzazione/deserializzazione ci pensi direttamente SOAP.
Non ti resterebbe così che invocare direttamente il metodo utilizzando
le classi generate tramite il WSDL:
// del tutto trasparente: pensa SOAP a restituire un oggetto MyObject
// direttamente
MyObject obj = myService.getMyObject();
In questo caso non devi neppure utilizzare il DOM. Hai l'oggetto
bell'e pronto da utilizzare.
Gaetano

 bell'e pronto da utilizzare.
scusa se sono un poco 'gnorante, mi approccio ora ai WS, fino ad adesso ho 
solo installato SOAP nel tomcat, e messo su qualche servizzietto 
"scolastico" passando tutti i vari valori String. (solo String)
grazie mille
trullox :o)


Ma un approccio di questo genere è portabile ?
Che succede se dall'altro lato c'è .Net o perl ?
Ciao.

 Che succede se dall'altro lato c' .Net o perl ?
per ora sto usando SAX (nella mia applicazione dovrebbe essere più indicato 
rispetto a DOM)
che mi dovrebbe creare un XML da inviare al servizio. Il servizio parserizza 
l'XMl ed esegue le istruzioni in base a quello che c'è scritto in XML. Da 
qui... posso far rientrare WSDL? mi sembra uno standard, e nel mio progetto 
acquisterebbe valore. E' portabile secondo te una cosa così? la portabilità 
non mi interessa più di tanto per l'applicazione specifica che sto facendo 
ora, visto che tanto sarà tuto in java, però a livello teorico acquista uua 
valenza di sicuro diversa...
che dici?
io dico grazie..
trullox :o) 

 acquisterebbe valore. E' portabile secondo te una cosa così? [...]
SOAP e WSDL sono nati appunto per l'interoperabilità. Se usi Axis
puoi utilizzare il tool Java2WSDL per creare il WSDL direttamente
dalle tue interfacce Java. Sarà poi il client SOAP (scritto in Java
oppure .NET, Perl, Python, ecc.) che dovrà attenersi all'interfaccia
che hai esportato tramite il WSDL.
Guarda qui la documentazione:
http://ws.apache.org/axis/java/user-guide.html#Java2WSDL
Se invece vuoi utilizzare XML tu direttamente non è necessario
utilizzare SOAP ma puoi fare la tua architettura direttamente con
XML sopra HTTP. Ad esempio crea la tua servlet/JSP che genera l'XML
e poi lato client utilizza le classi standard del JDK oppure HttpClient:
Jakarta Commons HttpClient
http://jakarta.apache.org/commons/httpclient/
Gaetano


Se però il tuo client e server si scambiano oggetti serializzati, addio
interoperabilità. Meglio, se possibile, utilizzare tipi semplici, come
in questo caso stringhe che rappresentano documenti XML.
Ciao

 acquisterebbe valore. E' portabile secondo te una cosa così? 
La cosa importante per rendere un Web Services interoperabile tra
piattaforme diverse è il tipo dei dati scambiati.
Se il tuo client e il tuo server si scambiano dati in formato XML
incapsulati in una semplice stringa, non ci sono problemi.
WSDL (che è uno standard) lo usi per descrivere l'interfaccia del tuo servizio,
quindi il nome del metodo remoto, i parametri di input e output e il loro tipo.
Ciao