Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to find missing class when you get "java.lang.ClassNotFoundException: void"

I am using Shiro in a JSF 2 (maven) project running on Glassfish. All related dependencies (shiro-ehcache-1.2.2.jar, ehcache-core-2.5.0) are added. My project compiles and runs smoothly but as soon as I mark a ManagedBean with @ViewScoped annotation, I get this irritating ClassNotFound Exception:

WARNING: StandardWrapperValve[Faces Servlet]: PWC1406: Servlet.service() for servlet Faces Servlet threw exception java.lang.ClassNotFoundException: void
    at org.glassfish.web.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1509) 
    at org.glassfish.web.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1359) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:247) 
    at net.sf.ehcache.util.ClassLoaderUtil.loadClass(ClassLoaderUtil.java:129) 
    at net.sf.ehcache.util.PreferTCCLObjectInputStream.resolveClass(PreferTCCLObjectInputStream.java:44) 
    at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1574) 
    at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1495) 
    at java.io.ObjectInputStream.readClass(ObjectInputStream.java:1461) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1311) 
    at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1666) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1322) 
    at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1666) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1322) 
    at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1666) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1322) 
    at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1666) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1322) 
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350) 
    at java.util.HashMap.readObject(HashMap.java:1030) 
    at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:969) 
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1848) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328) 
    at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1666) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1322) 
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350) 
    at java.util.HashMap.readObject(HashMap.java:1030) 
    at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:969) 
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1848) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328) 
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350) 
    at java.util.HashMap.readObject(HashMap.java:1030) 
    at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:969) 
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1848) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328) 
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350) 
    at java.util.HashMap.readObject(HashMap.java:1030) 
    at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:969) 
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1848) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328) 
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350) 
    at org.apache.shiro.session.mgt.SimpleSession.readObject(SimpleSession.java:500) 
    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 java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:969) 
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1848) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328) 
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1946) 
    at java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:479) 
    at net.sf.ehcache.Element.readObject(Element.java:800) 
    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 java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:969) 
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1848) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328) 
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350) 
    at net.sf.ehcache.store.disk.DiskStorageFactory.read(DiskStorageFactory.java:378) 
    at net.sf.ehcache.store.disk.DiskStorageFactory.retrieve(DiskStorageFactory.java:960) 
    at net.sf.ehcache.store.disk.Segment.decodeHit(Segment.java:178) 
    at net.sf.ehcache.store.disk.Segment.get(Segment.java:216) 
    at net.sf.ehcache.store.disk.DiskStore.get(DiskStore.java:504) 
    at net.sf.ehcache.store.disk.DiskStore.getQuiet(DiskStore.java:511) 
    at net.sf.ehcache.store.FrontEndCacheTier.getQuiet(FrontEndCacheTier.java:196) 
    at net.sf.ehcache.Cache.searchInStoreWithoutStats(Cache.java:2101) 
    at net.sf.ehcache.Cache.get(Cache.java:1630) 
    at org.apache.shiro.cache.ehcache.EhCache.get(EhCache.java:73) 
    at org.apache.shiro.session.mgt.eis.CachingSessionDAO.getCachedSession(CachingSessionDAO.java:217) 
    at org.apache.shiro.session.mgt.eis.CachingSessionDAO.getCachedSession(CachingSessionDAO.java:202) 
    at org.apache.shiro.session.mgt.eis.CachingSessionDAO.readSession(CachingSessionDAO.java:259) 
    at org.apache.shiro.session.mgt.DefaultSessionManager.retrieveSessionFromDataSource(DefaultSessionManager.java:236) 
    at org.apache.shiro.session.mgt.DefaultSessionManager.retrieveSession(DefaultSessionManager.java:222) 
    at org.apache.shiro.session.mgt.AbstractValidatingSessionManager.doGetSession(AbstractValidatingSessionManager.java:118) 
    at org.apache.shiro.session.mgt.AbstractNativeSessionManager.lookupSession(AbstractNativeSessionManager.java:108) 
    at org.apache.shiro.session.mgt.AbstractNativeSessionManager.getSession(AbstractNativeSessionManager.java:100) 
    at org.apache.shiro.mgt.SessionsSecurityManager.getSession(SessionsSecurityManager.java:125) 
    at org.apache.shiro.mgt.DefaultSecurityManager.resolveContextSession(DefaultSecurityManager.java:456) 
    at org.apache.shiro.mgt.DefaultSecurityManager.resolveSession(DefaultSecurityManager.java:442) 
    at org.apache.shiro.mgt.DefaultSecurityManager.createSubject(DefaultSecurityManager.java:338) 
    at org.apache.shiro.subject.Subject$Builder.buildSubject(Subject.java:846) 
    at org.apache.shiro.web.subject.WebSubject$Builder.buildWebSubject(WebSubject.java:148) 
    at org.apache.shiro.web.servlet.AbstractShiroFilter.createSubject(AbstractShiroFilter.java:292) 
    at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:359) 
    at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) 
    at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655) 
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161) 
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231) 
    at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317) 
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195) 
    at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860) 
    at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757) 
    at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056) 
    at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229) 
    at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137) 
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104) 
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90) 
    at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79) 
    at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54) 
    at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59) 
    at com.sun.grizzly.ContextTask.run(ContextTask.java:71) 
    at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532) 
    at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513) 
    at java.lang.Thread.run(Thread.java:662) 

As the exception happens internally in shiro-ehcache classes and it says: "java.lang.ClassNotFoundException: void" I cannot infer, which class or jar is causing the trouble. It seems one of my beans cannot be serialized but which one? My question is:

How can we find offending classes in such a situation?

Edit: I have a navigation bean which is sessionscoped:

@ManagedBean
@SessionScoped
public class NavigationBean implements Serializable {
private static final long serialVersionUID = 2L;

@Inject
private transient Logger log;

private String page = "/subpages/admin_home.xhtml";

public NavigationBean() {
}

public String getPage() {
    return page;
}

public void setPage(String page) {
    this.page = page;

}


}

And another sessionscoped bean:

@ManagedBean
@SessionScoped
public class SettingsBean implements Serializable {

private static final long serialVersionUID = 1L;

@Inject
private transient Logger log;

private static final Locale Turkish = new Locale("tr");
private static final Locale English = Locale.ENGLISH;
private Locale locale = FacesContext.getCurrentInstance().getViewRoot().getLocale();
private static final Map<String,Object> countries;
static {
        countries = new LinkedHashMap<String,Object>();
        countries.put("English", English); //label, value
        countries.put("Türkçe", Turkish);
}

/**
 * Creates a new instance of SettingsBean
 */
public SettingsBean() {
    System.out.print("Settings bean constructed");
}

@PostConstruct
public void init(){
    log.debug ("Settings bean initialized");
}

public Locale getLocale() {
    return locale;
} 

public String getLanguage() {
    String lang = locale.getLanguage();
    if (lang.equals("en_US")){lang="en";}
    else if (lang.equals("tr_tr")){lang="tr";}
    return lang;
}

public void setLanguage(String language) {
    locale = new Locale(language);
    FacesContext.getCurrentInstance().getViewRoot().setLocale(locale);

    //String Msg = Messages.getResourceBundleString("M","LanguageChanged");
    String Msg = Messages.getString("LanguageChanged");

    FacesMessage facesmsg = new FacesMessage(FacesMessage.SEVERITY_INFO, Msg, "");  
    FacesContext.getCurrentInstance().addMessage(null, facesmsg);
    log.debug(Msg + " : " + language);
}

public Map<String, Object> getCountriesInMap() {
        return countries;
}


//value change event listener
public void countryLocaleCodeChanged(ValueChangeEvent e){

    String newLocaleValue = e.getNewValue().toString();

    for (Map.Entry<String, Object> entry : countries.entrySet()) {

       if(entry.getValue().toString().equals(newLocaleValue)){
                            setLanguage(entry.getValue().toString());
      }
   }
}    

}

like image 742
salihcenap Avatar asked Feb 18 '26 07:02

salihcenap


1 Answers

You can use Jboss's tattle tale to introspect a project's lib folder and graphically map out the dependency tree. Using this tool, you can find out a class' dependencies. After downloading and unpacking the project, run thru the following steps to find out which class is breaking:

  1. From your command line, run the the tattletale jar. For example

    java -jar -Xmx512m tattletale.jar   <the path with your libraries> <the destination folder where you want the generated reports to be stored>
    
  2. In the output folder, you'll find a tree of folders and an index.html file. Open this file and select the depends on link.

  3. In the depends on page, you'll find all the classes in your libraries and a list of all the dependencies of each. A simple "find" operation will tell you which class is missing the class you've highlighted

like image 56
kolossus Avatar answered Feb 21 '26 13:02

kolossus



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!