'java.lang.NullPointerException: Cannot invoke "java.lang.reflect.AccessibleObject.setAccessible(boolean)" because "ao" is null
I am doing Dynamic Web Project using JPA in Java 17. I have a class called UserEntity. In the first page I have a register button, which has the following functionality:
private void register(HttpServletRequest request, HttpServletResponse response) {
String password = request.getParameter("register-pass");
String repeatPassword = request.getParameter("confirm-register-pass");
if (!password.equals(repeatPassword)) {
request.setAttribute("error", "Password mismatch!");
RequestDispatcher dispatcher = request.getRequestDispatcher("error.jsp");
try {
dispatcher.forward(request, response);
} catch (ServletException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else {
JPAUserRepository repo = new JPAUserRepository();
String username = request.getParameter("register-user");
String email = request.getParameter("register-email");
UserEntity user = new UserEntity(username, password, email);
if(repo.registerUser(user)) {
HttpSession session = request.getSession();
session.setAttribute("user", user);
try {
response.sendRedirect("profile.jsp");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else {
}
}
}
The registerUser function from the repository is:
public boolean registerUser(UserEntity user) {
EntityManager em = getEntityManager();
try {
em.getTransaction().begin();
em.persist(user);
em.getTransaction().commit();
} catch (TransactionalException e) {
em.getTransaction().rollback();
return false;
} finally {
em.close();
}
return true;
}
This is my persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="MetaVerse" transaction-type="RESOURCE_LOCAL">
<provider>
org.hibernate.jpa.HibernatePersistenceProvider
</provider>
<class>uni.fmi.masters.entities.UserEntity</class>
<class>uni.fmi.masters.entities.CommentEntity</class>
<properties>
<property name="hibernate.archive.autodetection" value="class" />
<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect" />
<property name="hibernate.connection.driver_class" value="org.h2.Driver" />
<property name="hibernate.connection.url" value="jdbc:h2:~/MetaVerseDB"/>
<property name="hibernate.connection.user" value="sa"/>
<property name="hibernate.connection.password" value=""/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.flushMode" value="FLUSH_AUTO"/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
</properties>
</persistence-unit>
</persistence>
When I click on register, NullPointerException error occurs. I have added to the build path javassist-3.27.0-GA-javadoc.jar, but the issue is still not resolved. How can I solve this problem?
Root Cause
java.lang.NullPointerException: Cannot invoke "java.lang.reflect.AccessibleObject.setAccessible(boolean)" because "ao" is null
javassist.util.proxy.SecurityActions.setAccessible(SecurityActions.java:103)
javassist.util.proxy.DefineClassHelper.toClass3(DefineClassHelper.java:151)
javassist.util.proxy.DefineClassHelper.toClass2(DefineClassHelper.java:134)
javassist.util.proxy.DefineClassHelper.toClass(DefineClassHelper.java:95)
javassist.util.proxy.FactoryHelper.toClass(FactoryHelper.java:131)
javassist.util.proxy.ProxyFactory.createClass3(ProxyFactory.java:530)
javassist.util.proxy.ProxyFactory.createClass2(ProxyFactory.java:515)
javassist.util.proxy.ProxyFactory.createClass1(ProxyFactory.java:451)
javassist.util.proxy.ProxyFactory.createClass(ProxyFactory.java:422)
org.hibernate.proxy.pojo.javassist.JavassistProxyFactory.postInstantiate(JavassistProxyFactory.java:75)
org.hibernate.tuple.entity.PojoEntityTuplizer.buildProxyFactory(PojoEntityTuplizer.java:162)
org.hibernate.tuple.entity.AbstractEntityTuplizer.<init>(AbstractEntityTuplizer.java:156)
org.hibernate.tuple.entity.PojoEntityTuplizer.<init>(PojoEntityTuplizer.java:58)
java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
org.hibernate.tuple.entity.EntityTuplizerFactory.constructTuplizer(EntityTuplizerFactory.java:88)
org.hibernate.tuple.entity.EntityTuplizerFactory.constructDefaultTuplizer(EntityTuplizerFactory.java:116)
org.hibernate.tuple.entity.EntityMetamodel.<init>(EntityMetamodel.java:382)
org.hibernate.persister.entity.AbstractEntityPersister.<init>(AbstractEntityPersister.java:519)
org.hibernate.persister.entity.SingleTableEntityPersister.<init>(SingleTableEntityPersister.java:124)
java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
org.hibernate.persister.internal.PersisterFactoryImpl.createEntityPersister(PersisterFactoryImpl.java:96)
org.hibernate.persister.internal.PersisterFactoryImpl.createEntityPersister(PersisterFactoryImpl.java:77)
org.hibernate.metamodel.internal.MetamodelImpl.initialize(MetamodelImpl.java:129)
org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:300)
org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:462)
org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:892)
org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:58)
javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)
javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39)
uni.fmi.masters.repositories.JPAUserRepository.getEntityManager(JPAUserRepository.java:47)
uni.fmi.masters.repositories.JPAUserRepository.registerUser(JPAUserRepository.java:16)
uni.fmi.masters.HelloWorldServlet.register(HelloWorldServlet.java:128)
uni.fmi.masters.HelloWorldServlet.doPost(HelloWorldServlet.java:68)
javax.servlet.http.HttpServlet.service(HttpServlet.java:652)
javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
Solution 1:[1]
As far as I know there are multiple things that can cause this
- Your Java POJO Mapping class may not have the empty/default constructor
- Any collections you have should have the default constructor or overridden hashcode and equals method. That is, the same rules apply for any joined collections/parent-children.
If you have your constructors right for POJO classes than check hibernate.properties file and try changing
hibernate.bytecode.provider=javassist
to
hibernate.bytecode.provider=bytebuddy
Solution 2:[2]
To those who stumble on this question looking for a clue. I had this issue on my staging environment in Google Cloud Platform but not while running locally. I solved it by updating the version of org.hibernate:hibernate-gradle-plugin
and org.hibernate:hibernate-c3p0
from 5.2.9.Final
to 5.6.1.Final
. Magic. ?
Solution 3:[3]
I deleted the existing javaasisst, installed it again and now it works with the newest version.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Vojin Puri? |
Solution 2 | craastad |
Solution 3 | Sani |