in src/main/java/org/apache/commons/beanutils2/locale/LocaleBeanUtilsBean.java [788:853]
public void setProperty(
final Object bean,
String name,
final Object value,
final String pattern)
throws
IllegalAccessException,
InvocationTargetException {
// Trace logging (if enabled)
if (LOG.isTraceEnabled()) {
final StringBuilder sb = new StringBuilder(" setProperty(");
sb.append(bean);
sb.append(", ");
sb.append(name);
sb.append(", ");
if (value == null) {
sb.append("<NULL>");
}
else if (value instanceof String) {
sb.append((String) value);
}
else if (value instanceof String[]) {
final String[] values = (String[]) value;
sb.append('[');
for (int i = 0; i < values.length; i++) {
if (i > 0) {
sb.append(',');
}
sb.append(values[i]);
}
sb.append(']');
}
else {
sb.append(value.toString());
}
sb.append(')');
LOG.trace(sb.toString());
}
// Resolve any nested expression to get the actual target bean
Object target = bean;
final Resolver resolver = getPropertyUtils().getResolver();
while (resolver.hasNested(name)) {
try {
target = getPropertyUtils().getProperty(target, resolver.next(name));
name = resolver.remove(name);
} catch (final NoSuchMethodException e) {
return; // Skip this property setter
}
}
if (LOG.isTraceEnabled()) {
LOG.trace(" Target bean = " + target);
LOG.trace(" Target name = " + name);
}
// Declare local variables we will require
final String propName = resolver.getProperty(name); // Simple name of target property
final int index = resolver.getIndex(name); // Indexed subscript value (if any)
final String key = resolver.getKey(name); // Mapped key value (if any)
final Class<?> type = definePropertyType(target, name, propName);
if (type != null) {
final Object newValue = convert(type, index, value, pattern);
invokeSetter(target, propName, key, index, newValue);
}
}