티스토리 뷰

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에서 안 지워지는 경우가 있으니... -_-;;;

'자바 > JAVA 입문' 카테고리의 다른 글

JAVA Carriage Return(CR), Line Feed(LF)  (0) 2011.10.11
자바 난수 발생  (0) 2011.10.11
자바 오늘의 날짜 구하기  (4) 2011.10.11
java 메일보내기  (5) 2011.10.11
자바 정의1  (0) 2011.10.11