Nifi: как удалить сеанс на основе значения атрибута в nifi

Я хочу удалить сеанс в случае, если я получу определенные данные из файла. У меня есть такой код, но у меня возникли ошибки: «Flowfile уже отмечен для удаления». Что мне следует изменить, чтобы избавиться от лишних ошибок?

  1. В случае отката сеанса flowfile также исчезнет в очередях?

    2. следует ли использовать откат вместо remove ()?

    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");
                                }
    
                        }
    
                    }
    

    Документ finalXmlDocument = xmlDocument; session.write (flowFile1, new 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);
    
    
    
    
                }
    

person Community    schedule 11.10.2017    source источник


Ответы (1)


Если вы выполняете session.remove (flowFile1), а затем пытаетесь передать его в REL_SUCCESS, вы получите эту ошибку. Похоже, у вас уже есть if-clause, проверяющий firstChild на «false», возможно, вы могли бы поместить передачу в else-clause, так что она будет передана только в том случае, если она не была удалена.

person mattyb    schedule 11.10.2017
comment
в случае session.remove () он все еще будет в директрой родительской папки? я имею в виду, что файл не будет удален отсюда - person ; 12.10.2017