StrSubstitutor should also handle the default properties of a
java.util.Properties class
----------------------------------------------------------------------------------------
Key: LANG-596
URL: https://issues.apache.org/jira/browse/LANG-596
Project: Commons Lang
Issue Type: Bug
Components: lang.text.*
Affects Versions: 2.5
Reporter: Ulrich Voigt
Priority: Minor
The following program show a problem with a shortcoming of the
java.util.Properties class.
The default properties are not substituted by the StrSubstitutor.
{code:title=StrSubstTest.java|borderStyle=solid}
import org.apache.commons.lang.text.StrSubstitutor;
public class StrSubstTest
{
public static void main(String[] args)
{
String org = "${doesnotwork}";
System.setProperty("doesnotwork", "It work's!");
// create a new Poperties object with the System.getProperties as
default
Properties props = new Properties(System.getProperties());
String subst = StrSubstitutor.replace(org, props);
// is ${doesnotwork} substituted?
System.out.println(subst);
}
}
{code}
The following method could be added to the StrSubstitutor class to fix this
problem in an easy way:
{code:borderStyle=solid}
/**
* Replaces all the occurrences of variables in the given source object
with their matching
* values from the properties.
*
* @param source the source text containing the variables to substitute,
null returns null
* @param properties the properties with values, may be null
* @return the result of the replace operation
*/
public static String replace(Object source, Properties valueProperties)
{
if (valueProperties == null) {
return source;
}
Map valueMap = new HashMap();
Enumeration propNames = valueProperties.propertyNames();
while (propNames.hasMoreElements())
{
String propName = (String)propNames.nextElement();
String propValue = valueProperties.getProperty(propName);
valueMap.put(propName, propValue);
}
return StrSubstitutor.replace(source, valueMap);
}
{code}
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.