Register.java, template "email/Confirmation.vm" and a NullPointer

Nigel Tamplin <[email protected]> Thu, 18 Sep 2008 22:44:54 +0100
Newsgroups gmane.comp.java.scarab.devel
Message-ID <[email protected]>
I've checked out and built Scarab from the trunk, I've spotted a little 
problem that I'd like to fix.

The problem is during registration.

The template "email/Confirmation.vm" (which is used to generate the body 
text of the confirmation email when registering) causes a NullPointer 
exception when it gets merged, thus stopping the registration email from 
being sent.  (Stack trace attached)

Method sendConfirmationEmail() in class 
org.tigris.scarab.actions.Register (which gets called from 
doConfirmregistration and doResendconfirmationcode) uses the template 
and the template contains the line

$link.setPage("Confirm.vm").addPathInfo("Confirm", 
$scarabR.User.Confirmed).addPathInfo("UserName",$scarabR.User.UserName).setEncodeUrl(false).setRelative(false).overrideSecurity()

The problem arises as $scarabR.User is null - as the java code in 
Register.java never calls scarabR.setuser(su).

I see in 0.21 that Register.java does call scarabR.setuser(su) prior to 
merging the template.

To get the registrations working I added
    if (scarabR != null)
    {
        scarabR.setUser(su);
    }
just before the 2 calls to
    sendConfirmationEmail(su, context);
to my copy of Register.java

However my thoughts are that either
a) Register.java has evolved and email/Confirmation.vm needs updating to 
match; or
b) Register.java should still be doing a scarabR.setUser(su);

I opted for b, but I could be wrong.

Your comments please,

Nigel

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
stacktrace.txt (text/plain, 7.8 KB)
  	org.apache.turbine.TurbineException: org.apache.commons.mail.EmailException: Cannot parse email template
	at org.apache.turbine.pipeline.DefaultActionValve.invoke(DefaultActionValve.java:104)
	at org.apache.turbine.pipeline.TurbinePipeline.invokeNext(TurbinePipeline.java:231)
	at org.apache.turbine.pipeline.DefaultACLCreationValve.invoke(DefaultACLCreationValve.java:127)
	at org.apache.turbine.pipeline.TurbinePipeline.invokeNext(TurbinePipeline.java:231)
	at org.tigris.scarab.pipeline.SetLocaleValve.invoke(SetLocaleValve.java:112)
	at org.apache.turbine.pipeline.TurbinePipeline.invokeNext(TurbinePipeline.java:231)
	at org.tigris.scarab.pipeline.FreshenUserValve.invoke(FreshenUserValve.java:189)
	at org.apache.turbine.pipeline.TurbinePipeline.invokeNext(TurbinePipeline.java:231)
	at org.apache.turbine.pipeline.DefaultSessionValidationValve.invoke(DefaultSessionValidationValve.java:131)
	at org.apache.turbine.pipeline.TurbinePipeline.invokeNext(TurbinePipeline.java:231)
	at org.apache.turbine.pipeline.DefaultLoginValve.invoke(DefaultLoginValve.java:109)
	at org.apache.turbine.pipeline.TurbinePipeline.invokeNext(TurbinePipeline.java:231)
	at org.tigris.scarab.pipeline.AnonymousLoginValve.invoke(AnonymousLoginValve.java:62)
	at org.apache.turbine.pipeline.TurbinePipeline.invokeNext(TurbinePipeline.java:231)
	at org.tigris.scarab.pipeline.NTLMLoginValve.invoke(NTLMLoginValve.java:78)
	at org.apache.turbine.pipeline.TurbinePipeline.invokeNext(TurbinePipeline.java:231)
	at org.apache.turbine.pipeline.DefaultSessionTimeoutValve.invoke(DefaultSessionTimeoutValve.java:121)
	at org.apache.turbine.pipeline.TurbinePipeline.invokeNext(TurbinePipeline.java:231)
	at org.tigris.scarab.pipeline.DetermineTargetValve.invoke(DetermineTargetValve.java:138)
	at org.apache.turbine.pipeline.TurbinePipeline.invokeNext(TurbinePipeline.java:231)
	at org.apache.turbine.pipeline.DetermineActionValve.invoke(DetermineActionValve.java:107)
	at org.apache.turbine.pipeline.TurbinePipeline.invokeNext(TurbinePipeline.java:231)
	at org.tigris.scarab.pipeline.SetInfoMessageValve.invoke(SetInfoMessageValve.java:85)
	at org.apache.turbine.pipeline.TurbinePipeline.invokeNext(TurbinePipeline.java:231)
	at org.tigris.scarab.pipeline.ResetCacheValve.invoke(ResetCacheValve.java:77)
	at org.apache.turbine.pipeline.TurbinePipeline.invokeNext(TurbinePipeline.java:231)
	at org.tigris.scarab.pipeline.DetermineCharsetValve.invoke(DetermineCharsetValve.java:103)
	at org.apache.turbine.pipeline.TurbinePipeline.invokeNext(TurbinePipeline.java:231)
	at org.tigris.scarab.pipeline.TimingInfoValve.invoke(TimingInfoValve.java:131)
	at org.apache.turbine.pipeline.TurbinePipeline.invokeNext(TurbinePipeline.java:231)
	at org.apache.turbine.pipeline.TurbinePipeline.invoke(TurbinePipeline.java:213)
	at org.apache.turbine.Turbine.doGet(Turbine.java:298)
	at org.apache.turbine.Turbine.doPost(Turbine.java:343)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	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.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:243)
	at java.security.AccessController.doPrivileged(Native Method)
	at javax.security.auth.Subject.doAsPrivileged(Subject.java:517)
	at org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:275)
	at org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:161)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:245)
	at org.apache.catalina.core.ApplicationFilterChain.access$0(ApplicationFilterChain.java:177)
	at org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:156)
	at java.security.AccessController.doPrivileged(Native Method)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:152)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:432)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
	at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
	at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
	at java.lang.Thread.run(Thread.java:619)
Caused by: org.apache.commons.mail.EmailException: Cannot parse email template
	at org.tigris.scarab.services.email.TemplateHtmlEmail.send(TemplateHtmlEmail.java:261)
	at org.tigris.scarab.actions.Register.sendConfirmationEmail(Register.java:307)
	at org.tigris.scarab.actions.Register.doConfirmregistration(Register.java:174)
	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.apache.turbine.modules.actions.TemplateAction.executeEvents(TemplateAction.java:160)
	at org.apache.turbine.modules.ActionEvent.perform(ActionEvent.java:144)
	at org.apache.turbine.modules.ActionEvent.execute(ActionEvent.java:179)
	at org.apache.turbine.pipeline.DefaultActionValve.executeAction(DefaultActionValve.java:139)
	at org.apache.turbine.pipeline.DefaultActionValve.invoke(DefaultActionValve.java:99)
	... 61 more
Caused by: org.apache.fulcrum.ServiceException: Error rendering Velocity template: email/Confirmation.vm
	at org.tigris.scarab.services.email.VelocityEmailService.renderingError(VelocityEmailService.java:413)
	at org.tigris.scarab.services.email.VelocityEmailService.handleRequest(VelocityEmailService.java:334)
	at org.tigris.scarab.services.email.VelocityEmail.handleRequest(VelocityEmail.java:176)
	at org.tigris.scarab.services.email.TemplateHtmlEmail.handleRequest(TemplateHtmlEmail.java:218)
	at org.tigris.scarab.services.email.TemplateHtmlEmail.send(TemplateHtmlEmail.java:256)
	... 72 more
Caused by: java.lang.NullPointerException
	at org.apache.turbine.DynamicURI.addPathInfo(DynamicURI.java:347)
	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.apache.velocity.util.introspection.UberspectImpl$VelMethodImpl.invoke(UberspectImpl.java:267)
	at org.apache.velocity.runtime.parser.node.ASTMethod.execute(ASTMethod.java:197)
	at org.apache.velocity.runtime.parser.node.ASTReference.execute(ASTReference.java:175)
	at org.apache.velocity.runtime.parser.node.ASTReference.render(ASTReference.java:220)
	at org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:230)
	at org.apache.velocity.Template.merge(Template.java:256)
	at org.apache.velocity.app.VelocityEngine.mergeTemplate(VelocityEngine.java:450)
	at org.tigris.scarab.services.email.VelocityEmailService.handleRequest(VelocityEmailService.java:329)