2017-10-18 14 views
0

[ここに画像の説明を入力してください] [1]私はnifi 1.3.0を持っています。 nifiで実装されているGroovyのバージョンがlambdaを認識できない可能性はありますか?ここに私のコードはありますが、どのようにしてnifiプロセッサーの中で作業するのですか?Nifi:groovy xmlSlurper構造体を認識できません

  1. 私はsession.tranferを使用しないため、プロセッサが正しく動作しない可能性があります。つまり、フローファイルは生成されません。
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

者は、彼らがGroovyのクロージャです、Javaのラムダではありません。一見したところで、どのようなエラーが出ていますか?

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

を失敗したと私は行番号のエラーが私を示して見たときに、私は単純な文字列S =」 "この行にすることはできません持っているあなたはそれらを連鎖する前に、括弧内のクロージャを配置する必要があるかもしれませんこのエラーがなぜ発生したのかを調べる –

+0

intelijのアイデアコードは完全に動作しますが、nifiプロセッサのコード内では例外をスローします –

関連する問題