http://www.ibm.com/developerworks/xm...y/x-tipjaxrpc/
http://www.oracle.com/technology/sam...ent/index.html
non farmi impazzire che lo sto usando.
Il servizio è reso disponibile dal WSDL.In teoria basta quello per poter consumare un web service.
Esistono 2 tipi di client
1. statico, hai il wsdl e in base a quello crei un client. Quindi ogni modifica del wsdl richiede la generazione del client (per vedere la modifica)
2. dinamico, vedi come pseudo-reflection (dove il pseudo indica che non è reflection, ma il procedimento è del tutto simile).
Ci sono delle librerie che ti consentono, noto il wsdl, di ricavare i servizi offerti dal web service che espone il wsdl e di richiamarli tramite una invoke.
es (fatto da me :-) )
questi sono i miei import
codice:
import java.net.URL;
import java.util.Iterator;
import javax.xml.namespace.QName;
import javax.xml.rpc.Call;
import javax.xml.rpc.Service;
import javax.xml.rpc.ServiceFactory;
codice:
QName serviceName = new QName(uriQName, nomeServizio);
URL wsdlLocation = new URL("quello_che_ti_pare/Hello?wsdl");
// Service
ServiceFactory factory = ServiceFactory.newInstance();
Service service = factory.createService(wsdlLocation, serviceName);
HelloInterface inter = (HelloInterface)service.getPort(new QName(uriQName, nomePort), HelloInterface.class);
dove HelloInterface è una mia interfaccia del web service.
Questo è un po statico (suppone che tu conosca l'interfaccia del servizio at compile time), ma se l'ultima istruzione la sostituisci con
codice:
Call chiamata = service.createCall(new QName(uriQName, nomePort), nomeMetodo);
returntype value = (returntype) chiamata.invoke(parametri) ;
nel secondo caso tu puoi avere un'idea che ci sia un metodo che fa ad esempio la login e puoi, tramite opportuni metodi, cercare qualcosa che soddisfi le tue esigenze.
In questo caso aggiungi logica al programma (quella di discovery), ma hai il vantaggio della dinamicità totale.
Una qualsiasi googlata con "dynamic web service client" ti porta a risultati simili