[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