개발

스프링 mybatis 폐쇄망 dtd 문제

개미v 2022. 11. 29. 18:44

현상

폐쇄망에서 WAS 기동시 외부의 mybatis-3-config.dtd 파일을 불러 오지 못하고 오류 발생

로그

Caused by: org.springframework.core.NestedIOException: Failed to parse config resource: class path resource [sqlmap/sql-mapper-config.xml];

nested exception is com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: java.net.ConnectException: 연결 시간 초과 (Connection timed out)

분석

정상적이라면 dtd 파일은 mybatis-x.x.x.jar 파일안에 있는 dtd 파일을 참조 해야 함

jar 파일 내부 경로에 가보면 mybatis-x.x.x\org\apache\ibatis\builder\xml 경로에 mybatis-3-config.dtd 와 mybatis-3-mapper.dtd 가 있음

처음에는 WAS 문제로 접근 했었으나, tomcat, jeus 동일한 현상 발생

인터넷망에 위치한 개발PC에서도 외부로 dtd 파일을 읽어 오는 것 와이어샤크 통해서 확인 가능

해결

- dtd를 프로젝트에 넣고 참조하게 하는 방법

예) <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "classpath:/com/common/dtd/mybatis-3-config.dtd">

tomcat 에서는 classpath:경로 이런식으로 가능하나, jeus에서는 Cause: java.net.MalformedURLException: unknown protocol: classpath 에러로 사용 못함

근본적인 해결방법이 아니라서 좀 더 분석 진행

- dtd를 서버에 위치하게 하고 참조하게 하는 방법

tomcat, jeus 둘 다 가능하나 개발, 운영, 로컬 형상 관리가 어려움

예) <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "/home/app/dtd/mybatis-3-config.dtd">

근본적인 해결방법이 아니라서 좀 더 분석 진행

- 결론은 스프링 웹어플리케이션의 설정 문제

전자정부프레임워크 + mybatis + ibatis 혼합해서 사용하면 이런 문제 발생함

다른 개발자 인원이 스프링 설정에 ibatis 설정을 집어 넣어 놓았었음

ibatis 관련 설정 삭제 하니 정상적으로 jar안에 있는 dtd 파일 참조함

이 문제 해결하려고 상당한 시간을 헤맴