0

I need some help as I'm stumped on an Hibernate 4/Struts 2 project. This is my first Hibernate 4 (4.3.11) project, as I worked for years with Hibernate 3. The database is MySQL 5.

All mapping classes were produced with Hibernate Tools provided by JBoss Tools 4.3.5, on Eclipse Mars 2. No problem was encountered, it worked fine.

But when testing, I faced this exception :

2017-02-16 17:23:45 ERROR Dispatcher:38 - Exception occurred during processing request: metier.Ville_$$_javassist_2 cannot be cast to javassist.util.proxy.Proxy

java.lang.ClassCastException: metier.Ville_$$_javassist_2 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)

I read that post but I don't understand what's happening.

Two classes are involved : Salle and Ville. Here's the Hibernate XML files : Salle.hbm.xml & Ville.hbm.xml

<?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 2 f?vr. 2017 11:28:16 by Hibernate Tools 4.3.5.Final -->
<hibernate-mapping>
    <class name="metier.Salle" table="salle" catalog="aevbadherents" optimistic-lock="version">
        <id name="idSalle" type="int">
            <column name="idSALLE" />
            <generator class="assigned" />
        </id>
        <many-to-one name="ville" class="metier.Ville" fetch="select">
            <column name="idVilleSalle" />
        </many-to-one>
        <property name="adresse1" type="string">
            <column name="Adresse1" length="80" />
        </property>
        <property name="adresse2" type="string">
            <column name="Adresse2" length="80" />
        </property>
        <property name="description" type="string">
            <column name="Description" length="500" />
        </property>
        <set name="courses" table="cours" inverse="true" lazy="true" fetch="select">
            <key>
                <column name="IdSalle" not-null="true" />
            </key>
            <one-to-many class="metier.Cours" />
        </set>
        <set name="passagegrades" table="passagegrade" inverse="true" lazy="true" fetch="select">
            <key>
                <column name="IdSalle" />
            </key>
            <one-to-many class="metier.Passagegrade" />
        </set>
    </class>
</hibernate-mapping>

The second file :

<hibernate-mapping>
    <class name="metier.Ville" table="ville" catalog="aevbadherents" optimistic-lock="version">
        <id name="idVille" type="int">
            <column name="idVILLE" />
            <generator class="assigned" />
        </id>
        <many-to-one name="departement" class="metier.Departement" fetch="select">
            <column name="idDepartement" not-null="true" />
        </many-to-one>
        <property name="nom" type="string">
            <column name="Nom" length="60" not-null="true" />
        </property>
        <property name="codepostal" type="string">
            <column name="codepostal" length="6" not-null="true" />
        </property>
        <property name="gpslat" type="string">
            <column name="GPSLat" length="12" not-null="true" />
        </property>
        <property name="gpslon" type="string">
            <column name="GPSLon" length="12" not-null="true" />
        </property>
        <set name="adherentsForIdVilleResid" table="adherent" inverse="true" lazy="true" fetch="select">
            <key>
                <column name="IdVilleResid" />
            </key>
            <one-to-many class="metier.Adherent" />
        </set>
        <set name="clubs" table="club" inverse="true" lazy="true" fetch="select">
            <key>
                <column name="idville" not-null="true" />
            </key>
            <one-to-many class="metier.Club" />
        </set>
        <set name="salles" table="salle" inverse="true" lazy="true" fetch="select">
            <key>
                <column name="idVilleSalle" />
            </key>
            <one-to-many class="metier.Salle" />
        </set>
        <set name="adherentsForIdVilleNais" table="adherent" inverse="true" lazy="true" fetch="select">
            <key>
                <column name="IdVilleNais" />
            </key>
            <one-to-many class="metier.Adherent" />
        </set>
    </class>
</hibernate-mapping>

I read that this exception may be caused by a JAR conflict, but I did not find anything.I don't use Maven (maybe I should ?), so let me show you the JARs included :

antlr-2.7.7.jar
commons-fileupload-1.3.jar
commons-io-2.0.1.jar
commons-lang3-3.1.jar
commons-logging-1.2-javadoc.jar
commons-logging-1.2.jar
dom4j-1.6.1.jar
freemarker-2.3.19.jar
hibernate-commons-annotations-4.0.5.Final.jar
hibernate-core-4.3.11.Final.jar
hibernate-jpa-2.1-api-1.0.0.Final.jar
jandex-1.1.0.Final.jar
javassist-3.18.1-GA.jar
jboss-logging-3.1.3.GA.jar
jboss-logging-annotations-1.2.0.Beta1.jar
jboss-transaction-api_1.2_spec-1.0.0.Final.jar
log4j-1.2.15.jar
mysql-connector-java-5.1.40-bin.jar
ognl-3.0.6.jar
struts2-core-2.3.15.3.jar
truc.txt
xwork-core-2.3.15.3.jar

Please help me, as I'm stumped...

Community
  • 1
  • 1

2 Answers2

0

One of the possible cause for this problem is that you have in your classpath several versions of the same class.

I have been looking in java2s.com and, none of the jar you listed, seems to contain the class javassist.util.proxy.Proxy, so I will try to find if any other jar contains that class using jarscan with the following command:

jarscan -d PATH_TO_YOUR_CLASSPATH_DIR -j javassist.util.proxy.Proxy

You can download jarscan from here https://java.net/projects/jarscan/downloads

If you found that several packages contains the same class, you are done.

malaguna
  • 4,020
  • 1
  • 15
  • 32
0

Malaguna,

Thanks for your help. Here's the result of jarscan :

D:\temp\java\jarscan>jarscan -j javassist.util.proxy.Proxy
......................
+javassist-3.18.1-GA.jar
    javassist-3.18.1-GA.jar\javassist/util/proxy/Proxy.class
    javassist-3.18.1-GA.jar\javassist/util/proxy/ProxyFactory$1.class
    javassist-3.18.1-GA.jar\javassist/util/proxy/ProxyFactory$2.class
    javassist-3.18.1-GA.jar\javassist/util/proxy/ProxyFactory$3.class
    javassist-3.18.1-GA.jar\javassist/util/proxy/ProxyFactory$ClassLoaderProvide
r.class
    javassist-3.18.1-GA.jar\javassist/util/proxy/ProxyFactory$Find2MethodsArgs.c
lass
    javassist-3.18.1-GA.jar\javassist/util/proxy/ProxyFactory$ProxyDetails.class

    javassist-3.18.1-GA.jar\javassist/util/proxy/ProxyFactory$UniqueName.class
    javassist-3.18.1-GA.jar\javassist/util/proxy/ProxyFactory.class
    javassist-3.18.1-GA.jar\javassist/util/proxy/ProxyObject.class
    javassist-3.18.1-GA.jar\javassist/util/proxy/ProxyObjectInputStream.class
    javassist-3.18.1-GA.jar\javassist/util/proxy/ProxyObjectOutputStream.class
----------------------------------------------
Scanned archives: 22
Errors: 0
Archives with hits: 12

So, it means that no other jar contains that class.

  • That's incredible : I removed javassist-3.18.1-GA.jar then compiled and finally produced a new WAR : it obviously crashed. I added the same JAR... and now that's working ! I don't undestand at all... – Djibril Jorandhi Feb 17 '17 at 13:47