IT한 것/xml

Java XML 파서 변경하기

lovian 2007. 3. 23. 18:48
Java에는 XML 파서가 내장되어 있다.
Crimson 파서가 그녀석인데, 성능이 별로 안좋은지, 대부분 다른 것을 사용한다.

그렇다면 다른 파서로 변경은 어떻게 해야할까?
WAS나 AXIS 같은 애들은 알아서 셋팅을 해주는 것 처럼 보인다.
대체 어떻게 해먹는지 몰라서 ${JAVA_HOME}/jre/lib/endorsed 에 다른 파서를 강제로 넣어주었다.
그런데 나는 이런방법을 무지 싫어한다.

고로 다른 방법을 찾던중 오늘 실마리를 잡아 해결였다.

우선은 Manifest 라는 녀석에 대해서 알고 있어야한다.
잘 알 필요는 없고, 이 녀석에 의해서 기본 파서를 변경할 수 있고, 그 방법만 알면 된다.
보통 jar 로 패키징한 녀석을 풀어보면 META-INF 라는 디렉토리가 생긴다.
여기에 들어가는 정보들로 해당 jar의 기본 파서를 변경할 수 있다.

Manifest의 Service Provider라는 개념으로 파서를 수정하는 것으로
XML 파서의 인터페이스를 다른 파서의 구현체로 셋팅을 해주는 것이다.
나는 Xerces를 사용하기 위해서
META-INF/services/javax.xml.parsers.DocumentBuilderFactory 파일을 만들고
그 내용으로
org.apache.xerces.jaxp.DocumentBuilderFactoryImpl
를 설정했다.

그리고 jar 패키징을 하였다.

이런 구조에 대해서는 여기 서 알아 볼 수 있지만,
잘 몰라서 그런지는 몰라도 MANIFEST.MF를 수정하는 것이 아니라.
패키징을 할때 클래스 디렉토리 그리고 META-INF 디렉토리를 함께 묶어야 패키지에 삽입이 되었다.
안타깝게도 그냥 jar cvf my.jar myclassdir META-INF 명령으로 묶으면 jar 커맨드에서 무시해버린다.
그것을 피하기 위해서 별 내용없은 MANIFEST.MF 를 만들어 cvmf 로 이 파일과 함께 묶었더니 성공했다.

이제는 변경된 XML 파서의 클래스패스만 잡아주면 알아서 원하는 파서로 작동이 된다.