2009-07-02 5 views
0

격리 상태에서 제대로 작동하지만 클라이언트 프로젝트에서 종속성을 사용하는 코드 조각이 실패했습니다.DOMImplementation 버전에서 Java depenendency 오류를 디버그하는 방법

에 대한 호출 문서 doc = impl.createDocument (null, null, null);

은 실패합니다 (http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4913257의 문제와 유사). 단위 테스트에서 'impl'의 인스턴스는 com.sun.org.apache.xerces.internal.dom.DOMImplementationImpl의 인스턴스입니다. 내 클라이언트 코드에서는 org.apache.xerces.dom.DOMImplementationImpl의 인스턴스입니다.

어떻게이 종속성을 추적합니까? 클래스 패스에서 모든 클래스와 jar 파일을 수동으로 시도했지만 org.apache.xerces.dom.DOMImplementation의 제공자를 찾을 수 없습니다. 클래스가로드 될 때 (그리고 그 이유)를 관찰 할 수 있습니까? 특정 DOM 구현은 어떻게 선택됩니까? 지금은 jvm이 특정 구현을 사용하도록 강제 할 수 있습니까?

답변

1

에서의 구현 "com.sun.org.apache은 ..."패키지는 JRE의 한 부분으로 포장 년대의 Xerces입니다. "org.apache ..."를 시작하는 것은 Apache의 독립형 배포판입니다. 동일한 응용 프로그램에서 함께 실행할 수 있지만 상당히 혼란 스러울 수 있습니다.

클라이언트 프로젝트에 독립형 아파치 배포판 (아마도 xercesImpl.jar)이 포함되어있는 것으로 보입니다. 그들에게 rem, ove 그리고 built-in JRE code를 사용하기 시작하는지 확인해달라고 요청하십시오.

+0

그건 의미가 있습니다. 이제 항아리에는 아파치 배포판이 있습니다. 클래스 패스에는 xercesImpl이 없기 때문에 어느 jar 파일에 org.apache.xerces. * 클래스가 있는지 찾을 수 없습니다. -Djaxp.debug = true로 실행하면 JAXP : ClassLoader를 사용하여 jar resource = META-INF/services/javax.xml.parsers.DocumentBuilderFactory를 찾았습니다. [email protected] 그러나 슬프게도 어느 항아리. – eaubin

+0

거기에 META-INF/services/javax.xml.parsers.DocumentBuilderFactory 항목이 들어있는 JAR이 있어야합니다. 클라이언트의 JRE 설치도 확인하십시오. 거기에 xerces가있을 수 있습니다. – skaffman

0

는 클라이언트 프로젝트의 클래스 경로에 xercesImpl.jar의가없는 대부분의 경우

관련 문제