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应用程序lib目录。 我不知道为什么。 但是,启用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无法正常工作。
从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插件。 只需按照这里的指示。