mufiye commented on issue #9999:
URL: https://github.com/apache/skywalking/issues/9999#issuecomment-1396388730
Hello, @wu-sheng . I have completed the toolkit and pass the unit test part.
Now I am writing the plugin automatic tests. But I encounter one problem and I
have no idea to solve it.
To implement the createExitSpan with inject function, I use the Interceptor
below. But when I start the automatic tests and run the
`Tracer.createExitSpan`, it will report the Exception in the
skywalking-api.log. I think the `ContextCarrier` implement the
`EnhancedInstance` interface after intercepting, but why it can not cast?
```java
public class Tracer {
public static SpanRef createExitSpan(String operationName,
ContextCarrierRef carrierRef, String remotePeer) {
return new SpanRef();
}
}
```
```java
public class TracerCreateExitSpanWithContextInterceptor implements
StaticMethodsAroundInterceptor {
@Override
public void beforeMethod(Class clazz, Method method, Object[]
allArguments, Class<?>[] parameterTypes, MethodInterceptResult result) {
}
@Override
public Object afterMethod(Class clazz, Method method, Object[]
allArguments, Class<?>[] parameterTypes, Object ret) {
ContextCarrier contextCarrier = new ContextCarrier();
AbstractSpan exitSpan =
ContextManager.createExitSpan(String.valueOf(allArguments[0]), contextCarrier,
String.valueOf(allArguments[2]));
((EnhancedInstance)
allArguments[1]).setSkyWalkingDynamicField(contextCarrier);
((EnhancedInstance) ret).setSkyWalkingDynamicField(exitSpan);
return ret;
}
...
}
```
```java
public class ContextCarrierRef {
public CarrierItemRef items() {
return new CarrierItemRef();
}
}
```
```java
public class ContextCarrierRefActivation extends
ClassInstanceMethodsEnhancePluginDefine {
private static final String ENHANCE_CLASS =
"org.apache.skywalking.apm.toolkit.trace.ContextCarrier";
private static final String ITEMS_METHOD_NAME = "items";
private static final String ITEMS_INTERCEPTOR_CLASS =
"org.apache.skywalking.apm.toolkit.activation.trace.ContextCarrierRefItemsInterceptor";
@Override
protected ClassMatch enhanceClass() {
return NameMatch.byName(ENHANCE_CLASS);
}
@Override
public ConstructorInterceptPoint[] getConstructorsInterceptPoints() {
return new ConstructorInterceptPoint[0];
}
@Override
public InstanceMethodsInterceptPoint[]
getInstanceMethodsInterceptPoints() {
return new InstanceMethodsInterceptPoint[] {
new InstanceMethodsInterceptPoint() {
@Override
public ElementMatcher<MethodDescription> getMethodsMatcher()
{
return named(ITEMS_METHOD_NAME);
}
@Override
public String getMethodsInterceptor() {
return ITEMS_INTERCEPTOR_CLASS;
}
@Override
public boolean isOverrideArgs() {
return false;
}
}
};
}
}
```
```
ERROR 2023-01-19 02:57:58.212 http-nio-8080-exec-2 StaticMethodsInter :
class[class org.apache.skywalking.apm.toolkit.trace.Tracer] after static
method[createExitSpan] intercept
failure:org.apache.skywalking.apm.toolkit.trace.ContextCarrierRef cannot be
cast to
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance
java.lang.ClassCastException:
org.apache.skywalking.apm.toolkit.trace.ContextCarrierRef cannot be cast to
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance
at
org.apache.skywalking.apm.toolkit.activation.trace.TracerCreateExitSpanWithContextInterceptor.afterMethod(TracerCreateExitSpanWithContextInterceptor.java:41)
at
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.StaticMethodsInter.intercept(StaticMethodsInter.java:94)
at
org.apache.skywalking.apm.toolkit.trace.Tracer.createExitSpan(Tracer.java)
at
test.apache.skywalking.apm.testcase.toolkit.controller.TestService.endServiceWithCarrier(TestService.java:81)
at
test.apache.skywalking.apm.testcase.toolkit.controller.CaseController.testcase$original$mL17GHKM(CaseController.java:76)
...
```
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]