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