Bonjour, j'utilise une application Web Java de développement et j'obtiens la prochaine exception lorsque j'essaie d'extraire des données à l'aide de la veille prolongée
Java.lang.ClassCastException: com.digitalticket.model.UserType_$$_javassist_0 cannot be cast to javassist.util.proxy.Proxy
Ici stacktrace
Java.lang.ClassCastException: com.digitalticket.model.UserType_$$_javassist_0 cannot be cast to javassist.util.proxy.Proxy
at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.getProxy(JavassistLazyInitializer.Java:147)
at org.hibernate.proxy.pojo.javassist.JavassistProxyFactory.getProxy(JavassistProxyFactory.Java:75)
at org.hibernate.Tuple.entity.AbstractEntityTuplizer.createProxy(AbstractEntityTuplizer.Java:771)
at org.hibernate.persister.entity.AbstractEntityPersister.createProxy(AbstractEntityPersister.Java:4613)
at org.hibernate.event.internal.DefaultLoadEventListener.createProxyIfNecessary(DefaultLoadEventListener.Java:349)
at org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.Java:270)
at org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.Java:150)
at org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.Java:1070)
at org.hibernate.internal.SessionImpl.internalLoad(SessionImpl.Java:989)
at org.hibernate.type.EntityType.resolveIdentifier(EntityType.Java:716)
at org.hibernate.type.EntityType.resolve(EntityType.Java:502)
at org.hibernate.engine.internal.TwoPhaseLoad.doInitializeEntity(TwoPhaseLoad.Java:170)
at org.hibernate.engine.internal.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.Java:144)
at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.Java:1114)
at org.hibernate.loader.Loader.processResultSet(Loader.Java:972)
at org.hibernate.loader.Loader.doQuery(Loader.Java:920)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.Java:354)
at org.hibernate.loader.Loader.doList(Loader.Java:2553)
at org.hibernate.loader.Loader.doList(Loader.Java:2539)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.Java:2369)
at org.hibernate.loader.Loader.list(Loader.Java:2364)
at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.Java:126)
at org.hibernate.internal.SessionImpl.list(SessionImpl.Java:1682)
at org.hibernate.internal.CriteriaImpl.list(CriteriaImpl.Java:380)
at com.digitalticket.model.DAO.fetchAll(DAO.Java:204)
at com.digitalticket.controller.IndexController.handleRequestInternal(IndexController.Java:22)
at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.Java:154)
at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.Java:50)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.Java:945)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.Java:876)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.Java:961)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.Java:852)
at javax.servlet.http.HttpServlet.service(HttpServlet.Java:731)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.Java:837)
at javax.servlet.http.HttpServlet.service(HttpServlet.Java:844)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.Java:280)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.Java:254)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.Java:136)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.Java:341)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.Java:238)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.Java:3363)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.Java:3333)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.Java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.Java:120)
at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.Java:57)
at weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.Java:2220)
at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.Java:2146)
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.Java:2124)
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.Java:1564)
at weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run(ContainerSupportProviderImpl.Java:254)
at weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.Java:550)
at weblogic.work.ExecuteThread.execute(ExecuteThread.Java:295)
at weblogic.work.ExecuteThread.run(ExecuteThread.Java:254)
Voici mon code
public T fetchAll(tClass<T> className) {
Session s = sessionFactory.getCurrentSession();
s.beginTransaction();
try {
List<T> results = (List<T>) sessionFactory.getCurrentSession()
.createCriteria(className)
.list();
s.getTransaction().commit();
return results();
} catch (NullPointerException ex) {
return null;
}
catch (RuntimeException re) {
s.getTransaction().rollback();
throw re;
} finally {
}
}
Voici mes objets
public class User implements Java.io.Serializable {
/**
*
*/
private static final long serialVersionUID = -2383716625869790753L;
private long userId;
private UserType userType;
private String email;
private String password;
private String name;
private String surname;
private String middlename;
private Set<Ticket> tickets = new HashSet<Ticket>(0);
private Set<Organization> organizations = new HashSet<Organization>(0);
public User() {
}
public User(long userId, String email, String password, String name,
String surname) {
this.userId = userId;
this.email = email;
this.password = password;
this.name = name;
this.surname = surname;
}
public User(long userId, UserType userType, String email, String password,
String name, String surname, String middlename,
Set<Ticket> tickets, Set<Organization> organizations) {
this.userId = userId;
this.userType = userType;
this.email = email;
this.password = password;
this.name = name;
this.surname = surname;
this.middlename = middlename;
this.tickets = tickets;
this.organizations = organizations;
}
public long getUserId() {
return this.userId;
}
public void setUserId(long userId) {
this.userId = userId;
}
public UserType getUserType() {
return this.userType;
}
public void setUserType(UserType userType) {
this.userType = userType;
}
public String getEmail() {
return this.email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return this.password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public String getSurname() {
return this.surname;
}
public void setSurname(String surname) {
this.surname = surname;
}
public String getMiddlename() {
return this.middlename;
}
public void setMiddlename(String middlename) {
this.middlename = middlename;
}
public Set<Ticket> getTickets() {
return this.tickets;
}
public void setTickets(Set<Ticket> tickets) {
this.tickets = tickets;
}
public Set<Organization> getOrganizations() {
return this.organizations;
}
public void setOrganizations(Set<Organization> organizations) {
this.organizations = organizations;
}
}
public class UserType implements Java.io.Serializable {
/**
*
*/
private static final long serialVersionUID = -206438165274679246L;
private long userTypeCode;
private String userTypeName;
private Set<User> users = new HashSet<User>(0);
public UserType() {
}
public UserType(long userTypeCode, String userTypeName) {
this.userTypeCode = userTypeCode;
this.userTypeName = userTypeName;
}
public UserType(long userTypeCode, String userTypeName, Set<User> users) {
this.userTypeCode = userTypeCode;
this.userTypeName = userTypeName;
this.users = users;
}
public long getUserTypeCode() {
return this.userTypeCode;
}
public void setUserTypeCode(long userTypeCode) {
this.userTypeCode = userTypeCode;
}
public String getUserTypeName() {
return this.userTypeName;
}
public void setUserTypeName(String userTypeName) {
this.userTypeName = userTypeName;
}
public Set<User> getUsers() {
return this.users;
}
public void setUsers(Set<User> users) {
this.users = users;
}
}
voici les cartographies
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- Generated Mar 16, 2014 10:31:53 AM by Hibernate Tools 4.0.0 -->
<hibernate-mapping>
<class name="com.digitalticket.model.User" table=""USER"">
<id name="userId" type="long">
<column name="USER_ID" precision="10" scale="0" />
<generator class="assigned" />
</id>
<many-to-one class="com.digitalticket.model.UserType"
fetch="select" name="userType">
<column name="USER_TYPE" precision="10" scale="0" />
</many-to-one>
<property generated="never" lazy="false" name="email" type="string">
<column length="20" name="EMAIL" not-null="true" unique="true" />
</property>
<property generated="never" lazy="false" name="password"
type="string">
<column length="32" name="PASSWORD" not-null="true" />
</property>
<property generated="never" lazy="false" name="name" type="string">
<column length="64" name="NAME" not-null="true" />
</property>
<property generated="never" lazy="false" name="surname" type="string">
<column length="64" name="SURNAME" not-null="true" />
</property>
<property generated="never" lazy="false" name="middlename"
type="string">
<column length="64" name="MIDDLENAME" />
</property>
<set fetch="select" inverse="true" lazy="true" name="tickets"
sort="unsorted" table="TICKET">
<key>
<column name="USER" precision="10" scale="0" />
</key>
<one-to-many class="com.digitalticket.model.Ticket" />
</set>
<set fetch="select" lazy="true" name="organizations" sort="unsorted"
table="AUDITOR">
<key>
<column name="USER" not-null="true" precision="9" scale="0" />
</key>
<many-to-many entity-name="com.digitalticket.model.Organization"
unique="false">
<column name="ORGANIZATION" not-null="true" precision="10"
scale="0" />
</many-to-many>
</set>
</class>
</hibernate-mapping>
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- Generated Mar 16, 2014 10:31:53 AM by Hibernate Tools 4.0.0 -->
<hibernate-mapping>
<class name="com.digitalticket.model.UserType" table="USER_TYPE">
<id name="userTypeCode" type="long">
<column name="USER_TYPE_CODE" precision="10" scale="0" />
<generator class="assigned" />
</id>
<property name="userTypeName" type="string">
<column name="USER_TYPE_NAME" length="40" not-null="true" unique="true" />
</property>
<set name="users" table="USER" inverse="true" lazy="true" fetch="select">
<key>
<column name="USER_TYPE" precision="10" scale="0" />
</key>
<one-to-many class="com.digitalticket.model.User" />
</set>
</class>
</hibernate-mapping>
J'utilise le serveur Oracle Weblogic 12c
Correction en changeant la dépendance de mon pom.xml en ancienne version 4.3.4.Final Une erreur était en 4.3.4.La version finale a été remplacée par 4.2.7.Final
Je ne pense pas que ce soit la meilleure solution mais je n’en ai trouvé aucun autre .
J'utilise avec hibernate 4.3.5.Final et ai un problème similaire avec javassist, le problème est que javassist est manquant, et vous pouvez obtenir les dernières nouvelles du dépôt Maven.
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.18.1-GA</version>
</dependency>
Dans les éditions ultérieures, il est à nouveau corrigé
Avec tout cela fonctionne dans mon cas,
Dans mon cas, le problème était qu'il y avait deux bibliothèques javassist
dans classpath. Un de org.hibernate
et un autre de org.Apache.struts.xwork
. Résolu en supprimant ce dernier.
Comme anquegi a déjà commenté. Vous avez un conflit lib. Retournez en hibernation vers 4.2.7.Final ne résoudra pas votre conflit de lib . Exécutez mvn dependency:tree -Dverbose
et regardez différentes versions par javassist Dans mon cas, je dois exclure javassist des dépendances d'Hibernate.
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate.version}</version>
<exclusions>
<exclusion>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>${hibernate.version}</version>
<exclusions>
<exclusion>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
</exclusion>
</exclusions>
</dependency>
Cela peut aider les autres dans l'avenir.
Bien que ma question ne soit que partiellement liée à votre question, je souhaitais la publier quelque part pour aider ceux qui pourraient rencontrer ce problème lors de l’utilisation de SpringMVC, Hibernate et Apache Tiles.
J'obtenais cette exception quand j'avais org.Apache.tiles tiles-extras listés en tant que dépendance. Tiles-extras et hibernate-core ont différentes versions de javassist répertoriées comme dépendance. En ajoutant ce qui suit à mon fichier pom.xml, j'ai pu corriger l'erreur.
<dependency>
<groupId>org.Apache.tiles</groupId>
<artifactId>tiles-extras</artifactId>
<version>3.0.5</version>
<exclusions>
<exclusion>
<artifactId>javassist</artifactId>
<groupId>jboss</groupId>
</exclusion>
</exclusions>
</dependency>
Il semble que Weblogic lui-même contient javaassist plus ancien que votre application. Il peut être corrigé dans le descripteur d'application, weblogic.xml ou weblogic-application.xml. Il suffit d'ajouter
<prefer-application-packages>
<package-name>javassist</package-name>
</prefer-application-packages>
en élément de configuration racine.
Btw, vous pouvez vérifier ces conflits en utilisant l'outil d'analyse Weblogic Classloader - vous pouvez y accéder via le chemin de contexte/wls-cat de votre serveur.
J'ai eu le même problème sur JBoss EAP 7.1.3 (EAP 6.0.1) pour hibernate 4.2.x. C'est parce que les modules JBoss contiennent déjà javassist lib.
Je l'ai résolu en créant jboss-deployment-structure.xml dans le répertoire WEB-INF avec ce contenu:
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
<deployment>
<exclusions>
<module name="org.javassist"/>
</exclusions>
<local-last value="true" />
</deployment>
</jboss-deployment-structure>
J'utilisais la version 4.2.8-Final d'Hibernate. J'avais ce problème et j'ai lu plus tôt les réponses/suggestions ci-dessous. Voici la séquence d’événements que j’ai faite - Pour résoudre le problème posé avec 4.2.8-Final, nous utilisions l’approche du chargeur de classes "classes parentes en dernier" dans Websphere. Récemment, lorsque le projet a pris de l'ampleur (en ayant plus de saveurs de pots liées à l'hibernation), le même problème a commencé.
Enfin exclu le "javassist" de l'hibernation
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate.version}</version>
<exclusions>
<exclusion>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
</exclusion>
</exclusions>
et ajouté
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.18.1-GA</version>
Même cela ne résolvait pas complètement le problème (je devais quand même utiliser l'approche du chargeur de classe «dernier parent» avec hibernation pour résoudre le problème.
Finalement, j'ai rétrogradé la version mise en veille prolongée de 4.2.8-Final à 4.2.7-Final et le problème est résolu (je n'ai plus besoin de changer mes préférences de chargeur de classes dans la console d'administration de Websphere en tant que parent).
Pas tout à fait sûr de savoir quel changement dans 4.2.8 Hibernate est à l'origine de ce problème. Curieux de savoir.
Problème résolu pour l'application spring-hibernate-jpa basée sur weblogic. L'exception de conversion de classe se produit en raison de fichiers JAR en conflit du serveur de logique Web et du fichier JAV javassist. Ajoutez javassist-3.18.0-ga.jar ou une version ultérieure dans votre chemin de classe, puis ajoutez les lignes de code ci-dessous dans votre fichier weblogic-application.xml. Le problème devrait alors être résolu.
<wls:prefer-application-packages>
<wls:package-name>javassist.*</wls:package-name>
</wls:prefer-application-packages>
J'ai eu le même problème avec Spring Data JPA. Je confirme que cela vient d'un conflit javassiste. .___. La solution est:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<scope>compile</scope>
<exclusions>
<exclusion>
<artifactId>javassist</artifactId>
<groupId>org.javassist</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.18.2-GA</version>
<scope>compile</scope>
</dependency>
J'ai eu le même problème lors de l'utilisation de titres Hibernate +. Résolu en excluant javassist des carreaux-figurants:
<dependency>
<groupId>org.Apache.tiles</groupId>
<artifactId>tiles-extras</artifactId>
<version>3.0.5</version>
<exclusions>
<exclusion>
<groupId>jboss</groupId>
<artifactId>javassist</artifactId>
</exclusion>
</exclusions>
</dependency>
Si vous déployez votre application basée sur l'hibernation sur le serveur weblogic ou similaire, une version antérieure de jar javassist sera disponible dans le dossier modules du serveur. Cela provoquerait le conflit dont il a été question dans les réponses précédentes, où vous pourriez vous retrouver avec plus d'un fichier jars dans le chemin de classe.
spécialement pour weblogic, ajoutez ce qui suit dans votre weblogic-application.xml
ajoutez le nom du paquet javaassist. * pour vous assurer que le dernier est ramassé.
<?xml version="1.0" encoding="UTF-8"?>
<wls:weblogic-application
xmlns:wls="http://www.bea.com/ns/weblogic/weblogic-application"
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/javaee_5.xsd http://www.bea.com/ns/weblogic/weblogic-application http://www.bea.com/ns/weblogic/weblogic-application/1.0/weblogic-application.xsd">
<wls:ejb>
<wls:start-mdbs-with-application>false
</wls:start-mdbs-with-application>
</wls:ejb>
<wls:prefer-application-packages>
<wls:package-name>antlr.*</wls:package-name>
<wls:package-name>org.Apache.commons.*</wls:package-name>
<wls:package-name>org.Apache.xmlbeans.*</wls:package-name>
<wls:package-name>org.springframework.*</wls:package-name>
<wls:package-name>org.hibernate.*</wls:package-name>
<wls:package-name>org.joda.*</wls:package-name>
<wls:package-name>javax.persistence.*</wls:package-name>
<wls:package-name>com.google.*</wls:package-name>
<wls:package-name>com.ibm.icu.*</wls:package-name>
<wls:package-name>org.Apache.axiom.*</wls:package-name>
<wls:package-name>javassist.*</wls:package-name>
</wls:prefer-application-packages>
</wls:weblogic-application>
J'ai eu un problème similaire avec javassist. J'utilise les dépendances suivantes dans le fichier pom.xml -
<org.hibernate.version>4.2.15.Final</org.hibernate.version>
<org.pentaho.di>6.0.1.0-386</org.pentaho.di>
<dependency>
<groupId>pentaho-kettle</groupId>
<artifactId>kettle-core</artifactId>
<version>${org.pentaho.di}</version>
<exclusions>
<exclusion>
<artifactId>xercesImpl</artifactId>
<groupId>xerces</groupId>
</exclusion>
<exclusion>
<artifactId>javassist</artifactId>
<groupId>javassist</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-ehcache</artifactId>
<version>${org.hibernate.version}</version>
<exclusions>
<exclusion>
<artifactId>slf4j-api</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
<exclusion>
<artifactId>ehcache-core</artifactId>
<groupId>net.sf.ehcache</groupId>
</exclusion>
</exclusions>
</dependency>
+- org.hibernate:hibernate-ehcache:jar:4.2.15.Final:compile
[INFO] | +- org.jboss.logging:jboss-logging:jar:3.1.0.GA:compile
[INFO] | \- org.hibernate:hibernate-core:jar:4.2.15.Final:compile
[INFO] | +- antlr:antlr:jar:2.7.7:compile
[INFO] | +- (org.jboss.logging:jboss-logging:jar:3.1.0.GA:compile - omitted for duplicate)
[INFO] | +- (dom4j:dom4j:jar:1.6.1:compile - omitted for duplicate)
[INFO] | +- org.javassist:javassist:jar:3.18.1-GA:compile
Hibernate contient la version appropriée, donc en la retirant de pentaho-core
mvn dependency:tree -Dverbose >> C:\pipeout2.txt
Vérifiez votre type de retour T
ou List<T>
of results