简体   繁体   English

Spring MVC 3.0.0应用程序不会在Weblogic Server 11gR1上引导--ClassCastException

[英]Spring MVC 3.0.0 app won't bootstrap on Weblogic Server 11gR1 - ClassCastException

I have a Spring MVC (3.0.0.RELEASE) based application I need to deploy to Oracle Weblogic Server 11gR1. 我有一个基于Spring MVC(3.0.0.RELEASE)的应用程序,我需要部署到Oracle Weblogic Server 11gR1。 It works fine on Spring TC Server. 它在Spring TC Server上运行良好。 When I deploy my application WAR file (either via STS/Eclipse "Servers" view or to the "auto-deploy" folder, or manually via the web admin) I get the following exception: 当我部署应用程序WAR文件时(通过STS / Eclipse“服务器”视图或“自动部署”文件夹,或通过Web管理员手动),我得到以下异常:

    <Feb 3, 2010 9:17:20 AM GMT> <Error> <org.springframework.web.context.ContextLoader> <BEA-000000> <Context initialization failed
org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from ServletContext resource [/WEB-INF/spring/webapp-config.xml]; nested exception is java.lang.ClassCastException: weblogic.xml.jaxp.RegistryDocumentBuilderFactory cannot be cast to javax.xml.parsers.DocumentBuilderFactory
 at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:412)
 at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334)
 at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302)
 at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:143)
 at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:178)
 at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:149)
 at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:124)
 at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:93)
 at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:130)
 at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:458)
 at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:388)
 at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:261)
 at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:192)
 at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47)
 at weblogic.servlet.internal.EventsManager$FireContextListenerAction.run(EventsManager.java:481)
 at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
 at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)
 at weblogic.servlet.internal.EventsManager.notifyContextCreatedEvent(EventsManager.java:181)
 at weblogic.servlet.internal.WebAppServletContext.preloadResources(WebAppServletContext.java:1801)
 at weblogic.servlet.internal.WebAppServletContext.start(WebAppServletContext.java:3045)
 at weblogic.servlet.internal.WebAppModule.startContexts(WebAppModule.java:1397)
 at weblogic.servlet.internal.WebAppModule.start(WebAppModule.java:460)
 at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:425)
 at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:83)
 at weblogic.application.internal.flow.ModuleStateDriver.start(ModuleStateDriver.java:119)
 at weblogic.application.internal.flow.ScopedModuleDriver.start(ScopedModuleDriver.java:200)
 at weblogic.application.internal.flow.ModuleListenerInvoker.start(ModuleListenerInvoker.java:247)
 at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:425)
 at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:83)
 at weblogic.application.internal.flow.ModuleStateDriver.start(ModuleStateDriver.java:119)
 at weblogic.application.internal.flow.StartModulesFlow.activate(StartModulesFlow.java:27)
 at weblogic.application.internal.BaseDeployment$2.next(BaseDeployment.java:1267)
 at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:83)
 at weblogic.application.internal.BaseDeployment.activate(BaseDeployment.java:409)
 at weblogic.application.internal.SingleModuleDeployment.activate(SingleModuleDeployment.java:39)
 at weblogic.application.internal.DeploymentStateChecker.activate(DeploymentStateChecker.java:161)
 at weblogic.deploy.internal.targetserver.AppContainerInvoker.activate(AppContainerInvoker.java:79)
 at weblogic.deploy.internal.targetserver.BasicDeployment.activate(BasicDeployment.java:184)
 at weblogic.deploy.internal.targetserver.BasicDeployment.activateFromServerLifecycle(BasicDeployment.java:361)
 at weblogic.management.deploy.internal.DeploymentAdapter$1.doActivate(DeploymentAdapter.java:51)
 at weblogic.management.deploy.internal.DeploymentAdapter.activate(DeploymentAdapter.java:196)
 at weblogic.management.deploy.internal.AppTransition$2.transitionApp(AppTransition.java:30)
 at weblogic.management.deploy.internal.ConfiguredDeployments.transitionApps(ConfiguredDeployments.java:233)
 at weblogic.management.deploy.internal.ConfiguredDeployments.activate(ConfiguredDeployments.java:169)
 at weblogic.management.deploy.internal.ConfiguredDeployments.deploy(ConfiguredDeployments.java:123)
 at weblogic.management.deploy.internal.DeploymentServerService.resume(DeploymentServerService.java:173)
 at weblogic.management.deploy.internal.DeploymentServerService.start(DeploymentServerService.java:89)
 at weblogic.t3.srvr.SubsystemRequest.run(SubsystemRequest.java:64)
 at weblogic.work.ExecuteThread.execute(ExecuteThread.java:201)
 at weblogic.work.ExecuteThread.run(ExecuteThread.java:173)

Which is caused by: 这是由:

Caused By: java.lang.ClassCastException: weblogic.xml.jaxp.RegistryDocumentBuilderFactory cannot be cast to javax.xml.parsers.DocumentBuilderFactory
 at javax.xml.parsers.DocumentBuilderFactory.newInstance(Unknown Source)
 at org.springframework.beans.factory.xml.DefaultDocumentLoader.createDocumentBuilderFactory(DefaultDocumentLoader.java:89)
 at org.springframework.beans.factory.xml.DefaultDocumentLoader.loadDocument(DefaultDocumentLoader.java:70)
 at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:388)
 at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334)
 at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302)
 at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:143)
 at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:178)
 at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:149)
 at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:124)
 at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:93)
 at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:130)
 at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:458)
 at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:388)
 at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:261)
 at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:192)
 at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47)
 at weblogic.servlet.internal.EventsManager$FireContextListenerAction.run(EventsManager.java:481)
 at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
 at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)
 at weblogic.servlet.internal.EventsManager.notifyContextCreatedEvent(EventsManager.java:181)
 at weblogic.servlet.internal.WebAppServletContext.preloadResources(WebAppServletContext.java:1801)
 at weblogic.servlet.internal.WebAppServletContext.start(WebAppServletContext.java:3045)
 at weblogic.servlet.internal.WebAppModule.startContexts(WebAppModule.java:1397)
 at weblogic.servlet.internal.WebAppModule.start(WebAppModule.java:460)
 at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:425)
 at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:83)
 at weblogic.application.internal.flow.ModuleStateDriver.start(ModuleStateDriver.java:119)
 at weblogic.application.internal.flow.ScopedModuleDriver.start(ScopedModuleDriver.java:200)
 at weblogic.application.internal.flow.ModuleListenerInvoker.start(ModuleListenerInvoker.java:247)
 at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:425)
 at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:83)
 at weblogic.application.internal.flow.ModuleStateDriver.start(ModuleStateDriver.java:119)
 at weblogic.application.internal.flow.StartModulesFlow.activate(StartModulesFlow.java:27)
 at weblogic.application.internal.BaseDeployment$2.next(BaseDeployment.java:1267)
 at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:83)
 at weblogic.application.internal.BaseDeployment.activate(BaseDeployment.java:409)
 at weblogic.application.internal.SingleModuleDeployment.activate(SingleModuleDeployment.java:39)
 at weblogic.application.internal.DeploymentStateChecker.activate(DeploymentStateChecker.java:161)
 at weblogic.deploy.internal.targetserver.AppContainerInvoker.activate(AppContainerInvoker.java:79)
 at weblogic.deploy.internal.targetserver.BasicDeployment.activate(BasicDeployment.java:184)
 at weblogic.deploy.internal.targetserver.BasicDeployment.activateFromServerLifecycle(BasicDeployment.java:361)
 at weblogic.management.deploy.internal.DeploymentAdapter$1.doActivate(DeploymentAdapter.java:51)
 at weblogic.management.deploy.internal.DeploymentAdapter.activate(DeploymentAdapter.java:196)
 at weblogic.management.deploy.internal.AppTransition$2.transitionApp(AppTransition.java:30)
 at weblogic.management.deploy.internal.ConfiguredDeployments.transitionApps(ConfiguredDeployments.java:233)
 at weblogic.management.deploy.internal.ConfiguredDeployments.activate(ConfiguredDeployments.java:169)
 at weblogic.management.deploy.internal.ConfiguredDeployments.deploy(ConfiguredDeployments.java:123)
 at weblogic.management.deploy.internal.DeploymentServerService.resume(DeploymentServerService.java:173)
 at weblogic.management.deploy.internal.DeploymentServerService.start(DeploymentServerService.java:89)
 at weblogic.t3.srvr.SubsystemRequest.run(SubsystemRequest.java:64)
 at weblogic.work.ExecuteThread.execute(ExecuteThread.java:201)

Now this is after I have already discovered the need to set: 现在这是在我已经发现需要设置之后:

<wls:prefer-web-inf-classes>true</wls:prefer-web-inf-classes>

in weblogic.xml (that fixed my myriad of earlier problems - the classpath was totally screwed and I was getting "NoSuchMethodError" problems for Spring's "getBeanDefinitionDefaults(...) which was bundled in my WAR's WEB-INF/lib directory). 在weblogic.xml中(修复了我无数早期的问题 - 类路径完全被搞砸了,我在Spring的“getBeanDefinitionDefaults(...)”中遇到了“NoSuchMethodError”问题,这个问题捆绑在我的WAR的WEB-INF / lib目录中)。

Investigation has shown that javax.xml.parsers.DocumentBuilderFactory comes from xml-apis-1.0.b2.jar which is being brought in by maven from commons-digester, dom4j and jdom. 调查显示, javax.xml.parsers.DocumentBuilderFactory来自xml-apis-1.0.b2.jar,它是由maven从commons-digester,dom4j和jdom引入的。 In short, I need it for my Spring App to run. 简而言之,我需要它来运行我的Spring App。

I've checked (and double checked) and I'm not bundling the weblogic class with my war so I'm not shooting myself in my own foot. 我已经检查过了(并仔细检查过)并且我没有将我的战争捆绑在weblogic类中,所以我不是自己动手拍摄自己。

I've also seen this post on the java.net forums: http://forums.java.net/jive/thread.jspa?messageID=216363 - the Log4J workaround didn't work (I presume because the root of the problem isn't Log4J) and this bug fix note on oracle.com (search for "CR172469") http://download-llnw.oracle.com/docs/cd/E13222_01/wls/docs81/notes/resolved_sp03.html This seems to do nothing either. 我也在java.net论坛上看过这篇文章: http ://forums.java.net/jive/thread.jspa?messageID = 216363 - Log4J解决方法不起作用(我认为是因为问题的根源是不是Log4J)和oracle.com上的这个bug修复说明(搜索“CR172469”) http://download-llnw.oracle.com/docs/cd/E13222_01/wls/docs81/notes/resolved_sp03.html这似乎什么也不做。

What I don't understand is, I'm telling Weblogic to prefer the jars in my WEB-INF/lib, the jar I need is in there, and the error is coming from Spring, not Weblogic (ie I'm not forcing the server itself to use a jar it can't handle.) 我不明白的是,我告诉Weblogic更喜欢我的WEB-INF / lib中的jar,我需要的jar就在那里,错误来自Spring,而不是Weblogic(即我不是强迫服务器本身使用它无法处理的jar。)

I've held off from adding more of my Spring config to this question as I'm not sure its relevant. 因为我不确定它的相关性,所以我暂时没有将更多的Spring配置添加到这个问题中。 If however this would help, please let me know and I'll add it. 如果这会有所帮助,请告诉我,我会添加它。

Hope someone can help. 希望有人能提供帮助。

Regs, Andrew Regs,安德鲁

Your application should almost certainly not be including any javax.* classes within itself - these are usually handled by the appserver. 您的应用程序几乎肯定不会包含任何javax.*类本身 - 这些通常由appserver处理。 If you do this, you end up with ClassCastExceptions just like this. 如果你这样做,你就会像这样结束ClassCastExceptions

You need to stop maven from dragging in stuff like xml-apis-1.0.b2.jar , it doesn't belong inside your application. 你需要阻止maven拖动像xml-apis-1.0.b2.jar这样的东西,它不属于你的应用程序。

If you fix that, then you won't need to worry about weblogic-specific classloader settings. 如果你解决了这个问题,那么你就不必担心特定于weblogic的类加载器设置了。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM