views:

599

answers:

1

Hi Guys, Im a bit at my wits end here. Im getting the following in my logs when I try to render a JSF page:

java.lang.NullPointerException: serialFactory
at org.apache.myfaces.shared_impl.util.StateUtils.getAsByteArray(StateUtils.java:182)
at org.apache.myfaces.shared_impl.util.StateUtils.construct(StateUtils.java:149)
at org.apache.myfaces.renderkit.html.HtmlResponseStateManager.writeViewStateField(HtmlResponseStateManager.java:104)
at org.apache.myfaces.renderkit.html.HtmlResponseStateManager.writeState(HtmlResponseStateManager.java:94)
at javax.faces.render.ResponseStateManager.writeState(ResponseStateManager.java:67)
at org.ajax4jsf.application.AjaxStateManager.writeState(AjaxStateManager.java:294)
at org.ajax4jsf.application.AjaxStateManager.writeState(AjaxStateManager.java:256)
at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:620)
at org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:100)
at org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:176)
at org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:41)
at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:140)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:155)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:301)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178)
at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:368)
at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:495)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at za.co.fnbconnect.portal.util.SessionTimeoutFilter.doFilter(SessionTimeoutFilter.java:94)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at za.co.fnbconnect.portal.util.StatsFilter.doFilter(StatsFilter.java:90)
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.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190)
at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:283)
at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:767)
at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:697)
at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:889)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690)
at java.lang.Thread.run(Unknown Source)

This is my web.xml

<?xml version="1.0"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"&gt;
    <!-- Use Documents Saved as *.xhtml -->
    <context-param>
     <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
     <param-value>.xhtml</param-value>
    </context-param>
    <!-- Special Debug Output for Development -->
    <context-param>
     <param-name>facelets.DEVELOPMENT</param-name>
     <param-value>false</param-value>
    </context-param>
    <context-param>
     <param-name>org.apache.myfaces.ERROR_HANDLING</param-name>
     <param-value>false</param-value>
    </context-param>
    <!-- Optional JSF-RI Parameters to Help Debug -->
    <context-param>
     <param-name>com.sun.faces.validateXml</param-name>
     <param-value>true</param-value>
    </context-param>
    <context-param>
     <param-name>com.sun.faces.verifyObjects</param-name>
     <param-value>true</param-value>
    </context-param>
    <!-- context-param>
     <param-name>javax.faces.CONFIG_FILES</param-name>
     <param-value>
     /WEB-INF/faces-config.xml
     </param-value>
     </context-param-->
    <context-param>
     <param-name>org.apache.myfaces.ALLOW_JAVASCRIPT</param-name>
     <param-value>true</param-value>
    </context-param>
    <context-param>
     <param-name>org.apache.myfaces.PRETTY_HTML</param-name>
     <param-value>true</param-value>
    </context-param>
    <context-param>
     <param-name>org.ajax4jsf.VIEW_HANDLERS</param-name>
     <param-value>com.sun.facelets.FaceletViewHandler</param-value>
    </context-param>
    <context-param>
     <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
     <param-value>server</param-value>
    </context-param>
    <context-param>
     <param-name>javax.faces.PARTIAL_STATE_SAVING</param-name>
     <param-value>false</param-value>
    </context-param>
    <context-param>
     <param-name>javax.faces.CONFIG_FILES</param-name>
     <param-value>
      /WEB-INF/faces-config-connections.xml,
      /WEB-INF/faces-config-general.xml,
      /WEB-INF/faces-config-ims.xml,
      /WEB-INF/faces-config-maintenance.xml,
      /WEB-INF/faces-config-menu.xml,
      /WEB-INF/faces-config-profile.xml,
      /WEB-INF/faces-config-registration-activation.xml,
      /WEB-INF/faces-config-registration.xml,
      /WEB-INF/faces-config-solutions.xml,
      /WEB-INF/faces-config-topup.xml,   
      /WEB-INF/faces-config-transfer.xml
     </param-value>
    </context-param>
    <context-param> 
        <description>Used for  addition Im. Only relevant for client side 
            state saving. See MyFaces wiki/web site documentation for instructions 
            on how to configure an application for diffenent encryption strengths. 
        </description> 
        <param-name>org.apache.myfaces.SECRET</param-name> 
        <param-value>NzY1NDMyMTA=</param-value> 
    </context-param> 
    <context-param>
        <param-name>org.apache.myfaces.SERIAL_FACTORY</param-name>
        <param-value>org.apache.myfaces.JbossSerialFactory</param-value>
    </context-param>
    <filter>
     <filter-name>SessionTimeoutFilter</filter-name>
     <filter-class>
      za.co.fnbconnect.portal.util.SessionTimeoutFilter
     </filter-class>
    </filter>
    <filter>
     <filter-name>StatsFilter</filter-name>
     <filter-class>
      za.co.fnbconnect.portal.util.StatsFilter
     </filter-class>
    </filter>
    <filter-mapping>
     <filter-name>StatsFilter</filter-name>
     <url-pattern>*.faces</url-pattern>
    </filter-mapping>
    <filter>
     <display-name>RichFaces Filter</display-name>
     <filter-name>richfaces</filter-name>
     <filter-class>org.ajax4jsf.Filter</filter-class>
    </filter>
    <filter-mapping>
     <filter-name>SessionTimeoutFilter</filter-name>
     <url-pattern>*.faces</url-pattern>
    </filter-mapping>
    <filter-mapping>
     <filter-name>richfaces</filter-name>
     <servlet-name>Faces Servlet</servlet-name>
     <dispatcher>REQUEST</dispatcher>
     <dispatcher>FORWARD</dispatcher>
     <dispatcher>INCLUDE</dispatcher>
    </filter-mapping>
    <!-- tomahawk extension filters -->
    <filter>
     <filter-name>MyFacesExtensionsFilter</filter-name>
     <filter-class>org.apache.myfaces.webapp.filter.ExtensionsFilter</filter-class>
        <init-param>
            <param-name>uploadMaxFileSize</param-name>
            <param-value>20m</param-value>
        </init-param>
    </filter>

    <!-- extension mapping for adding <script/>, <link/>, and other resource tags to JSF-pages  -->
    <filter-mapping>
        <filter-name>MyFacesExtensionsFilter</filter-name>
        <!-- servlet-name must match the name of your javax.faces.webapp.FacesServlet entry -->
        <servlet-name>Faces Servlet</servlet-name>
    </filter-mapping>

    <!-- extension mapping for serving page-independent resources (javascript, stylesheets, images, etc.)  -->
    <filter-mapping>
        <filter-name>MyFacesExtensionsFilter</filter-name>
        <url-pattern>/faces/myFacesExtensionResource/*</url-pattern>
    </filter-mapping> 
    <!-- end --> 
    <listener>
     <listener-class>
      za.co.fnbconnect.portal.util.FNBConnectSessionListener
     </listener-class>
    </listener>
    <!-- Listener, that does all the startup work (configuration, init). -->
    <listener>
     <listener-class>
      org.apache.myfaces.webapp.StartupServletContextListener
     </listener-class>
    </listener>
    <servlet>
     <servlet-name>Log4jInitialiser</servlet-name>
     <servlet-class>za.co.fnbconnect.log4j.Log4jInitializer</servlet-class>
     <!--  DEV -->
     <init-param>
      <param-name>DEV-hosts</param-name>
      <param-value>192.168.18.14</param-value>
     </init-param>
     <init-param>
      <param-name>DEV-log4j-init-file</param-name>
      <param-value>/opt/PropertiesManager/tomcat-log4j-DEV.xml</param-value>
     </init-param>

     <!--  INT -->
     <init-param>
      <param-name>INT-hosts</param-name>
      <param-value>192.168.18.73</param-value>
     </init-param>
     <init-param>
      <param-name>INT-log4j-init-file</param-name>
      <param-value>/opt/PropertiesManager/tomcat-log4j-INT.xml</param-value>
     </init-param>

     <!--  PREPROD -->
     <init-param>
      <param-name>PREPROD-hosts</param-name>
      <param-value>192.168.18.139</param-value>
     </init-param>
     <init-param>
      <param-name>PREPROD-log4j-init-file</param-name>
      <param-value>/opt/PropertiesManager/tomcat-log4j-PREPROD.xml</param-value>
     </init-param>

     <!--  LOAD -->
     <init-param>
      <param-name>LOAD-hosts</param-name>
      <param-value>192.168.44.6,192.168.44.13</param-value>
     </init-param>
     <init-param>
      <param-name>LOAD-log4j-init-file</param-name>
      <param-value>/opt/PropertiesManager/tomcat-log4j-LOAD.xml</param-value>
     </init-param>

     <!--  PROD -->
     <init-param>
      <param-name>PROD-hosts</param-name>
      <param-value>192.168.34.6,192.168.34.135</param-value>
     </init-param>
     <init-param>
      <param-name>PROD-log4j-init-file</param-name>
      <param-value>/opt/PropertiesManager/tomcat-log4j-PROD.xml</param-value>
     </init-param>


     <!--  Default when running on the PC -->
     <init-param>
      <param-name>DEFAULT-log4j-init-file</param-name>
      <param-value>C:/FNBConnect/PropertiesManager/FE/tomcat-log4j-PC.xml</param-value>
     </init-param>
     <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet>
     <servlet-name>Faces Servlet</servlet-name>
     <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
     <load-on-startup>2</load-on-startup>
    </servlet>
    <servlet-mapping>
     <servlet-name>Faces Servlet</servlet-name>
     <url-pattern>*.faces</url-pattern>
    </servlet-mapping>
    <session-config>
     <session-timeout>10</session-timeout>
    </session-config>
    <!-- Welcome files -->
    <error-page>
     <error-code>401</error-code>
     <location>/GeneralError.jsp</location>
    </error-page>
    <error-page>
     <error-code>402</error-code>
     <location>/GeneralError.jsp</location>
    </error-page>
    <error-page>
     <error-code>403</error-code>
     <location>/GeneralError.jsp</location>
    </error-page>
    <error-page>
     <error-code>404</error-code>
     <location>/GeneralError.jsp</location>
    </error-page>
    <error-page>
     <error-code>405</error-code>
     <location>/GeneralError.jsp</location>
    </error-page>
    <error-page>
     <error-code>406</error-code>
     <location>/GeneralError.jsp</location>
    </error-page>
    <error-page>
     <error-code>407</error-code>
     <location>/GeneralError.jsp</location>
    </error-page>
    <error-page>
     <error-code>408</error-code>
     <location>/GeneralError.jsp</location>
    </error-page>
    <error-page>
     <error-code>409</error-code>
     <location>/GeneralError.jsp</location>
    </error-page>
    <error-page>
     <error-code>410</error-code>
     <location>/GeneralError.jsp</location>
    </error-page>
    <error-page>
     <error-code>411</error-code>
     <location>/GeneralError.jsp</location>
    </error-page>
    <error-page>
     <error-code>412</error-code>
     <location>/GeneralError.jsp</location>
    </error-page>
    <error-page>
     <error-code>413</error-code>
     <location>/GeneralError.jsp</location>
    </error-page>
    <error-page>
     <error-code>414</error-code>
     <location>/GeneralError.jsp</location>
    </error-page>
    <error-page>
     <error-code>415</error-code>
     <location>/GeneralError.jsp</location>
    </error-page>
    <error-page>
     <error-code>416</error-code>
     <location>/GeneralError.jsp</location>
    </error-page>
    <error-page>
     <error-code>417</error-code>
     <location>/GeneralError.jsp</location>
    </error-page>
    <error-page>
     <error-code>418</error-code>
     <location>/GeneralError.jsp</location>
    </error-page>
    <error-page>
     <error-code>422</error-code>
     <location>/GeneralError.jsp</location>
    </error-page>
    <error-page>
     <error-code>423</error-code>
     <location>/GeneralError.jsp</location>
    </error-page>
    <error-page>
     <error-code>424</error-code>
     <location>/GeneralError.jsp</location>
    </error-page>
    <error-page>
     <error-code>425</error-code>
     <location>/GeneralError.jsp</location>
    </error-page>
    <error-page>
     <error-code>426</error-code>
     <location>/GeneralError.jsp</location>
    </error-page>
    <error-page>
     <error-code>449</error-code>
     <location>/GeneralError.jsp</location>
    </error-page>
    <error-page>
     <error-code>500</error-code>
     <location>/GeneralError.jsp</location>
    </error-page>
    <error-page>
     <error-code>501</error-code>
     <location>/GeneralError.jsp</location>
    </error-page>
    <error-page>
     <error-code>502</error-code>
     <location>/GeneralError.jsp</location>
    </error-page>
    <error-page>
     <error-code>503</error-code>
     <location>/GeneralError.jsp</location>
    </error-page>
    <error-page>
     <error-code>504</error-code>
     <location>/GeneralError.jsp</location>
    </error-page>
    <error-page>
     <error-code>505</error-code>
     <location>/GeneralError.jsp</location>
    </error-page>
    <error-page>
     <error-code>506</error-code>
     <location>/GeneralError.jsp</location>
    </error-page>
    <error-page>
     <error-code>507</error-code>
     <location>/GeneralError.jsp</location>
    </error-page>
    <error-page>
     <error-code>509</error-code>
     <location>/GeneralError.jsp</location>
    </error-page>
    <error-page>
     <error-code>510</error-code>
     <location>/GeneralError.jsp</location>
    </error-page> 
    <login-config>
     <auth-method>BASIC</auth-method>
    </login-config>
</web-app>

Ive looked at the source and it seems to want to get the org.apache.myfaces.SERIAL_FACTORY from the context, whitch is not there for some reason. Any-one has any ideas?

+1  A: 

Just a guess (I have not tried this out), but it does appear to be a similar stack trace, as well as a code fix of exporting SERIAL_FACTORY as an Attribute:

http://wiki.apache.org/myfaces/PortletSerialFactoryWorkaround

Here is the exception they specify:

java.lang.NullPointerException: serialFactory
        at org.apache.myfaces.shared_impl.util.StateUtils.getAsByteArray(StateUtils.java:174)
        at org.apache.myfaces.shared_impl.util.StateUtils.construct(StateUtils.java:150)
        at org.apache.myfaces.renderkit.html.HtmlResponseStateManager.writeState(HtmlResponseStateMa
nager.java:73)
        at org.apache.myfaces.application.jsp.JspStateManagerImpl.writeState(JspStateManagerImpl.jav
a:430)

And, the fix they recommend: "To work around this problem, extend MyFacesGenericPortlet and override the init() method as follows:"

public void init() throws PortletException, UnavailableException
{
   super.init();
   getPortletContext().setAttribute("org.apache.myfaces.SERIAL_FACTORY", new org.apache.myfaces.shared_impl.util.serial.DefaultSerialFactory()); 
}
dpb