[JAVA] 문제없는 xml파일에서 The processing instruction target matching "[xX][mM][lL]" is not allowed. 에러가 발생할때..
Maven 공부중 예제와 똑같이 따라했는데 TEST부분에서 다음과 같은 에러가 발생했다.
T E S T S
-------------------------------------------------------
Running org.sonatype.mavenbook.weather.YahooParserTest
1 INFO YahooParser - create XML Reader
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.616 sec <<< FAILURE!
Running org.sonatype.mavenbook.weather.WeatherFormatterTest
454 INFO YahooParser - create XML Reader
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.009 sec <<< FAILURE!
Results :
Tests in error:
testParser(org.sonatype.mavenbook.weather.YahooParserTest): Error on line 2 of document : The processing instruction target matching "[xX][mM][lL]" is not allowed. Nested exception: The processing instruction target matching "[xX][mM][lL]" is not allowed.
testFormat(org.sonatype.mavenbook.weather.WeatherFormatterTest): Error on line 2 of document : The processing instruction target matching "[xX][mM][lL]" is not allowed. Nested exception: The processing instruction target matching "[xX][mM][lL]" is not allowed.
Tests run: 2, Failures: 0, Errors: 2, Skipped: 0
[ERROR] There are test failures.
로그를 보면 XML에 문제가 있다는 말 같은데 에디터로 해당 XML을 열어봐도 크게 잘못된 부분을 느낄 수 없었다.
http://thedesignspace.net/MT2archives/000815.html#.VGlOaTd_uwc
구글 검색을 통해 위의 글을 읽어보고 '<?xml version="1.0"...?>' 부분을 주석처리 하니 정상적으로 되었는데..
그 다음에 주석을 해제했는데도 정상적으로 작동이 되었다.
원인
http://ko.wikipedia.org/wiki/%EB%B0%94%EC%9D%B4%ED%8A%B8_%EC%88%9C%EC%84%9C_%ED%91%9C%EC%8B%9D
위의 글을 읽고서 어떤 문제가 있었는지 확실히 알게 되었다.
윈도우에서의 많은 편집기는 UTF-8로 저장 시 해당 파일의 제일 앞부분에 BOM 을 붙여넣게 되는데 Linux, Unix 에서는 BOM을 사용하지 않는것이 보통이라서 일반 문자열로 인식하기에..
<?xml version="1.0"... ?>
의 앞부분에 BOM 문자열이 들어가니 XML 형식에 맞지 않아서 에러가 발생한 문제였다.
일반적으로 편집기에서 따로 보이지 않아서 잘 알수가 없고..
일부 유닉스(아마 AIX로 기억..)에서 vi로는 보이지 않지만 cat으로 파일을 열었을 때 <?xml 앞에 깨진 글자가 있는 것을 본적이 있었다.
해결방법
Hex 편집이 가능한 편집기로 보면 앞부분에 이상한 문자열이 있는 것을 볼 수 있으며 해당 문자열(BOM)을 지우는 방법이 있고, 내가 사용하는 툴 처럼 해당 문서를 편집 후 저장하면 BOM을 지워주는 툴을 사용하면 편리하다. (사용툴: Ubuntu + IntelliJ 13.1 Ultimate)
댓글
댓글 쓰기