[rules-users] Internal type used together with function throws ClassCastException
Michal Bali
michalbali at gmail.com
Mon Mar 16 18:17:43 EDT 2009
Hi,
Internal type together with a function in one drl file cause
ClassCastException when setting properties of a new instance of this type.
java.lang.ClassCastException: org.drools.generatedbeans.Cheese cannot be
cast to org.drools.generatedbeans.Cheese
at
org.drools.base.org.drools.generatedbeans.Cheese6778431$setType.setValue(Unknown
Source)
at org.drools.base.ClassFieldWriter.setValue(ClassFieldWriter.java:195)
at
org.drools.base.ClassFieldAccessor.setValue(ClassFieldAccessor.java:319)
at org.drools.factmodel.ClassDefinition.set(ClassDefinition.java:207)
at
org.drools.integrationtests.MiscTest.testGeneratedBeansWithFunction(MiscTest.java:1072)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at junit.framework.TestCase.runTest(TestCase.java:154)
at junit.framework.TestCase.runBare(TestCase.java:127)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:118)
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)
Test case to reproduce:
test_GeneratedBeansWithFunction.drl:
-------------------------------
package org.drools.generatedbeans;
function void someFunction(String arg) {
System.out.println("hello");
}
declare Cheese
type: String
end
-------------------------------
test method:
public void testGeneratedBeansWithFunction() throws Exception {
final KnowledgeBuilder kbuilder =
KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add( ResourceFactory.newInputStreamResource(
getClass().getResourceAsStream( "test_GeneratedBeansWithFunction.drl" ) ),
ResourceType.DRL );
assertFalse( kbuilder.getErrors().toString(),
kbuilder.hasErrors() );
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
// Retrieve the generated fact type
FactType cheeseFact = kbase.getFactType(
"org.drools.generatedbeans",
"Cheese" );
// Create a new Fact instance
Object cheese = cheeseFact.newInstance();
cheeseFact.set( cheese,
"type",
"stilton" );
}
The last line throws the ClassCastException. If we remove the function from
the drl file all works fine.
Best Regards,
Michal
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20090316/f79aed9f/attachment.html
More information about the rules-users
mailing list