MyBatis에서 TypeHandler를 정의하고 사용하려고 하니 org.apache.ibatis.type.TypeException이 발생했다. javaType으로 정의한 클래스를 찾을 수 없다는 내용이었는데 이해할 수가 없었다. 분명히 클래스는 존재했다. 

public class Sample {
	...
	public enum Type {
		...
	}
}

<typeHandlers>
	<typeHandler javaType="com.example.Sample.Type" handler="org.apache.ibatis.type.EnumOrdinalTypeHandler" />
</typeHandlers>


직감적으로 inner class로 인한 문제로 추측되어 Type 클래스를 inner class가 아닌 별도의 클래스로 생성해서 테스트를 해봤다. 역시 잘 된다.
이유를 확인하기 위해 TypeException이 발생한 곳을 찾아봤다. TypeAliasRegistry 클래스에서 미리 정의된 클래스 타입이 아니라면 ClassLoader를 통해서 찾게 되는데 이렇게 클래스 파일을 직접 찾으므로 내부 클래스의 경우 컴파일된 실제 클래스명을 지정해야 된다. 

<typeHandlers>
	<typeHandler javaType="com.example.Sample$Type" handler="org.apache.ibatis.type.EnumOrdinalTypeHandler" />
</typeHandlers>


com.example.Sample.Type이 아닌 com.example.Sample$Type으로 해야지만 정상적으로 처리가 가능하다.

+ Recent posts