에스제이

반응형

1. 오류코드

TIP
 

Caused by: org.xml.sax.SAXParseException: 요소 콘텐츠는 올바른 형식의 문자 데이터 또는 마크업으로 구성되어야 합니다.

Caused by: org.xml.sax.SAXParseException: 요소 콘텐츠는 올바른 형식의 문자 데이터 또는 마크업으로 구성되어야 합니다.
	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:204)
	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:178)
	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:400)
	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:327)


Mybatis로 쿼리 작성 시 위와 같은 에러가 발생했습니다. 발생원인 및 해결방법에 대해서 알아봅시다.

2. 발생원인

Mybatis xml 설정 파일에서 부등호( < > )를 태그로 인식해서 발생하는 오류입니다.

<select id="getUserList" resultType="userModel">
    SELECT
        *
    FROM user
    WHERE 1 = 1
    AND uid > 5
    AND uid < 9
</select>

위의 질의문은 SQL툴에서 지극히 정상입니다만, Mybatis xml 파일에서는 AND uid < 9 에서 '<'를 부등호로 인식하여 파싱 시 오류가 발생합니다.

 

3. 해결방안

방안1. 부등호를 <![CDATA[ ]]>감싼다.

<select id="getUserList" resultType="userModel">
    SELECT
        *
    FROM user
    WHERE 1 = 1
    AND uid > 5
    AND uid <![CDATA[ < ]]> 9
</select>

방안2. 쿼리문 전체를 감싼다.

<select id="getUserList" resultType="userModel">
<![CDATA[
    SELECT
        *
    FROM user
    WHERE 1 = 1
    AND uid > 5
    AND uid < 9
]]>
</select>

 

반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band