Распаковка XML с безопасного URL в Java - PullRequest
0 голосов
/ 13 марта 2012

Я пытаюсь найти файл XML за защищенным URL. Я хочу удалить файл из ссылки на основе привязки XSD, которая у меня уже есть. Вот мой метод.

public void urlTest(String url){
    URLConnection connection = null;
    JAXBContext jc;

    try {
        String userPassword = username + ":" + password;
        String encoding = new sun.misc.BASE64Encoder().encode(userPassword.getBytes());  
        URL add = new URL(this.url);            
        connection = add.openConnection();
        connection.setRequestProperty("Authorization", "Basic " + encoding);  
        connection.connect();

        jc = JAXBContext.newInstance("XML");
        Unmarshaller u = jc.createUnmarshaller();            
        Object o = u.unmarshal(connection.getURL());

        System.out.println("Complete");

    } catch (IOException ex) {
        Logger.getLogger(UrlDownload.class.getName()).log(Level.SEVERE, null, ex);
    } catch (JAXBException ex) {
        Logger.getLogger(UrlDownload.class.getName()).log(Level.SEVERE, null, ex);
    } 
}

Я получаю ошибку сервера 401 от этого. Имя пользователя и пароль, которые я передаю, верны. Возможно, я что-то упустил.

Ответы [ 2 ]

1 голос
/ 13 марта 2012

после быстрого сканирования кажется, что вы указываете URL-адрес для демаршаллера, а не соединение с авторизацией.

0 голосов
/ 13 марта 2012

Проблема здесь:

Object o = u.unmarshal(connection.getURL());

Вы извлекаете URl из соединения, которое вы уже открыли, и передаете его Unmarshaller, который затем откроет свое собственное соединение, которое завершится неудачей.

Вам нужно дать Unmarshaller InputStream от соединения, которое вы только что открыли, например,

InputStream inputStream = connection.getInputStream();
Object o = u.unmarshal(inputStream);

и затем перед выходом из метода:

inputStream.close();
...