} else {
ObjectNode paramsObject = (ObjectNode) params;
Object[] objects = new Object[annotatedParams.size()];
for (int i = 0; i < annotatedParams.size(); i++) {
AnnotatedParam p = annotatedParams.get(i);
Annotation a = getRequestAnnotation(p, requestParams);
if (a != null) {
// this is a systems parameter
objects[i] = requestParams.get(a);
} else {
String name = getName(p);
if (name != null) {
// this is a named parameter
if (paramsObject.has(name)) {
objects[i] = mapper.convertValue(
paramsObject.get(name), p.getType());
} else {
if (isRequired(p)) {
throw new ClassCastException(
"Required parameter '" + name
+ "' missing");
} else if (p.getType().isPrimitive()) {
// TODO: should this test be moved to
// isAvailable()?
throw new ClassCastException("Parameter '"
+ name
+ "' cannot be both optional and "
+ "a primitive type ("
+ p.getType().getSimpleName() + ")");
} else {
objects[i] = null;
}
}
} else {