9
9
import io .opentelemetry .context .Context ;
10
10
import io .opentelemetry .instrumentation .api .instrumenter .LocalRootSpan ;
11
11
import io .opentelemetry .javaagent .bootstrap .servlet .ServletContextPath ;
12
- import javax . servlet . http . HttpServletRequest ;
12
+ import io . opentelemetry . javaagent . tooling . muzzle . NoMuzzle ;
13
13
import org .apache .axis2 .jaxws .core .MessageContext ;
14
14
15
15
public final class Axis2ServerSpanNaming {
16
+ private static final Class <?> JAVAX_REQUEST = loadClass ("javax.servlet.http.HttpServletRequest" );
17
+ private static final Class <?> JAKARTA_REQUEST =
18
+ loadClass ("jakarta.servlet.http.HttpServletRequest" );
16
19
17
20
public static void updateServerSpan (Context context , Axis2Request axis2Request ) {
18
21
Span serverSpan = LocalRootSpan .fromContextOrNull (context );
@@ -22,17 +25,34 @@ public static void updateServerSpan(Context context, Axis2Request axis2Request)
22
25
23
26
String spanName = axis2Request .spanName ();
24
27
MessageContext message = axis2Request .message ();
25
- HttpServletRequest request =
26
- (HttpServletRequest ) message .getMEPContext ().get ("transport.http.servletRequest" );
28
+ Object request = message .getMEPContext ().get ("transport.http.servletRequest" );
27
29
if (request != null ) {
28
- String servletPath = request . getServletPath ();
29
- if (!servletPath .isEmpty ()) {
30
+ String servletPath = getServletPath (request );
31
+ if (servletPath != null && !servletPath .isEmpty ()) {
30
32
spanName = servletPath + "/" + spanName ;
31
33
}
32
34
}
33
35
34
36
serverSpan .updateName (ServletContextPath .prepend (context , spanName ));
35
37
}
36
38
39
+ private static Class <?> loadClass (String name ) {
40
+ try {
41
+ return Class .forName (name );
42
+ } catch (ClassNotFoundException exception ) {
43
+ return null ;
44
+ }
45
+ }
46
+
47
+ @ NoMuzzle
48
+ private static String getServletPath (Object request ) {
49
+ if (JAVAX_REQUEST != null && JAVAX_REQUEST .isInstance (request )) {
50
+ return ((javax .servlet .http .HttpServletRequest ) request ).getServletPath ();
51
+ } else if (JAKARTA_REQUEST != null && JAKARTA_REQUEST .isInstance (request )) {
52
+ return ((jakarta .servlet .http .HttpServletRequest ) request ).getServletPath ();
53
+ }
54
+ return null ;
55
+ }
56
+
37
57
private Axis2ServerSpanNaming () {}
38
58
}
0 commit comments