从Java中的安全URL解编XML

问题描述:

我试图访问安全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

快速扫描后,它看起来像是你提供了一个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

的问题是在这里:

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