Enviar arquivo XML via WebService com autenticação de usuario

9 respostas
K

Boa tarde pessoal,
alguem poderia me dar uma luz, de como enviar um arquivo XML por meio de um webService para uma URL que exige autenticação de username e password ?
Eu consigo enviar o arquivo normalmente para uma outra URL que nao exige autenticação, com o seguinte trecho de codigo:

9 Respostas

I

Primeiramente você tem que ver qual o tipo de autenticação que o WebService esta usando.

K

Autenticação de usuario e senha. Não precisa autenticar o proxy

K

Eu consegui fazer ele acessar a pagina, mas não consigo fazer ele enviar um XML para essa URL e obter a resposta. O codigo que eu acessei a pagina foi esse:

URL url = new URL(host);
            URLConnection uc = url.openConnection();
            String userpass = "username" + ":" + "senha";
            String basicAuth = "Basic " + new String(new Base64().encode(userpass.getBytes()));
            uc.setRequestProperty("Authorization", basicAuth);
            InputStream in = uc.getInputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(in));
            String str = "";
            String strT = "";
            while ((strT = br.readLine()) != null) {
                str += strT;
            }
         System.out.println(srt);

Alguma ajuda?

I

Eu digo a autenticação do próprio WS, ela pode ser Single Sign On, Token ou qualquer outra…

K

É autenticação SSO, onde é preciso se logar apenas a primeira vez e depois permite eu acessar as outras paginas.

K

?

K

Para enviar o XML do request que eu monto sem autenticação eu consegui, da seguinte forma:

public EnviaXMLRequisicaoWS(XmlRequest xmlRequest, String url) throws MalformedURLException, IOException {
HttpClient client = new HttpClient();
PostMethod method = new PostMethod(url);
BufferedReader br = null;
method.addParameter("xml", xmlRequest.toString());
String resp = "";
        try {
            client.executeMethod(method);
            br = new BufferedReader(new InputStreamReader(method.getResponseBodyAsStream()));

            String readLine = "";
            while ((readLine = br.readLine()) != null) {
                resp += readLine;
            }
            System.out.println(resp);

        } catch (IOException ex) {
            Logger.getLogger(EnviaXMLRequisicaoWS.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            method.releaseConnection();
        }

}
}

Para autenticar a URL que eu estou querendo acessar eu fiz da seguinte forma e deu certo:

public static void main(String[] args) throws Exception {

        try {

            URL url = new URL("url");
            URLConnection uc = url.openConnection();
            String userpass = "usernamen" + ":" + "password";
            String basicAuth = "Basic " + new String(new Base64().encode(userpass.getBytes()));
            uc.setRequestProperty("Authorization", basicAuth);
            InputStream in = uc.getInputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(in));
            String str = "";
            String strT = "";

            while ((strT = br.readLine()) != null) {
                str += strT;
            }
            System.out.println(str);
}
}

Porém quando eu tento enviar um XML para essa URL com autenticação eu nao consigo.
Alguém tem uma dica de como realizar isso simultaneamente? autenticar e enviar XML.

Vlw

I

Tem certeza que esse WS usa SSO com autenticação Basic ? Qual a mensagem de erro que você obtém ao fazer este request ?

K

O erro que está dando é:

[color=red]0 [main] INFO auth.AuthChallengeProcessor - basic authentication scheme selected
5 [main] INFO httpclient.HttpMethodDirector - No credentials available for BASIC ‘Secret’@www
[/color]

Criado 15 de março de 2011
Ultima resposta 21 de mar. de 2011
Respostas 9
Participantes 2