콘솔 창에 뜬 오류를 살펴보자..

ERROR: org.springframework.web.context.ContextLoader - Context initialization failed
org.springframework.beans.factory.BeanCreationException: 
Error creating bean with name 'sqlSessionFactory' defined in ServletContext resource [/WEB-INF/spring/action-mybatis.xml]: 
Invocation of init method failed; nested exception is org.springframework.core.NestedIOException: Failed to parse mapping resource: 
'file [C:\work_sts.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\shopTranSpring\WEB-INF\classes\mybatis\mappers\address.xml]'; nested exception is java.lang.RuntimeException: 
Error parsing Mapper XML. Cause: org.apache.ibatis.builder.BuilderException: 
Error resolving class . Cause: org.apache.ibatis.type.TypeException: 
Could not resolve type alias ''.  Cause: java.lang.ClassNotFoundException: 
Cannot find class:

 

오류 메세지를 보면

MyBatis의 매퍼 XML 파일(address.xml)을 파싱하는 도중에 문제가 발생했다고 한다.

 

java.lang.ClassNotFoundException: Cannot find class:를 보면 특정 클래스를 찾지 못했다고 한다.

매퍼 XML 파일 내에서 사용된 type alias가 잘못 지정되었을 가능성이 크다.

address.xml 파일을 확인해보자.

VO 클래스를 불러오는 과정과 반환 타입을 설정하는 부분 오타 실수가 있었다..ㅎ 
가장 많이 내는 오타로 인한 실수 주의하자!

 


수정된 코드

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
      PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
   "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="mapper.address">
	<resultMap id="addResult" type="com.team6.sts.vo.AddressVO">
		<result property="zip_num" column="zip_num" />
		<result property="sido" column="sido" />
		<result property="gugun" column="gugun" />
		<result property="dong" column="dong" />
		<result property="zip_code" column="zip_code" />
		<result property="bunji" column="bunji" />
	</resultMap>
	
	<!-- findZip -->	
 	<select id="selectZip" parameterType="String" resultMap="addResult" > 
			<![CDATA[
				select * from address
				where dong like '%'||#{dong}||'%'
			]]>			
 	</select> 
</mapper>

 

콘솔 창에 뜬 오류를 살펴보자. 

ERROR: org.springframework.web.context.ContextLoader - Context initialization failed
org.springframework.beans.factory.BeanCreationException: 
Error creating bean with name 'sqlSessionFactory' defined in ServletContext resource [/WEB-INF/spring/action-mybatis.xml]: 
Invocation of init method failed; 
nested exception is java.io.FileNotFoundException: class path resource [mybatis/model/parcelConfig.xml] cannot be opened because it does not exist

 


오류 메세지를 보면 

'sqlSessionFactory' 라는 이름의 bean을 생성하는 도중 문제가 발생했다고 한다.

java.io.FileNotFoundException 오류라고 나오는 것을 보니 해당 파일을 찾지 못하는 상황이다.

 

그리고 class path로 지정한 resource 경로인 [mybatis/model/parcelConfig.xml] 가 존재하지 않는다고 나온다.

 

아.. 저건 내가 사용하고 있는 Config.xml 파일이 아니다... 바보.. 

수정해주면 말끔히 해결된다..ㅎ

 

필자는 Eclipse 2019-09 버전과 TOMCAT 9.0 버전을 사용중입니다.

 

언젠가부터 JSP파일에 오류가 날 만한 곳이 아닌데 오류가 나기 시작했다.

오류 코드는 javax.servlet.jsp.JspException cannot be resolved to a type 이와 같았고 찾아보니 jstl 라이브러리가 제대로 설치되지 않은 탓이라고 하여 혹여나 하고 버전이 맞지도 않는 jstl.jar파일도 넣어보고 서버 맵핑의 문제일 수도 있다고 생각하여 server파일도  몇번이나 지웠다가 다시 연결해줬는데도 오류는 해결되지 않았다.

이틀 동안 오류를 잡지 못하고 있다가 jar파일들을 살펴보다 jsp-api.jar파일을 발견했고 본능적으로 느꼈다.

아...이거구나.. jsp파일에서 오류가 나면 해당 부분과 관련 있는거 부터 찾아봐야지..!  바보..

오류코드가 이상하다는 걸 알면서도 그 하나만 보고 있었다. lib파일에 추가해줬더니 귀신같이 오류 코드가 사라졌다.. 이틀을 버렸지만 다음에 이런 오류 마주치면 시간 버릴 일은 없을것 같다.  다음에 이런 비슷한 오류가 나오면 좀 더 현명하게 오류를 잡아 낼 수 있을 것 같다.

 

해결 방법

프로젝트 파일의 Webcontent > lib 폴더에 jsp-api.jar 파일을 추가해주면 된다. 

jsp-api.jar파일을 첨부해놓겠다.

jsp-api.jar
0.06MB

 

말끔히 해결된 오류... 행복하다..ㅎ


 

추가로 JSP 라이브러리에 대해 잘 설명해놓은 블로그를 소개한다.

궁금하신 분들은 참고하시길..

https://hatssarjy.tistory.com/514

+ Recent posts