我正在使用sax解析器从在线XML文件中获取一些数据。 我尝试将文件复制到我自己的本地服务器“http not https”,然后流式传输并解析它,它就像一个魅力。
然而,当我从原来的“https”服务器尝试时,我一直在以下地址获得java.lang.StringIndexOutOfBoundsException:
xr.parse(new InputSource(urlHealthProducts.openStream()));
这是我的代码:
我从这里使用了trustEveryone()方法: Self-signed SSL acceptance on Android因为我有不受信任的SSL证书例外,请不要对此发表评论,除非这是我的问题的原因!
我也用这个班登录:
static class MyAuthenticator extends Authenticator {
String username, password;
MyAuthenticator(String user, String pwd) {
super();
username = user;
password = pwd;
}
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password.toCharArray());
}
}
最后导致此异常的代码是:
trustEveryone();
MyAuthenticator auth = new MyAuthenticator("user", "pass");
Authenticator.setDefault(auth);
URL urlHealthProducts = new URL("https://somewebsite/myfile");
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
XMLReader xr = sp.getXMLReader();
XMLHealthProductsHandler healthProductsHandler = new XMLHealthProductsHandler();
xr.setContentHandler(healthProductsHandler);
xr.parse(new InputSource(urlHealthProducts.openStream()));
即使没有Authenticator,我也得到了同样的例外 我一直在网上挖太久了!上面使用这些方法的每个人似乎都很好,除了我!!