2017-12-29 38 views
1

로그 파일을 줄이는 nifi 프로세서 (executeScript 프로세서) 안에 코드 논리가 있습니다 (이 경우 로그 파일에 동일한 텍스트가 있으므로 중복을 제거하고 이름과 파일 크기로 선택하려고합니다). 그러나 때로는 (항상은 아님) 음수 인덱스 오류가 발생했습니다. 코드를 변경해야 어떻게 작동합니까?그루비 코드에서 음의 색인 오류를 제거하는 방법은 무엇입니까?

import org.apache.nifi.processor.FlowFileFilter; 
import groovy.json.JsonSlurper 
import groovy.json.JsonBuilder 
import java.nio.charset.StandardCharsets 
import org.apache.commons.io.IOUtils 

def flowFile = session.get(); 
def n=0; 
if(!flowFile)return 
def size = flowFile.getAttribute('Size'); 
int value = size as Integer; 
if((value/338)>=1){ 
def ffList = session.get(new FlowFileFilter(){ 
    public FlowFileFilterResult filter(FlowFile ff) { 

     if(size == ff.getAttribute('Size')){ n++; return FlowFileFilterResult.ACCEPT_AND_CONTINUE;} 
     else{ return FlowFileFilterResult.REJECT_AND_CONTINUE; } 
    } 

}); 

session.transfer(ffList[n-1],REL_SUCCESS); 
session.remove(ffList[0..-2]) 
session.remove(flowFile); 
} 
else{ 
session.transfer(flowFile,REL_SUCCESS); 
} 
+0

나는 네가 부정적인 인덱스 오류로 가정하고있어'ArrayIndexOutOfBoundsException'? 귀하의 색인 및 배열 크기에 대해 말하는 것은 무엇입니까? – doelleri

답변

0

요소에 액세스하기 전에 목록의 크기를 확인해야한다고 생각합니다.

def ffSize = ffList.size() 
if (n <= ffSize && ffSize >= 2) { 
    session.transfer(ffList[n - 1], REL_SUCCESS) 
    session.remove(ffList[0..-2]) 
    session.remove(flowFile) 
}