1 package ch.qos.logback.core.model.processor; 2 3 import javax.naming.NamingException; 4 5 import ch.qos.logback.core.Context; 6 import ch.qos.logback.core.joran.action.ActionUtil; 7 import ch.qos.logback.core.joran.action.ActionUtil.Scope; 8 import ch.qos.logback.core.model.InsertFromJNDIModel; 9 import ch.qos.logback.core.model.Model; 10 import ch.qos.logback.core.model.util.PropertyModelHandlerHelper; 11 import ch.qos.logback.core.util.JNDIUtil; 12 import ch.qos.logback.core.util.OptionHelper; 13 14 public class InsertFromJNDIModelHandler extends ModelHandlerBase { 15 16 public InsertFromJNDIModelHandler(Context context) { 17 super(context); 18 } 19 20 static public ModelHandlerBase makeInstance(Context context, ModelInterpretationContext ic) { 21 return new InsertFromJNDIModelHandler(context); 22 } 23 24 @Override 25 protected Class<InsertFromJNDIModel> getSupportedModelClass() { 26 return InsertFromJNDIModel.class; 27 } 28 29 @Override 30 public void handle(ModelInterpretationContext mic, Model model) throws ModelHandlerException { 31 int errorCount = 0; 32 33 InsertFromJNDIModel ifjm = (InsertFromJNDIModel) model; 34 35 String envEntryName = mic.subst(ifjm.getEnvEntryName()); 36 String asKey = mic.subst(ifjm.getAs()); 37 38 String scopeStr = mic.subst(ifjm.getScopeStr()); 39 Scope scope = ActionUtil.stringToScope(scopeStr); 40 41 String envEntryValue; 42 43 if (OptionHelper.isNullOrEmptyOrAllSpaces(envEntryName)) { 44 addError("[" + InsertFromJNDIModel.ENV_ENTRY_NAME_ATTR + "] missing"); 45 errorCount++; 46 } 47 48 if (OptionHelper.isNullOrEmptyOrAllSpaces(asKey)) { 49 addError("[" + InsertFromJNDIModel.AS_ATTR + "] missing"); 50 errorCount++; 51 } 52 53 if (errorCount != 0) { 54 return; 55 } 56 57 try { 58 javax.naming.Context ctx = JNDIUtil.getInitialContext(); 59 envEntryValue = JNDIUtil.lookupString(ctx, envEntryName); 60 if (OptionHelper.isNullOrEmptyOrAllSpaces(envEntryValue)) { 61 addError("[" + envEntryName + "] has null or empty value"); 62 } else { 63 addInfo("Setting variable [" + asKey + "] to [" + envEntryValue + "] in [" + scope + "] scope"); 64 PropertyModelHandlerHelper.setProperty(mic, asKey, envEntryValue, scope); 65 } 66 } catch (NamingException e) { 67 addError("Failed to lookup JNDI env-entry [" + envEntryName + "]"); 68 } 69 70 } 71 72 }