我有一个正在运行的Java应用程序正在收获API端点。 API正在提供我解析的xml文件。问题是我在某些文件中遇到这个奇怪的错误
[致命错误]:1:55:publicId和。之间需要空格 的systenId。
导致应用程序挂起,尝试读取该文件。
我的主要问题是它没有抛出异常,所以我无法捕获它(要么删除它,要么尝试重新执行该过程)并且我没有得到一行代码,这个错误是来自(哪里。
当我尝试在浏览器上加载文件时,通常需要很长时间才能加载,但最终会加载。
我猜这个问题是在文件提取上,这就是这个方法
public String getData(String url){
CloseableHttpClient httpClient = HttpClientBuilder.create().build();
HttpGet request = new HttpGet(url);
// add request header
request.addHeader("User-Agent", "MySuperUserAgent");
try {
HttpResponse response = httpClient.execute(request);
BufferedReader rd;
try{
rd = new BufferedReader(
new InputStreamReader(response.getEntity().getContent()));
}catch(NullPointerException npe){
return null;
}catch(Exception BRE){
return null;
}
String line = "";
HttpEntity entity = response.getEntity();
if (entity != null) {
line=EntityUtils.toString(entity);
}
httpClient.close();
rd.close();
return line.replace("", "");
} catch (UnsupportedOperationException e) {
e.printStackTrace();
return null;
} catch (IOException e) {
e.printStackTrace();
return null;
} catch (NullPointerException e){
return null;
} catch (InterruptedException e) {
e.printStackTrace();
return null;
}
}
最奇怪的是,如果我再次运行相同的文件,也许第二次可能会正确处理它!
有没有办法克服这个问题,或者至少跳过这个文件,让程序做点什么,而不是挂在那里!
修改 这是api respond
答案 0 :(得分:1)
我希望对此有一个更优雅的解决方案,但我对此表示怀疑。我认为,一种优雅的解决方案将依赖于解决根本问题的原因,为什么会首先引发此错误。
此处使用的类为org.apache.commons.lang3.exception.ExceptionUtils
。
try {
JAXBContext jaxbContext = createJaxbContext();
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
JAXBElement<E> jaxbElement = unmarshaller.unmarshal(new StreamSource(fileInputStream), expectedClass);
} catch (UnmarshalException e) {
if (ExceptionUtils.getStackTrace(e.getLinkedException()).contains("White spaces are required between publicId and systemId.")) {
// exception handling
}
}