java.lang.LinkageError: ClassCastException RuntimeDelegate.class - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть эта ошибка

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 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>

Как мы видим здесь 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");

И в этот момент мои текущие приложения (потому что все работает хорошо) дают мне ClassCastException выше.

Это больше глобальный вопрос jave (JEE), я не могу дать больше кода, потому что в конце вы не сможете создать среду выполнения XWiki / Keycloak и воспроизвести проблему (потому что в eclipse, через единицу измерения) проверить, вне среды xwiki нет конфликта и Keycloak.getInstance работает нормально).

что я могу сделать в этой ситуации? Есть ли maven способ избежать этих конфликтов? может быть, класс для переопределения?

Окружающая среда:

tomcat 9.0.12
XWiki 10.6.1
Keycloak 4.3.0
Java 8

1 Ответ

0 голосов
/ 12 сентября 2018

Причина, по которой jsr311-api внедряется вместо того, чтобы быть просто зависимой областью видимости, заключается в том, что JAX-RS API больше не включен в Java 9 (это было в Java 8), и это было проблемой для различных серверов приложений (сделал не заметил, что Tomcat 9 решил предоставить API JAX-RS, но я думаю, что он должен был поддерживать Java 9). Смотри https://jira.xwiki.org/browse/XWIKI-14743.

Теперь причина, по которой XWiki по-прежнему основан на (очень старом) JAX-RS 1, заключается в том, что Restlet основан на JAX-RS 1, а JAX-RS 2 не так уж хорош с ретро-совместимостью, поэтому при попробуй запустить рестлет с ним.

Если вы измените Tomcat 9 на Tomcat 8, у вас больше не будет ошибок при запуске. К сожалению, если для клавиатуры требуется JAX-RS 2, это будет непросто. Может быть, более старая версия keycloak основана на JAX-RS 1, но это не очень приятно - понизить ее. Я создал https://jira.xwiki.org/browse/XWIKI-15588.

...