package com.github.rmannibucau.cdi.configuration.xml.handlers; import com.github.rmannibucau.cdi.configuration.ConfigurationException; import com.github.rmannibucau.cdi.configuration.factory.SetterFallback; import com.github.rmannibucau.cdi.configuration.model.ConfigBean; import org.xml.sax.Attributes; import javax.naming.InitialContext; import javax.naming.NamingException; import java.util.Properties; public class LookupHandler extends NamespaceHandlerSupport { @Override public String supportedUri() { return "lookup"; } @Override public ConfigBean createBean(final String localName, final Attributes attributes) { final ConfigBean bean = new ConfigBean(localName, attributes.getValue("type"), attributes.getValue("scope"), attributes.getValue("qualifier"), LookupFactory.class.getName(), "create", null, null, false); for (int i = 0; i < attributes.getLength(); i++) { bean.getDirectAttributes().put(attributes.getLocalName(i), attributes.getValue(i)); } return bean; } public static class LookupFactory implements SetterFallback { private final Properties properties = new Properties(); private String jndi; public Object create() { try { return context().lookup(jndi); } catch (final NamingException e) { throw new ConfigurationException(e); } } private InitialContext context() throws NamingException { if (properties.isEmpty()) { return new InitialContext(); } return new InitialContext(properties); } @Override public void set(final String key, final String value) { properties.setProperty(key, value); } } }