2017-10-18 153 views
0

[输入图像说明] [1]我有nifi 1.3.0。是否有可能在nifi中实现的groovy版本无法识别lambda表达式?这里是我的代码,我该如何改变它才能在nifi处理器中工作?Nifi:无法识别groovy xmlSlurper结构

  1. 是否有可能处理器不能正常工作,因为我不使用session.tranfer我的意思是不产生任何flowfile?
def static addDays(def date) { 
     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 
     Calendar c = Calendar.getInstance(); 
     c.setTime(sdf.parse(date)); 
     c.add(Calendar.DATE, 1); // number of days to add 
     String m = sdf.format(c.getTime()); // dt is now the new date 
     return m; 
    } 
def flowFile=session.get() 
ArrayList<String> value = new ArrayList<>(); 
if(flowFile!=null){ 
    value.add(flowFile.getAttribute('filename'); 
    session.remove(flowFile); 
     } 
File file = new File("C://Users//user//Desktop//try2//nifi-1.3.0//4//conf2.xml"); 
     String content = ""; 
     String material = ""; 
     BufferedReader s; 
     BufferedWriter w; 
     RandomAccessFile ini = new RandomAccessFile(file, "rwd"); 
     FileLock lock = ini.getChannel().lock(); 
     DocumentBuilder dBuilder; 
     Document document, doc; 
     String date="",data=""; 
     try { 
      String sCurrentLine; 
      s = new BufferedReader(Channels.newReader(ini.getChannel(), "UTF-8")); 
      while ((sCurrentLine = s.readLine()) != null) { 
       content += sCurrentLine; 
      } 
      ini.seek(0); 
      def xml = new XmlParser().parseText(content) 
      for(int i=0;i<value.size();i++) { 
       date = value.get(i).substring(0, 10); 
       xml.rs.borderCross.details.findAll({ p -> 
        p.runAs[0].text() == "false" && p.start[0].text() == date.toString() 
       }).each({ p -> 
        p.start[0].value = addDays(p.start[0].text()) 
        p.runAs[0].value = "true" 
       }) 
      } 
      def stringWriter = new StringWriter() 
      new XmlNodePrinter(new PrintWriter(stringWriter)).print(xml) 
      def newXml = stringWriter.toString() 
      TransformerFactory transformerFactory = TransformerFactory.newInstance(); 
      Transformer transformer = transformerFactory.newTransformer(); 
      InputStream stream1 = new ByteArrayInputStream(newXml.toString().getBytes("UTF-8")); 
      DocumentBuilderFactory dbFactory1 = DocumentBuilderFactory.newInstance(); 
      dBuilder = dbFactory1.newDocumentBuilder(); 
      document = dBuilder.parse(stream1); 
      DOMSource source=new DOMSource(document); 
      ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
      StreamResult result1 = new StreamResult(bos); 
      try { 
       transformer.transform(source, result1); 
      } catch (TransformerException e) { 
       e.printStackTrace(); 
      } 
      byte[] array = bos.toByteArray(); 
      data = bos.toString(); 
      if (!data.isEmpty()) { 
       ini.setLength(0); 
       w = new BufferedWriter(Channels.newWriter(ini.getChannel(), "UTF-8")); 
       w.write(data); 
       lock.release(); 
       w.close(); 
      } 
      else{ 
       ini.setLength(0); 
       w = new BufferedWriter(Channels.newWriter(ini.getChannel(), "UTF-8")); 
       w.write(content); 
       lock.release(); 
       w.close(); 

      } 
     }catch (FileNotFoundException e) { 
      TimeUnit.SECONDS.sleep(50000); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } catch (TransformerConfigurationException e) { 
      e.printStackTrace(); 
     } catch (ParserConfigurationException e) { 
      e.printStackTrace(); 
     } catch (SAXException e) { 
      e.printStackTrace(); 
     } catch (OverlappingFileLockException e) { 
     TimeUnit.SECONDS.sleep(50000); 
      lock.release(); ; 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } finally { 
      //lock.release(); 
      ini.close(); 
     } 

回答

1

这些都不是Java的lambda表达式,它们是Groovy闭。乍一看,这看起来是正确的,你得到什么错误?你可能需要把括号中的关闭链接在他们面前:

def xml = new XmlParser().parseText(content) 
      for(int i=0;i<value.size();i++) { 
       date = value.get(i).substring(0, 10); 
       xml.rs.borderCross.details.findAll({ p -> 
        p.runAs[0].text() == "false" && p.start[0].text() == date.toString() 
       }).each({ p -> 
        p.start[0].value = addDays(p.start[0].text()) 
        p.runAs[0].value = "true" 
       }) 
      } 
+0

MulipleCompilationErrorsException:启动失败意外的标记 –

+0

,当我看行号错误表明我,我有简单的String s =”“在这条线不能找出为什么这个错误是由于 –

+0

当我在intelij想法代码上运行这个完美的作品,但内部的nifi处理器代码,它会抛出异常 –