異常DTMManagerDefault incompatible的解決

異常java.lang.ClassCastException org.apache.xml.dtm.ref.DTMManagerDefault incompatible with org.apache.xml.dtm.DTMManager的解決


1. 發生異常的環境


WebSphere Platform 8.5.0.0 [ND 8.5.0.0 gm1218.01]

IBM J9VM - R26_Java626_SR2_20120322_1722_B106210

應用的WEB Module的類加載器是Parent-Last


2. 異常日誌

[14-2-19 17:40:17:270 CST] 00000045 CompositeDocu E org.apache.tuscany.sca.assembly.xml.CompositeDocumentProcessor  ContributionReadException occurred due to : org.apache.tuscany.sca.contribution.service.ContributionReadException: java.lang.ClassCastException: org.apache.xml.dtm.ref.DTMManagerDefault incompatible with org.apache.xml.dtm.DTMManager
   [14-2-19 17:40:17:278 CST] 00000045 SystemOut     O [default][2014-02-19 17:40:17,277][ERROR][com.primeton.sca.host.impl.EOSSCADomain:57] Generate the contributin 'file:/D:/IBM/WebSphere/AppServer/profiles/eos_profile/installedApps/ART02Node01Cell/default.ear/default.war/WEB-INF/_srv/work/system/com.primeton.bps.webservice/' error.
   org.apache.tuscany.sca.contribution.service.ContributionException: java.lang.IllegalArgumentException: Null InputStream is not a valid argument
       at org.apache.tuscany.sca.contribution.service.impl.ContributionServiceImpl.addContribution(ContributionServiceImpl.java:393)
       at org.apache.tuscany.sca.contribution.service.impl.ContributionServiceImpl.contribute(ContributionServiceImpl.java:189)
       at com.primeton.sca.host.impl.EOSSCADomain.buildContribution(EOSSCADomain.java:54)
       at com.primeton.sca.host.impl.EOSSCADomain.addContribution(EOSSCADomain.java:124)
       at com.primeton.ext.sca.host.ScaSystem.addContribution(ScaSystem.java:243)
       at com.primeton.sca.host.impl.SCAResourceLoadListener.load(SCAResourceLoadListener.java:59)
       at com.primeton.runtime.resource.impl.ResourceNotify.notifyResource(ResourceNotify.java:106)
       at com.primeton.runtime.resource.impl.ApplicationResourceLoaderManager.loadApplicationResource(ApplicationResourceLoaderManager.java:38)
       at com.primeton.ext.runtime.resource.startup.ResourceLoaderStartUpListener.start(ResourceLoaderStartUpListener.java:36)
       at com.primeton.runtime.core.impl.RuntimeListenerManagerImpl.startListener(RuntimeListenerManagerImpl.java:43)
       at com.primeton.ext.runtime.core.RuntimeManager.start(RuntimeManager.java:64)
       at com.primeton.ext.runtime.core.RuntimeJ2EEHost.contextInitialized(RuntimeJ2EEHost.java:52)
       at com.ibm.ws.webcontainer.webapp.WebApp.notifyServletContextCreated(WebApp.java:1651)
       at com.ibm.ws.webcontainer.webapp.WebAppImpl.initialize(WebAppImpl.java:414)
       at com.ibm.ws.webcontainer.webapp.WebGroupImpl.addWebApplication(WebGroupImpl.java:88)
       at com.ibm.ws.webcontainer.VirtualHostImpl.addWebApplication(VirtualHostImpl.java:169)
       at com.ibm.ws.webcontainer.WSWebContainer.addWebApp(WSWebContainer.java:749)
       at com.ibm.ws.webcontainer.WSWebContainer.addWebApplication(WSWebContainer.java:634)
       at com.ibm.ws.webcontainer.component.WebContainerImpl.install(WebContainerImpl.java:426)
       at com.ibm.ws.webcontainer.component.WebContainerImpl.start(WebContainerImpl.java:718)
       at com.ibm.ws.runtime.component.ApplicationMgrImpl.start(ApplicationMgrImpl.java:1170)
       at com.ibm.ws.runtime.component.DeployedApplicationImpl.fireDeployedObjectStart(DeployedApplicationImpl.java:1370)
       at com.ibm.ws.runtime.component.DeployedModuleImpl.start(DeployedModuleImpl.java:638)
       at com.ibm.ws.runtime.component.DeployedApplicationImpl.start(DeployedApplicationImpl.java:968)
       at com.ibm.ws.runtime.component.ApplicationMgrImpl.startApplication(ApplicationMgrImpl.java:769)
       at com.ibm.ws.runtime.component.ApplicationMgrImpl.start(ApplicationMgrImpl.java:2172)
       at com.ibm.ws.runtime.component.CompositionUnitMgrImpl.start(CompositionUnitMgrImpl.java:445)
       at com.ibm.ws.runtime.component.CompositionUnitImpl.start(CompositionUnitImpl.java:123)
       at com.ibm.ws.runtime.component.CompositionUnitMgrImpl.start(CompositionUnitMgrImpl.java:388)
       at com.ibm.ws.runtime.component.CompositionUnitMgrImpl.access$500(CompositionUnitMgrImpl.java:116)
       at com.ibm.ws.runtime.component.CompositionUnitMgrImpl$CUInitializer.run(CompositionUnitMgrImpl.java:994)
       at com.ibm.wsspi.runtime.component.WsComponentImpl$_AsynchInitializer.run(WsComponentImpl.java:349)
       at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1783)
   Caused by: java.lang.IllegalArgumentException: Null InputStream is not a valid argument
       at com.ctc.wstx.stax.WstxInputFactory.createSR(WstxInputFactory.java:614)
       at com.ctc.wstx.stax.WstxInputFactory.createXMLStreamReader(WstxInputFactory.java:317)
       at org.apache.tuscany.sca.contribution.processor.DefaultValidatingXMLInputFactory.createXMLStreamReader(DefaultValidatingXMLInputFactory.java:213)
       at org.apache.tuscany.sca.assembly.xml.CompositeDocumentProcessor.read(CompositeDocumentProcessor.java:116)
       at org.apache.tuscany.sca.assembly.xml.CompositeDocumentProcessor.read(CompositeDocumentProcessor.java:56)
       at org.apache.tuscany.sca.contribution.processor.ExtensibleURLArtifactProcessor.read(ExtensibleURLArtifactProcessor.java:96)
       at org.apache.tuscany.sca.contribution.service.impl.ContributionServiceImpl.processReadPhase(ContributionServiceImpl.java:496)
       at org.apache.tuscany.sca.contribution.service.impl.ContributionServiceImpl.addContribution(ContributionServiceImpl.java:391)
       ... 32 more
3. 異常分析
   從這段日誌中可以看出有2個異常:

> java.lang.ClassCastException: org.apache.xml.dtm.ref.DTMManagerDefault incompatible with org.apache.xml.dtm.DTMManager
> java.lang.IllegalArgumentException: Null InputStream is not a valid argument
   查看代碼發現是由於第一個異常造成了一個InputStream變量爲null,從而引起第二個異常。
   對於第一個異常首先懷疑的就是2個類的類加載器不是同一個,然後通過一個test.jsp測試發現這2個類都是同一個類加載器加載並且都是在同一個jar(WEB-INF/lib/xalan-2.5.0.jar)裏,
   這個測試結果不符合預期,按照這個測試結果不會出現ClassCast異常,而且異常棧裏也沒有發現ClassCast的具體調用位置,通過代碼調試發現了異常棧如下:

   [org.apache.xml.dtm.DTMManager.newInstance(Unknown Source),
   org.apache.xpath.XPathContext.<init>(Unknown Source),
   org.apache.xpath.jaxp.XPathExpressionImpl.evaluate(Unknown Source),
   org.apache.tuscany.sca.policy.util.PolicyComputationUtils.addApplicablePolicySets(PolicyComputationUtils.java:304),
   org.apache.tuscany.sca.policy.util.PolicyComputationUtils.addApplicablePolicySets(PolicyComputationUtils.java:236),
   org.apache.tuscany.sca.policy.util.PolicyComputationUtils.addApplicablePolicySets(PolicyComputationUtils.java:349),
   org.apache.tuscany.sca.assembly.xml.CompositeDocumentProcessor.read(CompositeDocumentProcessor.java:98),
   org.apache.tuscany.sca.assembly.xml.CompositeDocumentProcessor.read(CompositeDocumentProcessor.java:56),
   org.apache.tuscany.sca.contribution.processor.ExtensibleURLArtifactProcessor.read(ExtensibleURLArtifactProcessor.java:96),
   org.apache.tuscany.sca.contribution.service.impl.ContributionServiceImpl.processReadPhase(ContributionServiceImpl.java:496),
   org.apache.tuscany.sca.contribution.service.impl.ContributionServiceImpl.addContribution(ContributionServiceImpl.java:391),
   org.apache.tuscany.sca.contribution.service.impl.ContributionServiceImpl.contribute(ContributionServiceImpl.java:189),
   com.primeton.sca.host.impl.EOSSCADomain.buildContribution(EOSSCADomain.java:54),
   com.primeton.sca.host.impl.EOSSCADomain.addContribution(EOSSCADomain.java:124),
   com.primeton.ext.sca.host.ScaSystem.addContribution(ScaSystem.java:243),
   com.primeton.sca.host.impl.SCAResourceLoadListener.load(SCAResourceLoadListener.java:59),
   com.primeton.runtime.resource.impl.ResourceNotify.notifyResource(ResourceNotify.java:106),
   com.primeton.runtime.resource.impl.ApplicationResourceLoaderManager.loadApplicationResource(ApplicationResourceLoaderManager.java:38),
   com.primeton.ext.runtime.resource.startup.ResourceLoaderStartUpListener.start(ResourceLoaderStartUpListener.java:36),
   com.primeton.runtime.core.impl.RuntimeListenerManagerImpl.startListener(RuntimeListenerManagerImpl.java:43),
   com.primeton.ext.runtime.core.RuntimeManager.start(RuntimeManager.java:64),
   com.primeton.ext.runtime.core.RuntimeJ2EEHost.contextInitialized(RuntimeJ2EEHost.java:52),
   com.ibm.ws.webcontainer.webapp.WebApp.notifyServletContextCreated(WebApp.java:1651),
   com.ibm.ws.webcontainer.webapp.WebAppImpl.initialize(WebAppImpl.java:414),
   com.ibm.ws.webcontainer.webapp.WebGroupImpl.addWebApplication(WebGroupImpl.java:88),
   com.ibm.ws.webcontainer.VirtualHostImpl.addWebApplication(VirtualHostImpl.java:169),
   com.ibm.ws.webcontainer.WSWebContainer.addWebApp(WSWebContainer.java:749),
   com.ibm.ws.webcontainer.WSWebContainer.addWebApplication(WSWebContainer.java:634),
   com.ibm.ws.webcontainer.component.WebContainerImpl.install(WebContainerImpl.java:426),
   com.ibm.ws.webcontainer.component.WebContainerImpl.start(WebContainerImpl.java:718),
   com.ibm.ws.runtime.component.ApplicationMgrImpl.start(ApplicationMgrImpl.java:1170),
   com.ibm.ws.runtime.component.DeployedApplicationImpl.fireDeployedObjectStart(DeployedApplicationImpl.java:1370),
   com.ibm.ws.runtime.component.DeployedModuleImpl.start(DeployedModuleImpl.java:638),
   com.ibm.ws.runtime.component.DeployedApplicationImpl.start(DeployedApplicationImpl.java:968),
   com.ibm.ws.runtime.component.ApplicationMgrImpl.startApplication(ApplicationMgrImpl.java:769),
   com.ibm.ws.runtime.component.ApplicationMgrImpl.start(ApplicationMgrImpl.java:2172),
   com.ibm.ws.runtime.component.CompositionUnitMgrImpl.start(CompositionUnitMgrImpl.java:445),
   com.ibm.ws.runtime.component.CompositionUnitImpl.start(CompositionUnitImpl.java:123),
   com.ibm.ws.runtime.component.CompositionUnitMgrImpl.start(CompositionUnitMgrImpl.java:388),
   com.ibm.ws.runtime.component.CompositionUnitMgrImpl.access$500(CompositionUnitMgrImpl.java:116),
   com.ibm.ws.runtime.component.CompositionUnitMgrImpl$CUInitializer.run(CompositionUnitMgrImpl.java:994),
   com.ibm.wsspi.runtime.component.WsComponentImpl$_AsynchInitializer.run(WsComponentImpl.java:349),
   com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1783)]

可以看到是由org.apache.xpath.XPathContext構造函數裏調用了DTMManager.newInstance()。

org.apache.xpath.XPathContext是在IBM J9VM - R26_Java626_SR2_20120322_1722_B106210的bootclasspath裏,而且bootclasspath中也包含org.apache.xml.dtm.DTMManager。

所以在WEB-INF/lib下又存在另一個DTMManager並且是Parent-Last的ClassLoader的情況下會造成和bootclasspath的衝突,出現ClassCast的錯誤。

4. 異常解決


可以刪除xalan-2.5.0.jar。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章