diff --git a/src/main/java/io/github/artlibs/autotrace4j/context/ReflectUtils.java b/src/main/java/io/github/artlibs/autotrace4j/context/ReflectUtils.java index 9f181e5..af73971 100644 --- a/src/main/java/io/github/artlibs/autotrace4j/context/ReflectUtils.java +++ b/src/main/java/io/github/artlibs/autotrace4j/context/ReflectUtils.java @@ -15,77 +15,55 @@ public final class ReflectUtils { private ReflectUtils() {} /** - * get public member from class or super class - * @param className class + * Get [public] methods from the object's class, or it's super class. + * @param obj object or class * @param methodName method * @param parameterTypes arg types * @return method wrapper */ - public static MethodWrapper getMethodWrapper(String className, String methodName, Class... parameterTypes) { - return getMethodWrapper(className, methodName, false, parameterTypes); + public static MethodWrapper getMethod(Object obj, String methodName, Class... parameterTypes) { + return MethodWrapper.of(obj, methodName, false, parameterTypes); } /** - * get public member from class or super class or get declared member form class - * @param className class - * @param methodName method - * @param declared declared method or not - * @param parameterTypes arg types - * @return MethodWrapper - */ - public static MethodWrapper getMethodWrapper( - String className, String methodName, boolean declared, Class... parameterTypes - ) { - Class clazz = null; - try { - clazz = Class.forName(className, true, ClassLoader.getSystemClassLoader()); - } catch (Exception e) { - e.printStackTrace(); - } - return MethodWrapper.of(clazz, methodName, declared, parameterTypes); - } - - /** - * get public member from object's class or super class - * @param obj instance + * Get [declared] methods of the object's class. + * @param obj object or class * @param methodName method * @param parameterTypes arg types * @return method wrapper */ - public static MethodWrapper getMethodWrapper(Object obj, String methodName, Class... parameterTypes) { - return getMethodWrapper(obj, methodName, false, parameterTypes); + public static MethodWrapper getDeclaredMethod(Object obj, String methodName, Class... parameterTypes) { + return MethodWrapper.of(obj, methodName, true, parameterTypes); } /** - * get public member from object's class or super class or get declared field form class - * @param obj instance - * @param methodName method - * @param declared declared method or not - * @param parameterTypes arg types - * @return method wrapper + * Get [public] fields from the object/class, or it's super/class. + * @param obj object or class + * @param fieldName field + * @return field */ - public static MethodWrapper getMethodWrapper(Object obj, String methodName, boolean declared, Class... parameterTypes) { - return MethodWrapper.of(obj, methodName, declared, parameterTypes); + public static Field getField(Object obj, String fieldName) { + return getField(obj, fieldName, false); } /** - * get public field from object's class or super class - * @param obj instance + * Get [declared] fields from the object or class. + * @param obj object or class * @param fieldName field * @return field */ - public static Field getField(Object obj, String fieldName) { - return getField(obj, fieldName, false); + public static Field getDeclaredField(Object obj, String fieldName) { + return getField(obj, fieldName, true); } /** - * get public field from object's class or super class or get declared field form class - * @param obj instance + * Get fields from the object/class (or it's super/class). + * @param obj object or class * @param fieldName field * @param declared declared method or not * @return field */ - public static Field getField(Object obj, String fieldName, boolean declared) { + private static Field getField(Object obj, String fieldName, boolean declared) { if (Objects.isNull(obj)) { return null; } @@ -107,36 +85,38 @@ public static Field getField(Object obj, String fieldName, boolean declared) { } /** - * get field value - * @param obj instance + * Get [public] field value from the object/class, or it's super/class. + * @param obj object or class * @param fieldName field * @return result * @param field type */ - @SuppressWarnings("unchecked") public static T getFieldValue(Object obj, String fieldName) { - Field field = getField(obj, fieldName, false); + return getFieldValue(obj, fieldName, false); + } - try { - return Objects.isNull(field) ? null : (T) field.get(obj); - } catch (Exception e) { - e.printStackTrace(); - return null; - } + /** + * Get [declared] field value from the object or class. + * @param obj object or class + * @param fieldName field + * @return result + * @param field type + */ + public static T getDeclaredFieldValue(Object obj, String fieldName) { + return getFieldValue(obj, fieldName, true); } /** - * get field value - * @param obj instance + * Get field value from the object/class (or it's super/class). + * @param obj object or class * @param fieldName field * @param declared declared method or not * @return result * @param field type */ @SuppressWarnings("unchecked") - public static T getFieldValue(Object obj, String fieldName, boolean declared) { + private static T getFieldValue(Object obj, String fieldName, boolean declared) { Field field = getField(obj, fieldName, declared); - try { return Objects.isNull(field) ? null : (T) field.get(obj); } catch (Exception e) { @@ -146,52 +126,33 @@ public static T getFieldValue(Object obj, String fieldName, boolean declared } /** - * set field value - * @param className class + * Set [public] field value for the object/class (or it's super/class). + * @param obj object or class * @param fieldName field * @param value field value */ - public static void setFieldValue(String className, String fieldName, Object value) { - setFieldValue(className, fieldName, value, false); - } - - /** - * set field value - * @param className class - * @param fieldName field - * @param value field value - * @param declared declared method or not - */ - public static void setFieldValue(String className, String fieldName, Object value, boolean declared) { - Class clazz; - try { - clazz = Class.forName(className, true, ClassLoader.getSystemClassLoader()); - } catch (Exception e) { - System.err.println(e.getMessage()); - e.printStackTrace(); - return; - } - setFieldValue(clazz, fieldName, value, declared); + public static void setFieldValue(Object obj, String fieldName, Object value) { + setFieldValue(obj, fieldName, value, false); } /** - * set field value - * @param obj instance + * Set [declared] field value for the object (or class). + * @param obj object or class * @param fieldName field * @param value field value */ - public static void setFieldValue(Object obj, String fieldName, Object value) { - setFieldValue(obj, fieldName, value, false); + public static void setDeclaredFieldValue(Object obj, String fieldName, Object value) { + setFieldValue(obj, fieldName, value, true); } /** - * set field value - * @param obj instance + * Set field value for the object/class, or it's super/class. + * @param obj object or class * @param fieldName field * @param value field value * @param declared declared method or not */ - public static void setFieldValue(Object obj, String fieldName, Object value, boolean declared) { + private static void setFieldValue(Object obj, String fieldName, Object value, boolean declared) { Field field = getField(obj, fieldName, declared); if (Objects.isNull(field)) { return; diff --git a/src/main/java/io/github/artlibs/autotrace4j/transformer/abs/AbsDelegateTransformer.java b/src/main/java/io/github/artlibs/autotrace4j/transformer/abs/AbsDelegateTransformer.java index 9af8465..c722d2f 100644 --- a/src/main/java/io/github/artlibs/autotrace4j/transformer/abs/AbsDelegateTransformer.java +++ b/src/main/java/io/github/artlibs/autotrace4j/transformer/abs/AbsDelegateTransformer.java @@ -189,20 +189,15 @@ public abstract static class AbsAnonymousInterface extends AbsConstructor { * {@inheritDoc} */ @Override - protected void onMethodEnter(Object obj, Object[] allArgs, Method originMethod) throws Exception { - String traceId = ReflectUtils.getFieldValue(obj, TraceContext.TRACE_KEY); + protected void onMethodEnter(Object thiz, Object[] allArgs, Method originMethod) throws Exception { + String traceId = ReflectUtils.getDeclaredFieldValue(thiz, TraceContext.TRACE_KEY); if (Objects.nonNull(traceId)) { TraceContext.setTraceId(traceId); + TraceContext.setSpanId(TraceContext.generate()); } - - String spanId = ReflectUtils.getFieldValue(obj, TraceContext.SPAN_KEY); + String spanId = ReflectUtils.getDeclaredFieldValue(thiz, TraceContext.SPAN_KEY); if (Objects.nonNull(spanId)) { - TraceContext.setSpanId(spanId); - } - - String parentSpanId = ReflectUtils.getFieldValue(obj, TraceContext.PARENT_SPAN_KEY); - if (Objects.nonNull(parentSpanId)) { - TraceContext.setParentSpanId(parentSpanId); + TraceContext.setParentSpanId(spanId); } } } @@ -257,13 +252,13 @@ protected void onMethodEnter(Object thiz, Object[] allArgs, Method originMethod) if (isHttp) { // first we take it from the req attributes String traceId = ReflectUtils - .getMethodWrapper(allArgs[0], Constants.GET_ATTRIBUTE, String.class) + .getMethod(allArgs[0], Constants.GET_ATTRIBUTE, String.class) .invoke(TraceContext.ATO_TRACE_ID); String parentSpanId = ReflectUtils - .getMethodWrapper(allArgs[0], Constants.GET_ATTRIBUTE, String.class) + .getMethod(allArgs[0], Constants.GET_ATTRIBUTE, String.class) .invoke(TraceContext.ATO_PARENT_SPAN_ID); String spanId = ReflectUtils - .getMethodWrapper(allArgs[0], Constants.GET_ATTRIBUTE, String.class) + .getMethod(allArgs[0], Constants.GET_ATTRIBUTE, String.class) .invoke(TraceContext.ATO_SPAN_ID); if (Objects.nonNull(traceId)) { @@ -272,10 +267,10 @@ protected void onMethodEnter(Object thiz, Object[] allArgs, Method originMethod) TraceContext.setSpanId(spanId); } else { traceId = ReflectUtils - .getMethodWrapper(allArgs[0], Constants.GET_HEADER, String.class) + .getMethod(allArgs[0], Constants.GET_HEADER, String.class) .invoke(TraceContext.ATO_TRACE_ID); parentSpanId = ReflectUtils - .getMethodWrapper(allArgs[0], Constants.GET_HEADER, String.class) + .getMethod(allArgs[0], Constants.GET_HEADER, String.class) .invoke(TraceContext.ATO_SPAN_ID); if (Objects.isNull(traceId)) { @@ -288,22 +283,22 @@ protected void onMethodEnter(Object thiz, Object[] allArgs, Method originMethod) TraceContext.setParentSpanId(parentSpanId); ReflectUtils - .getMethodWrapper(allArgs[0], Constants.SET_ATTRIBUTE, String.class, Object.class) + .getMethod(allArgs[0], Constants.SET_ATTRIBUTE, String.class, Object.class) .invoke(TraceContext.ATO_TRACE_ID, traceId); ReflectUtils - .getMethodWrapper(allArgs[0], Constants.SET_ATTRIBUTE, String.class, Object.class) + .getMethod(allArgs[0], Constants.SET_ATTRIBUTE, String.class, Object.class) .invoke(TraceContext.ATO_PARENT_SPAN_ID, parentSpanId); ReflectUtils - .getMethodWrapper(allArgs[0], Constants.SET_ATTRIBUTE, String.class, Object.class) + .getMethod(allArgs[0], Constants.SET_ATTRIBUTE, String.class, Object.class) .invoke(TraceContext.ATO_SPAN_ID, spanId); ReflectUtils - .getMethodWrapper(allArgs[1], Constants.SET_HEADER, String.class, String.class) + .getMethod(allArgs[1], Constants.SET_HEADER, String.class, String.class) .invoke(TraceContext.ATO_TRACE_ID, traceId); ReflectUtils - .getMethodWrapper(allArgs[1], Constants.SET_HEADER, String.class, String.class) + .getMethod(allArgs[1], Constants.SET_HEADER, String.class, String.class) .invoke(TraceContext.ATO_PARENT_SPAN_ID, parentSpanId); ReflectUtils - .getMethodWrapper(allArgs[1], Constants.SET_HEADER, String.class, String.class) + .getMethod(allArgs[1], Constants.SET_HEADER, String.class, String.class) .invoke(TraceContext.ATO_SPAN_ID, spanId); } } diff --git a/src/main/java/io/github/artlibs/autotrace4j/transformer/impl/ApacheHttpClientTransformer.java b/src/main/java/io/github/artlibs/autotrace4j/transformer/impl/ApacheHttpClientTransformer.java index 41a4ad2..7eb0661 100644 --- a/src/main/java/io/github/artlibs/autotrace4j/transformer/impl/ApacheHttpClientTransformer.java +++ b/src/main/java/io/github/artlibs/autotrace4j/transformer/impl/ApacheHttpClientTransformer.java @@ -51,7 +51,7 @@ protected ElementMatcher methodMatcher() { protected void onMethodEnter(Object thiz, Object[] allArgs, Method originMethod) throws Exception { final String traceId = TraceContext.getTraceId(); if (Objects.nonNull(traceId)) { - MethodWrapper setHeaderMethod = ReflectUtils.getMethodWrapper(allArgs[1] + MethodWrapper setHeaderMethod = ReflectUtils.getMethod(allArgs[1] , Constants.SET_HEADER, String.class, String.class); setHeaderMethod.invoke(TraceContext.ATO_TRACE_ID, traceId); final String spanId = TraceContext.getSpanId(); diff --git a/src/main/java/io/github/artlibs/autotrace4j/transformer/impl/DubboConsumerTransformer.java b/src/main/java/io/github/artlibs/autotrace4j/transformer/impl/DubboConsumerTransformer.java index f03533b..24369ec 100644 --- a/src/main/java/io/github/artlibs/autotrace4j/transformer/impl/DubboConsumerTransformer.java +++ b/src/main/java/io/github/artlibs/autotrace4j/transformer/impl/DubboConsumerTransformer.java @@ -1,8 +1,8 @@ package io.github.artlibs.autotrace4j.transformer.impl; -import io.github.artlibs.autotrace4j.context.TraceContext; import io.github.artlibs.autotrace4j.context.MethodWrapper; import io.github.artlibs.autotrace4j.context.ReflectUtils; +import io.github.artlibs.autotrace4j.context.TraceContext; import io.github.artlibs.autotrace4j.transformer.abs.AbsDelegateTransformer; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.type.TypeDescription; @@ -51,7 +51,7 @@ protected ElementMatcher methodMatcher() { protected void onMethodEnter(Object thiz, Object[] allArgs, Method originMethod) throws Exception { String traceId = TraceContext.getTraceId(); if (Objects.nonNull(traceId)) { - MethodWrapper methodWrapper = ReflectUtils.getMethodWrapper(allArgs[1] + MethodWrapper methodWrapper = ReflectUtils.getMethod(allArgs[1] , "setAttachment", String.class, String.class); methodWrapper.invoke(TraceContext.ATO_TRACE_ID, traceId); final String spanId = TraceContext.getSpanId(); diff --git a/src/main/java/io/github/artlibs/autotrace4j/transformer/impl/DubboProviderTransformer.java b/src/main/java/io/github/artlibs/autotrace4j/transformer/impl/DubboProviderTransformer.java index cdc709e..c783350 100644 --- a/src/main/java/io/github/artlibs/autotrace4j/transformer/impl/DubboProviderTransformer.java +++ b/src/main/java/io/github/artlibs/autotrace4j/transformer/impl/DubboProviderTransformer.java @@ -1,8 +1,8 @@ package io.github.artlibs.autotrace4j.transformer.impl; -import io.github.artlibs.autotrace4j.context.TraceContext; import io.github.artlibs.autotrace4j.context.MethodWrapper; import io.github.artlibs.autotrace4j.context.ReflectUtils; +import io.github.artlibs.autotrace4j.context.TraceContext; import io.github.artlibs.autotrace4j.transformer.abs.AbsDelegateTransformer; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.type.TypeDescription; @@ -49,7 +49,7 @@ protected ElementMatcher methodMatcher() { */ @Override protected void onMethodEnter(Object thiz, Object[] allArgs, Method originMethod) throws Exception { - MethodWrapper methodWrapper = ReflectUtils.getMethodWrapper(allArgs[1] + MethodWrapper methodWrapper = ReflectUtils.getMethod(allArgs[1] , "getAttachment", String.class); final String traceId = methodWrapper.invoke(TraceContext.ATO_TRACE_ID); if (Objects.nonNull(traceId)) { diff --git a/src/main/java/io/github/artlibs/autotrace4j/transformer/impl/KafkaProducerTransformer.java b/src/main/java/io/github/artlibs/autotrace4j/transformer/impl/KafkaProducerTransformer.java index 6f6be7b..03cb475 100644 --- a/src/main/java/io/github/artlibs/autotrace4j/transformer/impl/KafkaProducerTransformer.java +++ b/src/main/java/io/github/artlibs/autotrace4j/transformer/impl/KafkaProducerTransformer.java @@ -49,12 +49,12 @@ public static void adviceOnMethodEnter( if (Objects.isNull(producerRecord) || Objects.isNull(traceId)) { return; } - Object headers = ReflectUtils.getMethodWrapper(producerRecord + Object headers = ReflectUtils.getMethod(producerRecord , "headers").invoke(); if (Objects.isNull(headers)) { return; } - MethodWrapper method = ReflectUtils.getMethodWrapper(headers + MethodWrapper method = ReflectUtils.getMethod(headers , "add", String.class, byte[].class); method.invoke(TraceContext.TRACE_KEY, traceId.getBytes()); diff --git a/src/main/java/io/github/artlibs/autotrace4j/transformer/impl/KafkaSpringConsumerTransformer.java b/src/main/java/io/github/artlibs/autotrace4j/transformer/impl/KafkaSpringConsumerTransformer.java index 385adae..b8fdad5 100644 --- a/src/main/java/io/github/artlibs/autotrace4j/transformer/impl/KafkaSpringConsumerTransformer.java +++ b/src/main/java/io/github/artlibs/autotrace4j/transformer/impl/KafkaSpringConsumerTransformer.java @@ -52,21 +52,21 @@ protected MethodMatcherHolder methodMatchers() { public static void adviceOnMethodEnter(@Advice.Argument(value = 0) Object recOrRecs) { Object consumerRecord = recOrRecs; if (Iterable.class.isAssignableFrom(recOrRecs.getClass())) { - Iterator iterator = ReflectUtils.getMethodWrapper(recOrRecs + Iterator iterator = ReflectUtils.getMethod(recOrRecs , "iterator").invoke(); - consumerRecord = ReflectUtils.getMethodWrapper(iterator + consumerRecord = ReflectUtils.getMethod(iterator , "next").invoke(); } - Object headers = ReflectUtils.getMethodWrapper(consumerRecord + Object headers = ReflectUtils.getMethod(consumerRecord , "headers").invoke(); - MethodWrapper lastHeader = ReflectUtils.getMethodWrapper(headers + MethodWrapper lastHeader = ReflectUtils.getMethod(headers , "lastHeader", String.class); Object traceIdHeader = lastHeader.invoke(TraceContext.TRACE_KEY); - byte[] traceIdByte = ReflectUtils.getMethodWrapper(traceIdHeader + byte[] traceIdByte = ReflectUtils.getMethod(traceIdHeader , "value").invoke(); Object spanIdHeader = lastHeader.invoke(TraceContext.SPAN_KEY); - byte[] spanIdByte = ReflectUtils.getMethodWrapper(spanIdHeader + byte[] spanIdByte = ReflectUtils.getMethod(spanIdHeader , "value").invoke(); if (Objects.isNull(traceIdByte)) { diff --git a/src/main/java/io/github/artlibs/autotrace4j/transformer/impl/LogbackLog4jAsyncTransformer.java b/src/main/java/io/github/artlibs/autotrace4j/transformer/impl/LogbackLog4jAsyncTransformer.java index f8590fd..cf0b6da 100644 --- a/src/main/java/io/github/artlibs/autotrace4j/transformer/impl/LogbackLog4jAsyncTransformer.java +++ b/src/main/java/io/github/artlibs/autotrace4j/transformer/impl/LogbackLog4jAsyncTransformer.java @@ -52,9 +52,9 @@ protected MethodMatcherHolder methodMatchers() { public static void adviceOnMethodEnter( @Advice.Argument(value = 0, typing = Assigner.Typing.DYNAMIC , readOnly = false) Object logEvent) { - String traceId = ReflectUtils.getMethodWrapper(logEvent, TraceContext.TRACE_KEY_GETTER).invoke(); - String spanId = ReflectUtils.getMethodWrapper(logEvent, TraceContext.SPAN_KEY_GETTER).invoke(); - String parentSpanId = ReflectUtils.getMethodWrapper(logEvent, TraceContext.PARENT_SPAN_KEY_GETTER).invoke(); + String traceId = ReflectUtils.getMethod(logEvent, TraceContext.TRACE_KEY_GETTER).invoke(); + String spanId = ReflectUtils.getMethod(logEvent, TraceContext.SPAN_KEY_GETTER).invoke(); + String parentSpanId = ReflectUtils.getMethod(logEvent, TraceContext.PARENT_SPAN_KEY_GETTER).invoke(); // 异步的情况下:上下文没有traceId或者traceId对不上 String ctxTraceId = TraceContext.getTraceId(); diff --git a/src/main/java/io/github/artlibs/autotrace4j/transformer/impl/OkHttp3HttpClientTransformer.java b/src/main/java/io/github/artlibs/autotrace4j/transformer/impl/OkHttp3HttpClientTransformer.java index df096eb..7b0e896 100644 --- a/src/main/java/io/github/artlibs/autotrace4j/transformer/impl/OkHttp3HttpClientTransformer.java +++ b/src/main/java/io/github/artlibs/autotrace4j/transformer/impl/OkHttp3HttpClientTransformer.java @@ -1,7 +1,7 @@ package io.github.artlibs.autotrace4j.transformer.impl; -import io.github.artlibs.autotrace4j.context.TraceContext; import io.github.artlibs.autotrace4j.context.ReflectUtils; +import io.github.artlibs.autotrace4j.context.TraceContext; import io.github.artlibs.autotrace4j.transformer.abs.AbsDelegateTransformer; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.type.TypeDescription; @@ -50,7 +50,7 @@ protected void onMethodEnter(Object thiz, Object[] allArgs, Method originMethod) if (Objects.isNull(traceId) || Objects.isNull(thiz)) { return; } - List namesAndValues = ReflectUtils.getFieldValue(thiz, "namesAndValues", true); + List namesAndValues = ReflectUtils.getDeclaredFieldValue(thiz, "namesAndValues"); if (Objects.nonNull(namesAndValues) && !namesAndValues.contains(TraceContext.ATO_TRACE_ID)) { namesAndValues.add(TraceContext.ATO_TRACE_ID); namesAndValues.add(traceId); diff --git a/src/main/java/io/github/artlibs/autotrace4j/transformer/impl/RocketMqListenerTransformer.java b/src/main/java/io/github/artlibs/autotrace4j/transformer/impl/RocketMqListenerTransformer.java index fa5fcfb..65f7bdc 100644 --- a/src/main/java/io/github/artlibs/autotrace4j/transformer/impl/RocketMqListenerTransformer.java +++ b/src/main/java/io/github/artlibs/autotrace4j/transformer/impl/RocketMqListenerTransformer.java @@ -1,8 +1,8 @@ package io.github.artlibs.autotrace4j.transformer.impl; -import io.github.artlibs.autotrace4j.context.TraceContext; import io.github.artlibs.autotrace4j.context.MethodWrapper; import io.github.artlibs.autotrace4j.context.ReflectUtils; +import io.github.artlibs.autotrace4j.context.TraceContext; import io.github.artlibs.autotrace4j.transformer.abs.AbsDelegateTransformer; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.type.TypeDescription; @@ -47,7 +47,7 @@ protected ElementMatcher methodMatcher() { */ @Override protected void onMethodEnter(Object thiz, Object[] allArgs, Method originMethod) throws Exception { - MethodWrapper methodWrapper = ReflectUtils.getMethodWrapper(allArgs[0], GUP, String.class); + MethodWrapper methodWrapper = ReflectUtils.getMethod(allArgs[0], GUP, String.class); String traceId = methodWrapper.invoke(TraceContext.TRACE_KEY); String parentSpanId = methodWrapper.invoke(TraceContext.SPAN_KEY); diff --git a/src/main/java/io/github/artlibs/autotrace4j/transformer/impl/RocketMqProducerTransformer.java b/src/main/java/io/github/artlibs/autotrace4j/transformer/impl/RocketMqProducerTransformer.java index a59dc6a..9e85ee6 100644 --- a/src/main/java/io/github/artlibs/autotrace4j/transformer/impl/RocketMqProducerTransformer.java +++ b/src/main/java/io/github/artlibs/autotrace4j/transformer/impl/RocketMqProducerTransformer.java @@ -1,7 +1,7 @@ package io.github.artlibs.autotrace4j.transformer.impl; -import io.github.artlibs.autotrace4j.context.TraceContext; import io.github.artlibs.autotrace4j.context.ReflectUtils; +import io.github.artlibs.autotrace4j.context.TraceContext; import io.github.artlibs.autotrace4j.transformer.abs.AbsDelegateTransformer; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.type.TypeDescription; @@ -64,7 +64,7 @@ protected ElementMatcher methodMatcher() { */ @Override protected void onMethodEnter(Object thiz, Object[] allArgs, Method originMethod) throws Exception { - Map properties = ReflectUtils.getFieldValue(allArgs[0], "properties", true); + Map properties = ReflectUtils.getDeclaredFieldValue(allArgs[0], "properties"); if (Objects.nonNull(properties)) { String spanId = properties.get(TraceContext.SPAN_KEY); String traceId = properties.get(TraceContext.TRACE_KEY); diff --git a/src/main/java/io/github/artlibs/autotrace4j/transformer/impl/RocketMqSendCallbackTransformer.java b/src/main/java/io/github/artlibs/autotrace4j/transformer/impl/RocketMqSendCallbackTransformer.java index b79a845..544e62e 100644 --- a/src/main/java/io/github/artlibs/autotrace4j/transformer/impl/RocketMqSendCallbackTransformer.java +++ b/src/main/java/io/github/artlibs/autotrace4j/transformer/impl/RocketMqSendCallbackTransformer.java @@ -6,7 +6,6 @@ import net.bytebuddy.matcher.ElementMatcher; import static net.bytebuddy.matcher.ElementMatchers.*; -import static net.bytebuddy.matcher.ElementMatchers.isAbstract; /** * RocketMq Send Callback增强转换器 @@ -20,11 +19,9 @@ public class RocketMqSendCallbackTransformer extends AbsDelegateTransformer.AbsAnonymousInterface { @Override public ElementMatcher typeMatcher() { - return not(isAbstract()).and(not(isInterface())).and( - hasSuperType(named("org.apache.rocketmq.client.producer.SendCallback") - .or(named("com.aliyun.openservices.ons.api.SendCallback"))) - ); - + return hasSuperType(named("org.apache.rocketmq.client.producer.SendCallback") + .or(named("com.aliyun.openservices.ons.api.SendCallback"))) + .and(not(isAbstract()).and(not(isInterface()))); } @Override diff --git a/src/main/java/io/github/artlibs/autotrace4j/transformer/impl/jdk/SunHttpClientTransformer.java b/src/main/java/io/github/artlibs/autotrace4j/transformer/impl/jdk/SunHttpClientTransformer.java index e9c5b42..e5d09bb 100644 --- a/src/main/java/io/github/artlibs/autotrace4j/transformer/impl/jdk/SunHttpClientTransformer.java +++ b/src/main/java/io/github/artlibs/autotrace4j/transformer/impl/jdk/SunHttpClientTransformer.java @@ -73,7 +73,7 @@ public static void adviceOnMethodEnter( try { final String traceId = TraceContext.getTraceId(); if (Objects.nonNull(traceId)) { - MethodWrapper methodWrapper = ReflectUtils.getMethodWrapper(msgHeader + MethodWrapper methodWrapper = ReflectUtils.getMethod(msgHeader , SET_IF_NOT_SET, String.class, String.class); methodWrapper.invoke(TraceContext.ATO_TRACE_ID, traceId); diff --git a/src/test/java/io/github/artlibs/autotrace4j/LoggerTest.java b/src/test/java/io/github/artlibs/autotrace4j/LoggerTest.java index 206363c..58e8acc 100644 --- a/src/test/java/io/github/artlibs/autotrace4j/LoggerTest.java +++ b/src/test/java/io/github/artlibs/autotrace4j/LoggerTest.java @@ -32,8 +32,8 @@ import java.util.concurrent.ScheduledFuture; import java.util.stream.Stream; -import static io.github.artlibs.autotrace4j.context.ReflectUtils.getField; -import static io.github.artlibs.autotrace4j.context.ReflectUtils.getFieldValue; +import static io.github.artlibs.autotrace4j.context.ReflectUtils.getDeclaredField; +import static io.github.artlibs.autotrace4j.context.ReflectUtils.getDeclaredFieldValue; import static io.github.artlibs.autotrace4j.logger.event.Level.DEBUG; import static io.github.artlibs.autotrace4j.logger.event.Level.INFO; import static io.github.artlibs.autotrace4j.support.Constants.*; @@ -129,7 +129,7 @@ void logConsole() throws IOException, InterruptedException, IllegalAccessExcepti // make all level's log for (Level level : Level.values()) { ReflectUtils - .getMethodWrapper(logger, level.name().toLowerCase(), String.class, Object[].class) + .getMethod(logger, level.name().toLowerCase(), String.class, Object[].class) .invoke(level.name(), new Object[0]); } // waiting for log collect,its async write. @@ -158,7 +158,7 @@ void logFile() throws IOException, InterruptedException, IllegalAccessException // make all level's log for (Level level : Level.values()) { ReflectUtils - .getMethodWrapper(logger, level.name().toLowerCase(), String.class, Object[].class) + .getMethod(logger, level.name().toLowerCase(), String.class, Object[].class) .invoke(level.name(), new Object[0]); } // waiting for log collect,its async write. @@ -206,7 +206,7 @@ void cleanExpiredFile() throws IOException, InterruptedException, ExecutionExcep printDirectory(cleanExpiredFileDir); ScheduledFuture future = ReflectUtils - .getMethodWrapper(fileAppender, "triggerCleanTask", true, LocalDateTime.class) + .getDeclaredMethod(fileAppender, "triggerCleanTask", LocalDateTime.class) .invoke(now); // waiting task finish @@ -241,7 +241,7 @@ void rollingFile() throws IOException, InvocationTargetException, IllegalAccessE System.out.println("before files: "); printDirectory(rollingFileDir); // 刚好消息跟文件大小相同 - ReflectUtils.setFieldValue(fileAppender, "logFileSizeBytes", logSize, true); + ReflectUtils.setDeclaredFieldValue(fileAppender, "logFileSizeBytes", logSize); logger.info(message); waitingForAsyncAppend(fileAppender); try (Stream s = Files.list(rollingFileDir)) { @@ -251,7 +251,7 @@ void rollingFile() throws IOException, InvocationTargetException, IllegalAccessE printDirectory(rollingFileDir); // 消息超过文件大小的情况,直接追加在当前文件后 - ReflectUtils.setFieldValue(fileAppender, "logFileSizeBytes", logSize - 1, true); + ReflectUtils.setDeclaredFieldValue(fileAppender, "logFileSizeBytes", logSize - 1); logger.info(message); waitingForAsyncAppend(fileAppender); try (Stream s = Files.list(rollingFileDir)) { @@ -261,7 +261,7 @@ void rollingFile() throws IOException, InvocationTargetException, IllegalAccessE printDirectory(rollingFileDir); // 文件剩余空间不足以填充当前消息 且 消息大小小于文件大小时 roll 到下一个文件 - ReflectUtils.setFieldValue(fileAppender, "logFileSizeBytes", logSize * 2 + 1, true); + ReflectUtils.setDeclaredFieldValue(fileAppender, "logFileSizeBytes", logSize * 2 + 1); logger.info(message); logger.info(message); logger.info(message); @@ -289,14 +289,14 @@ void getLogger() { Assertions.assertNotNull(byName); Assertions.assertEquals(DEBUG, byName.getLevel()); Assertions.assertEquals(LoggerTest.class.getCanonicalName(), byName.getName()); - AppenderCombiner appenderCombiner = getFieldValue(byName, "appender", true); + AppenderCombiner appenderCombiner = getDeclaredFieldValue(byName, "appender"); Assertions.assertSame( - getFieldValue(LoggerFactory.class, "APPENDER_COMBINER", true), + getDeclaredFieldValue(LoggerFactory.class, "APPENDER_COMBINER"), appenderCombiner ); boolean fileAppendExists = false; boolean consoleAppendExists = false; - List> appenderList = getFieldValue(appenderCombiner, "appenderList", true); + List> appenderList = getDeclaredFieldValue(appenderCombiner, "appenderList"); Assertions.assertNotNull(appenderList); for (Appender appender : appenderList) { if (appender instanceof FileAppender) { @@ -326,10 +326,9 @@ private static Logger newLogger(String name, Appender appender, Level level) } private static void waitingForLoggerFactoryAsyncAppend() throws IllegalAccessException, InterruptedException { - List> appenders = getFieldValue( - getFieldValue(LoggerFactory.class, "APPENDER_COMBINER", true), - "appenderList", - true + List> appenders = getDeclaredFieldValue( + getDeclaredFieldValue(LoggerFactory.class, "APPENDER_COMBINER"), + "appenderList" ); boolean allEmpty = false; while (!allEmpty) { @@ -337,7 +336,7 @@ private static void waitingForLoggerFactoryAsyncAppend() throws IllegalAccessExc Assertions.assertNotNull(appenders); for (Appender appender : appenders) { if (appender instanceof AsyncAppender) { - BlockingQueue queue = (BlockingQueue) getField(AsyncAppender.class, "queue", true).get(appender); + BlockingQueue queue = (BlockingQueue) getDeclaredField(AsyncAppender.class, "queue").get(appender); if (queue != null) { allEmpty &= queue.isEmpty(); } @@ -350,7 +349,7 @@ private static void waitingForLoggerFactoryAsyncAppend() throws IllegalAccessExc } private static void waitingForAsyncAppend(AsyncAppender asyncAppender) throws IllegalAccessException, InterruptedException { - BlockingQueue queue = (BlockingQueue) getField(AsyncAppender.class, "queue", true).get(asyncAppender); + BlockingQueue queue = (BlockingQueue) getDeclaredField(AsyncAppender.class, "queue").get(asyncAppender); if (queue != null) { while (!queue.isEmpty()) { Thread.yield(); @@ -394,7 +393,7 @@ private static void printDirectory(Path rollingFileDir) throws IOException { private static LogEvent buildLogEvent(Logger logger, String message, Object[] args) { return ReflectUtils - .getMethodWrapper(logger, "buildLogEvent", true, Level.class, String.class, Object[].class) + .getDeclaredMethod(logger, "buildLogEvent", Level.class, String.class, Object[].class) .invoke(INFO, message, args); }