2017-10-16 1 views
0

Ich möchte XML-Daten aktualisieren und es in Flowfile1 schreiben, aber aus irgendeinem Grund kann mein ExecuteScript-Prozessor Übertragungsbeziehung hier nicht angeben ist mein Code, Was sollte ich ändern, um diese Aufgabe zu machen?: Ist es möglich, dass mein Code in session.write keine XML-Daten in ByteArray und nicht in Flowfile-Inhalt schreiben kann? (Aber nicht werfen Ausnahme)Nifi: Übertragungsbeziehung nicht angegeben

flowFile1 = session.putAttribute(flowFile1, "filename", "conf.xml"); 

       session.write(flowFile1, new StreamCallback() { 
       @Override 
       public void process(InputStream inputStream1, OutputStream outputStream) throws IOException { 
        TransformerFactory transformerFactory1 = TransformerFactory.newInstance(); 
         Transformer transformer1 = null; 
         try { 
          transformer1= transformerFactory1.newTransformer(); 
         } catch (TransformerConfigurationException e) { 
          e.printStackTrace(); 
         } 

        DOMSource source1 = new DOMSource(doc); 
        ByteArrayOutputStream bos1 = new ByteArrayOutputStream(); 
        StreamResult result = new StreamResult(bos1); 


        try { 
         transformer1.transform(source1, result); 
        } catch (TransformerException e) { 
         e.printStackTrace(); 
        } 
        byte[] array1 = bos1.toByteArray(); 
        outputStream.write(array1); 
       } 

      }); 

      if(flowFile1!=null){ 

      session.transfer(flowFile1, REL_SUCCESS); 
      } 
      else{ 
      session.transfer(flowFile1, REL_FAILURE); 

      } 

     }catch (OverlappingFileLockException e) { 
      lock.release(); 


     } 
     catch (FileNotFoundException e) { 
      Thread.sleep(5000); 


     } catch (Exception e) { 
      e.printStackTrace(); 
     }finally { 


      lock.release(); 
      ini.close(); 
     } 

Antwort

2

session.write() gibt einen Verweis auf eine neuere Version der Flow-Datei, aber Sie speichern es nicht oder sie zu übertragen. Später versuchen Sie, eine Version zu übertragen, die nicht die neueste ist. Fügen Sie "flowFile1 =" am Anfang Ihrer session.write() -Anweisung hinzu.