[jboss-jira] [JBoss JIRA] (DROOLS-1985) Test Scenario fails to populate Date field

Guilherme Gomes (Jira) issues at jboss.org
Tue Dec 10 07:14:10 EST 2019


     [ https://issues.redhat.com/browse/DROOLS-1985?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Guilherme Gomes updated DROOLS-1985:
------------------------------------
    Labels: drools-tools  (was: )


> Test Scenario fails to populate Date field
> ------------------------------------------
>
>                 Key: DROOLS-1985
>                 URL: https://issues.redhat.com/browse/DROOLS-1985
>             Project: Drools
>          Issue Type: Bug
>          Components: Test Scenarios Editor
>    Affects Versions: 5.5.0.Final
>            Reporter: Toshiya Kobayashi
>            Assignee: Mark Coble
>            Priority: Major
>              Labels: drools-tools
>         Attachments: repository_export_mvel_date.zip
>
>
> Under the conditions:
> - Model A has a Date field
> - Model B extends Model A
> - All rules have "java" dialect
> When you set a value to the Date field of Model B in a Test Scenario, the Test scenario fails to run and throws the Exception.
> {noformat}
> 20:59:23,323 INFO  [stdout] (http--127.0.0.1-8080-1) ERROR 14-11 20:59:23,322 (LoggingHelper.java:error:74) 	 Unable to run the scenario.
> 20:59:23,323 INFO  [stdout] (http--127.0.0.1-8080-1) [Error: could not access/write property (dateTime) in: defaultPackage.SubModel]
> 20:59:23,323 INFO  [stdout] (http--127.0.0.1-8080-1) [Near : {... __fact__.dateTime= __val__ ....}]
> 20:59:23,324 INFO  [stdout] (http--127.0.0.1-8080-1)              ^
> 20:59:23,324 INFO  [stdout] (http--127.0.0.1-8080-1) [Line: 1, Column: 1]
> 20:59:23,324 INFO  [stdout] (http--127.0.0.1-8080-1) 	at org.mvel2.PropertyAccessor.set(PropertyAccessor.java:372)
> 20:59:23,324 INFO  [stdout] (http--127.0.0.1-8080-1) 	at org.mvel2.PropertyAccessor.set(PropertyAccessor.java:139)
> 20:59:23,324 INFO  [stdout] (http--127.0.0.1-8080-1) 	at org.mvel2.ast.DeepAssignmentNode.getReducedValue(DeepAssignmentNode.java:97)
> 20:59:23,324 INFO  [stdout] (http--127.0.0.1-8080-1) 	at org.mvel2.MVELInterpretedRuntime.parseAndExecuteInterpreted(MVELInterpretedRuntime.java:106)
> 20:59:23,324 INFO  [stdout] (http--127.0.0.1-8080-1) 	at org.mvel2.MVELInterpretedRuntime.parse(MVELInterpretedRuntime.java:49)
> 20:59:23,324 INFO  [stdout] (http--127.0.0.1-8080-1) 	at org.mvel2.MVEL.eval(MVEL.java:165)
> 20:59:23,324 INFO  [stdout] (http--127.0.0.1-8080-1) 	at org.drools.ide.common.server.testscenarios.populators.FieldPopulator.populateField(FieldPopulator.java:47)
> 20:59:23,324 INFO  [stdout] (http--127.0.0.1-8080-1) 	at org.drools.ide.common.server.testscenarios.populators.SimpleFieldPopulator.populate(SimpleFieldPopulator.java:35)
> 20:59:23,325 INFO  [stdout] (http--127.0.0.1-8080-1) 	at org.drools.ide.common.server.testscenarios.populators.FactPopulator.populate(FactPopulator.java:52)
> 20:59:23,325 INFO  [stdout] (http--127.0.0.1-8080-1) 	at org.drools.ide.common.server.testscenarios.ScenarioRunner.applyFixtures(ScenarioRunner.java:119)
> 20:59:23,325 INFO  [stdout] (http--127.0.0.1-8080-1) 	at org.drools.ide.common.server.testscenarios.ScenarioRunner.run(ScenarioRunner.java:82)
> 20:59:23,325 INFO  [stdout] (http--127.0.0.1-8080-1) 	at org.drools.guvnor.server.TestScenarioServiceImplementation.runScenario(TestScenarioServiceImplementation.java:160)
> 20:59:23,325 INFO  [stdout] (http--127.0.0.1-8080-1) 	at org.drools.guvnor.server.TestScenarioServiceImplementation.runScenario(TestScenarioServiceImplementation.java:111)
> 20:59:23,325 INFO  [stdout] (http--127.0.0.1-8080-1) 	at org.drools.guvnor.server.TestScenarioServiceImplementation.runScenario(TestScenarioServiceImplementation.java:101)
> 20:59:23,325 INFO  [stdout] (http--127.0.0.1-8080-1) 	at org.drools.guvnor.server.TestScenarioServiceServlet.runScenario(TestScenarioServiceServlet.java:39)
> {noformat}
> This is because org.drools.ide.common.server.testscenarios.populators.FieldPopulatorFactory.isDate() uses Class.getDeclaredMethods which doesn't return super class methods.
> {code:java}
>     private boolean isDate(String fieldName) {
>         for (Method method : factObject.getClass().getDeclaredMethods()) {
>             if (hasMutator(fieldName, method)) {
>                 if (java.util.Date.class.isAssignableFrom(method.getParameterTypes()[0])) {
>                     return true;
>                 }
>             }
>         }
>         return false;
>     }
> {code}
> BTW, if your rules use "mvel" dialect, Guvnor will load org.drools.base.mvel.MVELCompilationUnit class and its static block registers for Date and Calendar org.mvel2.DataConversion. Hence this issue will not occur.
> {code:java}
>     static {
>         //for handling dates as string literals
>         DataConversion.addConversionHandler( Date.class,
>                                              new MVELDateCoercion() );
>         DataConversion.addConversionHandler( Calendar.class,
>                                              new MVELCalendarCoercion() );
>     }
> {code}



--
This message was sent by Atlassian Jira
(v7.13.8#713008)


More information about the jboss-jira mailing list