如何摆脱Flume Interceptor中的NullPointerException?

时间:2016-02-02 09:36:28

标签: hadoop xslt

我为Flume代码编写的拦截器如下:

public Event intercept(Event event) {

        byte[] xmlstr = event.getBody();
        InputStream instr = new ByteArrayInputStream(xmlstr);

        //TransformerFactory factory = TransformerFactory.newInstance(TRANSFORMER_FACTORY_CLASS,TRANSFORMER_FACTORY_CLASS.getClass().getClassLoader());
        TransformerFactory factory = TransformerFactory.newInstance();

        Source xslt = new StreamSource(new File("removeNs.xslt"));

        Transformer transformer = null;
        try {
            transformer = factory.newTransformer(xslt);
        } catch (TransformerConfigurationException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

        Source text = new StreamSource(instr);
        OutputStream ostr = new ByteArrayOutputStream();

        try {
            transformer.transform(text, new StreamResult(ostr));
        } catch (TransformerException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        event.setBody(ostr.toString().getBytes());

return event;

}

我正在使用removeNs.xslt文件从源xml中删除NameSpace。这样我就可以将这些数据存储到HDFS中,然后放入hive中。当我的拦截器运行时,它抛出以下错误:

ERROR org.apache.flume.source.jms.JMSSource: Unexpected error processing events
java.lang.NullPointerException
        at test.intercepter.App.intercept(App.java:59)
        at test.intercepter.App.intercept(App.java:82)
        at org.apache.flume.interceptor.InterceptorChain.intercept(InterceptorChain.java:62)
        at org.apache.flume.channel.ChannelProcessor.processEventBatch(ChannelProcessor.java:146)
        at org.apache.flume.source.jms.JMSSource.doProcess(JMSSource.java:258)
        at org.apache.flume.source.AbstractPollableSource.process(AbstractPollableSource.java:54)
        at org.apache.flume.source.PollableSourceRunner$PollingRunner.run(PollableSourceRunner.java:139)
        at java.lang.Thread.run(Thread.java:745)*

你能告诉我这个问题是什么,在哪里?

1 个答案:

答案 0 :(得分:2)

我找到了解决方案。问题不是new File("removeNs.xslt")。它无法找到位置,因为我不确定保留此文件的位置,但后来我得到了水槽代理路径,但是一旦我重新启动水槽代理,它就会删除我保存在水槽代理中的所有文件目录。所以我更改了代码并将文件材料保存到我的java代码中。