将类转换为Drools内的子类

时间:2013-12-21 16:55:51

标签: java validation drools validationrules

我正在使用Drools 6.6.0。这些是我的pom.xml文件中drools支持的依赖项。

<dependency>
       <groupId>org.mvel</groupId>
        <artifactId>mvel2</artifactId>
        <version>2.1.8.Final</version>
</dependency>
<dependency>
        <groupId>org.antlr</groupId>
        <artifactId>antlr-runtime</artifactId>
        <version>3.3</version>
</dependency>
<dependency>
        <groupId>org.eclipse.jdt</groupId>
        <artifactId>core</artifactId>
        <version>3.4.2.v_883_R34x</version>
 </dependency>
 <dependency>
        <groupId>org.drools</groupId>
        <artifactId>knowledge-api</artifactId>
        <version>6.0.0.Final</version>
 </dependency>
 <dependency>
        <groupId>org.drools</groupId>
        <artifactId>drools-jsr94</artifactId>
        <version>6.0.0.Final</version>
 </dependency>
 <dependency>
        <groupId>org.drools</groupId>
        <artifactId>drools-decisiontables</artifactId>
        <version>6.0.0.Final</version>
 </dependency>
 <dependency>
        <groupId>org.drools</groupId>
        <artifactId>drools-core</artifactId>
        <version>6.0.0.Final</version>
  </dependency>
  <dependency>
        <groupId>org.drools</groupId>
        <artifactId>drools-compiler</artifactId>
        <version>6.0.0.Final</version>
    </dependency>
    <dependency>
        <groupId>org.codehaus.janino</groupId>
        <artifactId>janino</artifactId>
        <version>2.5.16</version>
    </dependency>

我传递给drools对象,并且要验证同样的我必须访问子类属性。根据JBoss教程,我应该能够通过这种方式将基础对象转换为子类型:

Person(  name=="mark", address#LongAddress.( country == "uk" ) )  
Person(  name=="mark", address#LongAddress.country == "uk"  )
Person(  name=="mark", address isa LongAddress, address.country == "uk" ) 

但是我的drl文件无法识别操作符#作为强制转换操作符(实际上是drools认为我想写评论),并且无法识别。

首先我使用的是drools版本5和PackageBuilder。我将drl文件放在src / main / resources / META-INF文件夹中,并且能够读取文件。目前我正在使用drools版本6 - 并且仍然无法在drools中投射对象,并且Knowledge builder在同一位置上看不到drl文件。

这是我读取drl文件的代码:

  private static String DRL_FILE = "/META-INF/validationrules.drl";

  KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
  kbuilder.add(ResourceFactory.newFileResource(DRL_FILE), ResourceType.DRL);

  if( kbuilder.hasErrors() )
  {

       System.out.println( kbuilder.getErrors() );
       return;
  }

  Collection<KnowledgePackage> kpkgs = kbuilder.getKnowledgePackages();

  KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
  StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
  ksession.insert(message);

我是否使用了正确的drools依赖项,并且实际上是否支持在规则内部进行支持?我应该在哪里放置一个drl文件?作为Java环境,我正在使用IntelliJ。

0 个答案:

没有答案