我的网络应用程序运行tomcat 7,myfaces,primefaces。
我的生产m / c上有一个问题是我无法在开发环境中复制,即使两台机器上都加载了确切的代码和库。唯一的区别是tomcat subversion,dev有tomcat7.0.35和prod有tomcat7.0.40
javax.servlet.ServletException: javax.el.ELException: java.lang.NoClassDefFoundError: Could not initialize class com.myapps.util.UIStringUtil
javax.faces.webapp.FacesServlet.service(FacesServlet.java:229)
com.myapps.util.LoginFilter.doFilter(LoginFilter.java:56) **root cause** java.lang.NoClassDefFoundError: Could not initialize class com.myapps.util.UIStringUtil
com.myapps.bean.UserAuthBean.login(UserAuthBean.java:106)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
org.apache.el.parser.AstValue.invoke(AstValue.java:278)
org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:274)
org.apache.myfaces.view.facelets.el.ContextAwareTagMethodExpression.invoke(ContextAwareTagMethodExpression.java:96)
org.apache.myfaces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:68)
javax.faces.component.UICommand.broadcast(UICommand.java:120)
javax.faces.component.UIViewRoot._broadcastAll(UIViewRoot.java:1028)
javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:286)
javax.faces.component.UIViewRoot._process(UIViewRoot.java:1375)
javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:752)
org.apache.myfaces.lifecycle.InvokeApplicationExecutor.execute(InvokeApplicationExecutor.java:38)
org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:170)
org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:197)
com.myapps.util.LoginFilter.doFilter(LoginFilter.java:56)
我不确定为什么会这样。我很好奇为什么将它作为javax.el.Elexception抛出,这是从java bean代码抛出的。发生这种情况的确切代码行是(UserAuthBean.java:106)
context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,
UIStringUtil.getUIString("msgKey"),
UIStringUtil.getUIString("msgKey")));
UIStringUtil类具有静态变量和方法,可帮助从资源包中读取数据。
正如我之前提到的,这只发生在生产盒上,我们无法在开发盒上重现它。
请在这里提供一些帮助。
答案 0 :(得分:1)
它被抛出为ELException
,因为它发生在执行某些EL表达式时。
您应该查看异常的根本原因,以了解异常的根本原因。进一步查看堆栈跟踪以查找根本原因。第一个已经出现在您发布的不完整的堆栈跟踪中:
java.lang.NoClassDefFoundError: Could not initialize class com.myapps.util.UIStringUtil
这基本上意味着由Java完成的类加载如下
Class.forName("com.myapps.util.UIStringUtil");
因例外而失败。如果你绝对肯定该类存在于运行时类路径中,那么这只能意味着该类的任何静态变量或初始化程序块都抛出异常。加载类即初始化所有静态变量并执行所有静态初始化程序块(haven't you ever wondered how those JDBC drivers work?)。
该异常应该在java.lang.NoClassDefFoundError
原因之后作为堆栈跟踪中最底层的根本原因可见。也许是一个相当自我解释的java.lang.NullPointerException
?