Hi,<br><br>Internal type together with a function in one drl file cause ClassCastException when setting properties of a new instance of this type.<br><br>java.lang.ClassCastException: org.drools.generatedbeans.Cheese cannot be cast to org.drools.generatedbeans.Cheese<br>
    at org.drools.base.org.drools.generatedbeans.Cheese6778431$setType.setValue(Unknown Source)<br>    at org.drools.base.ClassFieldWriter.setValue(ClassFieldWriter.java:195)<br>    at org.drools.base.ClassFieldAccessor.setValue(ClassFieldAccessor.java:319)<br>
    at org.drools.factmodel.ClassDefinition.set(ClassDefinition.java:207)<br>    at org.drools.integrationtests.MiscTest.testGeneratedBeansWithFunction(MiscTest.java:1072)<br>    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)<br>
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)<br>    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)<br>    at java.lang.reflect.Method.invoke(Method.java:616)<br>
    at junit.framework.TestCase.runTest(TestCase.java:154)<br>    at junit.framework.TestCase.runBare(TestCase.java:127)<br>    at junit.framework.TestResult$1.protect(TestResult.java:106)<br>    at junit.framework.TestResult.runProtected(TestResult.java:124)<br>
    at junit.framework.TestResult.run(TestResult.java:109)<br>    at junit.framework.TestCase.run(TestCase.java:118)<br>    at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)<br>
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)<br>    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)<br>    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)<br>
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)<br>    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)<br><br><br>Test case to reproduce:<br>
test_GeneratedBeansWithFunction.drl:<br>-------------------------------<br>package org.drools.generatedbeans;<br><br>function void someFunction(String arg) {<br>    System.out.println(&quot;hello&quot;);<br>}<br><br>declare Cheese<br>
    type: String<br>end<br>-------------------------------<br><br>test method:<br>public void testGeneratedBeansWithFunction() throws Exception {<br>        final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();<br>
        kbuilder.add( ResourceFactory.newInputStreamResource( getClass().getResourceAsStream( &quot;test_GeneratedBeansWithFunction.drl&quot; ) ),<br>                      ResourceType.DRL );<br>        assertFalse( kbuilder.getErrors().toString(),<br>
                     kbuilder.hasErrors() );<br><br>        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();<br>        kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );<br><br>        // Retrieve the generated fact type<br>
        FactType cheeseFact = kbase.getFactType( &quot;org.drools.generatedbeans&quot;,<br>                                                 &quot;Cheese&quot; );<br><br>        // Create a new Fact instance<br>        Object cheese = cheeseFact.newInstance();<br>
<br>        cheeseFact.set( cheese,<br>                        &quot;type&quot;,<br>                        &quot;stilton&quot; );<br>    }<br><br>The last line throws the ClassCastException. If we remove the function from the drl file all works fine.<br>
Best Regards,<br>Michal<br>