개요
Mybatis로 작성한 쿼리문에서 발생한 에러이다. 내용을 해석해보면 다음과 같다.
SAXParseException : 내용은 올바른 형식의 문자 데이터 또는 마크업으로 구성되어야 합니다.
아래는 SAXParseException 에러가 발생한 쿼리 예시이다. 쿼리로서만 보면 문제 있어 보이지 않는다. 그럼 어떤게 문제였을까?
SELECT NAME
FROM USERS
GROUP BY NAME
HAVING SUM(CASE WHEN SEX = 'M' THEN 1 ELSE 0 END) < 1;
개발 환경
- Java 8
- Spring 2.x
- Maven
- Oracle
- Mybatis
- IntelliJ
원인
SELECT NAME
FROM USERS
GROUP BY NAME
HAVING SUM(CASE WHEN SEX = 'M' THEN 1 ELSE 0 END) < 1; -- 여기 부등호가 문제였다.
해결
이럴 때 CDATA를 사용하면된다.
CDATA는 Character DATA(문자형 데이터)로 XML에서 특정 문자를 파싱하지 않고 문자열 자체로 출력해준다.
아래 예시처럼 CDATA 문법 안에 파싱을 원하지 않는 쿼리문을 넣어주면 된다.
<![CDATA[ 쿼리 ]]>
<![CDATA[
SELECT NAME
FROM USERS
GROUP BY NAME
HAVING SUM(CASE WHEN SEX = 'M' THEN 1 ELSE 0 END) < 1;
]]>
CDATA 안에 포함시켜주니 에러 없이 해당 프로세스가 잘 실행되었다!
참조
SAXParseException (Java Platform SE 7 )
Encapsulate an XML parse error or warning. This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY. See http://www.saxproject.org for further information. This exception may include information for locating the
docs.oracle.com
SAX
This is the official website for SAX. It replaces David Megginson's original SAX page. SAX is the Simple API for XML, originally a Java-only API. SAX was the first widely adopted API for XML in Java, and is a “de facto” standard. The current version is
www.saxproject.org
MyBatis XML 에러[The content of elements must consist of well-formed character data or markup.]
보기싫은 에러가 발생했습니다. 마우스를 오버하니 나오는 에러내용은 [The content of elements must consist of well-formed character data or markup.] 발생 원인은 내용에 부등호가 있을 경우 발생하는 에러라는
e-moon.tistory.com
'Java' 카테고리의 다른 글
Java - 자바 가비지 컬렉션(Garbage Collection)을 알아보자 (1) | 2024.11.09 |
---|---|
Java - JVM 구조와 동작 방식 (1) | 2024.11.03 |
Java - File로 파일 목록 이름 조회하기 (1) | 2024.01.25 |
Eclipse Memory Analyzer - Eclipse MAT 설치 방법 (MacOS) (0) | 2023.08.17 |
Java - @JasonCreator로 DTO에서 유연하게 Enum Type 받기 (0) | 2023.04.26 |