2013-06-04 45 views
0

我無法將字段添加到新類型聲明中。我是否需要一個實際的Java類來處理.drl文件中的每個類型聲明?我以爲那些是由Drools生成的?Drools:無法在.drl文件中聲明新類型(包含字段)

這工作:

package tests 

declare Person 
end 

現在添加一個字段(類型無所謂):

package tests 

declare Person 
    age : int 
end 

而且它拋出下面的錯誤。

java.lang.NoSuchMethodError: java.lang.String.isEmpty()Z 
at org.drools.compiler.PackageBuilder.resolveType(PackageBuilder.java:1606) 
at org.drools.compiler.PackageBuilder.fillFieldTypes(PackageBuilder.java:1672) 
at org.drools.compiler.PackageBuilder.processTypeDeclarations(PackageBuilder.java:2008) 
at org.drools.compiler.PackageBuilder.mergePackage(PackageBuilder.java:1272) 
at org.drools.compiler.PackageBuilder.addPackage(PackageBuilder.java:869) 
at org.drools.compiler.PackageBuilder.addPackageFromDrl(PackageBuilder.java:466) 
at org.drools.compiler.PackageBuilder.addKnowledgeResource(PackageBuilder.java:694) 
at org.drools.builder.impl.KnowledgeBuilderImpl.add(KnowledgeBuilderImpl.java:51) 
at org.drools.builder.impl.KnowledgeBuilderImpl.add(KnowledgeBuilderImpl.java:40) 
at RuleTest.setUp(RuleTest.java:35) 
at junit.framework.TestCase.runBare(TestCase.java:132) 
at junit.framework.TestResult$1.protect(TestResult.java:110) 
at junit.framework.TestResult.runProtected(TestResult.java:128) 
at junit.framework.TestResult.run(TestResult.java:113) 
at junit.framework.TestCase.run(TestCase.java:124) 
at junit.framework.TestSuite.runTest(TestSuite.java:232) 
at junit.framework.TestSuite.run(TestSuite.java:227) 
at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130) 
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196) 

它在 「Testrules.drl」 行拋出:

@Override 
public void setUp() throws Exception { 
    KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); 

    kbuilder.add(ResourceFactory.newClassPathResource("Testrules.drl"), ResourceType.DRL); 
    ... 
} 

使用 的Eclipse 3.4.2, 的Drools 5.5.0最終

回答

0

的方法String.isEmpty()似乎已經在1.6中引入(Java 6)。刪除舊的Java VM並安裝當前版本(Java 7)解決了這個問題。