Spring 3.0:无法findXML模式命名空间的Spring NamespaceHandler

我的设置非常简单:我有一个Web前端,后端是弹簧连接的。

我正在使用AOP在我的rpc服务上添加一层安全性。

这一切都很好,除了Web应用程序在发布时中止:

   [java] SEVERE:上下文初始化失败
      [java] org.springframework.beans.factory.parsing.BeanDefinitionParsingException:configuration问题:无法findXML模式命名空间的Spring NamespaceHandler [http://www.springframework.org/schema/aop]
      [java]冒充资源:ServletContext资源[/WEB-INF/gwthandler-servlet.xml]

这是我的XMLconfiguration文件的片段:

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> <aop:config> <aop:aspect id="security" ref="securityAspect" > <aop:pointcut id="securedServices" expression="@annotation(com.fb.boog.common.aspects.Secured)"/> <aop:before method="checkSecurity" pointcut-ref="securedServices"/> </aop:aspect> </aop:config> 

我通过互联网阅读,可能是我的class加载问题的核心。 令人怀疑的是,因为这里是我的WEB-INF / lib目录:

 ./WEB-INF/lib ./WEB-INF/lib/aopalliance-alpha1.jar ./WEB-INF/lib/aspectj-1.6.6.jar ./WEB-INF/lib/commons-collections.jar ./WEB-INF/lib/commons-logging.jar ./WEB-INF/lib/ehcache-core-1.7.0.jar ./WEB-INF/lib/ejb3-persistence.jar ./WEB-INF/lib/hibernate ./WEB-INF/lib/hibernate/antlr.jar ./WEB-INF/lib/hibernate/asm.jar ./WEB-INF/lib/hibernate/bsh-2.0b1.jar ./WEB-INF/lib/hibernate/cglib.jar ./WEB-INF/lib/hibernate/dom4j.jar ./WEB-INF/lib/hibernate/freemarker.jar ./WEB-INF/lib/hibernate/hibernate-annotations.jar ./WEB-INF/lib/hibernate/hibernate-shards.jar ./WEB-INF/lib/hibernate/hibernate-tools.jar ./WEB-INF/lib/hibernate/hibernate.jar ./WEB-INF/lib/hibernate/jtidy-r8-20060801.jar ./WEB-INF/lib/jabsorb ./WEB-INF/lib/jabsorb/jabsorb-1.3.1.jar ./WEB-INF/lib/jta.jar ./WEB-INF/lib/jyaml-1.3.jar ./WEB-INF/lib/postgresql-8.4-701.jdbc4.jar ./WEB-INF/lib/sjsxp.jar ./WEB-INF/lib/spring ./WEB-INF/lib/spring/org.springframework.aop-3.0.0.RELEASE.jar ./WEB-INF/lib/spring/org.springframework.asm-3.0.0.RELEASE.jar ./WEB-INF/lib/spring/org.springframework.aspects-3.0.0.RELEASE.jar ./WEB-INF/lib/spring/org.springframework.beans-3.0.0.RELEASE.jar ./WEB-INF/lib/spring/org.springframework.context-3.0.0.RELEASE.jar ./WEB-INF/lib/spring/org.springframework.context.support-3.0.0.RELEASE.jar ./WEB-INF/lib/spring/org.springframework.core-3.0.0.RELEASE.jar ./WEB-INF/lib/spring/org.springframework.expression-3.0.0.RELEASE.jar ./WEB-INF/lib/spring/org.springframework.instrument-3.0.0.RELEASE.jar ./WEB-INF/lib/spring/org.springframework.instrument.tomcat-3.0.0.RELEASE.jar ./WEB-INF/lib/spring/org.springframework.jdbc-3.0.0.RELEASE.jar ./WEB-INF/lib/spring/org.springframework.jms-3.0.0.RELEASE.jar ./WEB-INF/lib/spring/org.springframework.orm-3.0.0.RELEASE.jar ./WEB-INF/lib/spring/org.springframework.oxm-3.0.0.RELEASE.jar ./WEB-INF/lib/spring/org.springframework.test-3.0.0.RELEASE.jar ./WEB-INF/lib/spring/org.springframework.transaction-3.0.0.RELEASE.jar ./WEB-INF/lib/spring/org.springframework.web-3.0.0.RELEASE.jar ./WEB-INF/lib/spring/org.springframework.web.portlet-3.0.0.RELEASE.jar ./WEB-INF/lib/spring/org.springframework.web.servlet-3.0.0.RELEASE.jar ./WEB-INF/lib/spring/org.springframework.web.struts-3.0.0.RELEASE.jar ./WEB-INF/lib/testng-5.11-jdk15.jar ./WEB-INF/web.xml 

你有没有尝试把所有的jar子直接放在WEB-INF/lib目录中而不是子目录中?

没有WEB-INF/lib/spring/org.springframework.aop-3.0.0.RELEASE.jar ,只是WEB-INF/lib/org.springframework.aop-3.0.0.RELEASE.jar

与其余的jar子一样。

在使用maven-shade-plugin时遇到这个错误,解决scheme包括:

META-INF / spring.schemas

META-INF / spring.handlers

maven-shade-plugin中的变形金刚build造时

  <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> <resource>META-INF/spring.handlers</resource> </transformer> <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> <resource>META-INF/spring.schemas</resource> </transformer> </transformers> </configuration> </execution> </executions> </plugin> 

(积分: 想法,以避免spring.handlers / spring.schemas合并在一个jar中的多个弹簧依赖关系时被覆盖 )

http://maven.apache.org/plugins/maven-shade-plugin/examples/resource-transformers.html

我遇到了一个类似的问题,使用maven-shade-plugin。 我在上面的示例页面中find了解决我的问题的方法。

你用什么IDE(如果有的话)? 当您在IDE中工作时,或者仅在部署时发生这种情况吗? 如果是部署,可能是因为无论使用哪种部署机制 – 使用依赖关系创build单个JAR的maven-assembly是一个已知的罪魁祸首 – 将所有JAR压缩到单个目录中,并且Spring模式和处理程序文件正在覆盖每个其他。

我遇到了类似的错误,但在新创build的Roo项目中引用Spring Webflow。 对我来说,解决scheme竟然是(Project)/右键单击/ Maven /启用Maven依赖关系(接着是一些重新启动并重新发布到Tomcat)。

看来,STS或M2Eclipse没有推动所有的春季webflowjar到Web应用程序li​​b目录。 我不知道为什么。 但是,启用Maven依赖关系处理,然后重build似乎解决了这个问题。 webflow jar最终得到发布,因此它可以find模式名称空间的引用。

我通过浏览Web应用程序发布到的tomcat目录来调查这一点,在运行时点击WEB-INF / lib /并注意到它缺lesswebflow jar文件。

这个技巧也适用于我:在Eclipse中,右键单击项目,然后selectMaven> Update Dependencies。

如果有人遇到这个问题,我只是使用Eclipse; 通过右键单击操作运行项目。 此错误发生在J2EE视图中,但不在Java视图中发生。 不知道 – 假设将库添加到正确的“lib”目录。

我也使用Maven项目,允许m2eclipsepipe理依赖。

我有spring3.0.2和spring-beans-3.0.xsd相同的问题。

我的解决scheme

在源文件夹中创build一个META-INF / spring.schemas文件并复制所有必需的定义。 创buildspring.handlers。

我认为类PluggableSchemaResolver无法正常工作。

http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/beans/factory/xml/PluggableSchemaResolver.html

从javadoc:

“默认情况下,这个类将使用模式:META-INF / spring.schemas在类path中查找映射文件,从而允许同时在类path中存在多个文件。”

但在我的情况下,这个类只读取第一个spring.schemas finded。

素不相识。 pacovr

如果使用mvn ,请检查您的pom.xml中是否有正确的作用域(如果已定义)。 我曾经错误地设置了testing,运行时需要它。

确保你已经解决了所有的依赖关系

我在AOP的第一次尝试中遇到了这个问题,下面是一个春季教程。 我的问题是没有在我的classpath中使用spring-aop.jar 。 本教程列出了我必须添加的所有其他依赖关系,即:

  • aspectjrt.jar
  • aspectjweaver.jar
  • aspectj.jar
  • aopalliance.jar

但是那个失踪了。 在原来的问题中只有一个问题可以导致这种症状。

我使用的是Eclipse(霓虹灯),Java SE 8,beans 3.0,spring AOP 3.0,Spring 4.3.4。 问题显示在Java视图中,不是JEE–,而是试图用右键菜单 – >运行方式 – > Java应用程序运行应用程序。

你也可以尝试使用解决问题的one-jar maven插件。 只需按照这里的指示。