if ( "null".equals(value)) { result = null; } else if (isStringType(requiredType)) { result = (T) value; } else if (isStringBufferType(requiredType)) { result = (T) new StringBuffer(value); } else if (isIntType(requiredType)) { result = (T) new Integer(value); } else if (isLongType(requiredType)) { result = (T) new Long(value); } else if (isFloatType(requiredType)) { result = (T) new Float(value); } else if (isDoubleType(requiredType)) { result = (T) new Double(value); } else if (isBigDecimalType(requiredType)) { result = (T) new BigDecimal(value); } else if (isBigIntegerType(requiredType)) { result = (T) new BigInteger(value); } else if (isBooleanType(requiredType) && "true".equalsIgnoreCase(value) //be stricter than Boolean.parseValue || "false".equalsIgnoreCase(value)) { //do not accept 'wibble' as a boolean false value } else if (isShortType(requiredType)) { result = (T) new Short(value); } else if (isByteType(requiredType)) { result = (T) new Byte(value); } else if (isCharType(requiredType) && value.length() == 1) { result = (T) (Character) value.toCharArray()[0]; } else if (isEnumeratedType(requiredType)) {
private Object[] coerceArgs(List<String> args, Class<?>[] parameterTypes) { Object[] values = new Object[args.size()]; for (int i = 0; i < args.size(); i++) { String valueStr = args.get(i); Class type = parameterTypes[i]; Object coercedValue = TypeCoercion.coerceType(log, valueStr, type); if (("null".equals(valueStr) && coercedValue == null ) || coercedValue != null) { values[i] = coercedValue; } else { //the type coercion failed for this method parameter //return null to indicate this reg exp / method is not a match //log at info level that we found a match but could not perform the coercion - this will not show //at the default log level warn, but will show as soon as user increases it //It seems valid to support a form of method parameter overloading here, where two methods have //the same regex but different class types for their parameters, logging at warn by default might //get irritating in this case String message = "Matched step but could not coerce " + valueStr + " to type " + type; log.info(message); throw new IllegalArgumentException(message); } } return values; }