如何捕获“publicId和systemId之间需要空格。”错误

问题描述 投票:1回答:1

我有一个正在运行的Java应用程序正在收获API端点。 API正在提供我解析的xml文件。问题是我在某些文件中遇到这个奇怪的错误

[致命错误]:1:55:publicId和systemId之间需要空格。

导致应用程序挂起,尝试读取该文件。 我的主要问题是它没有抛出异常,所以我无法捕获它(要么删除它,要么尝试重新执行该过程)并且我没有得到一行代码,这个错误是来自(哪里。当我尝试在浏览器上加载文件时,通常需要很长时间才能加载,但最终会加载。

我猜这个问题是在文件提取,这是这种方法

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

java xml-parsing
1个回答
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
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.