Page 1 of 1

custom file not found page

Posted: Sun May 25, 2014 4:28 am
by prabhat.kataria
I want to add my custom file not found page and for that I added following code in web.xml

Code: Select all

<error-page>
   <error-code>404</error-code>
   <location>/test</location>
</error-page>


and created a controller with request mapping "/test" inside package "com.mycompany.controller.content" that returns a view string "test". Also I have created a "test.html" inside "template/content" folder. Now when I hit a non existing url i get following error

Code: Select all

SEVERE: Servlet.service() for servlet mycompany threw exception
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: org.broadleafcommerce.core.catalog.domain.CategoryImpl.allChildCategoryXrefs, could not initialize proxy - no Session
   at org.hibernate.collection.internal.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:566)
   at org.hibernate.collection.internal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:186)
   at org.hibernate.collection.internal.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:545)
   at org.hibernate.collection.internal.AbstractPersistentCollection.read(AbstractPersistentCollection.java:124)
   at org.hibernate.collection.internal.PersistentBag.iterator(PersistentBag.java:266)
   at org.broadleafcommerce.core.catalog.domain.CategoryImpl.getChildCategoryXrefs(CategoryImpl.java:616)
   at org.broadleafcommerce.core.web.processor.CategoriesProcessor.modifyModelAttributes(CategoriesProcessor.java:84)
   at org.broadleafcommerce.common.web.dialect.AbstractModelVariableModifierProcessor.processElement(AbstractModelVariableModifierProcessor.java:57)
   at org.thymeleaf.processor.element.AbstractElementProcessor.doProcess(AbstractElementProcessor.java:74)
   at org.thymeleaf.processor.AbstractProcessor.process(AbstractProcessor.java:212)
   at org.thymeleaf.dom.Node.applyNextProcessor(Node.java:1016)
   at org.thymeleaf.dom.Node.processNode(Node.java:971)
   at org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
   at org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
   at org.thymeleaf.dom.Node.processNode(Node.java:990)
   at org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
   at org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
   at org.thymeleaf.dom.Node.processNode(Node.java:990)
   at org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
   at org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
   at org.thymeleaf.dom.Node.processNode(Node.java:990)
   at org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
   at org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
   at org.thymeleaf.dom.Node.processNode(Node.java:990)
   at org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
   at org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
   at org.thymeleaf.dom.Node.processNode(Node.java:990)
   at org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
   at org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
   at org.thymeleaf.dom.Node.processNode(Node.java:990)
   at org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
   at org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
   at org.thymeleaf.dom.Node.processNode(Node.java:990)
   at org.thymeleaf.dom.Document.process(Document.java:93)
   at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1155)
   at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1060)
   at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1011)
   at org.thymeleaf.spring3.view.ThymeleafView.renderFragment(ThymeleafView.java:335)
   at org.thymeleaf.spring3.view.ThymeleafView.render(ThymeleafView.java:190)
   at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1208)
   at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:992)
   at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:939)
   at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
   at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:936)
   at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:827)
   at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
   at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812)
   at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
   at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)
   at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:438)
   at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)
   at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
   at org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:421)
   at org.apache.catalina.core.StandardHostValve.status(StandardHostValve.java:342)
   at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)
   at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
   at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
   at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
   at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
   at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
   at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
   at java.lang.Thread.run(Thread.java:662)
May 25, 2014 1:29:45 PM org.apache.catalina.core.StandardHostValve custom
SEVERE: Exception Processing ErrorPage[errorCode=404, location=/test]
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.thymeleaf.exceptions.TemplateProcessingException: Error during execution of processor 'org.broadleafcommerce.core.web.processor.CategoriesProcessor' (layout/partials/header:45)
   at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:948)
   at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:827)
   at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
   at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812)
   at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
   at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)
   at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:438)
   at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)
   at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
   at org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:421)
   at org.apache.catalina.core.StandardHostValve.status(StandardHostValve.java:342)
   at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)
   at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
   at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
   at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
   at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
   at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
   at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
   at java.lang.Thread.run(Thread.java:662)
Caused by: org.thymeleaf.exceptions.TemplateProcessingException: Error during execution of processor 'org.broadleafcommerce.core.web.processor.CategoriesProcessor' (layout/partials/header:45)
   at org.thymeleaf.processor.AbstractProcessor.process(AbstractProcessor.java:223)
   at org.thymeleaf.dom.Node.applyNextProcessor(Node.java:1016)
   at org.thymeleaf.dom.Node.processNode(Node.java:971)
   at org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
   at org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
   at org.thymeleaf.dom.Node.processNode(Node.java:990)
   at org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
   at org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
   at org.thymeleaf.dom.Node.processNode(Node.java:990)
   at org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
   at org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
   at org.thymeleaf.dom.Node.processNode(Node.java:990)
   at org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
   at org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
   at org.thymeleaf.dom.Node.processNode(Node.java:990)
   at org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
   at org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
   at org.thymeleaf.dom.Node.processNode(Node.java:990)
   at org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
   at org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
   at org.thymeleaf.dom.Node.processNode(Node.java:990)
   at org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
   at org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
   at org.thymeleaf.dom.Node.processNode(Node.java:990)
   at org.thymeleaf.dom.Document.process(Document.java:93)
   at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1155)
   at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1060)
   at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1011)
   at org.thymeleaf.spring3.view.ThymeleafView.renderFragment(ThymeleafView.java:335)
   at org.thymeleaf.spring3.view.ThymeleafView.render(ThymeleafView.java:190)
   at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1208)
   at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:992)
   at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:939)
   at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
   at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:936)
   ... 20 more
Caused by: org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: org.broadleafcommerce.core.catalog.domain.CategoryImpl.allChildCategoryXrefs, could not initialize proxy - no Session
   at org.hibernate.collection.internal.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:566)
   at org.hibernate.collection.internal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:186)
   at org.hibernate.collection.internal.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:545)
   at org.hibernate.collection.internal.AbstractPersistentCollection.read(AbstractPersistentCollection.java:124)
   at org.hibernate.collection.internal.PersistentBag.iterator(PersistentBag.java:266)
   at org.broadleafcommerce.core.catalog.domain.CategoryImpl.getChildCategoryXrefs(CategoryImpl.java:616)
   at org.broadleafcommerce.core.web.processor.CategoriesProcessor.modifyModelAttributes(CategoriesProcessor.java:84)
   at org.broadleafcommerce.common.web.dialect.AbstractModelVariableModifierProcessor.processElement(AbstractModelVariableModifierProcessor.java:57)
   at org.thymeleaf.processor.element.AbstractElementProcessor.doProcess(AbstractElementProcessor.java:74)
   at org.thymeleaf.processor.AbstractProcessor.process(AbstractProcessor.java:212)
   ... 54 more


Is my approach correct, if not then what is the best way to do it.

Re: custom file not found page

Posted: Wed May 28, 2014 1:51 pm
by phillipuniverse
The problem is that the OpenEntityManagerInViewFilter is not activated on the error page, since by default servlet containers do not activate filters within the ERROR dispatch. You can fix this by adding the spring security filter chain to the ERROR dispatch in your web.xml:

Code: Select all

<filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>ERROR</dispatcher>       
</filter-mapping>

Re: custom file not found page

Posted: Thu May 29, 2014 4:26 am
by prabhat.kataria
Hi philip, I followed your instructions and the exception that i have mentioned is not coming anymore but instead I am facing another exception which is as below

Code: Select all

SEVERE: Servlet.service() for servlet mycompany threw exception
java.lang.NullPointerException
   at org.broadleafcommerce.common.web.BroadleafRequestCustomerResolverImpl.setCustomer(BroadleafRequestCustomerResolverImpl.java:62)
   at org.broadleafcommerce.profile.web.core.CustomerState.setCustomer(CustomerState.java:52)
   at org.broadleafcommerce.profile.web.core.security.CustomerStateRequestProcessor.process(CustomerStateRequestProcessor.java:134)
   at org.broadleafcommerce.profile.web.core.security.CustomerStateFilter.doFilter(CustomerStateFilter.java:55)
   at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)


On investigating around this exception, I noticed that "setCustomer" method of "BroadleafRequestCustomerResolverImpl" class is called twice and request reference becomes null after the second call.

Re: custom file not found page

Posted: Sun Jun 01, 2014 3:15 am
by prabhat.kataria
tried a few other things but ending with one of the two exceptions mentioned previously.

Re: custom file not found page

Posted: Mon Jun 09, 2014 6:41 am
by prabhat.kataria
Finally i am able to set up custom error page for my website by doing following change.

Code: Select all

<error-page>
   <error-code>404</error-code>
   <location>/WEB-INF/templates/content/test.jsp</location>
</error-page>


that's it. Clearly what i have done is provided absolute path in web.xml for error page.

NOTE: While trying to figure out a way of creating customized error page i noticed a very peculiar behavior. If in above code if change .jsp to .html and create a new file test.html at the same location, this configuration will throw exception that i initially mentioned in this post, org.hibernate.LazyInitializationException. Don't know why the behavior is such !!