IBM Support

PK26183: NOCLASSDEFFOUNDERROR SEEN WHEN HTTPSESSION DESERIALIZES AN OBJECT.

Fixes are available

6.1.0.7: WebSphere Application Server V6.1 Fix Pack 7 for Solaris
6.1.0.7: WebSphere Application Server V6.1 Fix Pack 7 for HP-UX
6.1.0.7: WebSphere Application Server V6.1 Fix Pack 7 for Linux
6.1.0.5: WebSphere Application Server V6.1.0 Fix Pack 5 for Linux
6.1.0.3: WebSphere Application Server V6.1.0 Fix Pack 3 for Linux
6.1.0.7: WebSphere Application Server V6.1 Fix Pack 7 for Windows
6.1.0.3: WebSphere Application Server V6.1.0 Fix Pack 3 for Windows
6.1.0.7 WebSphere Application Server V6.1 Fix Pack 7 for AIX
6.1.0.5: WebSphere Application Server V6.1.0 Fix Pack 5 for AIX
6.1.0.5: WebSphere Application Server V6.1.0 Fix Pack 5 for i5/OS
6.1.0.7: WebSphere Application Server V6.1 Fix Pack 7 for i5/OS
6.1.0.3: WebSphere Application Server V6.1.0 Fix Pack 3 for HP-UX
6.1.0.5: WebSphere Application Server V6.1.0 Fix Pack 5 for HP-UX
6.1.0.3: WebSphere Application Server V6.1.0 Fix Pack 3 for i5/OS
6.1.0.3: WebSphere Application Server V6.1.0 Fix Pack 3 for AIX
6.1.0.5: WebSphere Application Server V6.1.0 Fix Pack 5 for Windows
Java SDK 1.5 SR8 Cumulative Fix for WebSphere Application Server
Java SDK 1.5 SR8 Cumulative Fix for WebSphere Application Server
Java SDK 1.5 SR10 Cumulative Fix for WebSphere Application Server
6.1.0.31: Java SDK 1.5 SR11 FP1 Cumulative Fix for WebSphere Application Server
6.1.0.33: Java SDK 1.5 SR12 FP1 Cumulative Fix for WebSphere
6.1.0.29: Java SDK 1.5 SR11 Cumulative Fix for WebSphere Application Server
6.1.0.35: Java SDK 1.5 SR12 FP2 Cumulative Fix for WebSphere
6.1.0.37: Java SDK 1.5 SR12 FP3 Cumulative Fix for WebSphere
6.1.0.39: Java SDK 1.5 SR12 FP4 Cumulative Fix for WebSphere Application Server
6.1.0.41: Java SDK 1.5 SR12 FP5 Cumulative Fix for WebSphere Application Server
6.1.0.43: Java SDK 1.5 SR13 Cumulative Fix for WebSphere Application Server
6.1.0.45: Java SDK 1.5 SR14 Cumulative Fix for WebSphere Application Server
6.1.0.47: WebSphere Application Server V6.1 Fix Pack 47
6.1.0.47: Java SDK 1.5 SR16 Cumulative Fix for WebSphere Application Server
6.1.0.3: WebSphere Application Server V6.1.0 Fix Pack 3 for Solaris
6.1.0.5: WebSphere Application Server V6.1.0 Fix Pack 5 for Solaris
6.1.0.9: WebSphere Application Server V6.1 Fix Pack 9 for Solaris

Subscribe

You can track all active APARs for this component.

 

APAR status

  • Closed as program error.

Error description

  • Symptoms:
    The customer frequently faces NoClassDefFoundError at
    reflection. There are two types of failures.
    
    Case1)
    ----------------------------------------------------------------
    -
    SystemOut     O 1    [WebContainer : 1]
    ERROR org.apache.struts.util.RequestUtils  -
     Error creating form bean of class
     java.lang.NoClassDefFoundError:
    ...
      org/apache/struts/validator/ValidatorForm
     at sun.reflect.NativeConstructorAccessorImpl.newInstance0
       (Native Method)
     at sun.reflect.NativeConstructorAccessorImpl.newInstance
       (NativeConstructorAccessorImpl.java(Compiled Code))
     at sun.reflect.DelegatingConstructorAccessorImpl.newInstance
       (DelegatingConstructorAccessorImpl.java(Compiled Code))
     at java.lang.reflect.Constructor.newInstance(Constructor.java
       (Compiled Code))
     at java.lang.Class.newInstance3(Class.java(Compiled Code))
     at java.lang.Class.newInstance(Class.java(Compiled Code))
     at org.apache.struts.util.RequestUtils.applicationInstance
       (RequestUtils.java:231)
    ----------------------------------------------------------------
    -
    .
    Case2)
    ----------------------------------------------------------------
    -
    SystemOut     O 10186     WebContainer : 1]
    ERROR jp.co.XXXXX_sales.logging.CabaLogging  -
     java.lang.NoClassDefFoundError:
    ....
     at
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessor
    Impl.j
     ava(Compiled Code))
      at
     sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccesso
    rImpl.j
     ava(Compiled Code))
      at
     sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMetho
    dAccess
     orImpl.java(Compiled Code))
      at java.lang.reflect.Method.invoke(Method.java(Compiled Code))
     ---------------------------------------------------------------
    --
    
    
    Analysis:
    When an ExceptionInInitializerException is thrown while running
    static initializers of a class, the class is marked as being
    invalid. Subsequent attempts to use the class will result in a
    NoClassDefFoundError.  I think that fixing the
    ExceptionInInitializerError will fix the NoClassDefFoundError.
    
    I believe that the problem is that the wrong context classloader
    is in place when the httpsession deserializes an object.
    Deserializing loads a class for the first time, which
    initializes the ValidatorForm struts class, which initializes
    commons logging, which attempts to load the Jdk14Logger class
    from the (wrong) context classloader.
    
    The stack trace of the error includes:
    
    at com.ibm.ws.webcontainer.httpsession.BackedHashtable.
        oracleGetValue(BackedHashtable.java:3016)
    at com.ibm.ws.webcontainer.httpsession.BackedHashtable.getValue
        (BackedHashtable.java:1331)
    at com.ibm.ws.webcontainer.httpsession.DatabaseSessionData.
        fillAppData(DatabaseSessionData.java:812)
    at com.ibm.ws.webcontainer.httpsession.DatabaseSessionData.
        getSwappableData(DatabaseSessionData.java:328)
    at com.ibm.ws.webcontainer.httpsession.DatabaseSessionData.
        checkActivationListeners(DatabaseSessionData.java:355)
    at com.ibm.ws.webcontainer.httpsession.SessionData.
        notifyActivateListeners(SessionData.java:1335)
    at com.ibm.ws.webcontainer.httpsession.SessionContext.
        getIHttpSession(SessionContext.java:1509)
    at com.ibm.ws.webcontainer.httpsession.SessionContext.
        getIHttpSession(SessionContext.java:2432)
    at com.ibm.ws.webcontainer.httpsession.SessionContext.
        sessionPreInvoke(SessionContext.java:2695)
    at com.ibm.ws.webcontainer.srt.SRTRequestContext.
         sessionPreInvoke(SRTRequestContext.java:56)
    at com.ibm.ws.webcontainer.webapp.WebAppDispatcherContext.
        sessionPreInvoke(WebAppDispatcherContext.java:284)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest
        (ServletWrapper.java:467)
    
    I believe that the context classloader needs to be set to the
    application classloader while loading the application class.
    This could either be done in ServletWrapper.handleRequest or
    BackedHashtable.getValue.
      .
    
    In looking at the traces, it appears we may need to set the
    context classloader before the sessionPreInvoke which
    deserializes the class that leads to the commons logging
    exception.
    

Local fix

  • I-fix available from L2 support
    

Problem summary

  • ****************************************************************
    * USERS AFFECTED: WebSphere Application Server version 6 users *
    *                                                              *
    *                 who get an ExceptionInInitializerException   *
    *                                                              *
    *                 when running static initializer of a class.  *
    ****************************************************************
    * PROBLEM DESCRIPTION: A NoClassDefFoundError exception is     *
    *                      raised when deploying the application   *
    *                      containing the class.                   *
    ****************************************************************
    * RECOMMENDATION:                                              *
    ****************************************************************
    If an ExceptionInInitializerException is thrown while running
    static initializers of a class, the class is marked as being
    invalid.
    
    A NoClassDefFoundError exception is then received when
    deploying an application after server restart. The problem
    goes away if the application is restarted.
    
    There are two ways in which the NoClassDefFound error may be
    reported:
    
    
    
    Case1)
    -------------------------------------------------------------
    SystemOut     O 1    [WebContainer : 1]
    ERROR org.apache.struts.util.RequestUtils  - Error creating
    form
    bean of class jp.co.comp_sales.ccrs.form.FbCcrsDispInfo
    java.lang.NoClassDefFoundError:
    org/apache/struts/validator/ValidatorForm
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0
    (Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance
    (NativeConstructorAccessorImpl.java(Compiled Code))
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance
    (DelegatingConstructorAccessorImpl.java(Compiled Code))
    at java.lang.reflect.Constructor.newInstance(Constructor.java
    (Compiled Code))
    at java.lang.Class.newInstance3(Class.java(Compiled Code))
    at java.lang.Class.newInstance(Class.java(Compiled Code))
    at org.apache.struts.util.RequestUtils.applicationInstance
    (RequestUtils.java:231)
    -------------------------------------------------------------
    
    
    
    Case 2)
    -------------------------------------------------------------
    SystemOut     O 10186     WebContainer : 1] ERROR
    jp.co.comp_sales.logging.CabaLogging  -
    jp.co.comp_sales.ccrs.action.CcrsDispInfoAction
    java.lang.NoClassDefFoundError:
    jp/co/comp_sales/ccrs/form/FbCcrsDispInfo
    at
    jp.co.comp_sales.ccrs.util.CcrsActionUtil.getInfoVOandGroupList
    (CcrsActionUtil.java:4156)
    at jp.co.comp_sales.ccrs.util.CcrsActionUtil.doInitDispInfo
    (CcrsActionUtil.java:4097)
    at  jp.co.comp_sales.ccrs.action.CcrsDispInfoAction.execute
    (CcrsDispInfoAction.java:138)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at
    ....
    
    The problem is that the wrong context classloader is in place
    when the httpsession deserializes an object. Deserializing
    loads a class for the first time, which initializes the
    ValidatorForm struts class, which initializes commons logging,
    which attempts to load the Jdk14Logger class from the (wrong)
    context classloader.
    
    
    
    The stack trace of the error includes:
    
    
    
    at com.ibm.ws.webcontainer.httpsession.BackedHashtable.
    oracleGetValue(BackedHashtable.java:3016)
    at com.ibm.ws.webcontainer.httpsession.BackedHashtable.
    getValue (BackedHashtable.java:1331)
    at com.ibm.ws.webcontainer.httpsession.DatabaseSessionData.
    fillAppData(DatabaseSessionData.java:812)
    at com.ibm.ws.webcontainer.httpsession.DatabaseSessionData.
    getSwappableData(DatabaseSessionData.java:328)
    at com.ibm.ws.webcontainer.httpsession.DatabaseSessionData.
    checkActivationListeners(DatabaseSessionData.java:355)
    at com.ibm.ws.webcontainer.httpsession.SessionData.
    notifyActivateListeners(SessionData.java:1335)
    at com.ibm.ws.webcontainer.httpsession.SessionContext.
    getIHttpSession(SessionContext.java:1509)
    at com.ibm.ws.webcontainer.httpsession.SessionContext.
    getIHttpSession(SessionContext.java:2432)
    at com.ibm.ws.webcontainer.httpsession.SessionContext.
    sessionPreInvoke(SessionContext.java:2695)
    at com.ibm.ws.webcontainer.srt.SRTRequestContext.
    sessionPreInvoke(SRTRequestContext.java:56)
    at com.ibm.ws.webcontainer.webapp.WebAppDispatcherContext.
    sessionPreInvoke(WebAppDispatcherContext.java:284)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.
    handleRequest (ServletWrapper.java:467)
    

Problem conclusion

  • To fix the problem the context classloader is set before
    the sessionPreInvoke call which results in de-serialization
    of the class and a commons logging exception. This is done
    in ServletWrapper.handleRequest.
    
    The fix for this APAR is currently targeted for inclusion
    in fixpacks 6.0.2.17 and 6.1.0.3.
    Please refer to the recommended updates page for delivery
    information:
    http://www.ibm.com/support/docview.wss?rs=180&uid=swg27004980
    

Temporary fix

Comments

APAR Information

  • APAR number

    PK26183

  • Reported component name

    WEBSPH APP SERV

  • Reported component ID

    5724J0800

  • Reported release

    60A

  • Status

    CLOSED PER

  • PE

    NoPE

  • HIPER

    NoHIPER

  • Special Attention

    NoSpecatt

  • Submitted date

    2006-06-07

  • Closed date

    2006-08-29

  • Last modified date

    2013-08-22

  • APAR is sysrouted FROM one or more of the following:

  • APAR is sysrouted TO one or more of the following:

Modules/Macros

  • ENGINE
    

Fix information

  • Fixed component name

    WEBSPH APP SERV

  • Fixed component ID

    5724J0800

Applicable component levels

  • R60A PSY

       UP

  • R60H PSY

       UP

  • R60I PSY

       UP

  • R60P PSY

       UP

  • R60S PSY

       UP

  • R60W PSY

       UP

  • R60Z PSY

       UP

  • R61A PSY

       UP

  • R61H PSY

       UP

  • R61I PSY

       UP

  • R61P PSY

       UP

  • R61S PSY

       UP

  • R61W PSY

       UP

  • R61Z PSY

       UP

[{"Business Unit":{"code":"BU059","label":"IBM Software w\/o TPS"},"Product":{"code":"SSEQTP","label":"WebSphere Application Server"},"Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"6.0","Line of Business":{"code":"LOB45","label":"Automation"}}]

Document Information

Modified date:
29 December 2021