Illegal type at constant pool entry 17307 in class
Exception Details:
Location:
..._jsp.lambda$0(Ljava/util/ArrayList;Ljava/lang/String;)Z @5: invokestatic
Reason:
Constant pool index 17307 is invalid
Bytecode:
...
위와 같이 jsp 파일에서 lambda 에러가 났고 최근에 공부했던 stream이 바로 생각이 났다.
파일을 확인해보니 아래와 같이 stream 로직이 존재했다.
List<String> diffCollect = afterList.stream()
.filter(after -> beforeList.stream().noneMatch(Predicate.isEqual(after)))
.collect(Collectors.toList());
바로 Stream은 자바 1.8 버전에서 추가되었다는 것이 기억이 났고, 검색해보니 https://nakanara.tistory.com/279 이런 글을 찾을 수 있었다.
톰캣 버전을 확인해보니 8.5번대였고 lena의 conf/web.xml 파일의
<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
<init-param>
<param-name>fork</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>xpoweredBy</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>3</load-on-startup>
</servlet>
부분에
<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
<!-- 추가 -->
<init-param>
<param-name>compilerSourceVM</param-name>
<param-value>1.8</param-value>
</init-param>
<init-param>
<param-name>compilerTargetVM</param-name>
<param-value>1.8</param-value>
</init-param>
<!-- 여기까지 추가 -->
<init-param>
<param-name>fork</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>xpoweredBy</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>3</load-on-startup>
</servlet>
이렇게 추가해 준 후 정상적으로 동작하는 것이 확인이 되었다.
최근에 공부한 내용을 바로 적용할 수 있어 의미가 있었다.