티스토리 뷰

개발을 하고 was를 기동할때 아래와 같은 메세지를 만날 수 있다. 

Caused by: org.springframework.core.NestedIOException: Failed to parse mapping resource: 'file [C:\oingdaddy\target\classes\~\oingService.sql]'; nested exception is org.apache.ibatis.builder.BuilderException: Error creating document instance.  Cause: org.xml.sax.SAXParseException; lineNumber: 55; columnNumber: 22; The content of elements must consist of well-formed character data or markup.
	at org.mybatis.spring.SqlSessionFactoryBean.buildSqlSessionFactory(SqlSessionFactoryBean.java:613)
	at org.mybatis.spring.SqlSessionFactoryBean.afterPropertiesSet(SqlSessionFactoryBean.java:491)

mybatis를 사용할때 쿼리를 작성을 잘못해서 문제가 발생을 한 것이다. SAXParseException은 보통 xml 문법이 잘못되었을때 나타나는 오류이고 SAXParseException; lineNumber: 55; columnNumber: 22 이런식으로 잘못된 곳의 위치까지 친절하게 나와있다. 오류가 난 쿼리로 가보자. 

SELECT YEAR(GETDATE())-9 AS yyyy
     UNION ALL
    SELECT yyyy + 1
      FROM yearcte
     WHERE yyyy + 1 <= YEAR(GETDATE())+10

문제가 난 곳은 정확히 맨 마지막줄 중간에 있는 < 를 나타낸다. xml에서는 <를 태그로 인식하기 때문에 이를 다른 방식으로 표현하거나 아니면 <![CDATA[ 쿼리 ]]> 형식으로 표현을 해야 한다. 

<![CDATA[
    SELECT YEAR(GETDATE())-9 AS yyyy
     UNION ALL
    SELECT yyyy + 1
      FROM yearcte
     WHERE yyyy + 1 <= YEAR(GETDATE())+10
]]> 

이렇게 쿼리 전체에 감싸줘도 되고 아니면 문제가 되는 부분만 감싸줘도 된다. 

 

끝!

댓글
최근에 올라온 글
최근에 달린 댓글
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31