Más tarde que nunca. :)
que usted debe lograr que en dos pasos:
1) analizar el WSDL informada por el usuario para recuperar las operaciones disponibles. Consulte this question para saber cómo hacerlo de una manera sencilla.
2) Cree un cliente dinámico para enviar una solicitud utilizando las operaciones seleccionadas. Se puede hacer utilizando la API Dispatch desde Apache CXF.
Construir el objeto Dispatch
para el cliente dinámico (Puede ser creado sobre la marcha, informando a punto final de servicios web, nombre de puerto, etc.):
package com.mycompany.demo;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
public class Client {
public static void main(String args[]) {
QName serviceName = new QName("http://org.apache.cxf", "stockQuoteReporter");
Service s = Service.create(serviceName);
QName portName = new QName("http://org.apache.cxf", "stockQuoteReporterPort");
Dispatch<DOMSource> dispatch = s.createDispatch(portName,
DOMSource.class,
Service.Mode.PAYLOAD);
...
}
}
construir el mensaje de solicitud (en el ejemplo a continuación estamos utilizando DOMSource):
// Creating a DOMSource Object for the request
DocumentBuilder db = DocumentBuilderFactory.newDocumentBuilder();
Document requestDoc = db.newDocument();
Element root = requestDoc.createElementNS("http://org.apache.cxf/stockExample", "getStockPrice");
root.setNodeValue("DOW");
DOMSource request = new DOMSource(requestDoc);
invocar el servicio web
// Dispatch disp created previously
DOMSource response = dispatch.invoke(request);
recomendaciones:
- Uso
((BindingProvider)dispatch).getRequestContext().put("thread.local.request.context", "true");
si usted quiere hacer el hilo objeto de Despacho seguro.
- Almacenar en caché el objeto
Dispatch
para usarlo más adelante, si es el caso. El proceso de construir el objeto no es gratis.
Otros métodos
Hay otros métodos para crear clientes dinámicos, como el uso de CXF dynamic-clients API. Se puede leer en la página de índice del proyecto:
CXF soporta varias alternativas para permitir que una aplicación comunicarse con un servicio sin las clases de SEI y datos
no he probado yo mismo, pero debería pena dándole una oportunidad.