Add slashes if missing from annotation values

This commit is contained in:
Tyler Benson 2018-09-18 09:48:32 +10:00
parent c1ab82663d
commit 955b97da9e
2 changed files with 17 additions and 9 deletions

View File

@ -61,16 +61,19 @@ public final class JaxRsAnnotationsInstrumentation extends Instrumenter.Default
public static Scope nameSpan(@Advice.Origin final Method method) {
// TODO: do we need caching for this?
final LinkedList<Path> classPaths = new LinkedList<>();
final LinkedList<Path> paths = new LinkedList<>();
Class<?> target = method.getDeclaringClass();
while (target != Object.class) {
final Path annotation = target.getAnnotation(Path.class);
if (annotation != null) {
classPaths.push(annotation);
paths.push(annotation);
}
target = target.getSuperclass();
}
final Path methodPath = method.getAnnotation(Path.class);
if (methodPath != null) {
paths.add(methodPath);
}
String httpMethod = null;
for (final Annotation ann : method.getDeclaredAnnotations()) {
if (ann.annotationType().getAnnotation(HttpMethod.class) != null) {
@ -83,11 +86,15 @@ public final class JaxRsAnnotationsInstrumentation extends Instrumenter.Default
resourceNameBuilder.append(httpMethod);
resourceNameBuilder.append(" ");
}
for (final Path classPath : classPaths) {
resourceNameBuilder.append(classPath.value());
}
if (methodPath != null) {
resourceNameBuilder.append(methodPath.value());
Path last = null;
for (final Path path : paths) {
if (path.value().startsWith("/") || (last != null && last.value().endsWith("/"))) {
resourceNameBuilder.append(path.value());
} else {
resourceNameBuilder.append("/");
resourceNameBuilder.append(path.value());
}
last = path;
}
final String resourceName = resourceNameBuilder.toString().trim();

View File

@ -82,7 +82,7 @@ class JaxRsAnnotationsInstrumentationTest extends AgentTestRunner {
@DELETE
void call() {}
}
"POST /abstract/child" | new ChildClassWithPath()
"POST /abstract/child/call" | new ChildClassWithPath()
className = getName(obj.class)
}
@ -138,8 +138,9 @@ class JaxRsAnnotationsInstrumentationTest extends AgentTestRunner {
abstract void call()
}
@Path("/child")
@Path("child")
class ChildClassWithPath extends AbstractClassWithPath {
@Path("call")
@POST
void call() {}
}