private ParameterMapping newParseMapping( String token, Class parameterClass, TypeHandlerFactory typeHandlerFactory) { ParameterMapping mapping = new ParameterMapping(); // #propertyName,javaType=string,jdbcType=VARCHAR,mode=IN,nullValue=N/A,handler=string,numericScale=2# StringTokenizer paramParser = new StringTokenizer(token, "=,", false); mapping.setPropertyName(paramParser.nextToken()); while (paramParser.hasMoreTokens()) { String field = paramParser.nextToken(); if (paramParser.hasMoreTokens()) { String value = paramParser.nextToken(); if ("javaType".equals(field)) { value = typeHandlerFactory.resolveAlias(value); mapping.setJavaTypeName(value); } else if ("jdbcType".equals(field)) { mapping.setJdbcTypeName(value); } else if ("mode".equals(field)) { mapping.setMode(value); } else if ("nullValue".equals(field)) { mapping.setNullValue(value); } else if ("handler".equals(field)) { try { value = typeHandlerFactory.resolveAlias(value); Object impl = Resources.instantiate(value); if (impl instanceof TypeHandlerCallback) { mapping.setTypeHandler(new CustomTypeHandler((TypeHandlerCallback) impl)); } else if (impl instanceof TypeHandler) { mapping.setTypeHandler((TypeHandler) impl); } else { throw new SqlMapException( "The class " + value + " is not a valid implementation of TypeHandler or TypeHandlerCallback"); } } catch (Exception e) { throw new SqlMapException( "Error loading class specified by handler field in " + token + ". Cause: " + e, e); } } else if ("numericScale".equals(field)) { try { Integer numericScale = Integer.valueOf(value); if (numericScale.intValue() < 0) { throw new SqlMapException( "Value specified for numericScale must be greater than or equal to zero"); } mapping.setNumericScale(numericScale); } catch (NumberFormatException e) { throw new SqlMapException("Value specified for numericScale is not a valid Integer"); } } else { throw new SqlMapException( "Unrecognized parameter mapping field: '" + field + "' in " + token); } } else { throw new SqlMapException( "Incorrect inline parameter map format (missmatched name=value pairs): " + token); } } if (mapping.getTypeHandler() == null) { TypeHandler handler; if (parameterClass == null) { handler = typeHandlerFactory.getUnkownTypeHandler(); } else { handler = resolveTypeHandler( typeHandlerFactory, parameterClass, mapping.getPropertyName(), mapping.getJavaTypeName(), mapping.getJdbcTypeName()); } mapping.setTypeHandler(handler); } return mapping; }