2017-10-11 3 views
0

Ich möchte Sitzung entfernen für den Fall, dass ich bestimmte Daten aus der Datei habe ich Code wie folgt, aber ich habe Fehler "Flowfile hat bereits für die Entfernung markiert", was sollte ich ändern, um zusätzliche Fehler loszuwerden?Nifi: wie Sitzung auf Attributwert in Nifi zu entfernen

  1. Bei Session Rollback wird Flowfile auch in Warteschlangen verschwinden?

    2. sollte ich rollback anstelle von remove() verwenden?

    NodeList childNodes = nodeGettingChanged.getChildNodes(); 
           for (int i = 0; i != childNodes.getLength(); ++i) { 
            Node child = childNodes.item(i); 
            if (!(child instanceof Element)) 
             continue; 
    
            if (child.getNodeName().equals("runAs")) { 
              if(child.getFirstChild().getTextContent()=="false"){ 
    
               session.remove(flowFile1); 
               File deleteExtraFile =new File("C://Users//s.tkhilaishvili//Desktop//try2//nifi-1.3.0//1//conf.xml"); 
               boolean delete=deleteExtraFile.delete(); 
    
    
    
              } 
              else { 
               child.getFirstChild().setNodeValue("false"); 
              } 
    
            } 
    
           } 
    

    Dokument finalXmlDocument = xmlDocument; session.write (flowFile1, neue StreamCallback() {

       public void process(InputStream inputStream, OutputStream outputStream) throws IOException { 
            TransformerFactory transformerFactory = TransformerFactory.newInstance(); 
            Transformer transformer = null; 
            try { 
             transformer = transformerFactory.newTransformer(); 
            } catch (TransformerConfigurationException e) { 
             e.printStackTrace(); 
            } 
            DOMSource source = new DOMSource(finalXmlDocument); 
            ffStream.close(); 
            ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
            StreamResult result = new StreamResult(bos); 
    
    
            try { 
             transformer.transform(source, result); 
            } catch (TransformerException e) { 
             e.printStackTrace(); 
            } 
            byte[] array = bos.toByteArray(); 
            outputStream.write(array); 
           } 
    
          }); 
    
          session.remove(flowFile); 
          session.transfer(flowFile1, REL_SUCCESS); 
    
    
    
    
          } 
    

Antwort

1

Wenn Sie ausführen session.remove (flowFile1) dann später versucht, es zu REL_SUCCESS zu übertragen, werden Sie diesen Fehler. Es sieht aus wie Sie haben bereits eine if-Klausel, die firstChild auf "false" prüft, vielleicht könnten Sie die Übertragung in eine else-Klausel setzen, so dass sie nur übertragen wird, wenn sie nicht entfernt wurde.

+0

im Falle von session.remove() es wird immer noch im übergeordneten Ordner directroy? ich meine Datei würde nicht gelöscht werden von hier –