[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