Java, plugin apache.CXF: Utilizando WSDL local para consumir servicios alojados de forma remota.
Los servicios de Soap están alojados de forma remota, pero debido a algunas restricciones en nuestro servidor, he obtenido el WSDL y lo he almacenado localmente. Utilizando Maven, el plugin org.apache.cxf y el comando generate sources, he generado clases a partir del WSDL local.
Propiedades de la clase WebServiceClient:
@WebServiceClient(name = "ManageCredit",
wsdlLocation = localWSDLAddress,
targetNamespace = targetNamespace)
public class ManageCredit extends Service {
public final static URL WSDL_LOCATION;
public final static QName SERVICE = new QName(targetNamespace, "ManageCredit");
public final static QName ManageCreditEndpoint = new QName(targetNamespace, "ManageCreditEndpoint");
static {
URL url = null;
try {
url = new URL(localWSDLAddress);
} catch (MalformedURLException e) {
java.util.logging.Logger.getLogger(ManageCredit.class.getName())
.log(java.util.logging.Level.INFO,
"No se puede inicializar el wsdl predeterminado desde {0}", localWSDLAddress);
}
WSDL_LOCATION = url;
}
}
Configuración del cliente:
ManageCredit manageCreditService = new ManageCredit();
ManageCreditPortType manageCreditPortType = manageCreditService.getManageCreditEndpoint();
SignContractRequest signContractRequest = new SignContractRequest();
signContractRequest.setRequestID("123");
signContractRequest.setApplicationID("1111");
signContractRequest.setChannelID("someValue");
manageCreditPortType.signContract(signContractRequest);
Utilizando este código, se realizan llamadas a http://localhost:8080/….
Necesito llamar al servidor remoto, por ejemplo https://example.google:1820, en lugar de localhost. ¿Cómo puedo cambiar el punto final al que llama mi cliente sin modificar la ubicación del WSDL?
davy.ai
Para cambiar el punto final al que el cliente llama sin cambiar la ubicación del WSDL, puedes modificar el objeto
ManageCreditPortType
para que use una dirección de punto final diferente. Puedes hacer esto llamando al método de la interfazBindingProvider
getRequestContext()
en el objetoManageCreditPortType
y luego estableciendo la propiedadBindingProvider.ENDPOINT_ADDRESS_PROPERTY
en la dirección de punto final deseada. Aquí tienes un ejemplo:Con este código, el objeto
ManageCreditPortType
realizará llamadas al servidor remoto enhttps://example.google:1820/path/to/service` en lugar del servidor local en
http://localhost:8080/…`.