No XPathFctory implementation found for the object model: http://java.sun.com/jaxp/xpath/dom

이상 정보
    최근 CXF - DOSGI 를 사용 하여 웹 서 비 스 를 동적 으로 호출 할 때 들 어 오 는 인자 가 단순 한 네 이 티 브 형식 과 String 등 기본 형식 이 아 닌 하나의 대상 일 경우 'java. lang. ExceptionInitializerError' 의 이상 을 던 집 니 다. 이상 정 보 는 다음 과 같 습 니 다.
java.lang.ExceptionInInitializerError
	at com.sun.tools.internal.xjc.reader.internalizer.DOMForest.transform(DOMForest.java:437)
	at com.sun.tools.internal.xjc.api.impl.s2j.SchemaCompilerImpl.bind(SchemaCompilerImpl.java:210)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.apache.cxf.common.util.ReflectionInvokationHandler.invoke(ReflectionInvokationHandler.java:54)
	at com.sun.proxy.$Proxy15.bind(Unknown Source)
	at org.apache.cxf.endpoint.dynamic.DynamicClientFactory.createClient(DynamicClientFactory.java:320)
	at org.apache.cxf.endpoint.dynamic.DynamicClientFactory.createClient(DynamicClientFactory.java:240)
	at org.apache.cxf.endpoint.dynamic.DynamicClientFactory.createClient(DynamicClientFactory.java:219)
	at gboat2.cxf.utils.CXFUtil.createJaxWsDynamicClient(CXFUtil.java:121)
	at gboat2.cxf.utils.CXFUtil.invokeWebService(CXFUtil.java:211)
	at gboat2.cxf.utils.CXFUtil.invokeWebService(CXFUtil.java:194)
	at cn.tisson.intf.protocol.Main.main(Main.java:65)
Caused by: java.lang.RuntimeException: XPathFactory#newInstance() failed to create an XPathFactory for the default object model: http://java.sun.com/jaxp/xpath/dom with the XPathFactoryConfigurationException: javax.xml.xpath.XPathFactoryConfigurationException: No XPathFctory implementation found for the object model: http://java.sun.com/jaxp/xpath/dom
	at javax.xml.xpath.XPathFactory.newInstance(Unknown Source)
	at com.sun.tools.internal.xjc.reader.internalizer.Internalizer.<clinit>(Internalizer.java:70)
	... 15 more</clinit>

    Google 과 Baidu 를 사용 하여 솔 루 션 을 검색 할 때 대부분 프로젝트 에 xalan 과 관련 된 jar 패 키 지 를 도입 한다 고 말 하지만 저 는 xalan - 2.7.1. jar 와 관련 된 몇 개의 jar 패 키 지 를 프로젝트 에 넣 었 습 니 다. 다시 시작 한 후에 도 웹 서 비 스 를 호출 할 때 똑 같은 이상 을 던 져 반나절 을 고생 했 지만 결과 가 없 었 습 니 다. 인터넷 의 각종 솔 루 션 을 모두 시도 해 보 았 습 니 다.그러나 우리 프로젝트 는 OSGI 환경 을 사용 하기 때문에 일반적인 자바 웹 환경 과 다 르 기 때문에 어 쩔 수 없 이 해당 하 는 이상 정지점 을 설정 하고 정지점 에 따라 소스 코드 를 추적 할 수 밖 에 없습니다.
원인 분석
    소스 코드 추적 을 통 해 알 수 있 습 니 다. XPath Factory \ # new Instance () 방법 으로 XPath Factory 인 스 턴 스 를 만 드 는 것 은 주로 호출 을 통 해 이 루어 집 니 다. javax. xml. xpath. XPath Factory Finder 클래스 의 관련 방법 을 찾 습 니 다. XPath Factory 대상 의 순 서 는 다음 과 같 습 니 다.
1. 시스템 속성 DEFAULT 가 존재 한다 면PROPERTY_NAME + ": uri" (그 중에서 uri 는 우리 의 이상 한 정보 중의 "http://java.sun.com/jaxp/xpath/dom") 클래스 이름 으로 값 을 읽 습 니 다.이 방법 은 클래스 로 더 를 사용 하여 새로운 인 스 턴 스 를 만 들 려 고 합 니 다. 만 들 면 되 돌려 줍 니 다.  2. ${java. home} / lib / jaxp. properties 를 읽 고 시스템 속성 인 키 와 연 결 된 값 을 찾 습 니 다.존재 한다 면, 위의 방식 으로 이 값 을 처리 합 니 다.  3. 클래스 로 더 는 서비스 제공 자의 공급 자 설정 파일 이 자원 디 렉 터 리 META - INF / services 의 javax. xml. xpath. XPath Factory 와 일치 하도록 요구 합 니 다.파일 형식 과 해석 규칙 에 대해 서 는 JAR File Specification 을 참조 하 십시오.모든 가능 한 서비스 제공 자 는 이 방법 을 실현 해 야 한다.         isObjectModelSupported(String objectModel)      지정 한 대상 모델 을 지원 하 는 클래스 로 더 순서 중 첫 번 째 서비스 제공 자 를 되 돌려 줍 니 다.  4. 플랫폼 에 특정한 방식 으로 플랫폼 의 기본 적 인 XPath Factory 를 찾 습 니 다.W3C DOM 의 플랫폼 기본 XPath Factory, 즉 DEFAULT 가 존재 해 야 합 니 다.OBJECT_MODEL_URI。  이 모든 것 이 실패 하면 XPath Factory Configuration Exception 을 던 집 니 다.
해결 방안
    그 실현 원 리 를 알 았 으 니 문 제 는 쉽게 해결 되 었 습 니 다. 저 는 편리 하도록 WebService 도구 류 를 호출 하 는 정적 블록 에 다음 과 같은 코드 를 추 가 했 습 니 다.
//    XPathFactory,     webService           java.lang.ExceptionInInitializerError      
System.setProperty(XPathFactory.DEFAULT_PROPERTY_NAME + ":" + XPathFactory.DEFAULT_OBJECT_MODEL_URI, "com.sun.org.apache.xpath.internal.jaxp.XPathFactoryImpl");

특히 주의해 야 할 것 은 사용 하고 싶다 면 jaxp. properties 방식 지정 XPath Factory, 콜론 (:) 을 역 슬 래 쉬 (\) 로 바 꾸 는 것 을 기억 하 세 요. 예 를 들 어:
http\://java.sun.com/jaxp/xpath/dom=org.acme.DomXPathFactory

참고 자료:http://docs.oracle.com/cd/E17802_01/webservices/webservices/docs/1.6/api/javax/xml/xpath/XPathFactory.html#newInstance(java.lang.String) http://download.oracle.com/technetwork/java/javase/6/docs/zh/api/javax/xml/xpath/XPathFactory.html#newInstance(java.lang.String)

좋은 웹페이지 즐겨찾기