我尝试使用Spring + Hibernate + jersey构建一个Web服务。 它编译和部署没有任何错误,但是当我尝试访问Web服务时,它会出错。
的pom.xml
<display-name>Archetype Created Web Application</display-name>
<servlet>
<servlet-name>jersey-serlvet</servlet-name>
<servlet-class>
com.sun.jersey.spi.container.servlet.ServletContainer
</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com.erp.platform.ws</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>jersey-serlvet</servlet-name>
<url-pattern>/erp/*</url-pattern>
</servlet-mapping>
的web.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration SYSTEM "http://hibernate.sourceforge.net/hibernate-configuration-5.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.url">jdbc:mysql://localhost:3306/erp?useSSL=false;</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="hbm2ddl.auto">create</property>
<property name="connection.pool_size">1</property>
<mapping class="com.erp.platform.beans.Policy"></mapping>
<mapping class="com.erp.platform.beans.Role"></mapping>
<mapping class="com.erp.platform.beans.User"></mapping>
<mapping class="com.erp.platform.beans.RolePolicy"></mapping>
<mapping class="com.erp.platform.beans.UserRole"></mapping>
<mapping class="com.erp.platform.beans.RolePolicyId"></mapping>
<mapping class="com.erp.platform.beans.UserRoleId"></mapping>
</session-factory>
</hibernate-configuration>
src / main / resources中的hibernate.cfg.xml
package com.erp.platform.util;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtil {
private static final SessionFactory sessionFactory = buildSessionFactory();
private static SessionFactory buildSessionFactory() {
try {
// Create the SessionFactory from hibernate.cfg.xml
return new Configuration().configure().buildSessionFactory();
}
catch (Throwable ex) {
// Make sure you log the exception, as it might be swallowed
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
public static void shutdown() {
// Close caches and connection pools
getSessionFactory().close();
}
}
com.erp.platform.util中的HibernateUtil.java
package com.erp.platform.ws;
import java.util.Date;
import java.util.List;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Service;
import com.sun.jersey.api.core.InjectParam;
import com.erp.platform.beans.User;
import com.erp.platform.dao.BeanDao;
import com.erp.platform.dao.UserDao;
@Path("userManager")
@Service
public class UserManagerWS {
@GET
@Path("/getUserList")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public List<User> getUserList() {
@SuppressWarnings("resource")
ApplicationContext context = new ClassPathXmlApplicationContext("SpringBeans.xml");
UserDao userDao = (UserDao) context.getBean("userDaoImpl");
return (List<User>) userDao.getUserList();
}
}
尝试运行此Web服务时返回错误:
type Exception report
message java.lang.ExceptionInInitializerError
description The server encountered an internal error that prevented it from fulfilling this request.
exception
javax.servlet.ServletException: java.lang.ExceptionInInitializerError
com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:420)
com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:558)
com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:733)
javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
root cause
java.lang.ExceptionInInitializerError
com.erp.platform.util.HibernateUtil.buildSessionFactory(HibernateUtil.java:18)
com.erp.platform.util.HibernateUtil.<clinit>(HibernateUtil.java:8)
com.erp.platform.daoImpl.UserDaoImpl.getUserList(UserDaoImpl.java:26)
com.erp.platform.ws.UserManagerWS.getUserList(UserManagerWS.java:51)
root cause
org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:244)
org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:208)
org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:189)
org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:51)
org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:94)
org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:217)
org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:189)
root cause
org.hibernate.exception.JDBCConnectionException: Error calling Driver#connect
org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:115)
org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator$1$1.convert(BasicConnectionCreator.java:101)
org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator.convertSqlException(BasicConnectionCreator.java:123)
org.hibernate.engine.jdbc.connections.internal.DriverConnectionCreator.makeConnection(DriverConnectionCreator.java:41)
org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator.createConnection(BasicConnectionCreator.java:58)
org.hibernate.engine.jdbc.connections.internal.PooledConnections.addConnections(PooledConnections.java:106)
org.hibernate.engine.jdbc.connections.internal.PooledConnections.<init>(PooledConnections.java:40)
org.hibernate.engine.jdbc.connections.internal.PooledConnections.<init>(PooledConnections.java:19)
org.hibernate.engine.jdbc.connections.internal.PooledConnections$Builder.build(PooledConnections.java:138)
org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.buildPool(DriverManagerConnectionProviderImpl.java:110)
org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.configure(DriverManagerConnectionProviderImpl.java:74)
org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:94)
org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:217)
org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:189)
root cause
java.sql.SQLNonTransientConnectionException: Could not create connection to database server.
com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:676)
com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:663)
com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:653)
com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:638)
com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:606)
com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:1857)
root cause
java.lang.NullPointerException
java.util.Properties$LineReader.readLine(Properties.java:434)
java.util.Properties.load0(Properties.java:353)
java.util.Properties.load(Properties.java:341)
com.mysql.cj.jdbc.util.TimeUtil.loadTimeZoneMappings(TimeUtil.java:163)
com.mysql.cj.jdbc.util.TimeUtil.getCanonicalTimezone(TimeUtil.java:109)
com.mysql.cj.mysqla.MysqlaSession.configureTimezone(MysqlaSession.java:308)
com.mysql.cj.jdbc.ConnectionImpl.initializePropsFromServer(ConnectionImpl.java:2474)
错误是这样的:
android:windowSoftInputMode="stateAlwaysHidden"
答案 0 :(得分:2)
它是mysql-connector Version 6.0.2中的bug
更改为较新版本的mysql连接器。应该解决这个问题。
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>6.0.3</version>
</dependency>