Improve exception message that reports clashing endpoint operations
Closes gh-10942
This commit is contained in:
parent
e216560896
commit
4d1a98b380
|
|
@ -95,7 +95,9 @@ public class JmxOperation extends Operation {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return new ToStringCreator(this).append("operationName", this.operationName)
|
return new ToStringCreator(this).append("type", getType())
|
||||||
|
.append("invoker", getInvoker()).append("blocking", isBlocking())
|
||||||
|
.append("operationName", this.operationName)
|
||||||
.append("outputType", this.outputType)
|
.append("outputType", this.outputType)
|
||||||
.append("description", this.description).toString();
|
.append("description", this.description).toString();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,7 @@ import java.util.Set;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import org.springframework.boot.actuate.endpoint.OperationInvoker;
|
import org.springframework.boot.actuate.endpoint.OperationInvoker;
|
||||||
|
import org.springframework.core.style.ToStringCreator;
|
||||||
import org.springframework.lang.Nullable;
|
import org.springframework.lang.Nullable;
|
||||||
import org.springframework.util.Assert;
|
import org.springframework.util.Assert;
|
||||||
import org.springframework.util.ReflectionUtils;
|
import org.springframework.util.ReflectionUtils;
|
||||||
|
|
@ -103,4 +104,10 @@ public class ReflectiveOperationInvoker implements OperationInvoker {
|
||||||
return this.parameterMapper.mapParameter(resolved, parameter.getType());
|
return this.parameterMapper.mapParameter(resolved, parameter.getType());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return new ToStringCreator(this).append("target", this.target)
|
||||||
|
.append("method", this.methodInfo.getMethod().toString()).toString();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,7 @@ package org.springframework.boot.actuate.endpoint.web;
|
||||||
import org.springframework.boot.actuate.endpoint.Operation;
|
import org.springframework.boot.actuate.endpoint.Operation;
|
||||||
import org.springframework.boot.actuate.endpoint.OperationInvoker;
|
import org.springframework.boot.actuate.endpoint.OperationInvoker;
|
||||||
import org.springframework.boot.actuate.endpoint.OperationType;
|
import org.springframework.boot.actuate.endpoint.OperationType;
|
||||||
|
import org.springframework.core.style.ToStringCreator;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An operation on a web endpoint.
|
* An operation on a web endpoint.
|
||||||
|
|
@ -65,4 +66,12 @@ public class WebOperation extends Operation {
|
||||||
return this.id;
|
return this.id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return new ToStringCreator(this).append("type", getType())
|
||||||
|
.append("invoker", getInvoker()).append("blocking", isBlocking())
|
||||||
|
.append("requestPredicate", getRequestPredicate()).append("id", getId())
|
||||||
|
.toString();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -47,6 +47,7 @@ import org.springframework.core.convert.support.DefaultConversionService;
|
||||||
import org.springframework.jmx.export.annotation.ManagedOperation;
|
import org.springframework.jmx.export.annotation.ManagedOperation;
|
||||||
import org.springframework.jmx.export.annotation.ManagedOperationParameter;
|
import org.springframework.jmx.export.annotation.ManagedOperationParameter;
|
||||||
import org.springframework.jmx.export.annotation.ManagedOperationParameters;
|
import org.springframework.jmx.export.annotation.ManagedOperationParameters;
|
||||||
|
import org.springframework.util.ReflectionUtils;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
|
@ -216,6 +217,11 @@ public class JmxAnnotationEndpointDiscovererTests {
|
||||||
this.thrown.expect(IllegalStateException.class);
|
this.thrown.expect(IllegalStateException.class);
|
||||||
this.thrown.expectMessage("Found multiple JMX operations with the same name");
|
this.thrown.expectMessage("Found multiple JMX operations with the same name");
|
||||||
this.thrown.expectMessage("getAll");
|
this.thrown.expectMessage("getAll");
|
||||||
|
this.thrown.expectMessage(ReflectionUtils
|
||||||
|
.findMethod(ClashingOperationsEndpoint.class, "getAll").toString());
|
||||||
|
this.thrown.expectMessage(ReflectionUtils
|
||||||
|
.findMethod(ClashingOperationsEndpoint.class, "getAll", String.class)
|
||||||
|
.toString());
|
||||||
discoverer.discoverEndpoints();
|
discoverer.discoverEndpoints();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -226,6 +232,13 @@ public class JmxAnnotationEndpointDiscovererTests {
|
||||||
this.thrown.expect(IllegalStateException.class);
|
this.thrown.expect(IllegalStateException.class);
|
||||||
this.thrown.expectMessage("Found multiple JMX operations with the same name");
|
this.thrown.expectMessage("Found multiple JMX operations with the same name");
|
||||||
this.thrown.expectMessage("getAll");
|
this.thrown.expectMessage("getAll");
|
||||||
|
this.thrown.expectMessage(ReflectionUtils
|
||||||
|
.findMethod(ClashingOperationsJmxEndpointExtension.class, "getAll")
|
||||||
|
.toString());
|
||||||
|
this.thrown.expectMessage(ReflectionUtils
|
||||||
|
.findMethod(ClashingOperationsJmxEndpointExtension.class, "getAll",
|
||||||
|
String.class)
|
||||||
|
.toString());
|
||||||
discoverer.discoverEndpoints();
|
discoverer.discoverEndpoints();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -54,6 +54,7 @@ import org.springframework.context.annotation.Import;
|
||||||
import org.springframework.core.convert.support.DefaultConversionService;
|
import org.springframework.core.convert.support.DefaultConversionService;
|
||||||
import org.springframework.core.io.ByteArrayResource;
|
import org.springframework.core.io.ByteArrayResource;
|
||||||
import org.springframework.core.io.Resource;
|
import org.springframework.core.io.Resource;
|
||||||
|
import org.springframework.util.ReflectionUtils;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
|
@ -162,6 +163,10 @@ public class WebAnnotationEndpointDiscovererTests {
|
||||||
this.thrown.expect(IllegalStateException.class);
|
this.thrown.expect(IllegalStateException.class);
|
||||||
this.thrown.expectMessage(
|
this.thrown.expectMessage(
|
||||||
"Found multiple web operations with matching request predicates:");
|
"Found multiple web operations with matching request predicates:");
|
||||||
|
this.thrown.expectMessage(ReflectionUtils
|
||||||
|
.findMethod(ClashingOperationsEndpoint.class, "getAll").toString());
|
||||||
|
this.thrown.expectMessage(ReflectionUtils
|
||||||
|
.findMethod(ClashingOperationsEndpoint.class, "getAgain").toString());
|
||||||
discoverer.discoverEndpoints();
|
discoverer.discoverEndpoints();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -183,6 +188,14 @@ public class WebAnnotationEndpointDiscovererTests {
|
||||||
this.thrown.expect(IllegalStateException.class);
|
this.thrown.expect(IllegalStateException.class);
|
||||||
this.thrown.expectMessage(
|
this.thrown.expectMessage(
|
||||||
"Found multiple web operations with matching request predicates:");
|
"Found multiple web operations with matching request predicates:");
|
||||||
|
this.thrown.expectMessage(ReflectionUtils
|
||||||
|
.findMethod(ClashingSelectorsWebEndpointExtension.class, "readOne",
|
||||||
|
String.class, String.class)
|
||||||
|
.toString());
|
||||||
|
this.thrown.expectMessage(ReflectionUtils
|
||||||
|
.findMethod(ClashingSelectorsWebEndpointExtension.class, "readTwo",
|
||||||
|
String.class, String.class)
|
||||||
|
.toString());
|
||||||
discoverer.discoverEndpoints();
|
discoverer.discoverEndpoints();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue