drools 5.5.0 错误 - 找不到元素“更改集”的声明
Posted
技术标签:
【中文标题】drools 5.5.0 错误 - 找不到元素“更改集”的声明【英文标题】:drools 5.5.0 error - Cannot find the declaration of element 'change-set' 【发布时间】:2015-06-12 20:57:01 【问题描述】:我是 Drools 的新手,我在 Eclipse IDE 中使用 drools 5.5.0 最终运行时 Maven 项目。
当我在 Maven 中运行项目时,会抛出以下错误 cvc-elt.1:找不到元素“change-set”的声明。
这是控制流
SampleDroolRule.java
public class SampleDroolRule extends RuleTestBase
private static List<Object> mockPropertySet;
public SampleDO runRules(List<Object> mockPropertySet)
StatelessKnowledgeSession ks = createRuleEngine("SampleTest.xml", logger);
“createRuleEngine”调用转到
protected static StatelessKnowledgeSession createRuleEngine(String changeSetXML, Logger logger)
logger.info("Creating KS from " + changeSetXML);
KnowledgeBuilder builder = KnowledgeBuilderFactory.newKnowledgeBuilder();
builder.add(ResourceFactory.newClassPathResource(changeSetXML), ResourceType.CHANGE_SET);
builder.add 行抛出错误
[main] ERROR org.drools.xml.ExtensibleXmlParser - (null: 4, 188): cvc-elt.1: Cannot find the declaration of element 'change-set'.
SampleTest.xml 看起来像这样
<?xml version="1.0" encoding="UTF-8"?>
<change-set xmlns='http://drools.org/drools-5.0/change-set'
xmlns:xs='http://www.w3.org/2001/XMLSchema-instance'
xs:schemaLocation='http://drools.org/drools-5.0/change-set.xsd http://anonsvn.jboss.org/repos/labs/labs/jbos-s-rules/trunk/drools- api/src/main/resources/change-set-1.0.0.xsd' >
<add>
<resource source='classpath:rules/sample/drls/SampleRules.drl' type='DRL' />
</add>
</change-set>
我现在花了超过 2 天。经历了很多论坛都没有运气。 请帮帮我。 谢谢!
【问题讨论】:
【参考方案1】:从 xs:schemaLocation 的 URL 中删除空格 (drools- api
) 可能会有所帮助。
但是,我建议您修改SampleTest.xml
中的<change-set>
元素属性,以便xs:schemaLocation
引用change-set.xsd
或change-set-1.0.0.xsd
的本地副本。
<change-set xmlns='http://drools.orchange-set-1.0.0.xsdg/drools-5.0/change-set'
xmlns:xs='http://www.w3.org/2001/XMLSchema-instance'
xs:schemaLocation='file:///...'>
您可以在分发存档的源目录中找到 XML Schema 文件。
【讨论】:
非常感谢您的回答。 (drools- api) 是我的错字。将尝试将我的 schemaLocation 引用到本地副本,并让您知道它是否有效。 现在就试试看 将其引用到本地副本,但再次引发相同的错误错误 org.drools.xml.ExtensibleXmlParser - (null: 4, 135): cvc-elt.1: 找不到元素的声明'更改集'。 你能在 XML Parser 抛出错误的地方添加完整的堆栈跟踪吗?即使 XML Schema 不可访问,添加变更集 XML 文件也不应引发错误。 如果我使用 Drools 5.4.0 编译和执行,我会收到类似的错误。您确定您使用的是 5.5.0 吗?类路径中没有旧 jar?【参考方案2】:我也面临同样的错误。最后通过更改 xml 和主类代码内容解决了这个问题,如下所示
在你的主类中添加下面的 sn-p
<change-set xmlns='http://drools.org/drools-5.0/change-set'
xmlns:xs='http://www.w3.org/2001/XMLSchema-instance'
xs:schemaLocation='http://drools.org/drools-5.0/change-set http://anonsvn.jboss.org/repos/labs/labs/jbos-s-rules/trunk/drools-api/src/main/resources/change-set-1.0.0.xsd' >
<add>
<resource source='file:file-path/file-name.drl' type='DRL' />
<resource source='file:file-path/file-name.bpmn' type='BPMN2' />
</add>
</change-set>
kbuilder.add(ResourceFactory.newInputStreamResource(new FileInputStream("yourfileName.xml")), 资源类型.CHANGE_SET );
然后将 yourfileName.xml 放在项目根目录中
希望对某人有所帮助。
【讨论】:
以上是关于drools 5.5.0 错误 - 找不到元素“更改集”的声明的主要内容,如果未能解决你的问题,请参考以下文章