2016-12-04 5 views
3

XPathFactoryImpl(MyBatisの使用)が見つかりませんエラー

次のエラーが発生しました。

[INFO] [talledLocalContainer] org.apache.ibatis.exceptions.PersistenceException: 
[INFO] [talledLocalContainer]  ### Error building SqlSession. 
[INFO] [talledLocalContainer]  ### Cause: java.lang.RuntimeException: XPathFactory#newInstance() failed to create an XPathFactory for the default o 
bject model: http://java.sun.com/jaxp/xpath/dom with the XPathFactoryConfigurationException: javax.xml.xpath.XPathFactoryConfigurationException: java. 
util.ServiceConfigurationError: javax.xml.xpath.XPathFactory: Provider org.apache.xpath.jaxp.XPathFactoryImpl not found 
[INFO] [talledLocalContainer] ### Cause: 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: java.util.ServiceConfigurationError: javax.xml.xpath.XPathFactory: Provider org.apache.xpath.jaxp.XPathFactoryImpl not found 

ソースコード

static { 
    try { 
     // set SessionFactory 
     if (MyBatisConnectionFactory.sqlSessionFactory == null) { 
      MyBatisConnectionFactory.sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("/mybatisConfig.xml")); 
     } 

    } catch (final Exception e) { 
     MyBatisConnectionFactory.LOGGER.error(e.getMessage()); 
    } finally { 
    } 
} 

のXalanを追加し、次のエラーが発生します。

Caused by: java.lang.ClassCastException: org.apache.xerces.jaxp.DocumentBuilderFactoryImpl cannot be cast to javax.xml.parsers.DocumentBuilderFactory 

このエラーはPure Javaアプリケーション環境では発生しませんでした。

このエラーがなぜ発生するのでしょうか。

私を助けてください。

ありがとうございました。

+0

コードは、使用する実装を見つけるためにservicelocatorを使用しています。どうやらその瓶はクラスパスにはない – MeBigFatGuy

答えて

4

私は、同様のエラーを持って、この厄介な探して事、documented here、私のためにそれを修正:

-Djavax.xml.xpath.XPathFactory:http://java.sun.com/jaxp/xpath/dom=com.sun.org.apache.xpath.internal.jaxp.XPathFactoryImpl 

私はMacOSの上でこのJavaのバージョン使用しています:-Djaxpから標準エラー出力

java version "1.8.0_92" 
Java(TM) SE Runtime Environment (build 1.8.0_92-b14) 
Java HotSpot(TM) 64-Bit Server VM (build 25.92-b14, mixed mode) 

を.debug = 1は、これを見つけるのを助けました:

JAXP: Looking up system property 'javax.xml.xpath.XPathFactory:http://java.sun.com/jaxp/xpath/dom' 
JAXP: The property is undefined. 

だから私は正確にそれを求めていました

JAXP: Looking up system property 'javax.xml.xpath.XPathFactory:http://java.sun.com/jaxp/xpath/dom' 
JAXP: The value is 'com.sun.org.apache.xpath.internal.jaxp.XPathFactoryImpl' 
JAXP: createInstance(com.sun.org.apache.xpath.internal.jaxp.XPathFactoryImpl) 
JAXP: loaded com.sun.org.apache.xpath.internal.jaxp.XPathFactoryImpl from jar:file:/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Hom  e/jre/lib/rt.jar!/com/sun/org/apache/xpath/internal/jaxp/XPathFactoryImpl.class 
JAXP: factory 'com.sun.org.apache.xpath.internal.jaxp.XPathFactoryImpl' was found for http://java.sun.com/jaxp/xpath/dom 

私は好奇心を持っています:以下の作業はうまくいきません:uri。では、なぜXPathはこれを必要とし、他はそうしないのですか?

-Dcom.sun.org.apache.xml.internal.dtm.DTMManager=com.sun.org.apache.xml.internal.dtm.ref.DTMManagerDefault 
-Djavax.xml.parsers.DocumentBuilderFactory=com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl 
関連する問題