본문바로가기
제품명 InnoRules 버그번호 BIR1700010
제목 다중 룰의 실행 결과가 0건인 경우 결과 값으로 null을 전달하는 오류
현상 다중 값을 가지는 룰의 실행 결과 건수가 0건인 경우
룰의 실행 결과를 가지고 있는 ResultConsumer를 구현한 객체( ex > MapResultConsumer )를 통해 결과 값을 참조하려고 할 때 NullPointerException 발생
분석결과
다중 값을 가지는 룰 실행 결과 건수가 0건인 경우 룰 서버는 ResultConsumer에 리턴 항목 코드와 결과 값(null)을 전달
ResultConsumer를 구현한 객체에서 엔진으로 부터 전달 받은 결과값의 처리 여부에 따라서 룰 애플리케이션에서 실행 결과를 참조할 수 없거나 오류가 발생할 수 있음
이는 ResultConsumer의 구현 코드에 따라서 오류의 발생 여부가 결정되므로 룰 서버에서 다중 룰의 실행 결과 값으로 null을 전달하는 것을 적절하지 않음
따라서 룰 서버에서는 다중 룰의 룰 실행 결과 건수가 0인 경우 null을 ResultConsumer에 전달하지 않고 row 건수가 0인 배열을 전달하도록 수정

우회방법 ResultConsumer.set() 메소드를 구현하는 코드에서 결과 값이 항목 코드가 입력되고 결과 값이 null인 경우
결과 값을 double[0] 또는 String[0], boolean[0] 배열로 치환하여 결과 값으로 사용

예시 >
public void set( String column, String[] arr, int offset, int size ) throws RulesException
{
if( column != null && arr == null )
arr = new String[0];
...
}
영향받는버전 innorulesj.jar 7.1.0.0 ~ 7.1.0.4 픽스버전 innorulesj.jar 7.1.0.5
접수일자 2017-08-29 처리일자 2017-08-31