Llamar a un Webservices Statefull de .Net desde Java con Metro

Me ha tocado llamar a un Webservices .Net pero que contenía una situación muy particular, debía inicialmente llamar a un método inicializador, que preparaba al Webservices para poder llamar a los otros métodos que éste contenía.

Con Netbeans generamos el proxy para el webservices a través de las librerías de Metro, pero luego, al intentar llamar al primer método y luego al segundo, se generaba un error debido a que el webservices reclamaba porque no se había llamado al método inicializador, aun cuando las dos lineas estaban puestas consecutivamente en el código. Esto porque era un Webservices Satatefull, o sea, que debíamos conservar el estado de las llamadas consecutivas para poder ser utilizadas.

De esta forma el siguiente ejemplo muestra como llamar a uno de este tipo de Webservices, se presume que aqui existe un proxy a Objeto que tiene dos métodos llamados metodoInicializador y segundoMetodo:

public class Main {
    public static void main(String[] args) {
         try {
            QName sName = new QName("https://algunNamespace.cl", "Objeto");
            Objeto objeto= new Objeto(new URL("https://algunServidor.cl/Objeto?wsdl"), sName);
            BindingProvider bp = ((BindingProvider) objeto.getWSHttpBindingIObjeto());
            bp.getRequestContext().put(BindingProvider.SESSION_MAINTAIN_PROPERTY,true);
            bp.getRequestContext().put(BindingProvider.SOAPACTION_USE_PROPERTY, new Boolean(true));
            ((IObjeto)bp).metodoInicializador("abcd");
            Data data =((IObjeto)bp).segundoMetodo("xxyyzz");
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

Comments are closed.