You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by GitBox <gi...@apache.org> on 2018/09/06 03:28:38 UTC

[GitHub] candyleer opened a new pull request #1632: Fix inherit spring controller blocking error

candyleer opened a new pull request #1632: Fix inherit spring controller blocking error
URL: https://github.com/apache/incubator-skywalking/pull/1632
 
 
   Please answer these questions before submitting pull request
   
   - Why submit this pull request?
   - [x] Bug fix
   - [ ] New feature provided
   - [ ] Improve performance
   
   - Related issues
   
   ___
   ### Bug fix
   - Bug description.
   when spring controller inherit exist will produce this blocking error in business code,param cannot be set.
   ```
   java.lang.IllegalArgumentException: Name for argument type [java.lang.Integer] not available, and parameter name information not found in class file either.
   	at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.updateNamedValueInfo(AbstractNamedValueMethodArgumentResolver.java:168)
   	at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.getNamedValueInfo(AbstractNamedValueMethodArgumentResolver.java:145)
   	at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.resolveArgument(AbstractNamedValueMethodArgumentResolver.java:94)
   	at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121)
   	at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:158)
   	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest$original$7lyOlrxo(InvocableHandlerMethod.java:128)
   	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest$original$7lyOlrxo$accessor$wlLDCHc4(InvocableHandlerMethod.java)
   	at org.springframework.web.method.support.InvocableHandlerMethod$auxiliary$vLrzxjQq.call(Unknown Source)
   	at org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstMethodsInter.intercept(InstMethodsInter.java:93)
   	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java)
   	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:97)
   	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)
   	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)
   	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
   	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967)
   	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)
   	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
   	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
   	at javax.servlet.http.HttpServlet.service(HttpServlet.java:635)
   	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
   	at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
   	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
   	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
   	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
   	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
   	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
   	at com.example.test.CustomFilter.doFilter(CustomFilter.java:37)
   	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
   	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
   	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)
   	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
   	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
   	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
   	at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:108)
   	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
   	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
   	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
   	at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:81)
   	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
   	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
   	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
   	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)
   	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
   	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
   	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
   	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
   	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
   	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:478)
   	at org.apache.catalina.core.StandardHostValve.invoke$original$UzEo7A0e(StandardHostValve.java:140)
   	at org.apache.catalina.core.StandardHostValve.invoke$original$UzEo7A0e$accessor$aTwcUwgc(StandardHostValve.java)
   	at org.apache.catalina.core.StandardHostValve$auxiliary$PnfLXAZY.call(Unknown Source)
   	at org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstMethodsInter.intercept(InstMethodsInter.java:93)
   	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java)
   	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
   	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
   	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
   	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:803)
   	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
   	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
   	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1459)
   	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
   	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
   	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
   	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
   	at java.lang.Thread.run(Thread.java:748)
   ```
   
   example code
   ParentController.java
   ```java
   @RestController
   @RequestMapping("parent")
   public class ParentController {
   
       @GetMapping("a")
       public String a(Integer b) {
           return "parent-a" + b;
       }
   }
   ```
   ChildController.java
   ```java
   @RestController
   @RequestMapping("child")
   public class ChildController extends ParentController {
   
   }
   ```
   
    ## Without Agent
   ![image](https://user-images.githubusercontent.com/11530760/45133442-c49c8380-b1c7-11e8-9ecd-fb8217212fc7.png)
   
   ## With Agent
   
   ![image](https://user-images.githubusercontent.com/11530760/45133448-d54cf980-b1c7-11e8-9c7b-8259bc81e684.png)
   
   will reproduce this error
   - How to fix?
   
   For the root reason is  bytebuddy enhace bytecode by enhancing some methods which is not declared by the own Class( some from parent Class),so spring will get wrong method name in RequestMapping.so the solution is making method enhancement is declared by current Class(TypeDescription in bytebuddy)
   ___
   ### New feature or improvement
   - Describe the details and related test reports.
   

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services