2016-02-02 4 views
1

У меня есть перехватчик, написанный для Flume код ниже:Как избавиться от NullPointerException в перехватчике потоков?

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; 

} 

Я удаляю NAMESPACE из моего источника XML с removeNs.xslt файла. Так что я могу хранить эти данные в HDFS, а затем вкладывать в улей. Когда мой перехватчик запустится, запустите ошибку ниже:

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

Итак, какой оператор/строка 'находится в test.intercepter.App.intercept (App.java:59)'? –

+1

когда я делаю event.setBody (instr.toString(). GetBytes()); –

ответ

2

Я нашел решение. Проблема была не чем иным, как new File("removeNs.xslt"). Он не смог найти местоположение, так как я не уверен, где хранить этот файл, но позже я получаю путь потока flume, но как только я перезапускаю агент flume, он удаляет все файлы, которые я хранил в каталоге flume agent. Поэтому я изменил код и сохранил материал файла в своем java-коде.

Смежные вопросы