Hi All,

I have designed a process for the leave request application. In the end of the process, an e-mail is to be sent to the applier. Now, there is a catch here: I have a running SMTP server Postfix with saslauth service and Cyrus-imapd server configured on the same server. Here is my process design:

I have configured e-mail plugin to send e-mail to the SMTP server. I have checked the authentication required checkbox and entered correct userid and password.

Now, the  "To(specific email address)" has say abc@somedomain.com value,  "To(participant ID)" has say xyz@somedomain.com value, and "CC" has root@somedomain.com value. But when I send the e-mail, it does not deliver to abc@somedomain.com or xyz@somedomain.com. But it is sent successfully to root@somedomain.com which is "CC" value. I am not understanding the problem.

Here is the detailed log:

INFO  31 May 2011 15:56:20 org.joget.workflow.shark.WorkflowToolActivityHandler  - Executing tool [pluginName=org.joget.plugin.email.EmailPlugin, processId=email_check#1#e_mail_process, version= 1, activityId=e_mail_sending_tool]
ERROR 31 May 2011 15:56:20 org.joget.workflow.util.WorkflowUtil  - java.lang.NullPointerException
java.lang.NullPointerException
        at org.joget.workflow.util.WorkflowUtil.getAssignmentUsers(WorkflowUtil.java:79)
        at org.joget.plugin.email.EmailPlugin.execute(EmailPlugin.java:115)
        at org.joget.workflow.shark.WorkflowToolActivityHandler.executeActivity(WorkflowToolActivityHandler.java:88)
        at org.enhydra.shark.WfActivityImpl.runTool(WfActivityImpl.java:1487)
        at org.enhydra.shark.WfActivityImpl.startActivity(WfActivityImpl.java:1419)
        at org.enhydra.shark.WfActivityImpl.activate(WfActivityImpl.java:261)
        at org.enhydra.shark.WfProcessImpl.startActivity(WfProcessImpl.java:918)
        at org.enhydra.shark.WfProcessImpl.queueNext(WfProcessImpl.java:1134)
        at org.enhydra.shark.WfProcessImpl.run(WfProcessImpl.java:750)
        at org.enhydra.shark.WfProcessImpl.activity_complete(WfProcessImpl.java:969)
        at org.enhydra.shark.WfActivityImpl.finish(WfActivityImpl.java:441)
        at org.enhydra.shark.WfActivityImpl.complete(WfActivityImpl.java:366)
        at org.enhydra.shark.WfActivityWrapper.complete(WfActivityWrapper.java:230)
        at org.joget.workflow.model.service.WorkflowManagerImpl.assignmentComplete(WorkflowManagerImpl.java:4574)
        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.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:310)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
        at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
        at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
        at org.joget.workflow.util.AuditTrailInterceptor.invoke(AuditTrailInterceptor.java:21)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
        at org.joget.workflow.util.AuditTrailInterceptor.invoke(AuditTrailInterceptor.java:21)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
        at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
        at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
        at $Proxy9.assignmentComplete(Unknown Source)
        at org.joget.workflow.model.WorkflowFacade.assignmentComplete(WorkflowFacade.java:465)
        at org.joget.workflow.controller.WorkflowJsonController.assignmentComplete(WorkflowJsonController.java:1237)
        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.springframework.web.bind.annotation.support.HandlerMethodInvoker.doInvokeMethod(HandlerMethodInvoker.java:413)
        at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:134)
        at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:310)
        at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:297)
        at org.joget.commons.spring.web.ParameterizedAnnotationMethodHandlerAdapter.handle(ParameterizedAnnotationMethodHandlerAdapter.java:30)
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:875)
        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:809)
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571)
        at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:511)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:359)
        at org.springframework.security.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109)
        at org.springframework.security.intercept.web.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
        at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
        at org.springframework.security.ui.SessionFixationProtectionFilter.doFilterHttp(SessionFixationProtectionFilter.java:67)
        at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
        at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
        at org.joget.workflow.security.WorkflowNtlmProcessingFilter.doFilterHttp(WorkflowNtlmProcessingFilter.java:52)
        at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
        at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
        at org.springframework.security.ui.ExceptionTranslationFilter.doFilterHttp(ExceptionTranslationFilter.java:101)
        at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
        at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
        at org.springframework.security.providers.anonymous.AnonymousProcessingFilter.doFilterHttp(AnonymousProcessingFilter.java:105)
        at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
        at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
        at org.springframework.security.ui.AbstractProcessingFilter.doFilterHttp(AbstractProcessingFilter.java:271)
        at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
        at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
        at org.springframework.security.ui.AbstractProcessingFilter.doFilterHttp(AbstractProcessingFilter.java:271)
        at org.joget.workflow.security.WorkflowHttpAuthProcessingFilter.doFilterHttp(WorkflowHttpAuthProcessingFilter.java:39)
        at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
        at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
        at org.springframework.security.ui.logout.LogoutFilter.doFilterHttp(LogoutFilter.java:89)
        at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
        at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
        at org.springframework.security.context.HttpSessionContextIntegrationFilter.doFilterHttp(HttpSessionContextIntegrationFilter.java:235)
        at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
        at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
        at org.springframework.security.util.FilterChainProxy.doFilter(FilterChainProxy.java:174)
        at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:236)
        at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
        at java.lang.Thread.run(Thread.java:662)
INFO  31 May 2011 15:56:20 org.joget.plugin.email.EmailPlugin$1  - EmailPlugin: Sending email from=postmaster@somedomain.com, to=cc=root@somedomain.com, subject=Testing
INFO  31 May 2011 15:56:20 org.joget.workflow.controller.WorkflowJsonController  - Assignment 109_104_email_check_e_mail_process_send_e_mail completed
INFO  31 May 2011 15:56:20 org.joget.plugin.email.EmailPlugin$1  - EmailPlugin: Sending email completed for subject=Testing

  • No labels

7 Comments

  1. Hi Chait,

    The "To (participant ID)" field is to be filled up with participant ID, not email address. Could you try filling up the "To (specific email address)" field with abc@somedomain.com (for example), and leave the "To (participant ID)" field empty?

    1. Hi Tiensoon,

           Thanks for replying. I kept "To (participant ID)" field empty and it worked. Where can I get

      the participant ID? Should I use the hash symbol for that?

      Regards.

      1. Mouse-over on a participant in the Participant Mapping tab, and you will be able to see the associated ID. Besides, it is also the ID specified for the participant in Workflow Designer.

        1. Hi Tiensoon,

             I got the participant ID and I kept that into the "To (participant ID)" text box. Here

          it is 'applicant'. Error is not being displayed in the logs but the mail is not being

          delivered to participant ID "applicant". When I use #applicant in "To (participant ID)"

          I am getting a NullPointException error.

                 What should be the value of "To (participant ID)"  so that the mail is delivered to

          whoever applies for the leave?

          Thanks.

          1. The value in "To (participant ID)" should be the participant's ID shown in Participant Mapping, and Workflow Designer. If the "To (participant ID)" feature is used, the participant (in your case "Applicant"), must be mapped in the Participant Mapping, and this mapped participant must have an email address configured for him/her in Setup Users.

            For your case, if you don't have a participant mapped for Applicant (which means, open to everyone), you can use the #performer.activityDefId.email# Hash Variable in the "To (specific email address)" field. You can read my replies in this topic for further understanding about how this Hash Variable can help your case.

            1. Thanks Tiensoon, it worked like a charm!!

              1. No problem. If you find Joget Workflow to suit your needs, hope you can blog about it and help spread the words :)