cancel
Showing results for 
Search instead for 
Did you mean: 

ELExpressionException

adconet
Champ in-the-making
Champ in-the-making
We have a simple process with a listener on a user task. In this listener we call an EL expression which calls a method on a spring bean. Everything seems to work but for some reason we see the following exception in the log files:

Nov 28, 2011 1:37:27 PM org.activiti.engine.impl.bpmn.parser.BpmnParse execute
SEVERE: Uknown exception
org.activiti.engine.impl.javax.el.ELException: Expression uses functions, but no function mapper was provided
   at org.activiti.engine.impl.juel.Tree.bind(Tree.java:109)
   at org.activiti.engine.impl.juel.TreeValueExpression.<init>(TreeValueExpression.java:65)
   at org.activiti.engine.impl.juel.ExpressionFactoryImpl.createValueExpression(ExpressionFactoryImpl.java:428)
   at org.activiti.engine.impl.juel.ExpressionFactoryImpl.createValueExpression(ExpressionFactoryImpl.java:73)
   at org.activiti.engine.impl.el.ExpressionManager.createExpression(ExpressionManager.java:65)
   at org.activiti.engine.impl.bpmn.parser.BpmnParse.parseServiceTask(BpmnParse.java:962)
   at org.activiti.engine.impl.bpmn.parser.BpmnParse.parseActivities(BpmnParse.java:661)
   at org.activiti.engine.impl.bpmn.parser.BpmnParse.parseScope(BpmnParse.java:504)
   at org.activiti.engine.impl.bpmn.parser.BpmnParse.parseProcess(BpmnParse.java:479)
   at org.activiti.engine.impl.bpmn.parser.BpmnParse.parseProcessDefinitions(BpmnParse.java:446)
   at org.activiti.engine.impl.bpmn.parser.BpmnParse.parseRootElement(BpmnParse.java:218)
   at org.activiti.engine.impl.bpmn.parser.BpmnParse.execute(BpmnParse.java:192)
   at org.activiti.engine.impl.bpmn.deployer.BpmnDeployer.deploy(BpmnDeployer.java:81)
   at org.activiti.engine.impl.persistence.deploy.DeploymentCache.deploy(DeploymentCache.java:37)
   at org.activiti.engine.impl.persistence.entity.DeploymentManager.insertDeployment(DeploymentManager.java:39)
   at org.activiti.engine.impl.cmd.DeployCmd.execute(DeployCmd.java:58)
   at org.activiti.engine.impl.cmd.DeployCmd.execute(DeployCmd.java:30)
   at org.activiti.engine.impl.interceptor.CommandExecutorImpl.execute(CommandExecutorImpl.java:24)
   at org.activiti.engine.impl.interceptor.CommandContextInterceptor.execute(CommandContextInterceptor.java:42)
   at org.activiti.spring.SpringTransactionInterceptor$1.doInTransaction(SpringTransactionInterceptor.java:42)
   at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:130)
   at org.activiti.spring.SpringTransactionInterceptor.execute(SpringTransactionInterceptor.java:40)
   at org.activiti.engine.impl.interceptor.LogInterceptor.execute(LogInterceptor.java:33)
   at org.activiti.engine.impl.RepositoryServiceImpl.deploy(RepositoryServiceImpl.java:43)
   at org.activiti.engine.impl.repository.DeploymentBuilderImpl.deploy(DeploymentBuilderImpl.java:106)
   at org.activiti.spring.SpringProcessEngineConfiguration.autoDeployResources(SpringProcessEngineConfiguration.java:142)
   at org.activiti.spring.SpringProcessEngineConfiguration.buildProcessEngine(SpringProcessEngineConfiguration.java:61)
   at org.activiti.spring.ProcessEngineFactoryBean.getObject(ProcessEngineFactoryBean.java:56)
   at org.activiti.spring.ProcessEngineFactoryBean.getObject(ProcessEngineFactoryBean.java:32)
   at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:142)
   at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:102)
   at org.springframework.beans.factory.support.AbstractBeanFactory.getObjectForBeanInstance(AbstractBeanFactory.java:1440)


Any idea why we get this exception?

I had a little look at the source code of Activiti 5.8 and the default implementations of these JUEL classes are quite empty and will easily raise this exception if they get called. So is there something missing in our configuration of activiti?
4 REPLIES 4

trademak
Star Contributor
Star Contributor
Hi,

Can you post your BPMN 2.0 XML file?

Best regards,

adconet
Champ in-the-making
Champ in-the-making
Here is the XML.

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlnsSmiley Surprisedmgdc="http://www.omg.org/spec/DD/20100524/DC" xmlnsSmiley Surprisedmgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test">
  <process id="completeWorkUnit" name="completeWorkUnit">
    <documentation>Process to complete a given work unit.</documentation>
    <startEvent id="startEvent" name="Start"></startEvent>
    <endEvent id="normalEndEvent" name="NormalEnd"></endEvent>
    <userTask id="doWork" name="doWork" activiti:candidateGroups="agent">
      <extensionElements>
        <activiti:taskListener event="create" expression="${ambiProcessService.createAmbiTask(task.id, workUnit)}"></activiti:taskListener>
      </extensionElements>
    </userTask>
    <parallelGateway id="parallelgateway1" name="Parallel Gateway"></parallelGateway>
    <sequenceFlow id="flow1" name="" sourceRef="startEvent" targetRef="parallelgateway1"></sequenceFlow>
    <sequenceFlow id="flow2" name="" sourceRef="parallelgateway1" targetRef="doWork"></sequenceFlow>
    <receiveTask id="receiveWorkUnitCompleted" name="receiveWorkUnitCompleted"></receiveTask>
    <sequenceFlow id="flow3" name="" sourceRef="parallelgateway1" targetRef="receiveWorkUnitCompleted"></sequenceFlow>
    <sequenceFlow id="flow4" name="" sourceRef="receiveWorkUnitCompleted" targetRef="normalEndEvent"></sequenceFlow>
    <sequenceFlow id="flow5" name="" sourceRef="doWork" targetRef="normalEndEvent"></sequenceFlow>
  </process>
  <bpmndi:BPMNDiagram id="BPMNDiagram_completeWorkUnit">
    <bpmndi:BPMNPlane bpmnElement="completeWorkUnit" id="BPMNPlane_completeWorkUnit">
      <bpmndi:BPMNShape bpmnElement="startEvent" id="BPMNShape_startEvent">
        <omgdc:Bounds height="35" width="35" x="30" y="153"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="normalEndEvent" id="BPMNShape_normalEndEvent">
        <omgdc:Bounds height="35" width="35" x="384" y="153"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="doWork" id="BPMNShape_doWork">
        <omgdc:Bounds height="55" width="105" x="240" y="220"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="parallelgateway1" id="BPMNShape_parallelgateway1">
        <omgdc:Bounds height="40" width="40" x="160" y="150"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="receiveWorkUnitCompleted" id="BPMNShape_receiveWorkUnitCompleted">
        <omgdc:Bounds height="55" width="105" x="240" y="70"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1">
        <omgdi:waypoint x="65" y="170"></omgdi:waypoint>
        <omgdi:waypoint x="160" y="170"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="flow2" id="BPMNEdge_flow2">
        <omgdi:waypoint x="180" y="190"></omgdi:waypoint>
        <omgdi:waypoint x="180" y="247"></omgdi:waypoint>
        <omgdi:waypoint x="240" y="247"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="flow3" id="BPMNEdge_flow3">
        <omgdi:waypoint x="180" y="150"></omgdi:waypoint>
        <omgdi:waypoint x="180" y="97"></omgdi:waypoint>
        <omgdi:waypoint x="240" y="97"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="flow4" id="BPMNEdge_flow4">
        <omgdi:waypoint x="345" y="97"></omgdi:waypoint>
        <omgdi:waypoint x="401" y="97"></omgdi:waypoint>
        <omgdi:waypoint x="401" y="153"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="flow5" id="BPMNEdge_flow5">
        <omgdi:waypoint x="345" y="247"></omgdi:waypoint>
        <omgdi:waypoint x="401" y="247"></omgdi:waypoint>
        <omgdi:waypoint x="401" y="188"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>
</definitions>

trademak
Star Contributor
Star Contributor
Hi,

Did you define the ambiProcessService in a Spring configuration file?
Where is workUnit referring to?

Best regards,

adconet
Champ in-the-making
Champ in-the-making
Yes, AmbiProcessService is a spring bean.

WorkUnit is just a plain pojo which is given as an inputparam during the startup of the process (runtimeService.startProcessInstanceByKey).

The strange thing is that the ambiProcessService gets called correctly. So the listener defined in the process correctly calls the EL expression. We just noticed this strange ELException which gets logged and we can't figure out why. Everything seems to work correctly.
Getting started

Tags


Find what you came for

We want to make your experience in Hyland Connect as valuable as possible, so we put together some helpful links.