无法通过eclipse找到XML架构名称空间[http://camel.apache.org/schema/spring]的Spring NamespaceHandler

时间:2014-03-28 00:17:11

标签: java xml eclipse spring gwt

我已经阅读了有关此问题的所有其他SO帖子,但它们都没有处理camel和applicationContext.xml。因为我一直试图解决这个问题超过一个星期,所以我的智慧已经结束了。

问题:我可以通过Tomcat 6运行我的GWT应用程序就好了。但是当我尝试使用Run As Web Application通过Eclipse执行它时,我会将此输出接收到控制台:

[WARN] Server class 'org.springframework.web.context.ContextLoaderListener' could not be found in the web app, but was found on the system classpath
   [WARN] Adding classpath entry 'file:/C:/company/m2/repo/org/springframework/spring-web/2.5.6/spring-web-2.5.6.jar' to the web app classpath for this session
[WARN] Server resource 'log4j.properties' could not be found in the web app, but was found on the system classpath
   [WARN] Adding classpath entry 'file:/C:/company/projects/svn/reco/services/portal/trunk/portal-trunk/portal-um/src/test/resources/' to the web app classpath for this session
[WARN] Server class 'com.company.session.PortalSessionListener' could not be found in the web app, but was found on the system classpath
   [WARN] Adding classpath entry 'file:/C:/company/m2/repo/serviceUtil/serviceUtil/trunk/serviceUtil-trunk.jar' to the web app classpath for this session
[WARN] Server class 'org.springframework.context.ApplicationContextException' could not be found in the web app, but was found on the system classpath
   [WARN] Adding classpath entry 'file:/C:/company/m2/repo/org/springframework/spring-context/2.5.6/spring-context-2.5.6.jar' to the web app classpath for this session
[WARN] Server class 'org.springframework.beans.FatalBeanException' could not be found in the web app, but was found on the system classpath
   [WARN] Adding classpath entry 'file:/C:/company/m2/repo/org/springframework/spring-beans/2.5.6/spring-beans-2.5.6.jar' to the web app classpath for this session
[WARN] Server class 'org.springframework.core.NestedRuntimeException' could not be found in the web app, but was found on the system classpath
   [WARN] Adding classpath entry 'file:/C:/company/m2/repo/org/springframework/spring-core/2.5.6/spring-core-2.5.6.jar' to the web app classpath for this session
[WARN] Server class 'org.apache.commons.collections.map.CaseInsensitiveMap' could not be found in the web app, but was found on the system classpath
   [WARN] Adding classpath entry 'file:/C:/company/m2/repo/com/google/gwt/gwt-dev/2.4.0/gwt-dev-2.4.0.jar' to the web app classpath for this session
Starting Jetty on port 8888
   [WARN] Failed startup of context com.google.gwt.dev.shell.jetty.JettyLauncher$WebAppContextWithReload@192232de{/,C:\company\projects\svn\reco\services\portal\trunk\portal-trunk\portal-entrypoint\target\portal-entrypoint-trunk}
org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://camel.apache.org/schema/spring]
Offending resource: ServletContext resource [/WEB-INF/applicationContext.xml]

  at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:68)
  at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:85)
  at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:80)
  at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.error(BeanDefinitionParserDelegate.java:281)
  at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1294)
  at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1287)
  at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:135)
  at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:92)
  at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:507)
  at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:398)
  at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:342)
  at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:310)
  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:92)
  at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:123)
  at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:422)
  at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:352)
  at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:255)
  at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:199)
  at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:45)
  at org.mortbay.jetty.handler.ContextHandler.startContext(ContextHandler.java:543)
  at org.mortbay.jetty.servlet.Context.startContext(Context.java:136)
  at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1220)
  at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:513)
  at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:448)
  at com.google.gwt.dev.shell.jetty.JettyLauncher$WebAppContextWithReload.doStart(JettyLauncher.java:468)
  at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39)
  at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
  at org.mortbay.jetty.handler.RequestLogHandler.doStart(RequestLogHandler.java:115)
  at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39)
  at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
  at org.mortbay.jetty.Server.doStart(Server.java:222)
  at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39)
  at com.google.gwt.dev.shell.jetty.JettyLauncher.start(JettyLauncher.java:672)
  at com.google.gwt.dev.DevMode.doStartUpServer(DevMode.java:509)
  at com.google.gwt.dev.DevModeBase.startUp(DevModeBase.java:1068)
  at com.google.gwt.dev.DevModeBase.run(DevModeBase.java:811)
  at com.google.gwt.dev.DevMode.main(DevMode.java:311)

我不知道该怎么做,我的同事也不知道。我也不知道在这篇文章中包含哪些其他信息。

3 个答案:

答案 0 :(得分:0)

看起来您的eclipse“作为Web应用程序运行”设置使用Jetty而不是tomcat,并且不知何故导致不同的类路径配置。从它的外观来看,你很可能会错过码头上的一些罐子(与骆驼有关)。

如果您不使用像maven这样的依赖关系管理,通常会发生这种情况,即:您必须有意识地管理类路径中包含/不包含的路径。

更简单的方法是在生产和开发中使用相同的容器,并通过在maven pom中声明它来确保WEB-INF / lib中包含您需要的其他jar。

答案 1 :(得分:0)

在开发模式下从Eclipse运行GWT应用程序时,它使用调试配置中定义的类路径。这是您用于编译的代码的构建路径以及您手动添加的任何其他jar或文件夹。此外,因为它是一个Web应用程序,它还将使用WEB-INF / lib文件夹中的任何jar。

收到消息时

  

[WARN]服务器类   ' org.springframework.web.context.ContextLoaderListener'不可能   在Web应用程序中找到,但在系统类路径[WARN]上找到   添加类路径条目   '文件:/ C:/company/m2/repo/org/springframework/spring-web/2.5.6/spring-web-2.5.6.jar'   到此会话的Web应用程序类路径

然后这意味着无法在WEB-INF / lib文件夹中找到代码,但是在调试配置定义的类路径中找到了代码。 GWT开发模式会将此jar添加到正在运行的Web应用程序类路径中。

通常这一切都可以正常工作,但如果你的代码依赖于使用某种类路径搜索机制动态查找的类,则此过程不起作用。这就是这里发生的事情 - 命名空间处理程序和相关的模式将在camel jar中,但这不在你的类路径中。

答案很简单 - 只需将包含命名空间处理程序的jar添加到WEB-INF / lib文件夹中。

我有很多这个问题 - 主要是Spring,还有RSS库Rome。我的项目是使用Maven构建的并且为了管理它我已经使用devmode配置文件配置了Maven,该配置文件包含我需要的所有运行时依赖项,目标是将所有依赖项复制到WEB-INF / lib文件夹中。这意味着我可以管理来自Maven的所有依赖项 - 在共享项目时非常有用。

答案 2 :(得分:0)

忘记使用我的解决方案进行更新。事实证明,在我Google > Web Application下的项目属性中War Directory:没有正确指向我的WAR目录。我把它改为指向target/ROOT,现在一切正常。