【问题标题】:java.lang.LinkageError: ClassCastException RuntimeDelegate.classjava.lang.LinkageError: ClassCastException RuntimeDelegate.class
【发布时间】:2019-02-16 01:59:06
【问题描述】:

我有这个错误

java.lang.LinkageError: ClassCastException: attempting to tomcat-debug-eclispe/wtpwebapps/xwiki-debug-eclipse/WEB-INF/lib/jsr311-api-1.1.1.jar!/javax/ws/rs/ext/RuntimeDelegate.class to tomcat-debug-eclispe/lib/jboss-jaxrs-api_2.0_spec-1.0.1.Final.jar!/javax/ws/rs/ext/RuntimeDelegate.class

我正在使用一个名为 xwiki 的开源 wiki 平台 https://github.com/xwiki/xwiki-platform

这个平台某处包括jsr311-api-1.1.1.jar,需要它。

现在我想通过 XWiki 扩展连接一些 keycloak 功能,我需要这个

<!-- https://mvnrepository.com/artifact/org.keycloak/keycloak-admin-client --> <dependency> <groupId>org.keycloak</groupId> <artifactId>keycloak-admin-client</artifactId> <version>4.3.0.Final</version> </dependency>

我们可以看到herekeycloak-admin-client 需要一些提供的依赖项,包括:

    <dependency>
        <groupId>org.jboss.spec.javax.ws.rs</groupId>
        <artifactId>jboss-jaxrs-api_2.0_spec</artifactId>
        <version>1.0.1.Final</version>
        <scope>provided</scope>
    </dependency>

所以从org.keycloak.admin.client.Keycloak我打电话给

Keycloak.getInstance(keycloakUrl, keycloakRealm, keycloakUser, keycloakPwd, "admin-cli");

此时我正在运行的应用程序(因为一切运行良好)给我上面的ClassCastException

这里更多的是一个全局 jave (JEE) 问题,我不能提供更多代码,因为最后你将无法构建 XWiki/Keycloak 运行环境并重现该问题(因为在 Eclipse 中,通过单元测试,在 xwiki 环境之外没有 ofc 冲突,Keycloak.getInstance 工作正常)。

在这种情况下我该怎么办?有没有避免这些冲突的行家方法?也许要重新实现一个类?

环境:

tomcat 9.0.12
XWiki 10.6.1
Keycloak 4.3.0
Java 8

【问题讨论】:

    标签: java maven tomcat keycloak xwiki


    【解决方案1】:

    jsr311-api 被嵌入而不是仅仅作为提供的范围依赖的原因是因为 JAX-RS API 不再包含在 Java 9 中(它在 Java 8 中)并且对于各种应用程序服务器来说都是一个问题(确实没有注意到 Tomcat 9 已经决定提供 JAX-RS API,但我猜它是为了支持 Java 9)。见https://jira.xwiki.org/browse/XWIKI-14743

    现在 XWiki 仍然基于(非常旧的)JAX-RS 1 的原因是 Restlet 基于 JAX-RS 1 而 JAX-RS 2 的复古兼容性不是很好,所以当您使用时会出现各种问题尝试用它运行 Restlet。

    如果您将 Tomcat 9 更改为 Tomcat 8,您将不会再出现启动错误。不幸的是,如果 keycloak 需要 JAX-RS 2,这并不容易。也许旧版本的 keycloak 是基于 JAX-RS 1 的,但是不得不降级它确实不是很好。我创建了https://jira.xwiki.org/browse/XWIKI-15588

    【讨论】:

    • 感谢您的快速答复和开票,我们现在将重写一些 keycloak API 并提供基本的发布请求,谢谢。
    猜你喜欢
    • 2012-02-08
    • 2020-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 2017-06-19
    相关资源
    最近更新 更多