fix noSuchMethod (#3408)
This commit is contained in:
parent
876b60c100
commit
c5b03ba7eb
|
|
@ -0,0 +1,41 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
*/
|
||||
|
||||
package org.apache.skywalking.apm.plugin.spring.mvc.v4;
|
||||
|
||||
import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
|
||||
import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceConstructorInterceptor;
|
||||
import org.apache.skywalking.apm.plugin.spring.mvc.commons.EnhanceRequireObjectCache;
|
||||
import org.apache.skywalking.apm.plugin.spring.mvc.commons.PathMappingCache;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
|
||||
public class ControllerForLowVersionConstructorInterceptor implements InstanceConstructorInterceptor {
|
||||
@Override
|
||||
public void onConstruct(EnhancedInstance objInst, Object[] allArguments) {
|
||||
String basePath = "";
|
||||
RequestMapping basePathRequestMapping = objInst.getClass().getAnnotation(RequestMapping.class);
|
||||
if (basePathRequestMapping != null) {
|
||||
if (basePathRequestMapping.value().length > 0) {
|
||||
basePath = basePathRequestMapping.value()[0];
|
||||
}
|
||||
}
|
||||
EnhanceRequireObjectCache enhanceRequireObjectCache = new EnhanceRequireObjectCache();
|
||||
enhanceRequireObjectCache.setPathMappingCache(new PathMappingCache(basePath));
|
||||
objInst.setSkyWalkingDynamicField(enhanceRequireObjectCache);
|
||||
}
|
||||
}
|
||||
|
|
@ -25,7 +25,7 @@ public abstract class AbstractSpring4Instrumentation extends ClassInstanceMethod
|
|||
public static final String WITHNESS_CLASSES = "org.springframework.cache.interceptor.SimpleKey";
|
||||
|
||||
@Override
|
||||
protected final String[] witnessClasses() {
|
||||
protected String[] witnessClasses() {
|
||||
return new String[] {WITHNESS_CLASSES, "org.springframework.cache.interceptor.DefaultKeyGenerator"};
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,57 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
*/
|
||||
|
||||
package org.apache.skywalking.apm.plugin.spring.mvc.v4.define;
|
||||
|
||||
import net.bytebuddy.description.method.MethodDescription;
|
||||
import net.bytebuddy.matcher.ElementMatcher;
|
||||
import org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint;
|
||||
|
||||
import static net.bytebuddy.matcher.ElementMatchers.any;
|
||||
|
||||
public class ControllerForLowVersionInstrumentation extends AbstractControllerInstrumentation {
|
||||
public static final String WITNESS_CLASSES_LOW_VERSION = "org.springframework.web.context.support.ServletContextPropertyPlaceholderConfigurer";
|
||||
|
||||
public static final String ENHANCE_ANNOTATION = "org.springframework.stereotype.Controller";
|
||||
|
||||
@Override
|
||||
public ConstructorInterceptPoint[] getConstructorsInterceptPoints() {
|
||||
ConstructorInterceptPoint constructorInterceptPoint = new ConstructorInterceptPoint() {
|
||||
@Override
|
||||
public ElementMatcher<MethodDescription> getConstructorMatcher() {
|
||||
return any();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getConstructorInterceptor() {
|
||||
return "org.apache.skywalking.apm.plugin.spring.mvc.v4.ControllerForLowVersionConstructorInterceptor";
|
||||
}
|
||||
};
|
||||
return new ConstructorInterceptPoint[]{constructorInterceptPoint};
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String[] witnessClasses() {
|
||||
return new String[]{WITHNESS_CLASSES, "org.springframework.cache.interceptor.DefaultKeyGenerator", WITNESS_CLASSES_LOW_VERSION};
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String[] getEnhanceAnnotations() {
|
||||
return new String[]{ENHANCE_ANNOTATION};
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,57 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
*/
|
||||
|
||||
package org.apache.skywalking.apm.plugin.spring.mvc.v4.define;
|
||||
|
||||
import net.bytebuddy.description.method.MethodDescription;
|
||||
import net.bytebuddy.matcher.ElementMatcher;
|
||||
import org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint;
|
||||
|
||||
import static net.bytebuddy.matcher.ElementMatchers.any;
|
||||
|
||||
public class RestControllerForLowVersionInstrumentation extends AbstractControllerInstrumentation {
|
||||
public static final String WITNESS_CLASSES_LOW_VERSION = "org.springframework.web.context.support.ServletContextPropertyPlaceholderConfigurer";
|
||||
|
||||
public static final String ENHANCE_ANNOTATION = "org.springframework.web.bind.annotation.RestController";
|
||||
|
||||
@Override
|
||||
public ConstructorInterceptPoint[] getConstructorsInterceptPoints() {
|
||||
ConstructorInterceptPoint constructorInterceptPoint = new ConstructorInterceptPoint() {
|
||||
@Override
|
||||
public ElementMatcher<MethodDescription> getConstructorMatcher() {
|
||||
return any();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getConstructorInterceptor() {
|
||||
return "org.apache.skywalking.apm.plugin.spring.mvc.v4.ControllerForLowVersionConstructorInterceptor";
|
||||
}
|
||||
};
|
||||
return new ConstructorInterceptPoint[]{constructorInterceptPoint};
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String[] witnessClasses() {
|
||||
return new String[]{WITHNESS_CLASSES, "org.springframework.cache.interceptor.DefaultKeyGenerator", WITNESS_CLASSES_LOW_VERSION};
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String[] getEnhanceAnnotations() {
|
||||
return new String[]{ENHANCE_ANNOTATION};
|
||||
}
|
||||
}
|
||||
|
|
@ -21,9 +21,17 @@ package org.apache.skywalking.apm.plugin.spring.mvc.v4.define;
|
|||
|
||||
public class RestControllerInstrumentation extends AbstractControllerInstrumentation {
|
||||
|
||||
public static final String WITNESS_CLASSES_HIGH_VERSION = "org.springframework.http.HttpRange";
|
||||
|
||||
public static final String ENHANCE_ANNOTATION = "org.springframework.web.bind.annotation.RestController";
|
||||
|
||||
@Override protected String[] getEnhanceAnnotations() {
|
||||
return new String[] {ENHANCE_ANNOTATION};
|
||||
@Override
|
||||
protected String[] getEnhanceAnnotations() {
|
||||
return new String[]{ENHANCE_ANNOTATION};
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String[] witnessClasses() {
|
||||
return new String[]{WITHNESS_CLASSES, "org.springframework.cache.interceptor.DefaultKeyGenerator", WITNESS_CLASSES_HIGH_VERSION};
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,3 +18,5 @@ spring-mvc-annotation-4.x=org.apache.skywalking.apm.plugin.spring.mvc.v4.define.
|
|||
spring-mvc-annotation-4.x=org.apache.skywalking.apm.plugin.spring.mvc.v4.define.RestControllerInstrumentation
|
||||
spring-mvc-annotation-4.x=org.apache.skywalking.apm.plugin.spring.mvc.v4.define.HandlerMethodInstrumentation
|
||||
spring-mvc-annotation-4.x=org.apache.skywalking.apm.plugin.spring.mvc.v4.define.InvocableHandlerInstrumentation
|
||||
spring-mvc-annotation-4.x=org.apache.skywalking.apm.plugin.spring.mvc.v4.define.ControllerForLowVersionInstrumentation
|
||||
spring-mvc-annotation-4.x=org.apache.skywalking.apm.plugin.spring.mvc.v4.define.RestControllerForLowVersionInstrumentation
|
||||
|
|
|
|||
Loading…
Reference in New Issue