Thanks Mark, thats got it. Had to use:
PackageBuilderConfiguration conf = new PackageBuilderConfiguration();
((MVELDialectConfiguration)
conf.getDialectConfiguration("mvel")).setStrict(false);
((MVELDialectConfiguration)
conf.getDialectConfiguration("mvel")).setLangLevel(5);
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(conf);
For whatever reason using the below doesn't work:
KnowledgeBuilderConfiguration config =
KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration();
config.setProperty("drools.dialect.mvel.strict", "false");
config.setProperty("drools.dialect.mvel.langLevel", "5");
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(conf);
--
Paul Edwards
________________________________________
From: rules-users-bounces(a)lists.jboss.org [rules-users-bounces(a)lists.jboss.org] On Behalf
Of Mark Proctor [mproctor(a)codehaus.org]
Sent: Thursday, 22 July 2010 10:15 a.m.
To: rules-users(a)lists.jboss.org
Subject: Re: [rules-users] Drools and mvel
On 22/07/2010 00:49, Paul Edwards wrote:
Hi Mark,
I assume you are referring to: drools.dialect.mvel.strict =<true|false> as I
cannot see any other config items. I have already tried setting that to false (I should
have put that in the first email) but it didn't work.
I'm guessing that leaves me needing to raise a Jira issue???
MVELDialectConfiguration
public void setLangLevel(int langLevel) {
--
> ________________________________________
> From: rules-users-bounces(a)lists.jboss.org [rules-users-bounces(a)lists.jboss.org] On
Behalf Of Mark Proctor [mproctor(a)codehaus.org]
> Sent: Thursday, 22 July 2010 1:01 a.m.
> To: Rules Users List
> Subject: Re: [rules-users] Drools and mvel
>
> It is possible to turn off the language constraint for MVEL in drools, see
KnowledgeBuilderConfiguration, which should cause the static field not to be set.
>
> Mark
> On 21/07/2010 15:02, Edson Tirelli wrote:
>
> Hi Paul,
>
> Your analysis is correct. The problem is that these configurations in MVEL are
made using static properties and so they affect all uses of MVEL in a single classloading
hierarchy. Unfortunately, I don't think there is anything you can do right now, other
than open a JIRA in MVEL to help convince Mike to make all configurations non-static in
MVEL:
>
>
http://jira.codehaus.org/browse/MVEL
>
> Edson
>
> 2010/7/21 Paul
Edwards<Paul.Edwards@hyro.com<mailto:Paul.Edwards@hyro.com>>
> Hi guys,
>
> I have an issue which involves smooks, drools and mvel.
>
> Quick explanation, the unit test is just a smooks run. Nothing complicated. The test
passes happily. It contains an expression that involves an MVEL "IF" statement.
>
> Now if I add a drools startup (I'm not using drools in the test, I'm just
initialising it), the unit test now fails on the "IF" statement. The exception
received is:
>
> org.milyn.cdr.SmooksConfigurationException: Error invoking @Initialize method
'initialize' on class 'org.milyn.javabean.BeanInstancePopulator'.
> at org.milyn.cdr.annotation.Configurator.invoke(Configurator.java:457)
> at org.milyn.cdr.annotation.Configurator.initialise(Configurator.java:439)
> at org.milyn.cdr.annotation.Configurator.configure(Configurator.java:91)
> at org.milyn.cdr.annotation.Configurator.configure(Configurator.java:66)
> at
org.milyn.delivery.JavaContentHandlerFactory.create(JavaContentHandlerFactory.java:63)
> at
org.milyn.delivery.ContentDeliveryConfigBuilder$ContentHandlerExtractionStrategy.addCDU(ContentDeliveryConfigBuilder.java:623)
> at
org.milyn.delivery.ContentDeliveryConfigBuilder$ContentHandlerExtractionStrategy.applyCDUStrategy(ContentDeliveryConfigBuilder.java:548)
> at
org.milyn.delivery.ContentDeliveryConfigBuilder$ContentHandlerExtractionStrategy.applyStrategy(ContentDeliveryConfigBuilder.java:536)
> at
org.milyn.delivery.ContentDeliveryConfigBuilder$SmooksResourceConfigurationTableIterator.iterate(ContentDeliveryConfigBuilder.java:711)
> at
org.milyn.delivery.ContentDeliveryConfigBuilder$SmooksResourceConfigurationTableIterator.access$300(ContentDeliveryConfigBuilder.java:690)
> at
org.milyn.delivery.ContentDeliveryConfigBuilder.extractContentHandlers(ContentDeliveryConfigBuilder.java:484)
> at
org.milyn.delivery.ContentDeliveryConfigBuilder.load(ContentDeliveryConfigBuilder.java:349)
> at
org.milyn.delivery.ContentDeliveryConfigBuilder.getConfig(ContentDeliveryConfigBuilder.java:146)
> at
org.milyn.container.standalone.StandaloneExecutionContext.<init>(StandaloneExecutionContext.java:91)
> at
org.milyn.container.standalone.StandaloneExecutionContext.<init>(StandaloneExecutionContext.java:65)
> at org.milyn.Smooks.createExecutionContext(Smooks.java:383)
> at org.milyn.Smooks.createExecutionContext(Smooks.java:346)
> at
com.hyro.telstrapoc.smooks.SmooksTransformTest.runSmooksTransform(SmooksTransformTest.java:215)
> at
com.hyro.telstrapoc.smooks.SmooksTransformTest.testSmooks(SmooksTransformTest.java:139)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> at java.lang.reflect.Method.invoke(Method.java:597)
> at
org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
> at
org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
> at
org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
> at
org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
> at
org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
> at
org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
> at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:73)
> at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:46)
> at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:180)
> at org.junit.runners.ParentRunner.access$000(ParentRunner.java:41)
> at org.junit.runners.ParentRunner$1.evaluate(ParentRunner.java:173)
> at
org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
> at
org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
> at org.junit.runners.ParentRunner.run(ParentRunner.java:220)
> at
org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49)
> at
org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
> at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
> at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
> at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
> at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
> Caused by: [Error: was expecting type: java.lang.Object; but found type: null]
> [Near : {... }
> els ....}]
> ^
> [Line: 3, Column: 16]
> at org.mvel2.util.CompilerTools.expectType(CompilerTools.java:355)
> at
org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer._getAccessor(ReflectiveAccessorOptimizer.java:1052)
> at
org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.optimizeCollection(ReflectiveAccessorOptimizer.java:1079)
> at
org.mvel2.ast.InlineCollectionNode.<init>(InlineCollectionNode.java:50)
> at org.mvel2.compiler.AbstractParser.nextToken(AbstractParser.java:1173)
> at
org.mvel2.compiler.ExpressionCompiler._compile(ExpressionCompiler.java:118)
> at org.mvel2.compiler.ExpressionCompiler.compile(ExpressionCompiler.java:65)
> at org.mvel2.MVEL.compileExpression(MVEL.java:886)
> at org.mvel2.MVEL.compileExpression(MVEL.java:891)
> at org.mvel2.MVEL.compileExpression(MVEL.java:797)
> at
org.milyn.expression.MVELExpressionEvaluator.setExpression(MVELExpressionEvaluator.java:55)
> at
org.milyn.javabean.BeanInstancePopulator.initialize(BeanInstancePopulator.java:235)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> at java.lang.reflect.Method.invoke(Method.java:597)
> at org.milyn.cdr.annotation.Configurator.invoke(Configurator.java:453)
> ... 42 more
>
>
> If I remove the 3 lines initialising drools, it all passes again. I suspect that the
MVEL engine is a singleton, and both drools and smooks are using the same instance. I
believe drools is setting MVEL to disallow "IF" statements on the RHS of a rule.
(see:
http://drools-java-rules-engine.46999.n3.nabble.com/Trivial-rule-with-con...)
I don't understand why MVEL thinks that my smooks expression is a RHS of a rule....
>
>
> Heres the unit test:
> @Test
> public void testSmooks2() throws Exception {
>
> String input =
> "<ns5:user partyAdminRoles=\"\"
lastName=\"Edwards\" firstName=\"Paul\" primary=\"false\"
userID=\"pedwards\" otpTokenRemainingUses=\"0\"
registrationCodeRemainingUses=\"0\" enabled=\"true\"
customIntAttr1=\"0\"
xmlns:ns2=\"urn:oasis:names:tc:SPML:2:0:reference\"
xmlns=\"urn:oasis:names:tc:SPML:2:0\"
xmlns:ns4=\"urn:oasis:names:tc:SPML:2:0:password\"
xmlns:ns3=\"urn:oasis:names:tc:SPML:2:0:search\"
xmlns:ns5=\"http://hyro.com/da/objectmodel\<http://hyro.com/da/ob...
xmlns:ns6=\"http://www.sifinfo.org/au/infrastructure/2.x\<http://...
xmlns:ns7=\"urn:oasis:names:tc:SPML:2:0:batch\">\n" +
> "<ns5:emailAddresses
emailAddress=\"pedwards@frazzle.co.nz<mailto:pedwards@frazzle.co.nz>\"
primary=\"true\" type=\"Personal\"
modificationMode=\"0\"/>\n" +
> "<ns5:emailAddresses
emailAddress=\"grumpy@frazzle.co.nz<mailto:grumpy@frazzle.co.nz>\"
primary=\"false\" type=\"Personal\"
modificationMode=\"0\"/>\n" +
> "<ns5:authzRoleSubscriptions status=\"Active\"
primary=\"false\" singlePasswordOptOut=\"false\"
reprovision=\"false\" customBoolAttr5=\"false\"
customBoolAttr4=\"false\" customBoolAttr3=\"false\"
customBoolAttr2=\"false\" customBoolAttr1=\"false\"
customIntAttr5=\"0\" customIntAttr4=\"0\"
customIntAttr3=\"0\" customIntAttr2=\"0\"
customIntAttr1=\"0\">\n" +
> "<ns5:role roleName=\"Account\">\n" +
> "<ns5:entitlement entitlementID=\"Open LDAP Account\"
type=\"Account\"/>\n" +
> "</ns5:role>\n" +
> "</ns5:authzRoleSubscriptions>\n" +
> "<ns5:auxEntities/>\n" +
> "</ns5:user>\n";
>
> UserType inUser = null;
> Unmarshaller unmarshaller = null;
>
> try {
> log.debug("Unmarshalling: " + input);
> unmarshaller = (Unmarshaller)
SpmlConstants.unmarshallerPool.borrowObject();
> inUser = ((JAXBElement<UserType>) unmarshaller.unmarshal(new
StringReader(input))).getValue();
> } catch (JAXBException e) {
> log.error("Exception while trying to unmarshall input daSpmlString:
" + e.getMessage());
> e.printStackTrace();
> throw e;
> } catch (Exception e) {
> log.error("Exception while trying to unmarshall input daSpmlString:
" + e.getMessage());
> e.printStackTrace();
> throw e;
> } finally {
> SpmlConstants.unmarshallerPool.returnObject(unmarshaller);
> }
>
> log.debug("Unmarshalled: " + inUser.getUserID());
>
> Properties parsed = runSmooksTransform(inUser);
> assertNotNull(parsed);
>
>
> for(Iterator<Object> i = parsed.keySet().iterator(); i.hasNext();) {
> Object key = i.next();
> Object value = parsed.get(key);
> System.out.println("Key: " + key + " value: " +
value);
> }
>
> }
>
> Heres the smooks file:
>
> <?xml version="1.0"?>
> <smooks-resource-list
xmlns="http://www.milyn.org/xsd/smooks-1.1.xsd"
>
xmlns:core="http://www.milyn.org/xsd/smooks/smooks-core-1.3.xsd"
>
xmlns:jb="http://www.milyn.org/xsd/smooks/javabean-1.3.xsd">
>
> <!-- NOTE NOTE NOTE -->
> <!-- This is purely to map user or person props to the LDAP name. Anything
that is handled -->
> <!-- explicitly (like firstname or lastname) does not get mapped -->
>
> <jb:bean beanId="UserOrPerson"
class="java.util.Properties"
createOnElement="com.hyro.spmlservice.generated.objectmodel.PersonType">
>
> <jb:value property="employeeNumber" decoder="String"
data="personID" />
> <jb:value property="mobile" decoder="String"
data="mobileTel" />
> <jb:value property="facsimileTelephoneNumber"
decoder="String" data="workFax" />
> <jb:value property="telephoneNumber" decoder="String"
data="workTel" />
> <jb:value property="description" decoder="String"
data="title" />
> <jb:value property="l" decoder="String"
data="customAttr27" />
> <jb:value property="physicalDeliveryOfficeName"
decoder="String" data="customAttr8" />
> <jb:value property="postalCode" decoder="String"
data="customAttr7" />
>
> </jb:bean>
>
> <jb:bean beanId="UserOrPerson"
class="java.util.Properties"
createOnElement="com.hyro.spmlservice.generated.objectmodel.UserType">
> <jb:value property="firstName" decoder="String"
data="firstName" />
> <jb:value property="lastName" decoder="String"
data="lastName" />
> <jb:value property="user" decoder="String"
data="userID" />
>
> <jb:value property="displayName" decoder="String"
data="customAttr4" />
> <jb:value property="postalCode" decoder="String"
data="customAttr2" />
>
> <jb:expression property="mail"
execOnElement="emailAddresses">
>
> if(1 == 2) {
> return emailAddresses[0].emailAddress;
> }
> else {
> return "NOT FOUND";
> }
> </jb:expression>
>
>
> </jb:bean>
>
> <jb:bean beanId="emailAddresses"
class="java.util.ArrayList" createOnElement="emailAddresses">
> <jb:wiring beanIdRef="emailAddressType" />
> </jb:bean>
>
> <jb:bean beanId="emailAddressType"
class="com.hyro.spmlservice.generated.objectmodel.EmailAddressType"
createOnElement="com.hyro.spmlservice.generated.objectmodel.EmailAddressType">
> <jb:value property="modificationMode" decoder="Short"
data="modificationMode" />
> <jb:value property="emailAddress" decoder="String"
data="emailAddress" />
> <jb:value property="type" decoder="String"
data="type" />
> <jb:value property="primary" decoder="Boolean"
data="primary" />
> </jb:bean>
>
>
> </smooks-resource-list>
>
>
> Any Ideas? I've wasted 3 days getting to this point....
--
> Paul Edwards
>
> _______________________________________________
> rules-users mailing list
> rules-users@lists.jboss.org<mailto:rules-users@lists.jboss.org>
>
https://lists.jboss.org/mailman/listinfo/rules-users
>
>
>
--
> Edson Tirelli
> JBoss Drools Core Development
> JBoss by Red Hat @
www.jboss.com<http://www.jboss.com>
>
>
>
>
> _______________________________________________
> rules-users mailing list
> rules-users@lists.jboss.org<mailto:rules-users@lists.jboss.org>
>
https://lists.jboss.org/mailman/listinfo/rules-users
>
>
>
> _______________________________________________
> rules-users mailing list
> rules-users(a)lists.jboss.org
>
https://lists.jboss.org/mailman/listinfo/rules-users
>
>
_______________________________________________
rules-users mailing list
rules-users(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users