[ERROR] JAVA Mybatis - 문서 루트 요소 "mapper"은(는) DOCTYPE 루트 "null"과(와) 일치해야 합니다.

문제 ❗


팀원 분의 JDBC -> Mybatis 으로 변경하던 중 아래의 ERROR 가 발생하여 여러가지 방법을 시도해봤습니다.

문서 루트 요소 "mapper"은(는) DOCTYPE 루트 "null"과(와) 일치해야 합니다.


원인 🔧


우선 원인은 Mybatis 설정 파일에서 Mapper.xml 을 정의했지만,

해당 XML 파일에 Mybatis DTD가 정의 되어 있지 않아 발생된 ERROR 였습니다.

 

DTD 란?

XML 은 다양한 마크업 언어를 만드는데 사용하는 다목적 마크업 언어
다양한 마크업 언어를 정의하기 위해서 스키마(schema)를 정의합니다.
스키마 (schema) 중 하나이며 DTD 문법은 아래와 같습니다.

스키마(schema)란?

해당 언어에 필요한 요소와 속성을 정의하는데 필요한 정보들의 집합
스키마의 종류는 아래와 같이 두 가지가 존재합니다.

1. DTD (Doucment Type Definition)
2. XML 스키마(XSD) 

 

해결 ✅


처음에는 위의 에러 코드 확인보고 소스 보단 이클립스 상의 문제라 생각해서 아래 부분 확인 후 Clean

 

1. Window -> XML > XML Files > Validation 

2. Validating files > No grammar specified : Ignore 로 수정

 

 

하지만 해결이 안되어 소스 뜯어본 결과 아래의 방법으로 해결했습니다.

 

 

 

1. ERROR 위치 확인

log를 확인 하였을 때 mybatis-config.xml 를 빌드하는 과정 중에 ERROR가 발생하였습니다.

 

2. 에러가 발생한 파일 전체적인 확인 mybatis-config.xml 

DTD 정의 잘 되어있는 지 확인

 

3. mapper resource 중 xml 파일 확인, DTD가 정의 되어있지 않은 파일에 DTD 삽입

<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">

 

4. 삽입 후 Build 진행하면 완료