Spring Data Rest: временная ошибка с IllegalArgumentException - PullRequest
0 голосов
/ 28 мая 2019

Наше приложение Spring использует Spring Data Rest для многих объектов приложения. Мы испытываем периодические ошибки, когда все запросы к приложению начнут сбой со следующим исключением.

java.lang.IllegalArgumentException: Не удалось разрешить метаданные репозитория для [вставить случайную сущность]. в org.springframework.data.rest.webmvc.config.ResourceMetadataHandlerMethodArgumentResolver.resolveArgument (ResourceMetadataHandlerMethodArgumentResolver.java:97) в org.springframework.data.rest.webmvc.config.RootResourceInformationHandlerMethodArgumentResolver.resolveArgument (RootResourceInformationHandlerMethodArgumentResolver.java:83) at org.springframework.data.rest.webmvc.config.RootResourceInformationHandlerMethodArgumentResolver.resolveArgument (RootResourceInformationHandlerMethodArgumentResolver.java:40)

Это нелегко воспроизвести, и сообщение Не удалось разрешить метаданные репозитория для [entity] всегда ссылается на случайную сущность в нашем приложении. Это заставляет меня думать, что это не проблема конфигурации с нашей стороны. Мы используем версию 2.1.3 Spring Boot. Есть предложения по устранению неполадок? Кто-нибудь еще испытывает это?

Для справки: код Spring, генерирующий исключение, выглядит следующим образом:

    public ResourceMetadata resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
    String lookupPath = this.baseUri.getRepositoryLookupPath(webRequest);
    String repositoryKey = UriUtils.findMappingVariable("repository", parameter.getMethod(), lookupPath);
    if (!StringUtils.hasText(repositoryKey)) {
        return null;
    } else {
        Iterator var7 = this.repositories.iterator();

        ResourceMetadata mapping;
        do {
            if (!var7.hasNext()) {
                throw new IllegalArgumentException(String.format("Could not resolve repository metadata for %s.", repositoryKey));
            }

            Class<?> domainType = (Class)var7.next();
            mapping = this.mappings.getMetadataFor(domainType);
        } while(!mapping.getPath().matches(repositoryKey) || !mapping.isExported());

        return mapping;
    }
}

Я не уверен, что вдруг итератор репозитория внезапно станет пустым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...