当前位置: 代码迷 >> java >> 在开发模式下运行spring-GWT应用程序时出现XML错误
  详细解决方案

在开发模式下运行spring-GWT应用程序时出现XML错误

热度:55   发布时间:2023-07-31 13:41:00.0

我正在使用eclipse,当我尝试在开发模式下运行spring-GWT应用程序时,在解析applicationContext.xml文件时出现以下异常:

    Ignored XML validation warning
    org.xml.sax.SAXParseException: schema_reference.4: Failed to read schema document 'http://www.springframework.org/schema/tx/spring-tx-3.0.xsd', because 1) could not find the document; 2) the document could not be read; 3) the root element of the document is not <xsd:schema>.
        at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)
        at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.warning(ErrorHandlerWrapper.java:96)
        at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:380)
        at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:318)
(...)
Context initialization failed
org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 51 in XML document from ServletContext resource [/WEB-INF/applicationContext.xml] is invalid; nested exception is org.xml.sax.SAXParseException: cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'tx:annotation-driven'.
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:396)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302)

我的applicationContext.xml文件开始如下:

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">

(...)第51行---> <tx:annotation-driven transaction-manager="transactionManager"/>

有人知道发生了什么吗?

检查您的类路径中是否具有spring-tx依赖项(或任何其他spring依赖项),以使其使用您的架构。 引用的所有模式都应映射到spring依赖项。

xmlns:tx =“ http://www.springframework.org/schema/tx”

检查一下:

找到解决方法:

运行GWT devmode时,启动spring appcontext存在问题,找不到tx ... xsd。 这与GWT的此Devmode类中定义的类加载器有关,该类加载器委派给systemclassloader(码头覆盖),请参阅: ://groups.google.com/group/google-web-toolkit/browse_thread/thread/ac495ee6605d21b4

仅当在spring中定义处理事务的@Transactional注释所需的标记时,才会发生这种情况。 我发现的唯一解决方法(两天后)是查看stacktrace并查找Spring的哪个类调用了xerces(因为它是无法找到文件的xerces)。 这是“ DefaultDocumentLoader”。此类位于spring-beans.jar中。 =>所以我要做的是,将spring-tx.jar中的所有类复制到新的spring-beans.jar中,以便这些类将由同一类加载器加载。然后,我还合并了META-INF / spring.handlers,spring .schemas,spring.tooling文件,所有现在都在我创建的新jar中:spring-beans-tx-3.0.5.RELEASE.jar这个新jar是我项目的类路径中的第一个。 在这种情况下,它可以工作!

根据Tony的回答,通过创建这三个文件的自己的版本,存在另一个解决方法。 我在发布了也发布了 。

  相关解决方案