제품명 |
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 |