SpringBoot Keycloak NoSuchMethodError: javax.ws.rs.core.UriBuilder.resolveTemplates - PullRequest
0 голосов
/ 14 мая 2018

Возможно, у меня проблема с POM в приложении SpringBoot.

В настоящее время я пытаюсь получить доступ к своему серверу Keycloak с помощью "admin-client-keycloak"

Но по вызову:

Response response = getInstance().realm(REALM).users().create(user);

Я получаю сообщение об ошибке:

java.lang.NoSuchMethodError: javax.ws.rs.core.UriBuilder.resolveTemplates(Ljava/util/Map;)Ljavax/ws/rs/core/UriBuilder;
        at org.jboss.resteasy.client.jaxrs.internal.ClientWebTarget.resolveTemplates(ClientWebTarget.java:178) ~[resteasy-client-3.5.1.Final.jar:3.5.1.Final]
        at org.jboss.resteasy.client.jaxrs.internal.proxy.SubResourceInvoker.invoke(SubResourceInvoker.java:65) ~[resteasy-client-3.5.1.Final.jar:3.5.1.Final]
        at org.jboss.resteasy.client.jaxrs.internal.proxy.ClientProxy.invoke(ClientProxy.java:76) ~[resteasy-client-3.5.1.Final.jar:3.5.1.Final]
        at com.sun.proxy.$Proxy198.realm(Unknown Source) ~[na:na]
        at org.keycloak.admin.client.Keycloak.realm(Keycloak.java:118) ~[keycloak-admin-client-3.4.3.Final.jar:3.4.3.Final]

Если честно: я не эксперт по Maven и собрал его из нескольких веб-сайтов и ожидаю, что некоторые части все еще устарелиили что-то в этом роде.

Зависимость POM:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>1.5.3.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
        <version>1.5.3.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>6.0.6</version>
        <scope>runtime</scope>
    </dependency>

    <!-- Keycloak -->
    <dependency>
        <groupId>org.keycloak</groupId>
        <artifactId>keycloak-spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>org.keycloak</groupId>
        <artifactId>keycloak-admin-client</artifactId>
        <version>3.4.3.Final</version>
    </dependency>

    <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-client</artifactId>
        <version>3.5.1.Final</version>
    </dependency>

    <!-- JUnit -->
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-api</artifactId>
        <version>${junit.jupiter.version}</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>${junit.version}</version>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jersey</artifactId>
        <version>2.0.2.RELEASE</version>
    </dependency>
</dependencies>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.keycloak.bom</groupId>
            <artifactId>keycloak-adapter-bom</artifactId>
            <version>3.4.3.Final</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

Ошибка возникает из модуля 'keycloak-admin-client'.

Теперь основной вопрос:

  • В чем проблема?Или это действительно ошибка внутри версии 'keycloak-admin-client'?

Я не думаю, что приводит меня ко второму вопросу:

  • Как я могуузнал, что мне нужно изменить в такой ситуации?

Заранее спасибо за все предложения.Прежде всего, я хочу научиться решать такие проблемы самостоятельно в будущем.

С уважением, Грегор

РЕДАКТИРОВАТЬ:

Ну, я шагдалее, но проблема все еще там.

POM, который я показываю вам здесь, это POM библиотеки, которая используется в других проектах.У этих Проектов есть «стартер начальной загрузки», которые используют версию «трикотаж»: 1.54.

Так что проблема кажется очевидной.Я добавил зависимость 'jersey 2.0.2' в окончательный проект POM

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jersey</artifactId>
        <version>2.0.2.RELEASE</version>
    </dependency>

Но проблема все еще существует.Как я могу заставить maven использовать версию 2.0.2 и переопределить 1.5.?

Только добавление зависимости, похоже, не помогает.

1 Ответ

0 голосов
/ 11 июня 2018

Пожалуйста, убедитесь, что класс UriBuilder существует в вашем проекте.И убедитесь, что в вашем проекте существует только один UriBuilder класс (версия).(Может быть несколько в вашем проекте с разными версиями.) Разные версии могут перекрываться.

  1. версия keycloak-admin-client должна совпадать с версией вашего сервера keycloak.
  2. добавить дополнительную зависимость к pom ( должны быть добавлены версии , для keycloak 3.0.0.Final => зависимости resteasy 3.5.0. Финал работает для меня. Зависимости должны быть соблюдены.)

        <dependency>
            <groupId>org.keycloak</groupId>
            <artifactId>keycloak-admin-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-jackson2-provider</artifactId>
        </dependency>
        <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-multipart-provider</artifactId>
        </dependency>
    

Примечание. Это мое предложение, если вы разрабатываете многослойное приложение.Вы можете разделить ваш проект на слои.Вы можете разделить свое весеннее загрузочное приложение и слой доступа keycloak.И используйте этот новый проект в качестве зависимости.

edit,

see Не удалось добавить пользователя с помощью keycloak-admin-client в Keycloak из-за "неизвестного ресурса"

Я надеюсь, что это может помочь.

...