Skip to content

Commit 1056373

Browse files
authored
make jaxws indy-ready (#14830)
1 parent 921d53e commit 1056373

File tree

8 files changed

+123
-65
lines changed

8 files changed

+123
-65
lines changed

instrumentation/jaxws/jaxws-2.0-axis2-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/axis2/Axis2InstrumentationModule.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,14 @@
1010
import com.google.auto.service.AutoService;
1111
import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule;
1212
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
13+
import io.opentelemetry.javaagent.extension.instrumentation.internal.ExperimentalInstrumentationModule;
1314
import java.util.Collections;
1415
import java.util.List;
1516
import net.bytebuddy.matcher.ElementMatcher;
1617

1718
@AutoService(InstrumentationModule.class)
18-
public class Axis2InstrumentationModule extends InstrumentationModule {
19+
public class Axis2InstrumentationModule extends InstrumentationModule
20+
implements ExperimentalInstrumentationModule {
1921
public Axis2InstrumentationModule() {
2022
super("axis2", "axis2-1.6", "jaxws");
2123
}
@@ -30,4 +32,9 @@ public ElementMatcher.Junction<ClassLoader> classLoaderMatcher() {
3032
public List<TypeInstrumentation> typeInstrumentations() {
3133
return Collections.singletonList(new InvocationListenerRegistryTypeInstrumentation());
3234
}
35+
36+
@Override
37+
public boolean isIndyReady() {
38+
return true;
39+
}
3340
}

instrumentation/jaxws/jaxws-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxws/v2_0/JaxWsInstrumentationModule.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,13 @@
88
import com.google.auto.service.AutoService;
99
import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule;
1010
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
11+
import io.opentelemetry.javaagent.extension.instrumentation.internal.ExperimentalInstrumentationModule;
1112
import java.util.Collections;
1213
import java.util.List;
1314

1415
@AutoService(InstrumentationModule.class)
15-
public class JaxWsInstrumentationModule extends InstrumentationModule {
16+
public class JaxWsInstrumentationModule extends InstrumentationModule
17+
implements ExperimentalInstrumentationModule {
1618

1719
public JaxWsInstrumentationModule() {
1820
super("jaxws", "jaxws-2.0");
@@ -22,4 +24,9 @@ public JaxWsInstrumentationModule() {
2224
public List<TypeInstrumentation> typeInstrumentations() {
2325
return Collections.singletonList(new WebServiceProviderInstrumentation());
2426
}
27+
28+
@Override
29+
public boolean isIndyReady() {
30+
return true;
31+
}
2532
}

instrumentation/jaxws/jaxws-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxws/v2_0/WebServiceProviderInstrumentation.java

Lines changed: 39 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
2121
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
2222
import io.opentelemetry.javaagent.instrumentation.jaxws.common.JaxWsRequest;
23+
import javax.annotation.Nullable;
2324
import javax.xml.ws.Provider;
2425
import net.bytebuddy.asm.Advice;
2526
import net.bytebuddy.description.type.TypeDescription;
@@ -47,42 +48,52 @@ public void transform(TypeTransformer transformer) {
4748
@SuppressWarnings("unused")
4849
public static class InvokeAdvice {
4950

50-
@Advice.OnMethodEnter(suppress = Throwable.class)
51-
public static void startSpan(
52-
@Advice.This Object target,
53-
@Advice.Origin("#m") String methodName,
54-
@Advice.Local("otelCallDepth") CallDepth callDepth,
55-
@Advice.Local("otelRequest") JaxWsRequest request,
56-
@Advice.Local("otelContext") Context context,
57-
@Advice.Local("otelScope") Scope scope) {
58-
callDepth = CallDepth.forClass(Provider.class);
59-
if (callDepth.getAndIncrement() > 0) {
60-
return;
51+
public static class AdviceScope {
52+
private final CallDepth callDepth;
53+
private final JaxWsRequest request;
54+
private final Context context;
55+
private final Scope scope;
56+
57+
private AdviceScope(CallDepth callDepth, JaxWsRequest request, Context context, Scope scope) {
58+
this.callDepth = callDepth;
59+
this.request = request;
60+
this.context = context;
61+
this.scope = scope;
62+
}
63+
64+
public static AdviceScope start(CallDepth callDepth, Object target, String methodName) {
65+
if (callDepth.getAndIncrement() > 0) {
66+
return new AdviceScope(callDepth, null, null, null);
67+
}
68+
Context parentContext = currentContext();
69+
JaxWsRequest request = new JaxWsRequest(target.getClass(), methodName);
70+
if (!instrumenter().shouldStart(parentContext, request)) {
71+
return new AdviceScope(callDepth, null, null, null);
72+
}
73+
Context context = instrumenter().start(parentContext, request);
74+
return new AdviceScope(callDepth, request, context, context.makeCurrent());
6175
}
6276

63-
Context parentContext = currentContext();
64-
request = new JaxWsRequest(target.getClass(), methodName);
65-
if (!instrumenter().shouldStart(parentContext, request)) {
66-
return;
77+
public void end(Throwable throwable) {
78+
if (callDepth.decrementAndGet() > 0 || scope == null) {
79+
return;
80+
}
81+
scope.close();
82+
instrumenter().end(context, request, null, throwable);
6783
}
84+
}
6885

69-
context = instrumenter().start(parentContext, request);
70-
scope = context.makeCurrent();
86+
@Advice.OnMethodEnter(suppress = Throwable.class)
87+
public static AdviceScope startSpan(
88+
@Advice.This Object target, @Advice.Origin("#m") String methodName) {
89+
CallDepth callDepth = CallDepth.forClass(Provider.class);
90+
return AdviceScope.start(callDepth, target, methodName);
7191
}
7292

7393
@Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class)
7494
public static void stopSpan(
75-
@Advice.Thrown Throwable throwable,
76-
@Advice.Local("otelCallDepth") CallDepth callDepth,
77-
@Advice.Local("otelRequest") JaxWsRequest request,
78-
@Advice.Local("otelContext") Context context,
79-
@Advice.Local("otelScope") Scope scope) {
80-
if (callDepth.decrementAndGet() > 0 || scope == null) {
81-
return;
82-
}
83-
84-
scope.close();
85-
instrumenter().end(context, request, null, throwable);
95+
@Advice.Thrown @Nullable Throwable throwable, @Advice.Enter AdviceScope adviceScope) {
96+
adviceScope.end(throwable);
8697
}
8798
}
8899
}

instrumentation/jaxws/jaxws-cxf-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cxf/CxfInstrumentationModule.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,13 @@
88
import com.google.auto.service.AutoService;
99
import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule;
1010
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
11+
import io.opentelemetry.javaagent.extension.instrumentation.internal.ExperimentalInstrumentationModule;
1112
import java.util.Collections;
1213
import java.util.List;
1314

1415
@AutoService(InstrumentationModule.class)
15-
public class CxfInstrumentationModule extends InstrumentationModule {
16+
public class CxfInstrumentationModule extends InstrumentationModule
17+
implements ExperimentalInstrumentationModule {
1618
public CxfInstrumentationModule() {
1719
super("cxf", "cxf-3.0", "jaxws");
1820
}
@@ -21,4 +23,9 @@ public CxfInstrumentationModule() {
2123
public List<TypeInstrumentation> typeInstrumentations() {
2224
return Collections.singletonList(new JaxWsServerFactoryBeanInstrumentation());
2325
}
26+
27+
@Override
28+
public boolean isIndyReady() {
29+
return true;
30+
}
2431
}

instrumentation/jaxws/jaxws-jws-api-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxws/jws/v1_1/JwsAnnotationsInstrumentation.java

Lines changed: 39 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
2626
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
2727
import io.opentelemetry.javaagent.instrumentation.jaxws.common.JaxWsRequest;
28+
import javax.annotation.Nullable;
2829
import javax.jws.WebService;
2930
import net.bytebuddy.asm.Advice;
3031
import net.bytebuddy.description.type.TypeDescription;
@@ -62,42 +63,52 @@ public void transform(TypeTransformer transformer) {
6263
@SuppressWarnings("unused")
6364
public static class JwsAnnotationsAdvice {
6465

65-
@Advice.OnMethodEnter(suppress = Throwable.class)
66-
public static void startSpan(
67-
@Advice.This Object target,
68-
@Advice.Origin("#m") String methodName,
69-
@Advice.Local("otelCallDepth") CallDepth callDepth,
70-
@Advice.Local("otelRequest") JaxWsRequest request,
71-
@Advice.Local("otelContext") Context context,
72-
@Advice.Local("otelScope") Scope scope) {
73-
callDepth = CallDepth.forClass(WebService.class);
74-
if (callDepth.getAndIncrement() > 0) {
75-
return;
66+
public static class AdviceScope {
67+
private final CallDepth callDepth;
68+
private final JaxWsRequest request;
69+
private final Context context;
70+
private final Scope scope;
71+
72+
private AdviceScope(CallDepth callDepth, JaxWsRequest request, Context context, Scope scope) {
73+
this.callDepth = callDepth;
74+
this.request = request;
75+
this.context = context;
76+
this.scope = scope;
77+
}
78+
79+
public static AdviceScope start(CallDepth callDepth, Object target, String methodName) {
80+
if (callDepth.getAndIncrement() > 0) {
81+
return new AdviceScope(callDepth, null, null, null);
82+
}
83+
Context parentContext = currentContext();
84+
JaxWsRequest request = new JaxWsRequest(target.getClass(), methodName);
85+
if (!instrumenter().shouldStart(parentContext, request)) {
86+
return new AdviceScope(callDepth, null, null, null);
87+
}
88+
Context context = instrumenter().start(parentContext, request);
89+
return new AdviceScope(callDepth, request, context, context.makeCurrent());
7690
}
7791

78-
Context parentContext = currentContext();
79-
request = new JaxWsRequest(target.getClass(), methodName);
80-
if (!instrumenter().shouldStart(parentContext, request)) {
81-
return;
92+
public void end(Throwable throwable) {
93+
if (callDepth.decrementAndGet() > 0 || scope == null) {
94+
return;
95+
}
96+
scope.close();
97+
instrumenter().end(context, request, null, throwable);
8298
}
99+
}
83100

84-
context = instrumenter().start(parentContext, request);
85-
scope = context.makeCurrent();
101+
@Advice.OnMethodEnter(suppress = Throwable.class)
102+
public static AdviceScope startSpan(
103+
@Advice.This Object target, @Advice.Origin("#m") String methodName) {
104+
CallDepth callDepth = CallDepth.forClass(WebService.class);
105+
return AdviceScope.start(callDepth, target, methodName);
86106
}
87107

88108
@Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class)
89109
public static void stopSpan(
90-
@Advice.Thrown Throwable throwable,
91-
@Advice.Local("otelCallDepth") CallDepth callDepth,
92-
@Advice.Local("otelRequest") JaxWsRequest request,
93-
@Advice.Local("otelContext") Context context,
94-
@Advice.Local("otelScope") Scope scope) {
95-
if (callDepth.decrementAndGet() > 0 || scope == null) {
96-
return;
97-
}
98-
99-
scope.close();
100-
instrumenter().end(context, request, null, throwable);
110+
@Advice.Thrown @Nullable Throwable throwable, @Advice.Enter AdviceScope adviceScope) {
111+
adviceScope.end(throwable);
101112
}
102113
}
103114
}

instrumentation/jaxws/jaxws-jws-api-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxws/jws/v1_1/JwsInstrumentationModule.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,14 @@
99
import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig;
1010
import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule;
1111
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
12+
import io.opentelemetry.javaagent.extension.instrumentation.internal.ExperimentalInstrumentationModule;
1213
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
1314
import java.util.Collections;
1415
import java.util.List;
1516

1617
@AutoService(InstrumentationModule.class)
17-
public class JwsInstrumentationModule extends InstrumentationModule {
18+
public class JwsInstrumentationModule extends InstrumentationModule
19+
implements ExperimentalInstrumentationModule {
1820

1921
public JwsInstrumentationModule() {
2022
super("jaxws-jws-api", "jaxws-jws-api-1.1", "jaxws");
@@ -30,4 +32,9 @@ public boolean defaultEnabled(ConfigProperties config) {
3032
// this instrumentation only produces controller telemetry
3133
return super.defaultEnabled(config) && ExperimentalConfig.get().controllerTelemetryEnabled();
3234
}
35+
36+
@Override
37+
public boolean isIndyReady() {
38+
return true;
39+
}
3340
}

instrumentation/jaxws/jaxws-metro-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/metro/MetroInstrumentationModule.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,14 @@
1010
import com.google.auto.service.AutoService;
1111
import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule;
1212
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
13+
import io.opentelemetry.javaagent.extension.instrumentation.internal.ExperimentalInstrumentationModule;
1314
import java.util.Arrays;
1415
import java.util.List;
1516
import net.bytebuddy.matcher.ElementMatcher;
1617

1718
@AutoService(InstrumentationModule.class)
18-
public class MetroInstrumentationModule extends InstrumentationModule {
19+
public class MetroInstrumentationModule extends InstrumentationModule
20+
implements ExperimentalInstrumentationModule {
1921
public MetroInstrumentationModule() {
2022
super("metro", "metro-2.2", "jaxws");
2123
}
@@ -30,4 +32,9 @@ public List<TypeInstrumentation> typeInstrumentations() {
3032
return Arrays.asList(
3133
new ServerTubeAssemblerContextInstrumentation(), new SoapFaultBuilderInstrumentation());
3234
}
35+
36+
@Override
37+
public boolean isIndyReady() {
38+
return true;
39+
}
3340
}

instrumentation/jaxws/jaxws-metro-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/metro/ServerTubeAssemblerContextInstrumentation.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
1414
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
1515
import net.bytebuddy.asm.Advice;
16+
import net.bytebuddy.asm.Advice.AssignReturned;
1617
import net.bytebuddy.description.type.TypeDescription;
1718
import net.bytebuddy.matcher.ElementMatcher;
1819

@@ -32,11 +33,11 @@ public void transform(TypeTransformer transformer) {
3233
@SuppressWarnings("unused")
3334
public static class AddTracingAdvice {
3435

36+
@AssignReturned.ToReturned
3537
@Advice.OnMethodExit(suppress = Throwable.class)
36-
public static void onExit(
37-
@Advice.This ServerTubeAssemblerContext context,
38-
@Advice.Return(readOnly = false) Tube tube) {
39-
tube = new TracingTube(context.getEndpoint(), tube);
38+
public static Tube onExit(
39+
@Advice.This ServerTubeAssemblerContext context, @Advice.Return Tube tube) {
40+
return new TracingTube(context.getEndpoint(), tube);
4041
}
4142
}
4243
}

0 commit comments

Comments
 (0)