package net.techreadiness.text; import java.util.Enumeration; import java.util.ResourceBundle; import javax.el.CompositeELResolver; import javax.el.ExpressionFactory; import javax.el.ResourceBundleELResolver; import javax.el.ValueExpression; import net.techreadiness.el.IndirectResourceBundleELResolver; import de.odysseus.el.util.SimpleContext; public class ELAwareResourceBundle extends ResourceBundle { private ExpressionFactory factory; private ResourceBundle wrapped; public ELAwareResourceBundle(ResourceBundle wrapped) { factory = new de.odysseus.el.ExpressionFactoryImpl();// ExpressionFactory.newInstance(); this.wrapped = wrapped; } @Override protected Object handleGetObject(String key) { String expression = wrapped.getString(key); SimpleContext context = new SimpleContext(); CompositeELResolver resolver = new CompositeELResolver(); resolver.add(new IndirectResourceBundleELResolver(wrapped)); resolver.add(new ResourceBundleELResolver()); context.setELResolver(resolver); ValueExpression ve = factory.createValueExpression(context, expression, String.class); String value = (String) ve.getValue(context); return value; } @Override public Enumeration<String> getKeys() { return wrapped.getKeys(); } }