private void addSetProperty(Object bean, Class<?>[] type, String name, Object... property) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException { if (name == null) { name = type[0].getSimpleName(); } int dot; if ((dot = name.indexOf('.')) > -1) { _logger.fine("looking at a composite property " + name); do { bean = Beans.invoke(bean, "get" + name.substring(0, dot)); name = Strings.capitalize( name.substring(dot + 1)); // lower case letters may be found after '.' } while ((dot = name.indexOf('.')) > -1); } // attempt property injection using setXXX(), addXXX(), set(), or add(), in that order try { _logger.fine( S.fine(_logger) ? "trying set" + name + "() on " + bean.getClass() + ": " + property.length + args(property) : null); Beans.invoke(bean, "set" + name, property); _logger.fine("... successful"); } catch (NoSuchMethodException x) { try { _logger.fine( S.fine(_logger) ? "trying add" + name + "() on " + bean.getClass() + ": " + property.length + args(property) : null); Beans.invoke(bean, "add" + name, property); _logger.fine("... successful"); } catch (NoSuchMethodException x1) { try { _logger.fine( S.fine(_logger) ? "trying set() on " + bean.getClass() + ": " + property.length + args(property) : null); Beans.invoke(bean, "set", property); _logger.fine("... successful"); } catch (NoSuchMethodException x2) { _logger.fine( S.fine(_logger) ? "trying add() on " + bean.getClass() + ": " + property.length + args(property) : null); Beans.invoke(bean, "add", property); _logger.fine("... successful"); } } } }