es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  , , , ,

Answer

  1. Avatar for 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 interfaz BindingProvider getRequestContext() en el objeto ManageCreditPortType y luego estableciendo la propiedad BindingProvider.ENDPOINT_ADDRESS_PROPERTY en la dirección de punto final deseada. Aquí tienes un ejemplo:

    ManageCredit manageCreditService = new ManageCredit();
    ManageCreditPortType manageCreditPortType = manageCreditService.getManageCreditEndpoint();
    
    // Establecer la dirección de punto final deseada
    String endpointAddress = "https://example.google:1820/path/to/service";
    BindingProvider bindingProvider = (BindingProvider) manageCreditPortType;
    bindingProvider.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, endpointAddress);
    
    // Realizar la llamada remota
    SignContractRequest signContractRequest = new SignContractRequest();
    signContractRequest.setRequestID("123");
    signContractRequest.setApplicationID("1111");
    signContractRequest.setChannelID("someValue");
    manageCreditPortType.signContract(signContractRequest);
    

    Con este código, el objeto ManageCreditPortType realizará llamadas al servidor remoto en https://example.google:1820/path/to/service` en lugar del servidor local enhttp://localhost:8080/…`.

Comments are closed.