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'.
当我向 spring xml 添加网格节点和 ksession 时,出现此错误。我做了一些搜索,看起来像是类路径问题。我在这里缺少什么依赖项?
<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 的以下内容。
<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>
发出此错误是因为无法找到 Drools XSD。在这条评论 http://drools.46999.n3.nabble.com/Schema-Error-with-Drools-spring-xsd-tp1527960p1529561.html在 Drools 用户列表中,声明 XSD 不公开,并且xsi:schemaLocation
XML 中的属性将 XSD 映射到http://drools.org/schema/drools-spring org/drools/container/spring/drools-spring-1.2.0.xsd
,它无法解析为正确的 XSD。
Spring 应该自动处理 XSD 解析xmlns:drools="http://drools.org/schema/drools-spring"
属性。 Drools JAR 之一应该包括META-INF/spring.handlers
定义 XSD 映射的文件drools
命名空间。大致如下:
http://drools.org/schema/drools-spring=some.classpath.visible.package.xsdfile.xsd
它应该自动处理 Drools JAR 中包含的 XSD 文件。
尝试删除最后两行xsi:schemaLocation
属性,以便让 Spring 自动解析 XSD。
一些相关链接:
-
当没有互联网连接时 Spring schemaLocation 失败 https://stackoverflow.com/q/1729307/851811。特别是大卫·雷斯尼克的回答。
- 弹簧参考附录 D.5 注册处理程序和架构 http://static.springsource.org/spring/docs/3.0.5.RELEASE/spring-framework-reference/html/extensible-xml.html#extensible-xml-registration.
当然,您也可以从 JAR 文件中提取该 XSD,将其放置在类路径中可访问的目录中,并使用类路径相对 URLxsi:schemaLocation
.
顺便说一下,这可能是复制粘贴错误,但是您的<beans>
元素缺少结束标签。
EDIT: Drools 似乎没有提供spring.handlers
正确(至少截至 2010 年 12 月,请参阅流口水+春天没有互联网 http://drools.46999.n3.nabble.com/Drools-Spring-without-internet-td1999166.html)。您可能需要深入 JAR 来获取 XSD 并直接在中引用它xsi:schemaLocation
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)