2016-11-02 28 views
0

我正在運行Wildfly 8.2.0並執行一些XML配置文件分析。我的想法是,我將能夠使用捆綁的xercesImpl.jar來提供JAXP SAXParserFactoryImpl。ClassNotFound:在Wildfly 8.2中運行時的Xerces SAXParserFactoryImpl

當運行Wildfly之外的邏輯時,我能夠成功地使用SAXParserFactoryImpl進行解析。這家工廠是通過設置系統屬性中找到:

System.setProperty("javax.xml.parsers.SAXParserFactory", 
        "org.apache.xerces.jaxp.SAXParserFactoryImpl"); 
SAXParserFactory factory = javax.xml.parsers.SAXParserFactory.newInstance(); 

部署我的耳朵後,我收到以下錯誤:

...: javax.xml.parsers.FactoryConfigurationError: Provider org.apache.xerces.jaxp.SAXParserFactoryImpl not found. 
.. 
.. 
...: Caused by: java.lang.ClassNotFoundException: org/apache/xerces/jaxp/SAXParserFactoryImpl 
.. 
.. 

明知Wildfly運行其自己的Xerces從wildfly /模塊/系統/層/base/org/apache/xerces/main/xercesImpl-2.9.1-jbossas2.jar,我曾嘗試以下:




[1]使用野花來Ÿ的xercesImpl-2.9.1-jbossas2.jar ......沒有變化

(來源:對於JBoss部署,structure.xml Wildfly文檔)

在JBoss中部署-structure.xml:

<jboss-deployment-structure> 
    <ear-subdeployments-isolated>false</ear-subdeployments-isolated> 
    <deployment> 
     ... 
    </deployment> 
</jboss-deployment-structure> 

EARContent:

lib/ 
    ...(removed xercesImpl.jar)... 
META-INF/ 
    application.xml // Information about EJB that uses xercesImpl.jar 
    jboss-deployment-structure.xml 




[2]忽略Wildfly的xercesImpl-2.9.1-jbossas2.jar ......沒有變化

(來源:https://developer.jboss.org/thread/259010?start=0&tstart=0

在JBoss中部署-structure.xml:

<jboss-deployment-structure> 
    <ear-subdeployments-isolated>true</ear-subdeployments-isolated> 
    <deployment> 
     <exclusions> 
      <module name="org.apache.xerces" /> 
     </exclusions> 
     ... 
    </deployment> 
</jboss-deployment-structure> 

EARContent:

lib/ 
    xercesImpl.jar 
    ...(many more jars)... 
META-INF/ 
    application.xml // Information about EJB that uses xercesImpl.jar 
    jboss-deployment-structure.xml 




[3]明確包括Wildfly的Xerces作爲模塊...無變化

(來源:https://developer.jboss.org/thread/239969

在JBoss中部署-structure.xml:

<jboss-deployment-structure> 
    <ear-subdeployments-isolated>false</ear-subdeployments-isolated> 
    <deployment> 
     <dependencies> 
       <module name="org.apache.xerces" /> 
       ... 
     </dependencies> 
    </deployment> 
</jboss-deployment-structure> 

EARContent:

lib/ 
    ...(removed xercesImpl.jar)... 
META-INF/ 
    application.xml // Information about EJB that uses xercesImpl.jar 
    jboss-deployment-structure.xml 




[4]爲JAXP解析器聲明Java屬性...沒有啓動時Wildfly變化

./standalone.sh -c standalone-full.xml -Djavax.xml.parsers.SAXParserFactory=org.apache.xerces.jaxp.SAXParserFactoryImpl 

獨立-full.xml

<system-properties> 
    <property name="javax.xml.parsers.SAXParserFactory" value="org.apache.xerces.jaxp.SAXParserFactoryImpl"/> 
</system-properties> 

(注:嘗試該屬性與嘗試[1],[2],[3] )




[5]添加的Xerces路徑JBoss的deplo yment結構......沒有變化

(來源:developer.jboss.org/message/717927#717927)

<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.1"> 
    <deployment> 
     <dependencies> 
      <system> 
       <paths> 
        <path name="org/apache/xerces/jaxp"/> 
       </paths> 
      </system> 
      ... 
     </dependencies> 
    </deployment> 
</jboss-deployment-structure> 

回答

0

嘗試變體3,但添加出口= 「true」 以扶養 我想你嘗試從ejb或war中使用javax.xml.parsers.SAXParserFactory.newInstance()。子部署不會看到耳朵的依賴模塊。你必須明確地輸出。

0

問題最終導致包含試圖加載SAXParserFactoryImpl的EJB的線程的類加載器無法訪問它。爲了解決這個問題,我必須找到一個具有SAXParserFactoryImpl可見性(正好在我的MDB上)的類加載器的線程,並手動將其設置在有問題的bean上。我從來沒有確定發生了什麼,但這是一個快速和骯髒的工作。

0

經過很多RND終於找到了解決方案。 這裏是雲:

1)複製您的XercesImpl-Xxxjar並將其粘貼在/ JRE/lib中/ 如: - 我 - > C:\ Program Files文件\的Java \ jdk1.8.0_131 \ JRE \ lib 2)在lib裏面創建一個新的文件夾「背書」。 3)將jar文件粘貼到「認可的」文件夾中 4)重新啓動服務器,xerces地獄已經平息。

讓我知道如果解決方案爲你工作。

相關問題