티스토리 뷰
java.lang.UnsupportedOperationException:
This parser does not support specification "null" version "null"
니미... XML 파일을 validation 하는 도중 위와 같은 오류를
만날 때가 있다...
여기 저기 구글링한 결과 아래
사이트에서 해결책을 찾을 수 있었다..
http://www.jroller.com/navanee/entry/unsupportedoperationexception_this_parser_does_not
오류의 원인은 바로 파서의 버전이 안 맞아서 발생하는 오류이다... -_-;;
validation 하는 것에 대해 참... 할 말이 많다... -_-;;
대부분 xsd를 이용하여 validation 할 때 아래와 같은 코드를 사용할
것이다..
SchemaFactory
sf = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
Schema schema = sf.newSchema(new
StreamSource(ClassLoader.getSystemResourceAsStream("XSD 파일 경로")));
SAXParserFactory spf =
SAXParserFactory.newInstance();
spf.setSchema(schema);
spf.setNamespaceAware(true);
XMLReader reader =
spf.newSAXParser().getXMLReader();
reader.setContentHandler(schema.newValidatorHandler());
reader.setContentHandler(컨텐츠 핸들러);
reader.setErrorHandler(에러 핸들러);
reader.parse(new InputSource(new
FileInputStream("XML 파일 경로")));
사실.. 저 소스 코드를 그대로 실행하면 아마 100% 메소드 하나를 찾을 수 없다고 나올 것이다...
겁나 웃긴게 내부적으로 xerces에서 제공하는 메소드를 사용하고 있었다...
-_-;;
그거야 뭐... xercesImpl.jar
파일을 하나 추가해주면 오류를 해결할 수 있다...
그런
데.. 혹시나 잘못 검색을 했거나 아무 생각 없이 파일을 추가하면 바로 위와 같은 오류를 만날 수 있다..
꼭 최신 버전으로 추가해주도록 하자... (이 글 쓰는 시점엔 2.9.1이
최신이다....)
혹시나 maven을 사용하는데 이래
저래 jar가 마구잡이로 dependency가 걸려 있다면..
dependency 그래프를 봐가면서 xercesImpl 하위 버전을 누가 쓰는지 확인하여 exclusions을
걸어주도록 하자..
<dependency>
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
<version>1.1.1</version>
<exclusions>
<exclusion>
<groupId>xml-apis</groupId>
<artifactId>xml-apis</artifactId>
</exclusion>
<exclusion>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
</exclusion>
<exclusion>
<groupId>xom</groupId>
<artifactId>xom</artifactId>
</exclusion>
</exclusions>
</dependency>
뭐 대충 위와 같이 해주면 되겠다...
그리고 혹시나 다 최신 버전으로 했는데도 안된다...
그러면 일단 전부다 삭제하고 다시 빌드하고 다시 배포해보도록 하자...
간혹 lib에서 안 지워지는 경우가 있으니... -_-;;;
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.