После обновления с Spring Boot 1.5 до 2.1 мы получаем целевой объект типа com.sun.proxy. $ Proxy не относится к типу персистентного объекта - PullRequest
0 голосов
/ 28 марта 2019

Мы обновили Spring Boot 1.5.13.RELEASE до 2.1.3.RELEASE, и теперь POST to Spring Data Rest с проекцией завершается ошибкой:

java.lang.IllegalArgumentException: Target bean of type
 com.sun.proxy.$Proxy313 is not of type of the persistent entity
(com.*.*.*.BankAccount)!: com.sun.proxy.$Proxy313

Это выглядит очень похоже на старый билет: https://jira.spring.io/si/jira.issueviews:issue-html/DATAREST-1213/DATAREST-1213.html

Тест JUnit проходит:

  @Test
  public void shouldCreateEntity() throws Exception {
    ResultActions resultsActions = mockMvc.perform(post("/bankAccounts".concat("?projection=").concat(BankAccountDto.NAME))
        .content(new ObjectMapper().writeValueAsString(generateBankAccount())))
        .andExpect(status().isCreated())
        .andExpect(header().string("Location", containsString("bankAccounts/")))
        .andDo(verify().wiremock(
            WireMock.post(WireMock.urlPathMatching("/bankAccounts"))
        ).stub("create-bankAccount"))
        .andDo(document("create-bankAccount"));
  }

Но на сервере происходит сбой POST для Spring Data Rest.

    2019-03-28T11:13:13.401-05:00 [RTR/3] [OUT] account-service-qa-example.cfapps.io - [    2019-03-28T16:13:13.168+0000] 
    "POST /bankAccounts?projection=bankAccountDto HTTP/1.1" 500 205 185 "-" "Java/1.8.0_202" "00.00.0.00:57334" "00.00.000.00:61130" 
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at java.lang.Thread.run(Thread.java:748)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1415)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:834)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:679)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:200)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.cloudfoundry.router.ClientCertificateMapper.doFilter(ClientCertificateMapper.java:77)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:106)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.filterAndRecordMetrics(WebMvcMetricsFilter.java:117)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at brave.servlet.TracingFilter.doFilter(TracingFilter.java:86)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.springframework.cloud.sleuth.instrument.web.ExceptionLoggingFilter.doFilter(ExceptionLoggingFilter.java:50)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:93)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:92)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:270)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:357)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:178)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:215)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:74)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:116)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.springframework.security.oauth2.provider.authentication.OAuth2AuthenticationProcessingFilter.doFilter(OAuth2AuthenticationProcessingFilter.java:176)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:170)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:137)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:91)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:127)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:320)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.springframework.boot.actuate.web.trace.servlet.HttpTraceFilter.doFilterInternal(HttpTraceFilter.java:90)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at net.rakugakibox.spring.boot.logback.access.LogbackAccessSecurityAttributesSaveFilter.doFilter(LogbackAccessSecurityAttributesSaveFilter.java:28)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.springframework.web.filter.AbstractRequestLoggingFilter.doFilterInternal(AbstractRequestLoggingFilter.java:262)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:908)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1038)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:800)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:189)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at java.lang.reflect.Method.invoke(Method.java:498)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.springframework.data.rest.webmvc.RepositoryEntityController.postCollectionResource(RepositoryEntityController.java:272)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.springframework.data.rest.webmvc.RepositoryEntityController.createAndReturn(RepositoryEntityController.java:486)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.springframework.data.rest.webmvc.HttpHeadersPreparer.prepareHeaders(HttpHeadersPreparer.java:62)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at java.util.Optional.map(Optional.java:215)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.springframework.data.rest.webmvc.HttpHeadersPreparer.lambda$prepareHeaders$0(HttpHeadersPreparer.java:62)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.springframework.data.rest.webmvc.HttpHeadersPreparer.prepareHeaders(HttpHeadersPreparer.java:80)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.springframework.data.rest.webmvc.support.ETag.from(ETag.java:88)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.springframework.data.rest.webmvc.support.ETag.getVersionInformation(ETag.java:170)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.springframework.data.mapping.model.BasicPersistentEntity.getPropertyAccessor(BasicPersistentEntity.java:453)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.springframework.data.mapping.model.BasicPersistentEntity.verifyBeanType(BasicPersistentEntity.java:551)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.springframework.util.Assert.isInstanceOf(Assert.java:574)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] at org.springframework.util.Assert.instanceCheckFailed(Assert.java:655)
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT] java.lang.IllegalArgumentException: 
    Target bean of type com.sun.proxy.$Proxy313 is not of type of the persistent entity (com.*****.account.domain.BankAccount)!: com.sun.proxy.$Proxy313
    2019-03-28T11:16:39.058-05:00 [APP/PROC/WEB/0] [OUT]     2019-03-28 16:16:39.056 ERROR [account-service,1c845c447ea36328,7e8da14a044d1ab6,true] 
    [080-exec-6] o.s.d.r.w.RepositoryRestExceptionHandler:168 : 
    Target bean of type com.sun.proxy.$Proxy313 is not of type of the persistent entity (com.*****.account.domain.BankAccount)!: com.sun.proxy.$Proxy313
    2019-03-28T11:16:39.065-05:00 [RTR/6] [OUT] account-service-qa-example.cfapps.io - [    2019-03-28T16:16:38.856+0000] 
    "POST /bankAccounts?projection=bankAccountDto HTTP/1.1" 500 205 185 "-" "Java/1.8.0_202" "10.10.66.83:32538" "00.00.000.00:61130" 

Вызов Spring Data Rest прост и не изменился.

  public Optional<String> createBankAccount(CreateBankAccountDto createBankAccountDto) {
    UriComponentsBuilder builder = UriComponentsBuilder
        .fromHttpUrl(BANK_ACCOUNTS)
        .queryParam(PROJECTION, BankAccountDto.PROJECTION);
    try {
      HttpEntity<CreateBankAccountDto> entity = new HttpEntity<>(createBankAccountDto);
      ResponseEntity<BankAccountDto> response = restTemplate
          .exchange(builder.build().encode().toUri(), HttpMethod.POST, entity,
              BankAccountDto.class);
      if (response.getStatusCode().is2xxSuccessful() && response.getBody() != null
          && response.getBody().getId() != null) {
        return Optional.of(response.getBody().getId());
      }
    } catch (Exception e) {
      log.error(e.getMessage());
      log.debug(e.getMessage(), e);
    }
    return Optional.empty();
  }

Кто-нибудь еще испытывал эту проблему после обновления до Spring Boot 2.

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