3

Glassfishで実行されているJSF 2(maven)プロジェクトでShiroを使用しています。関連するすべての依存関係 (shiro-ehcache-1.2.2.jar、ehcache-core-2.5.0) が追加されました。私のプロジェクトはスムーズにコンパイルおよび実行されますが、ManagedBean を @ViewScoped アノテーションでマークするとすぐに、次のイライラする 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) 

例外はshiro-ehcacheクラスで内部的に発生し、「java.lang.ClassNotFoundException: void」と表示されるため、どのクラスまたはjarが問題を引き起こしているかを推測できません。私の Bean の 1 つをシリアル化できないようですが、どの Bean ですか? 私の質問は:

このような状況で問題のあるクラスをどのように見つけることができますか?

編集:セッションスコープのナビゲーション Bean があります:

@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;

}


}

そして別の 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());
      }
   }
}    

}

4

2 に答える 2

2

Jboss のタトル テールを使用して、プロジェクトの lib フォルダーをイントロスペクトし、依存関係ツリーをグラフィカルにマップすることができます。このツールを使用すると、クラスの依存関係を見つけることができます。プロジェクトをダウンロードして解凍したら、次の手順を実行して、壊れているクラスを見つけます。

  1. コマンド ラインから、tattletale jar を実行します。例えば

    java -jar -Xmx512m tattletale.jar   <the path with your libraries> <the destination folder where you want the generated reports to be stored>
    
  2. 出力フォルダーには、フォルダーのツリーとindex.htmlファイルがあります。このファイルを開き、依存するリンクを選択します。

  3. 依存ページには、ライブラリ内のすべてのクラスと、それぞれのすべての依存関係のリストがあります。簡単な「検索」操作で、強調表示したクラスが欠落しているクラスがわかります

于 2013-07-17T13:56:52.043 に答える