java.lang.LinkageError: ClassCastException RuntimeDelegate.class
java.lang.LinkageError: ClassCastException RuntimeDelegate.class
我有这个错误
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>
正如我们所见here keycloak-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");
此刻我的 运行ning 应用程序(因为一切 运行 都很好)给我上面的 ClassCastException
。
这里更像是一个全球性的 jave ( JEE ) 问题,我无法提供更多代码,因为最后您将无法构建 XWiki/Keycloak 运行ning 环境并重现问题(因为在 eclipse 中,通过单元测试,在 xwiki 环境之外没有冲突,Keycloak.getInstance
工作正常)。
遇到这种情况我该怎么办?有没有办法避免这些冲突?也许 class 重新实现 ?
环境:
tomcat 9.0.12
XWiki 10.6.1
Keycloak 4.3.0
Java 8
之所以嵌入 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.
我有这个错误
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>
正如我们所见here keycloak-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");
此刻我的 运行ning 应用程序(因为一切 运行 都很好)给我上面的 ClassCastException
。
这里更像是一个全球性的 jave ( JEE ) 问题,我无法提供更多代码,因为最后您将无法构建 XWiki/Keycloak 运行ning 环境并重现问题(因为在 eclipse 中,通过单元测试,在 xwiki 环境之外没有冲突,Keycloak.getInstance
工作正常)。
遇到这种情况我该怎么办?有没有办法避免这些冲突?也许 class 重新实现 ?
环境:
tomcat 9.0.12
XWiki 10.6.1
Keycloak 4.3.0
Java 8
之所以嵌入 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.