2012-03-13 27 views
0

我試圖訪問安全URL後面的XML文件。我想從基於已有的XSD綁定的url解組文件。這是我的方法。從Java中的安全URL解編XML

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服務器錯誤。我傳遞的用戶名和密碼是正確的。也許我錯過了一些東西。

+0

沒有立即浮現在腦海。我會檢查發生了什麼,如果沒有加密的話,用tcpdump檢查一下,如果是的話,會有一些隱藏的技巧。我相信其他人可以提出更復雜的建議。 – Anonymoose 2012-03-13 12:10:37

回答

1

快速掃描後,它看起來像是你提供了一個URL到解組器,而不是與授權的連接。

+0

我將代碼更改爲以下內容... Unmarshaller u = jc.createUnmarshaller(); InputStream inputStream = connection.getInputStream(); 但我得到的錯誤是 javax.xml.bind.UnmarshalException - 帶鏈接的異常: : 對象o = u.unmarshal(的inputStream [org.xml.sax.SAXParseException的內容,不得在序言。] ); – hynespm 2012-03-13 14:02:44

0

的問題是在這裏:

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

你從你已經打開了連接抓取網址時,並傳遞一個給Unmarshaller的,那麼這將打開它的自己連接,這將失敗。

您需要從剛剛打開的連接中爲Unmarshaller提供InputStream,例如

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

,然後退出方法之前:

inputStream.close(); 
+0

嗨, 我做了代碼調整,但在 Object o = u.unmarshal(inputStream); 錯誤消息 SCHWERWIEGEND:空 javax.xml.bind.UnmarshalException - 帶鏈接的異常: : 任何想法[org.xml.sax.SAXParseException的內容,不得在序言。] – hynespm 2012-03-13 13:14:05

+0

Unmarshaller u = jc.createUnmarshaller(); '在此處輸入代碼' InputStream inputStream = connection.getInputStream(); Object o = u.unmarshal(inputStream); 但是這提供了以下錯誤 SCHWERWIEGEND:空 javax.xml.bind.UnmarshalException - 帶鏈接的異常: : 任何想法[org.xml.sax.SAXParseException的內容,不得在序言。] – hynespm 2012-03-13 14:06:30