[jboss-dev-forums] [JBoss ESB Development] - Possible bug(s) in variable mapping in JBPM/ESB integration
mferguson
do-not-reply at jboss.com
Mon Nov 23 15:31:57 EST 2009
I have a question regarding the implementation of mapping of variables from a jBPM process instance to ESB messages by the EsbActionHandler class.
I have been trying to figure out a way to pass a static value from a jBPM process node to an ESB service using only the out-of-the-box ESB/BPM integration, and I noticed that the Mapping.parseMappingElement(Element mappingElement) method parses the value of a "default" attribute from the bpmToEsbVars/mapping element of the process definition. It stores that value in the mapping instance along with the MVEL expressions and scope:
Mapping mapping = new Mapping();
| mapping.setEsb(mappingElement.attributeValue(Constants.ESB_VARNAME_TAG));
| mapping.setBpm(mappingElement.attributeValue(Constants.BPM_VARNAME_TAG));
| mapping.setDefaultValue(mappingElement.attributeValue(Constants.DEFAULT_VALUE_TAG));
|
If the JbpmObjectMapper.getObjectFromVariableMap(...) returns a null for the mapping, an attempt is made to find the variable in the execution context.
| Object object = getObjectFromJBpmVariableMap(isPrcScope, mapping.getBpm(), ctxInstance, token);
| //if that fails then try to get it from the ExecutionContext
| if (object==null) {
| object = MVEL.getProperty(mapping.getBpm(), executionContext);
| }
|
In my test code where the variable does not exist the following uncaught exceptrion is thrown by the MVEL.getProperty() call:
| 15:15:16,343 ERROR [GraphElement] action threw exception: unable to resolve property: actionId
| org.mvel.CompileException: unable to resolve property: actionId
| at org.mvel.optimizers.impl.refl.ReflectiveAccessorOptimizer.compileGetChain(ReflectiveAccessorOptimizer.java:289)
| at org.mvel.optimizers.impl.refl.ReflectiveAccessorOptimizer.optimizeAccessor(ReflectiveAccessorOptimizer.java:110)
| at org.mvel.optimizers.impl.refl.ReflectiveAccessorOptimizer.get(ReflectiveAccessorOptimizer.java:94)
| at org.mvel.MVEL.getProperty(MVEL.java:572)
| at org.jboss.soa.esb.services.jbpm.JBpmObjectMapper.setOnEsbMessage(JBpmObjectMapper.java:140)
| at org.jboss.soa.esb.services.jbpm.JBpmObjectMapper.mapFromJBpmToEsbMessage(JBpmObjectMapper.java:81)
| at org.jboss.soa.esb.services.jbpm.actionhandlers.EsbActionHandler.execute(EsbActionHandler.java:103)
| at org.jbpm.graph.def.Action.execute(Action.java:126)
| at sun.reflect.GeneratedMethodAccessor542.invoke(Unknown Source)
| at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
| at java.lang.reflect.Method.invoke(Unknown Source)
| at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:197)
| at org.jbpm.graph.def.Action_$$_javassist_98.execute(Action_$$_javassist_98.java)
| at org.jbpm.graph.def.GraphElement.executeAction(GraphElement.java:284)
| at org.jbpm.graph.def.Node.execute(Node.java:414)
| at sun.reflect.GeneratedMethodAccessor528.invoke(Unknown Source)
| at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
| at java.lang.reflect.Method.invoke(Unknown Source)
| at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:197)
| at org.jbpm.graph.def.Node_$$_javassist_145.execute(Node_$$_javassist_145.java)
| at org.jbpm.job.ExecuteNodeJob.execute(ExecuteNodeJob.java:28)
| at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
| at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
| at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
| at java.lang.reflect.Method.invoke(Unknown Source)
| at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:197)
| at org.jbpm.job.Job_$$_javassist_149.execute(Job_$$_javassist_149.java)
| at org.jbpm.job.executor.JobExecutorThread.executeJob(JobExecutorThread.java:170)
| at org.jbpm.job.executor.JobExecutorThread.run(JobExecutorThread.java:60)
| Caused by: org.mvel.PropertyAccessException: unable to resolve property: actionId
| at org.mvel.optimizers.impl.refl.ReflectiveAccessorOptimizer.getBeanProperty(ReflectiveAccessorOptimizer.java:383)
| at org.mvel.optimizers.impl.refl.ReflectiveAccessorOptimizer.compileGetChain(ReflectiveAccessorOptimizer.java:258)
| ... 28 more
|
Even if that didn't happen the default value from the mapping is never used.
Should I log a JIRA ticket for either of these (I'm wondering if there is intent behind not using the default attribute)?
View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4267147#4267147
Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=4267147
More information about the jboss-dev-forums
mailing list