You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by dj...@apache.org on 2010/05/23 09:11:22 UTC

svn commit: r947370 - /geronimo/server/trunk/plugins/j2ee/geronimo-naming-builder/src/main/java/org/apache/geronimo/naming/deployment/EnvironmentEntryBuilder.java

Author: djencks
Date: Sun May 23 07:11:22 2010
New Revision: 947370

URL: http://svn.apache.org/viewvc?rev=947370&view=rev
Log:
If the purpose of an xml env-enty is to suppress injection, don't require the type to be specified.

Modified:
    geronimo/server/trunk/plugins/j2ee/geronimo-naming-builder/src/main/java/org/apache/geronimo/naming/deployment/EnvironmentEntryBuilder.java

Modified: geronimo/server/trunk/plugins/j2ee/geronimo-naming-builder/src/main/java/org/apache/geronimo/naming/deployment/EnvironmentEntryBuilder.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/j2ee/geronimo-naming-builder/src/main/java/org/apache/geronimo/naming/deployment/EnvironmentEntryBuilder.java?rev=947370&r1=947369&r2=947370&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/j2ee/geronimo-naming-builder/src/main/java/org/apache/geronimo/naming/deployment/EnvironmentEntryBuilder.java (original)
+++ geronimo/server/trunk/plugins/j2ee/geronimo-naming-builder/src/main/java/org/apache/geronimo/naming/deployment/EnvironmentEntryBuilder.java Sun May 23 07:11:22 2010
@@ -105,69 +105,76 @@ public class EnvironmentEntryBuilder ext
         for (EnvEntryType envEntry: envEntriesUntyped) {
             String name = getStringValue(envEntry.getEnvEntryName());
             String type = getStringValue(envEntry.getEnvEntryType());
-            
-            Class typeClass;
-            try {
-                typeClass = bundle.loadClass(type);
-            } catch (ClassNotFoundException e) {
-                throw new DeploymentException("Could not env-entry type class " + type, e);
-            }
-            
+
             Object value = null;
-            
-            String strValue = envEntryMap.remove(name);
-            if (strValue == null) {
+
+            String strValueOverride = envEntryMap.remove(name);
+            String strValue = null;
+            if (strValueOverride == null) {
                 strValue = getUntrimmedStringValue(envEntry.getEnvEntryValue());
-                if (strValue == null) {
-                    String lookupName = getStringValue(envEntry.getLookupName());
-                    if (lookupName != null) {
-                        if (lookupName.equals(getJndiName(name))) {
-                            throw new DeploymentException("env-entry lookup name refers to itself");
-                        }
-                        value = new JndiReference(lookupName);
+                String lookupName = getStringValue(envEntry.getLookupName());
+                if (strValue != null && lookupName != null) {
+                    throw new DeploymentException("You must specify an environment entry value or lookup name but not both. Component: " + module.getAnnotatedApp().toString() + ", name: " + name + ", env-entry-value: " + strValue + ", lookup-name: " + lookupName + "");
+                }
+                if (lookupName != null) {
+                    //TODO better circular reference checking
+                    if (lookupName.equals(getJndiName(name))) {
+                        throw new DeploymentException("env-entry lookup name refers to itself");
                     }
+                    value = new JndiReference(lookupName);
                 }
+            } else {
+                strValue = strValueOverride;
             }
-            
+
+
             if (value == null) {
                 if (strValue == null) {
                     if ("org.apache.geronimo.kernel.Kernel".equals(type)) {
                         value = new KernelReference();
                     }
                 } else {
-                    try {
-                        if (String.class.equals(typeClass)) {
-                            value = strValue;
-                        } else if (Character.class.equals(typeClass)) {
-                            if (strValue.length() == 1) {
-                                value = strValue.charAt(0);
+                    if (type != null) {
+                        Class typeClass;
+                        try {
+                            typeClass = bundle.loadClass(type);
+                        } catch (ClassNotFoundException e) {
+                            throw new DeploymentException("Could not env-entry type class " + type, e);
+                        }
+                        try {
+                            if (String.class.equals(typeClass)) {
+                                value = strValue;
+                            } else if (Character.class.equals(typeClass)) {
+                                if (strValue.length() == 1) {
+                                    value = strValue.charAt(0);
+                                } else {
+                                    log.warn("invalid character value: {} for name {}", strValue, name );
+                                    value = ' ';
+                                }
+                            } else if (Boolean.class.equals(typeClass)) {
+                                value = Boolean.valueOf(strValue);
+                            } else if (Byte.class.equals(typeClass)) {
+                                value = Byte.valueOf(strValue);
+                            } else if (Short.class.equals(typeClass)) {
+                                value = Short.valueOf(strValue);
+                            } else if (Integer.class.equals(typeClass)) {
+                                value = Integer.valueOf(strValue);
+                            } else if (Long.class.equals(typeClass)) {
+                                value = Long.valueOf(strValue);
+                            } else if (Float.class.equals(typeClass)) {
+                                value = Float.valueOf(strValue);
+                            } else if (Double.class.equals(typeClass)) {
+                                value = Double.valueOf(strValue);
+                            } else if (Class.class.equals(typeClass)) {
+                                value = new ClassReference(strValue);
+                            } else if (typeClass.isEnum()) {
+                                value = Enum.valueOf(typeClass, strValue);
                             } else {
-                                log.warn("invalid character value: {} for name {}", strValue, name );
-                                value = ' ';
+                                throw new DeploymentException("Unrecognized env-entry type: " + type);
                             }
-                        } else if (Boolean.class.equals(typeClass)) {
-                            value = Boolean.valueOf(strValue);
-                        } else if (Byte.class.equals(typeClass)) {
-                            value = Byte.valueOf(strValue);
-                        } else if (Short.class.equals(typeClass)) {
-                            value = Short.valueOf(strValue);
-                        } else if (Integer.class.equals(typeClass)) {
-                            value = Integer.valueOf(strValue);
-                        } else if (Long.class.equals(typeClass)) {
-                            value = Long.valueOf(strValue);
-                        } else if (Float.class.equals(typeClass)) {
-                            value = Float.valueOf(strValue);
-                        } else if (Double.class.equals(typeClass)) {
-                            value = Double.valueOf(strValue);
-                        } else if (Class.class.equals(typeClass)) {
-                            value = new ClassReference(strValue);
-                        } else if (typeClass.isEnum()) {
-                            value = Enum.valueOf(typeClass, strValue);
-                        } else {
-                            throw new DeploymentException("Unrecognized env-entry type: " + type);
+                        } catch (NumberFormatException e) {
+                            throw new DeploymentException("Invalid env-entry value for name: " + name, e);
                         }
-                    } catch (NumberFormatException e) {
-                        throw new DeploymentException("Invalid env-entry value for name: " + name, e);
                     }
                 }
             }