【问题标题】:drools 5.5.0 error - Cannot find the declaration of element 'change-set'drools 5.5.0 错误 - 找不到元素“更改集”的声明
【发布时间】:2015-06-12 20:57:01
【问题描述】:

我是 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. “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);
    
  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>
    

我现在花了超过 2 天。经历了很多论坛都没有运气。 请帮帮我。 谢谢!

【问题讨论】:

    标签: java eclipse maven drools


    【解决方案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/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")), 资源类型.CHANGE_SET );

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

    希望对某人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多