[ 
https://issues.apache.org/struts/browse/SHALE-481?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

ankit kakkar updated SHALE-481:
-------------------------------

    Priority: Blocker  (was: Major)

Its been a blocker as I am not able to load my custom validation file and thus 
can't move forward with shale validators

> Nullpointer exception when validator resources loaded from the custom 
> configuration file in 1.0.4
> -------------------------------------------------------------------------------------------------
>
>                 Key: SHALE-481
>                 URL: https://issues.apache.org/struts/browse/SHALE-481
>             Project: Shale
>          Issue Type: Bug
>          Components: Validator
>    Affects Versions: 1.0.4
>         Environment: Windows Xp Sp2, Jdk 1.5, Tomcat 5.5, shale 1.0.4
>            Reporter: ankit kakkar
>            Priority: Blocker
>
> The server is throwing nullpointer exception whenever it tries to load rules 
> from custom rule xml file.
> java.lang.NullPointerException
>       at 
> org.apache.shale.validator.CommonsValidator.getValidatorAction(CommonsValidator.java:730)
>       at 
> org.apache.shale.validator.faces.ValidatorScript.writeValidationFunctions(ValidatorScript.java:424)
>       at 
> org.apache.shale.validator.faces.ValidatorScript.encodeBegin(ValidatorScript.java:652)
>       at 
> javax.faces.webapp.UIComponentTag.encodeBegin(UIComponentTag.java:584)
>       at javax.faces.webapp.UIComponentTag.doStartTag(UIComponentTag.java:471)
>       at 
> org.apache.jsp.greeting_jsp._jspx_meth_s_005fvalidatorScript_005f0(greeting_jsp.java:319)
>       at 
> org.apache.jsp.greeting_jsp._jspx_meth_h_005fform_005f0(greeting_jsp.java:173)
>       at 
> org.apache.jsp.greeting_jsp._jspx_meth_f_005fview_005f0(greeting_jsp.java:115)
>       at org.apache.jsp.greeting_jsp._jspService(greeting_jsp.java:80)
>       at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
>       at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
>       at 
> org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:328)
>       at 
> org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:315)
>       at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
>       at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
>       at 
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
>       at 
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
>       at 
> org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:691)
>       at 
> org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:469)
>       at 
> org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:403)
>       at 
> org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
>       at 
> com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:322)
>       at 
> com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:147)
>       at 
> org.apache.shale.validator.faces.ValidatorViewHandler.renderView(ValidatorViewHandler.java:130)
>       at 
> com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:87)
>       at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:200)
>       at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:117)
>       at javax.faces.webapp.FacesServlet.service(FacesServlet.java:198)
>       at 
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
>       at 
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
>       at 
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)
>       at 
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
>       at 
> org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:433)
>       at 
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
>       at 
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
>       at 
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
>       at 
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
>       at 
> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)
>       at 
> org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
>       at 
> org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
>       at 
> org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
>       at 
> org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)
>       at java.lang.Thread.run(Thread.java:595)
> Jan 4, 2008 4:53:50 PM org.apache.catalina.core.StandardWrapperValve invoke
> SEVERE: Servlet.service() for servlet Faces Servlet threw exception
> When I analyzed this issue, I found that there is a bit of code missing which 
> was handling the null case and was loading the customer validation xml file 
> from the web.xml of the application.
> I am pasting the relevent function from the latest version ie 1.0.4
> package org.apache.shale.validator;
> /**
>      * <p>Return the validator resources that were configured and cached
>      * at application startup time.</p>
>      */
>     private static ValidatorResources getValidatorResources() {
>        FacesContext context = FacesContext.getCurrentInstance();
>        ExternalContext external = context.getExternalContext();
>        Map applicationMap = external.getApplicationMap();
>        return (ValidatorResources) 
> applicationMap.get(Globals.VALIDATOR_RESOURCES);
>     }
> Now I am pasting the same function from the previous version. I noticed this 
> on the 
> http://shale.apache.org/shale-core/xref/org/apache/shale/validator/CommonsValidator.html
>  url.
> /***
> 461     * This method lazily configures validator resources by reading either
> 462     * the default <code>validalidator-rules.xml</code> file in
> 463     * shale-core.jar or the list of resources configured using the init
> 464     * param <code>org.apache.shale.validator.VALIDATOR_RULES</code>.
> 465     *
> 466     * @return validator resources loaded from the configuration file.
> 467     */
> 468     private static ValidatorResources getValidatorResources() {
> 469         final String VALIDATOR_RESOURCES_KEY =
> 470             "org.apache.shale.validator.resources";
> 471        FacesContext context = FacesContext.getCurrentInstance();
> 472        ExternalContext external = context.getExternalContext();
> 473        Map applicationMap = external.getApplicationMap();
> 474        ValidatorResources validatorResources
> 475           = (ValidatorResources) 
> applicationMap.get(VALIDATOR_RESOURCES_KEY);
> 476        if (validatorResources == null) {
> 477           try {
> 478              String pathnames = 
> external.getInitParameter(Globals.VALIDATOR_RULES);
> 479              if (pathnames == null || pathnames.length() <= 0) {
> 480                 pathnames = Globals.DEFAULT_VALIDATOR_RULES;
> 481              }
> 482              StringTokenizer st = new StringTokenizer(pathnames, ",");
> 483              List urlList = new ArrayList();
> 484              while (st.hasMoreTokens()) {
> 485                 String validatorRules = st.nextToken().trim();
> 486                 logger.log(Level.INFO,
> 487                   messages.getMessage("commonsValidator.loadresource",
> 488                                       new Object[] {validatorRules}));
> 489                 URL input = external.getResource(validatorRules);
> 490                 if (input == null) {
> 491                    input = 
> CommonsValidator.class.getResource(validatorRules);
> 492                 }
> 493                 if (input != null) {
> 494                    urlList.add(input);
> 495                 } else {
> 496                    logger.log(Level.WARNING,
> 497                      messages.getMessage("commonsValidator.skipresource",
> 498                                           new Object[] {validatorRules}));
> 499                 }
> 500              }
> 501              int urlSize = urlList.size();
> 502              String[] urlArray = new String[urlSize];
> 503              for (int urlIndex = 0; urlIndex < urlSize; urlIndex++) {
> 504                 URL url = (URL) urlList.get(urlIndex);
> 505                 urlArray[urlIndex] = url.toExternalForm();
> 506              }
> 507              validatorResources = new ValidatorResources(urlArray);
> 508              applicationMap.put(VALIDATOR_RESOURCES_KEY, 
> validatorResources);
> 509           } catch (IOException ex) {
> 510              logger.log(Level.SEVERE, 
> messages.getMessage("commonsValidator.loaderror"), ex);
> 511              return null;
> 512           } catch (SAXException ex) {
> 513              logger.log(Level.SEVERE, 
> messages.getMessage("commonsValidator.loaderror"), ex);
> 514              return null;
> 515           }
> 516        }
> 517 
> 518        return validatorResources;
> 519     }
> You yourself can see here that validatorResources is checked for null in the 
> second case but it has been returned directly from the latest version 
> implementation.
> Pls look into the same asap and if now there is some alternate way of doing 
> this thing, then do let me know.
> thanks and regards,
> ankit kakkar

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to