[RESOLVIDO] SOAP - Autenticação Preemptiva

1 resposta
R

olá!

Estou tentando conectar em um webservice que utiliza autenticação preemptiva, com usuário e senha.

Cheguei até esse código abaixo mas sempre retorna o erro informando que a conexão precisa de autenticação.

Alguma dica de como resolver esse problema?

StringBuilder soapMessage = new StringBuilder();
        soapMessage.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>")
                .append("<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsd=\"http://www.agrotis.com.br/ReceitaAgrowin/xsd/\">")
                .append("<soapenv:Header/>")
                .append("<soapenv:Body>")
                .append("<xsd:atualizarClienteEnvio/>")
                .append("</soapenv:Body>")
                .append("</soapenv:Envelope>");

        org.apache.axis.soap.MessageFactoryImpl impl = new org.apache.axis.soap.MessageFactoryImpl();

        MimeHeaders header = new MimeHeaders();
        header.addHeader("Content-Type", "application/soap+xml");

        String authorization = Base64Coder.encodeString("usuario:senha");
        header.addHeader("Authorization", "Basic " + authorization);

        SOAPMessage message = impl.createMessage(header,
                new ByteArrayInputStream(soapMessage.toString().getBytes()));

        SOAPConnectionImpl conn = new SOAPConnectionImpl();
        URL url = new URL("http://servidor:porta/WS/Utilitarios");
        SOAPMessage response = conn.call(message, url);
        conn.close();

        StringWriter sw = new StringWriter();
        Source source = new DOMSource(
                response.getSOAPPart().getEnvelope().getBody().getFirstChild().getFirstChild());
        TransformerFactory.newInstance().newTransformer().transform(
                source, new StreamResult(sw));

        System.out.println("========================================================");
        System.out.println(response.getSOAPBody().getFault().getFaultString());
        System.out.println(sw.toString());
        System.out.println("========================================================");

Retorna o erro:

======================================================== (407)Proxy Authentication Required <?xml version="1.0" encoding="UTF-8"?><faultcode/> ========================================================

Obs.: esto usando o framework Axis1.4

1 Resposta

R

consegui resolver meu problema, porém, de outra forma.

Utilizei o eclipse e gerei as classes de acesso ao webservice importando o wsdl.

Dentro do stub, setei o usuário e senha:

org.apache.axis.client.Call _call = createCall(); .... .... _call.setUsername("--usuario--"); _call.setPassword("--senha--");

E a chamada ao serviço ficou assim:

Servico util = new ServicoLocator(); ServicoRemote remote = util.getServico(); AtualizarClienteEnvio envio = new AtualizarClienteEnvio(); AtualizarClienteRetorno retorno = remote.atualizarCliente(envio); System.out.println(retorno.getMensagem());

vlw!

Criado 23 de julho de 2013
Ultima resposta 24 de jul. de 2013
Respostas 1
Participantes 1