从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服务器错误。我传递的用户名和密码是正确的。也许我错过了一些东西。
快速扫描后,它看起来像是你提供了一个URL到解组器,而不是与授权的连接。
我将代码更改为以下内容... 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();
嗨, 我做了代码调整,但在 Object o = u.unmarshal(inputStream); 错误消息 SCHWERWIEGEND:空 javax.xml.bind.UnmarshalException - 带链接的异常: : 任何想法[org.xml.sax.SAXParseException的内容,不得在序言。] – hynespm 2012-03-13 13:14:05
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
没有立即浮现在脑海。我会检查发生了什么,如果没有加密的话,用tcpdump检查一下,如果是的话,会有一些隐藏的技巧。我相信其他人可以提出更复杂的建议。 – Anonymoose 2012-03-13 12:10:37