in tika-server/tika-server-core/src/main/java/org/apache/tika/server/core/resource/TikaResource.java [179:264]
public static void processHeaderConfig(Object object, String key, String val, String prefix) {
try {
String property = StringUtils.removeStartIgnoreCase(key, prefix);
Field field = null;
try {
field = object
.getClass()
.getDeclaredField(StringUtils.uncapitalize(property));
} catch (NoSuchFieldException e) {
// try to match field case-insensitive way
for (Field aField : object
.getClass()
.getDeclaredFields()) {
if (aField
.getName()
.equalsIgnoreCase(property)) {
field = aField;
break;
}
}
}
String setter = field != null ? field.getName() : property;
setter = "set" + setter
.substring(0, 1)
.toUpperCase(Locale.US) + setter.substring(1);
//default assume string class
//if there's a more specific type, e.g. double, int, boolean
//try that.
Class clazz = String.class;
if (field != null) {
if (field.getType() == int.class || field.getType() == Integer.class) {
clazz = int.class;
} else if (field.getType() == double.class) {
clazz = double.class;
} else if (field.getType() == Double.class) {
clazz = Double.class;
} else if (field.getType() == float.class) {
clazz = float.class;
} else if (field.getType() == Float.class) {
clazz = Float.class;
} else if (field.getType() == boolean.class) {
clazz = boolean.class;
} else if (field.getType() == Boolean.class) {
clazz = Boolean.class;
} else if (field.getType() == long.class) {
clazz = long.class;
} else if (field.getType() == Long.class) {
clazz = Long.class;
}
}
Method m = tryToGetMethod(object, setter, clazz);
//if you couldn't find more specific setter, back off
//to string setter and try that.
if (m == null && clazz != String.class) {
m = tryToGetMethod(object, setter, String.class);
}
if (m != null) {
if (clazz == String.class) {
checkTrustWorthy(setter, val);
m.invoke(object, val);
} else if (clazz == int.class || clazz == Integer.class) {
m.invoke(object, Integer.parseInt(val));
} else if (clazz == double.class || clazz == Double.class) {
m.invoke(object, Double.parseDouble(val));
} else if (clazz == boolean.class || clazz == Boolean.class) {
m.invoke(object, Boolean.parseBoolean(val));
} else if (clazz == float.class || clazz == Float.class) {
m.invoke(object, Float.parseFloat(val));
} else if (clazz == long.class || clazz == Long.class) {
m.invoke(object, Long.parseLong(val));
} else {
throw new IllegalArgumentException("setter must be String, int, float, double or boolean...for now");
}
} else {
throw new NoSuchMethodException("Couldn't find: " + setter);
}
} catch (Throwable ex) {
// TIKA-3345
String error = (!(ex.getCause() instanceof IllegalArgumentException)) ? String.format(Locale.ROOT, "%s is an invalid %s header", key, prefix) :
String.format(Locale.ROOT, "%s is an invalid %s header value", val, key);
throw new WebApplicationException(error, Response.Status.BAD_REQUEST);
}
}