批量运行期间检查NPE

时间:2018-09-26 17:05:27

标签: java nullpointerexception spring-batch

我有一个批处理作业,处理大量数据。作业基本上是从源数据库获取数据并进行Web服务调用,然后将数据写入目标数据库。 今天,我面对“ NPE”,在那里我检查XML的“成功”响应。我检查节点之一,以确定响应是成功还是失败。 我可以试一试,但是我需要知道这是否是正确有效的方法。

代码

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();

        InputSource source = new InputSource();
        source.setCharacterStream(new StringReader(response));
        Document document = builder.parse(source);

        XPath xpath = XPathFactory.newInstance().newXPath();
        NodeList nodeList = document.getElementsByTagName(DCDirectProcessorConstants.Tag_Response_getValue);
        Node node = nodeList.item( 0 ).getAttributes().getNamedItem(DCDirectProcessorConstants.Tag_Response_Status);

`Node node = nodeList.item( 0 ).getAttributes().getNamedItem(DCDirectProcessorConstants.Tag_Response_Status);` line throws NPE. 

堆栈跟踪

java.lang.NullPointerException at com.mercuryinsurance.r3.util.MigrationExecutorThread.run(MigrationExecutorThrea .java:96) [migration.jar:?] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [?:1.8.0_66] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [?:1.8.0_66] at java.lang.Thread.run(Thread.java:745) [?:1.8.0_66]

因此,在那行中,我只是在检查标记的值是否为“成功”,不确定是否有尝试挂接块来处理NPE的好方法。请指教

谢谢

1 个答案:

答案 0 :(得分:1)

如果愿意,可以使用try catch块,但是在调用父对象上的任何方法之前,仅检查父对象是否为null可能更干净,更有效。

if (null != document) {
    NodeList nodelist = document...
}

但是,您可能希望将整个过程包装在try catch中,因为在某些情况下,这些方法可能会引发NPE以外的其他异常。