java.lang.NoClassDefFoundError: 无法初始化类 xxx.xxx.xxx.HibernateUtil
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/26860762/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
java.lang.NoClassDefFoundError: Could not initialize class xxx.xxx.xxx.HibernateUtil
提问by Priyan
Herewith I added my source code of web.xml
在此我添加了 web.xml 的源代码
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<display-name>ussd</display-name>
<servlet>
<servlet-name>init</servlet-name>
<jsp-file>/init.jsp</jsp-file>
<load-on-startup>1</load-on-startup>
</servlet>
<context-param>
<param-name>javax.ws.rs.core.Application</param-name>
<param-value>com.dialog.mife.ussd.api.USSDApplication</param-value>
</context-param>
<context-param>
<param-name>resteasy.providers</param-name>
<param-value>com.dialog.mife.ussd.exception.NotFoundException</param-value>
</context-param>
<context-param>
<param-name>resteasy.servlet.mapping.prefix</param-name>
<param-value>/</param-value>
</context-param>
<listener>
<listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class>
</listener>
<servlet>
<servlet-name>Resteasy</servlet-name>
<servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
</servlet>
<servlet>
<servlet-name>ServletAdaptor</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Resteasy</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ServletAdaptor</servlet-name>
<url-pattern>/webresources/*</url-pattern>
</servlet-mapping>
</web-app>
Hibernate.cfg.xml. My Web service project goes with Jersey+Hibernate..
休眠.cfg.xml。我的 Web 服务项目使用 Jersey+Hibernate ..
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.bytecode.use_reflection_optimizer">false</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.password">xxx</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/USSD</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="show_sql">true</property>
<property name="hbm2ddl.auto">update</property>
<property name="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>
<property name="connection.pool_size">1</property>
<property name="hibernate.connection.autocommit">true</property>
<mapping class="com.xxx.xxx.xxx.xxx.Application" />
</session-factory>
</hibernate-configuration>
Here is HibernateUtil Class
这是 HibernateUtil 类
public class HibernateUtil {
private static final SessionFactory sessionFactory;
static {
try {
sessionFactory = new Configuration().configure().buildSessionFactory();
} catch (Exception ex) {
ex.printStackTrace();
throw new ExceptionInInitializerError(ex);
}
}
Here is my error I added Hibernate latest jar files. [hibernate-core-4.3.7.Final.jar]
这是我添加了 Hibernate 最新 jar 文件的错误。[ hibernate-core-4.3.7.Final.jar]
SEVERE: StandardWrapper.Throwable
java.lang.NoClassDefFoundError: Could not initialize class com.dialog.mife.ussd.util.HibernateUtil
at org.apache.jsp.init_jsp.jspInit(init_jsp.java:23)
at org.apache.jasper.runtime.HttpJspBase.init(HttpJspBase.java:48)
at org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:180)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:369)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
at org.apache.jasper.servlet.JspServlet.init(JspServlet.java:138)
at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1280)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1193)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1088)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5123)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5407)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
Nov 11, 2014 2:06:11 PM org.apache.catalina.core.StandardContext loadOnStartup
SEVERE: Servlet /ussd threw load() exception
java.lang.NoClassDefFoundError: Could not initialize class com.dialog.mife.ussd.util.HibernateUtil
at org.apache.jsp.init_jsp.jspInit(init_jsp.java:23)
at org.apache.jasper.runtime.HttpJspBase.init(HttpJspBase.java:48)
at org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:180)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:369)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
at org.apache.jasper.servlet.JspServlet.init(JspServlet.java:138)
at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1280)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1193)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1088)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5123)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5407)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
Please help me to sort out this issue thanks
请帮我解决这个问题谢谢
采纳答案by prageeth
This Kind of an error can be happened when initialization of SessionFactory
fails. You have mentioned that you are using hibernate-core-4.3.7
. The way you are initializing the SessionFactory
is not the correct for this version. Use Hibernateversion 3.x or change the way you are initializing the SessionFactory
. Below is the correct way to build the session factory in Hibernate 4.x +
.
初始化SessionFactory
失败时可能会发生这种错误。您已经提到您正在使用hibernate-core-4.3.7
. 您初始化的方式SessionFactory
对于此版本不正确。使用Hibernate3.x 版或更改初始化SessionFactory
. 下面是在Hibernate 4.x +
.
Configuration configuration = new Configuration().configure();
StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder().
applySettings(configuration.getProperties());
SessionFactory factory = configuration.buildSessionFactory(builder.build());
回答by Ai Suzuki
Some classes are missing when com.dialog.mife.ussd.util.HibernateUtil class is initialized(e.g, static field or static initializing block).
Make sure whether all libraries are located in lib directory when you run the servlet.
初始化 com.dialog.mife.ussd.util.HibernateUtil 类时,某些类丢失(例如,静态字段或静态初始化块)。
运行 servlet 时,请确保所有库都位于 lib 目录中。
回答by Svoice
I usualy get those java.lang.NoClassDefFoundError when the class appears MORE THAN ONCE in the classloader. Check the jars because, if the same class is present in more than one (maybe included both in the webservice client jar AND elsewhere) the java classloader will not know which one to load, even if it's exactly the same class.
当类在类加载器中出现不止一次时,我通常会得到那些 java.lang.NoClassDefFoundError 。检查 jars,因为如果同一个类存在于多个(可能同时包含在 webservice 客户端 jar 和其他地方),java 类加载器将不知道要加载哪个,即使它是完全相同的类。
回答by hariprasad
According codejava.netthe HibernateUtil for hibernate-core-4.x
looks like this:
根据codejava.net的 HibernateUtilhibernate-core-4.x
看起来像这样:
...
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
public class HibernateUtil {
private static SessionFactory sessionFactory;
public static SessionFactory getSessionFactory() {
if (sessionFactory == null) {
// loads configuration and mappings
Configuration configuration = new Configuration().configure();
ServiceRegistry serviceRegistry
= new StandardServiceRegistryBuilder()
.applySettings(configuration.getProperties()).build();
// builds a session factory from the service registry
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
}
return sessionFactory;
}
}
....
It is slightly optically different than example above, but the effect is the same. It is needed, to ensure, that old dictionary hibernate-3.x
is really not present.
它在光学上与上面的例子略有不同,但效果是一样的。需要确保旧字典hibernate-3.x
真的不存在。
回答by Yogesh Shinde
In the HibernateUtils, there is reference for the "/hibernate.cfg.xml" file. In which we have to add the hbm.xml mapping. also confirm that mapping file present in the resource file.
在 HibernateUtils 中,有对“/hibernate.cfg.xml”文件的引用。我们必须在其中添加 hbm.xml 映射。还要确认资源文件中存在映射文件。