社区首页 >问答首页 >org.xml.sax.SAXParseException: cvc-complex-type.2.4.c:匹配的通配符严格

org.xml.sax.SAXParseException: cvc-complex-type.2.4.c:匹配的通配符严格
EN

Stack Overflow用户
提问于 2012-03-20 11:50:20
回答 2查看 11K关注 0票数 3
代码语言:javascript
代码运行次数:0
复制
org.xml.sax.SAXParseException: cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'drools:grid-node'. 

当我将一个grid-node和ksession添加到我的spring xml时,我得到了这个错误。我做了一些搜索,看起来像是类路径问题。我在这里遗漏了什么依赖项?

代码语言:javascript
代码运行次数:0
复制
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:camel="http://camel.apache.org/schema/spring"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:jaxrs="http://cxf.apache.org/jaxrs"
    xmlns:drools="http://drools.org/schema/drools-spring"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://camel.apache.org/schema/spring
       http://camel.apache.org/schema/spring/camel-spring.xsd
       http://www.springframework.org/schema/context 
       http://www.springframework.org/schema/context/spring-context-3.0.xsd
       http://www.springframework.org/schema/mvc
       http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
       http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas
       http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd
       http://drools.org/schema/drools-spring org/drools/container/spring
       http://drools.org/schema/drools-spring org/drools/container/spring/drools-spring-1.2.0.xsd">


    <drools:grid-node id="node1"/>
    <drools:ksession id="ksession1" type="stateful" kbase="kbase1" node="node1" />

我的pom.xml为Drools提供了以下内容。

代码语言:javascript
代码运行次数:0
复制
               <dependency>
        <groupId>org.drools</groupId>
        <artifactId>drools-camel</artifactId>
        <version>${drools.version}</version>
        <exclusions>
            <!-- This ensures that we use the latest version of Spring jars and not 
                the one that comes with drools.version. -->
            <exclusion>
                <groupId>org.springframework</groupId>
                <artifactId>spring</artifactId>
            </exclusion>

            <exclusion>
                <groupId>org.apache.camel</groupId>
                <artifactId>camel-core</artifactId>
            </exclusion>

            <exclusion>
              <groupId>org.apache.camel</groupId>
              <artifactId>camel-spring</artifactId>
            </exclusion>



            <exclusion>
                <artifactId>camel-xstream</artifactId>
                <groupId>org.apache.camel</groupId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.drools</groupId>
        <artifactId>knowledge-api</artifactId>
        <version>${drools.version}</version>
    </dependency>

    <dependency>
        <groupId>org.drools</groupId>
        <artifactId>drools-core</artifactId>
        <version>${drools.version}</version>
    </dependency>


    <dependency>
        <groupId>org.drools</groupId>
        <artifactId>drools-compiler</artifactId>
        <version>${drools.version}</version>
    </dependency>


    <dependency>
        <groupId>org.drools</groupId>
        <artifactId>drools-spring</artifactId>
        <version>${drools.version}</version>
    </dependency>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-20 13:31:34

发出此错误是因为找不到Drools XSD。在this comment in the Drools用户列表中,声明XSD不是公开可用的,并且XML中的xsi:schemaLocation属性将该XSD映射到http://drools.org/schema/drools-spring org/drools/container/spring/drools-spring-1.2.0.xsd,而不能解析为正确的XSD。

Spring应该在给定xmlns:drools="http://drools.org/schema/drools-spring"属性的情况下自动处理XSD解析。其中一个Drools JARs应该包含一个为drools名称空间定义XSD映射的META-INF/spring.handlers文件。大致是这样的:

代码语言:javascript
代码运行次数:0
复制
http://drools.org/schema/drools-spring=some.classpath.visible.package.xsdfile.xsd

它应该会自动处理Drools JAR中包含的XSD文件。

尝试删除xsi:schemaLocation属性的最后两行,以便Spring自动解析XSD。

一些相关链接:

当然,您也可以从JAR文件中提取XSD,将其放在类路径中可访问目录中,并在xsi:schemaLocation中使用类路径相对URL。

顺便说一句,这可能是一个复制粘贴错误,但是您的<beans>元素缺少结束标记。

编辑:似乎Drools没有正确地提供spring.handlers (至少在2010年12月,请参阅Drools + Spring without internet )。您可能需要深入研究JAR以获取XSD并在xsi:schemaLocation中直接引用它。

票数 4
EN

Stack Overflow用户

发布于 2016-02-26 07:39:01

至于,Eclipse中的错误标记:我只有一个变通方法,我怀疑是否有一个真正的解决方案。正如Xavi Lopez在他被接受的答案中指出的那样,在drools-spring jar (对于我来说,是drools-spring-5.3.0.Final.jar)中,META-INF下有一个spring-handlers文件。但是,这并没有引用xsd文件(尽管xsd文件位于这个jar中),但包含以下内容:

代码语言:javascript
代码运行次数:0
复制
http\://drools.org/schema/drools-spring=org.drools.container.spring.namespace.SpringDroolsHandler
http\://drools.org/schema/drools-spring-1.2.0=org.drools.container.spring.namespace.SpringDroolsHandler
http\://drools.org/schema/drools-spring-1.3.0=org.drools.container.spring.namespace.SpringDroolsHandler
http\://drools.org/schema/drools-spring-1.4.0=org.drools.container.spring.namespace.SpringDroolsHandler
http\://drools.org/schema/drools-spring-1.5.0=org.drools.container.spring.namespace.SpringDroolsHandler

如您所见,它为每个版本的xsd定义了一个处理程序类。这在spring运行时工作得很好,但我从未见过它在任何版本的Eclipse (也不是Spring工具套件)上工作。

我总是在中关闭项目中xsd文件的验证,为了您的方便,它是这样的:

click on >在包资源管理器中选择您的项目,在项目的属性对话框中单击“文件/属性”(或按Alt+Enter)“

  • ”,选择“启用特定于项目的设置”(在项目上禁用“project)

  • Uncheck手册”和“生成: XML架构Validator

  • Press OK

  • Right-click”的验证,然后选择“验证”(以使用修改的设置重新验证项目)

(我还尝试直接从spring beans定义xml引用xsd,但没有成功。由于spring-handlers文件中定义的处理程序在运行时工作,因此这不是一种更好的解决方法。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9786192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文