Newsgroup: it.comp.java
Titolo: AXIS e restituzione di oggetti complessi

Ho la necessita' di restituire, tramite chiamate ad oggetti remoti via SOAP
(utilizzando AXIS come framework), oggetti complessi (cioe' che non sono
int, float, array o stringhe, ma sono di classi da me definite).
Con RMI basta dichiarare serializzabile la classe da restituire, e renderla
disponibile sia su server che su client.
Come posso procedere utilizzando SOAP tramite AXIS?
Grazie mille in anticipo.

 ha scritto nel messaggio
news:bag676$7cj$1...@newsreader.mailgate.org...


 Mmmmm... come si possono serializzare/deserializzare classi scritte da me?
Devi scrivere una classe di serializzazione/deserializzazione ed associarla
al servizio nel descrittore del servizio. Esattamente il procedimento non me
lo ricordo ma trovi sicuramente nella documentazione qualche aiuto!
Ricordati che però così si perde in interoperabilità (uno dei vantaggi a cui
portano i web service).
Gio

 interoperabilità (uno dei vantaggi a cui portano i web service).
Perche' si perderebbe l'interoperabilita'? Che problemi ci sono nel
distribuire anche il codice di serializzazione/deserializzazione?

 distribuire anche il codice di serializzazione/deserializzazione?
Il problema è proprio quello anche se dipende dall'applicazione che stai
sviluppando. I WS sono fatti per poter essere accessibili da tutti i
maniera abbstanza standard e interoperante (ossia da chi fa una richiesta
di servizio da ambienti Java o da ambienti .NET)... se già costringi
l'utente a "installarsi" una tua classe allora perdi in generalità.
Dipende quanto è specifica e a chi è rivolta la tua applicazione e da che
altri sistemi è usata (non ho esperienza ma a questo punto quanto può
essere accessibile il tuo servizio da un'applicazione client .NET che
cerca di sfruttarlo?!)
Tutto dipende dal tuo obiettivo ma sono aspetti comunque da valutare!
Gio
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 int, float, array o stringhe, ma sono di classi da me definite).
Potresti dichiarare questi tuoi dati complessi tramite WSDL. Axis crea 
per ogni tipo di dato composto una nuova classe e crea il proxy Java per 
l'invocazione. Se ad esempio hai un tipo dato "my-data" che contiene un 
intero "value" e una stringa "name" avrai una classe (generata 
automaticamente) del tipo:
public class MyData
{
   public int getValue();
   public String getName();
   ...
}
per invocare un servizio farai:
MyData data = new MyData();
data.setValue(1);
data.setName("ciao");
myService.myMethod(data);
se l'oggetto ti deve venire restituito AXIS genererà l'opportuno oggetto 
holder:
MyDataHolder data = new MyDataHolder();
myService.myMethod2(data);
System.out.println("value = " + data.value.getValue());
System.out.println("name = " + data.value.getName());
Usando questo approccio i tipi di dati complessi avranno un loro binding 
per ogni linguaggio/piattaforma. Ad esempio un web service client in C++ 
avrà le proprie classi C++ per utilizzare il tipo dato my-data, e così 
via...
(E' lo stesso approccio che si usa ad esempio con CORBA dove puoi avere 
un server in Java e un client in C++, COBOL, ... e viceversa).
Le varie classe vengono generate tramite il comando WSDL2Java. Java2WSDL 
fa il contrario. Vedere il sito per informazioni:
http://ws.apache.org/axis/
e segui i link:
User's Guide > Using WSDL wiht Axis
Gaetano