throw new RuntimeException("Failed to add routes for " + routeControllerClass + ".", t);
}
for (Method routeMethod : routeControllerClass.getDeclaredMethods()) {
String routeMethodName = routeMethod.getName();
Path pathAnnotation = routeMethod.getAnnotation(Path.class);
Paths pathsAnnotation = routeMethod.getAnnotation(Paths.class);
if (pathAnnotation != null || pathsAnnotation != null) {
String actionName;
if (routeMethodName.endsWith("Action")) {
actionName = routeMethodName.substring(0, routeMethodName.length() - "Action".length());
}
else {
actionName = routeMethodName;
}
ERXRoute.Method method = null;
// Search annotations for @PUT, @GET, etc.
for (Annotation annotation : routeMethod.getAnnotations()) {
HttpMethod httpMethod = annotation.annotationType().getAnnotation(HttpMethod.class);
if (httpMethod != null) {
if (method == null) {
method = httpMethod.value();
}
else {
throw new IllegalArgumentException(routeControllerClass.getSimpleName() + "." + routeMethod.getName() + " is annotated as more than one http method.");
}
}
}
// Finally default declared REST actions to @GET
if (method == null) {
method = ERXRoute.Method.Get;
}
if (pathAnnotation != null) {
addRoute(new ERXRoute(entityName, pathAnnotation.value(), method, routeControllerClass, actionName));
declaredRoutesFound = true;
}
if (pathsAnnotation != null) {
for (Path path : pathsAnnotation.value()) {
addRoute(new ERXRoute(entityName, path.value(), method, routeControllerClass, actionName));