drools 5.5.0错误 - 找不到元素'change-set'的声明

时间:2015-04-08 03:42:43

标签: java eclipse maven drools

我是Drools的新手,我在eclipse IDE中使用drools 5.5.0最终运行时Maven项目。

当我在Maven中运行项目时,会抛出以下错误 cvc-elt.1:找不到元素的声明' change-set'。

这是控制流程

  1. SampleDroolRule.java

    public class SampleDroolRule extends RuleTestBase {
      private static List<Object> mockPropertySet;
      public SampleDO runRules(List<Object> mockPropertySet) {
         StatelessKnowledgeSession ks = createRuleEngine("SampleTest.xml", logger);
    
  2. &#39; createRuleEngine&#39;打电话到

    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);
    
  3. builder.add行抛出错误

      [main] ERROR org.drools.xml.ExtensibleXmlParser  - (null: 4, 188): cvc-elt.1: Cannot find the declaration of element 'change-set'.
    
  4. 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/jbossrules/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>
    
  5. 我现在花了2天多的时间。经历了大量的论坛,没有运气。 请帮帮我。 谢谢!

2 个答案:

答案 0 :(得分:0)

从xs:schemaLocation的URL中删除空格(drools- api)可能会有所帮助。

但是,我建议您修改<change-set>中的SampleTest.xml元素属性,以便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:///...'>

您可以在分发档案的sources目录中找到XML Schema文件。

答案 1 :(得分:0)

我也面临同样的错误。最后,通过更改xml和主类代码内容来解决此问题,如下所示

并在您的主要课程中添加以下代码段

<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/jbossrules/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”)),                   ResourceType.CHANGE_SET);

然后将yourfileName.xml放在项目根目录

希望它有所帮助。