我有一个批处理作业,处理大量数据。作业基本上是从源数据库获取数据并进行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的好方法。请指教
谢谢
答案 0 :(得分:1)
如果愿意,可以使用try catch块,但是在调用父对象上的任何方法之前,仅检查父对象是否为null可能更干净,更有效。
if (null != document) {
NodeList nodelist = document...
}
但是,您可能希望将整个过程包装在try catch中,因为在某些情况下,这些方法可能会引发NPE以外的其他异常。