兼容性问题ASM 3.1和HIbernate和JAX-RS

时间:2009-06-09 12:06:17

标签: hibernate jersey jax-rs assembly

我发现“Hibernate不能与JAX-RS的参考实现相结合。”在链接http://lists.jboss.org/pipermail/hibernate-issues/2009-May/015628.html

所以我无法将JAX-RS(jersey)与hibernate结合起来,是否有人知道这方面的工作?

4 个答案:

答案 0 :(得分:13)

邪恶的根源是cglib。将cglib-2.1.3.jar替换为cglib-nodep-2.1_3.jar并删除hibernate的asm * .jar文件。

答案 1 :(得分:5)

Jersey Java REST 框架)与Hibernate结合使用需要对Maven的 pom.xml 文件进行一些调整。问题是Hibernate使用的ASM 1.5.3 Jersey 使用的ASM 3.1不兼容。

您需要做的是从 Hibernate 中排除一些传递依赖:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate</artifactId>
    <version>3.2.6.ga</version>
    <exclusions>
        <exclusion>
            <groupId>asm</groupId>
            <artifactId>asm</artifactId>
        </exclusion>
        <exclusion>
            <groupId>asm</groupId>
            <artifactId>asm-attrs</artifactId>
        </exclusion>
        <exclusion>
            <groupId>cglib</groupId>
            <artifactId>cglib</artifactId>
        </exclusion>
    </exclusions>
</dependency>

然后,您需要包含正确版本的ASM:

<dependency>
    <groupId>asm</groupId>
    <artifactId>asm</artifactId>
    <version>3.1</version>
</dependency>

最后,您需要包含一个CGLib的nodep版本,它从ASM版本1.5.3重新打包类:

<dependency>
    <groupId>cglib</groupId>
    <artifactId>cglib-nodep</artifactId>
    <version>2.1_3</version>
</dependency>

来源:http://blog.idm.fr/2009/04/jersey-hibernate-conflict.html

答案 2 :(得分:3)

升级到Hibernate 3.3.2或更高版本。

如果您按照生成该消息的bug report链接,则表示最新版本的Hibernate(自3.3.2开始)使用不同的字节码操作包(Javassist),消除导致问题的ASM冲突。

答案 3 :(得分:2)

解决方案:ASM 3.1和HIbernate与JAX-RS的兼容性问题

  • 取下以下罐子 1 asm-attrs.jar
    2 asm.jar
    3 cglib-2.1.3.jar

  • 添加以下jar

1 asm-3.1.jar
2 cglib-nodep-2.1_3.jar