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 中的&lt;change-set&gt; 元素属性,以便xs:schemaLocation 引用change-set.xsdchange-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 错误 - 找不到元素“更改集”的声明的主要内容,如果未能解决你的问题,请参考以下文章

找不到 KieModule:org.default:artifact:1.0.0-SNAPSHOT

为 Eclipse 安装 Drools 插件时出错

win10系统,每次开机都出现找不到元素

XML 解析错误:找不到根元素位置

Xcode 8:UI 测试远程按钮错误:找不到焦点元素

XML 解析错误:找不到根元素