격리 상태에서 제대로 작동하지만 클라이언트 프로젝트에서 종속성을 사용하는 코드 조각이 실패했습니다.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이 특정 구현을 사용하도록 강제 할 수 있습니까?
그건 의미가 있습니다. 이제 항아리에는 아파치 배포판이 있습니다. 클래스 패스에는 xercesImpl이 없기 때문에 어느 jar 파일에 org.apache.xerces. * 클래스가 있는지 찾을 수 없습니다. -Djaxp.debug = true로 실행하면 JAXP : ClassLoader를 사용하여 jar resource = META-INF/services/javax.xml.parsers.DocumentBuilderFactory를 찾았습니다. [email protected] 그러나 슬프게도 어느 항아리. – eaubin
거기에 META-INF/services/javax.xml.parsers.DocumentBuilderFactory 항목이 들어있는 JAR이 있어야합니다. 클라이언트의 JRE 설치도 확인하십시오. 거기에 xerces가있을 수 있습니다. – skaffman