반응형
[특수문자 오류 발생]
XML 파일에서 쿼리를 작성할 때,
< , > , || , && 등의 특수 문자를 사용하는 경우 태그로 인식하여 오류가 발생합니다.
[예제]
XML 파일에서 파란색이 뜨면서 "나 좀 봐주세요~!" 하고 말하는 것 같기도 합니다.
특수 문자를 그대로 사용하여 서버를 가동하면 아래와 같이 오류창이 뜨게 됩니다.
오류로그는 아래와 같으며,
특수문자를 XML parser로 인식하여, ParserException이 뜨게 됩니다.
Caused by: org.apache.ibatis.builder.BuilderException: Error creating document instance. Cause: org.xml.sax.SAXParseException; lineNumber: 280; columnNumber: 14; The content of elements must consist of well-formed character data or markup.
at org.apache.ibatis.parsing.XPathParser.createDocument(XPathParser.java:259)
at org.apache.ibatis.parsing.XPathParser.<init>(XPathParser.java:125)
at org.apache.ibatis.builder.xml.XMLMapperBuilder.<init>(XMLMapperBuilder.java:78)
at org.mybatis.spring.SqlSessionFactoryBean.buildSqlSessionFactory(SqlSessionFactoryBean.java:520)
... 35 more
Caused by: org.xml.sax.SAXParseException; lineNumber: 280; columnNumber: 14; The content of elements must consist of well-formed character data or markup.
at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
at org.apache.xerces.util.ErrorHandlerWrapper.fatalError(Unknown Source)
at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
at org.apache.xerces.impl.XMLScanner.reportFatalError(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.DOMParser.parse(Unknown Source)
at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source)
at org.apache.ibatis.parsing.XPathParser.createDocument(XPathParser.java:257)
... 38 more
[CDATA 적용하기]
이를 해결하기 위해 사용하는 것이 <![CDATA[...]]> 입니다.
<![CDATA[...]]>를 사용하면 특수문자를 문자 형식으로 인식합니다.
[예제 - CDATA 적용]
위의 예제를 CDATA를 사용하여 아래와 같이 수정할 수 있습니다.
마지막 WHERE절처럼 특수문자가 많을 때는 한번에 감싸서 사용할 수 있습니다.
SELECT MBR_NM
, AGE
, HOBBY
FROM TB01
WHERE AGE <![CDATA[<=]]> 10
AND HOBBY <![CDATA[<> '노래 & 댄스']]>
[주의사항]
- CDATA 키워드는 대문자로 사용해야 합니다.
- CDATA 사이에 CDATA를 사용할 수 없습니다.
- CDATA 섹션 안에서는 동적 SQL을 사용할 수 없습니다.
반응형
'Database' 카테고리의 다른 글
[Database] SQL SELECT 쿼리문의 문법 순서와 실행 순서 (0) | 2022.09.06 |
---|