자바 jsp 람다(Lambda) 오류

sangyong·2023년 5월 4일
0

이슈 정리

목록 보기
2/4
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>

이렇게 추가해 준 후 정상적으로 동작하는 것이 확인이 되었다.
최근에 공부한 내용을 바로 적용할 수 있어 의미가 있었다.

0개의 댓글