You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by xu...@apache.org on 2010/01/13 04:30:30 UTC

svn commit: r898637 - /geronimo/specs/trunk/geronimo-el_2.2_spec/src/main/java/javax/el/

Author: xuhaihong
Date: Wed Jan 13 03:30:30 2010
New Revision: 898637

URL: http://svn.apache.org/viewvc?rev=898637&view=rev
Log:
1.Implement newInstance in ExpressionFactory
2. Add some empty invoke methods to make the compile pass

Modified:
    geronimo/specs/trunk/geronimo-el_2.2_spec/src/main/java/javax/el/ArrayELResolver.java
    geronimo/specs/trunk/geronimo-el_2.2_spec/src/main/java/javax/el/BeanELResolver.java
    geronimo/specs/trunk/geronimo-el_2.2_spec/src/main/java/javax/el/CompositeELResolver.java
    geronimo/specs/trunk/geronimo-el_2.2_spec/src/main/java/javax/el/ELResolver.java
    geronimo/specs/trunk/geronimo-el_2.2_spec/src/main/java/javax/el/ExpressionFactory.java
    geronimo/specs/trunk/geronimo-el_2.2_spec/src/main/java/javax/el/ListELResolver.java
    geronimo/specs/trunk/geronimo-el_2.2_spec/src/main/java/javax/el/MapELResolver.java
    geronimo/specs/trunk/geronimo-el_2.2_spec/src/main/java/javax/el/ResourceBundleELResolver.java

Modified: geronimo/specs/trunk/geronimo-el_2.2_spec/src/main/java/javax/el/ArrayELResolver.java
URL: http://svn.apache.org/viewvc/geronimo/specs/trunk/geronimo-el_2.2_spec/src/main/java/javax/el/ArrayELResolver.java?rev=898637&r1=898636&r2=898637&view=diff
==============================================================================
--- geronimo/specs/trunk/geronimo-el_2.2_spec/src/main/java/javax/el/ArrayELResolver.java (original)
+++ geronimo/specs/trunk/geronimo-el_2.2_spec/src/main/java/javax/el/ArrayELResolver.java Wed Jan 13 03:30:30 2010
@@ -5,9 +5,9 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -156,4 +156,8 @@
 				.toString() : "null");
 	}
 
+    public Object invoke(ELContext context, Object base, Object method, Class<?>[] paramTypes, Object[] params) {
+        // TODO Auto-generated method stub
+        return null;
+    }
 }

Modified: geronimo/specs/trunk/geronimo-el_2.2_spec/src/main/java/javax/el/BeanELResolver.java
URL: http://svn.apache.org/viewvc/geronimo/specs/trunk/geronimo-el_2.2_spec/src/main/java/javax/el/BeanELResolver.java?rev=898637&r1=898636&r2=898637&view=diff
==============================================================================
--- geronimo/specs/trunk/geronimo-el_2.2_spec/src/main/java/javax/el/BeanELResolver.java (original)
+++ geronimo/specs/trunk/geronimo-el_2.2_spec/src/main/java/javax/el/BeanELResolver.java Wed Jan 13 03:30:30 2010
@@ -5,9 +5,9 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -200,7 +200,7 @@
         public BeanProperty getBeanProperty(String name) {
             return get(null, name);
         }
-        
+
         private Class<?> getType() {
             return type;
         }
@@ -287,7 +287,7 @@
 		Method mp;
         for (Class anInf : inf) {
             try {
-                mp = anInf.getMethod(m.getName(), (Class[]) m.getParameterTypes());
+                mp = anInf.getMethod(m.getName(), m.getParameterTypes());
                 mp = getMethod(mp.getDeclaringClass(), mp);
                 if (mp != null) {
                     return mp;
@@ -299,7 +299,7 @@
         Class sup = type.getSuperclass();
 		if (sup != null) {
 			try {
-				mp = sup.getMethod(m.getName(), (Class[]) m.getParameterTypes());
+				mp = sup.getMethod(m.getName(), m.getParameterTypes());
 				mp = getMethod(mp.getDeclaringClass(), mp);
 				if (mp != null) {
 					return mp;
@@ -310,19 +310,19 @@
 		}
 		return null;
 	}
-	
+
 	private final static class ConcurrentCache<K,V> {
 
 		private final int size;
 		private final Map<K,V> eden;
 		private final Map<K,V> longterm;
-		
+
 		public ConcurrentCache(int size) {
 			this.size = size;
 			this.eden = new ConcurrentHashMap<K,V>(size);
 			this.longterm = new WeakHashMap<K,V>(size);
 		}
-		
+
 		public V get(K key) {
 			V value = this.eden.get(key);
 			if (value == null) {
@@ -333,7 +333,7 @@
 			}
 			return value;
 		}
-		
+
 		public void put(K key, V value) {
 			if (this.eden.size() >= this.size) {
 				this.longterm.putAll(this.eden);
@@ -343,4 +343,9 @@
 		}
 
 	}
+
+    public Object invoke(ELContext context, Object base, Object method, Class<?>[] paramTypes, Object[] params) {
+        // TODO Auto-generated method stub
+        return null;
+    }
 }

Modified: geronimo/specs/trunk/geronimo-el_2.2_spec/src/main/java/javax/el/CompositeELResolver.java
URL: http://svn.apache.org/viewvc/geronimo/specs/trunk/geronimo-el_2.2_spec/src/main/java/javax/el/CompositeELResolver.java?rev=898637&r1=898636&r2=898637&view=diff
==============================================================================
--- geronimo/specs/trunk/geronimo-el_2.2_spec/src/main/java/javax/el/CompositeELResolver.java (original)
+++ geronimo/specs/trunk/geronimo-el_2.2_spec/src/main/java/javax/el/CompositeELResolver.java Wed Jan 13 03:30:30 2010
@@ -5,9 +5,9 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -166,7 +166,7 @@
 			this.idx = 0;
 			this.guaranteeIterator();
 		}
-		
+
 		private void guaranteeIterator() {
 			while (this.itr == null && this.idx < this.size) {
 				this.itr = this.resolvers[this.idx].getFeatureDescriptors(
@@ -198,4 +198,8 @@
 		}
 	}
 
+    public Object invoke(ELContext context, Object base, Object method, Class<?>[] paramTypes, Object[] params) {
+        // TODO Auto-generated method stub
+        return null;
+    }
 }

Modified: geronimo/specs/trunk/geronimo-el_2.2_spec/src/main/java/javax/el/ELResolver.java
URL: http://svn.apache.org/viewvc/geronimo/specs/trunk/geronimo-el_2.2_spec/src/main/java/javax/el/ELResolver.java?rev=898637&r1=898636&r2=898637&view=diff
==============================================================================
--- geronimo/specs/trunk/geronimo-el_2.2_spec/src/main/java/javax/el/ELResolver.java (original)
+++ geronimo/specs/trunk/geronimo-el_2.2_spec/src/main/java/javax/el/ELResolver.java Wed Jan 13 03:30:30 2010
@@ -5,9 +5,9 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -28,7 +28,7 @@
  *
  */
 public abstract class ELResolver {
-	
+
 	static String message(ELContext context, String name, Object[] props) {
 		Locale locale = context == null? null: context.getLocale();
 		if (locale == null) {
@@ -52,18 +52,20 @@
 	}
 
     public final static String RESOLVABLE_AT_DESIGN_TIME = "resolvableAtDesignTime";
-    
+
     public final static String TYPE = "type";
-    
+
     public abstract Object getValue(ELContext context, Object base, Object property) throws NullPointerException, PropertyNotFoundException, ELException;
-    
+
     public abstract Class<?> getType(ELContext context, Object base, Object property) throws NullPointerException, PropertyNotFoundException, ELException;
-    
+
     public abstract void setValue(ELContext context, Object base, Object property, Object value) throws NullPointerException, PropertyNotFoundException, PropertyNotWritableException, ELException;
 
     public abstract boolean isReadOnly(ELContext context, Object base, Object property) throws NullPointerException, PropertyNotFoundException, ELException;
-    
+
     public abstract Iterator<java.beans.FeatureDescriptor> getFeatureDescriptors(ELContext context, Object base);
-    
+
     public abstract Class<?> getCommonPropertyType(ELContext context, Object base);
+
+    public abstract Object invoke(ELContext context, Object base, Object method, Class<?>[] paramTypes, Object[] params);
 }

Modified: geronimo/specs/trunk/geronimo-el_2.2_spec/src/main/java/javax/el/ExpressionFactory.java
URL: http://svn.apache.org/viewvc/geronimo/specs/trunk/geronimo-el_2.2_spec/src/main/java/javax/el/ExpressionFactory.java?rev=898637&r1=898636&r2=898637&view=diff
==============================================================================
--- geronimo/specs/trunk/geronimo-el_2.2_spec/src/main/java/javax/el/ExpressionFactory.java (original)
+++ geronimo/specs/trunk/geronimo-el_2.2_spec/src/main/java/javax/el/ExpressionFactory.java Wed Jan 13 03:30:30 2010
@@ -5,9 +5,9 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,24 +17,158 @@
 
 package javax.el;
 
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.UnsupportedEncodingException;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.util.Properties;
+
 /**
- * 
+ *
  * @since 2.1
  */
 public abstract class ExpressionFactory {
 
-    public abstract Object coerceToType(Object obj, Class<?> expectedType)
-            throws ELException;
+    private static final String PLATFORM_DEFAULT_FACTORY_CLASS = "org.apache.el.ExpressionFactoryImpl";
+
+    private static final String EXPRESSION_FACTORY_SERVICE_ENTRY_URL = "META-INF/services/javax.el.ExpressionFactory";
+
+    private static final String SYSTEM_PROPERTY_NAME = "javax.el.ExpressionFactory";
+
+    private static final String JAVA_RUNTIME_PROPERTY_FILE_LOCATION = "lib" + File.separator + "el.properties";
 
-    public abstract ValueExpression createValueExpression(ELContext context,
-            String expression, Class<?> expectedType)
-            throws NullPointerException, ELException;
-
-    public abstract ValueExpression createValueExpression(Object instance,
-            Class<?> expectedType);
-
-    public abstract MethodExpression createMethodExpression(ELContext context,
-            String expression, Class<?> expectedReturnType,
-            Class<?>[] expectedParamTypes) throws ELException,
-            NullPointerException;
+    public abstract Object coerceToType(Object obj, Class<?> expectedType) throws ELException;
+
+    public abstract ValueExpression createValueExpression(ELContext context, String expression, Class<?> expectedType) throws NullPointerException, ELException;
+
+    public abstract ValueExpression createValueExpression(Object instance, Class<?> expectedType);
+
+    public abstract MethodExpression createMethodExpression(ELContext context, String expression, Class<?> expectedReturnType, Class<?>[] expectedParamTypes) throws ELException, NullPointerException;
+
+    public static ExpressionFactory newInstance() {
+        return newInstance(null);
+    }
+
+    public static ExpressionFactory newInstance(Properties properties) {
+        Class<?> implClass = loadExpressionFactoryImplClass();
+        if (properties == null) {
+            return newInstance0(implClass);
+        }
+        try {
+            Constructor<?> constructor = implClass.getConstructor(Properties.class);
+            try {
+                return (ExpressionFactory) constructor.newInstance(properties);
+            } catch (IllegalArgumentException e) {
+                throw new ELException("Fail to create ExpressionFactory instance", e);
+            } catch (InstantiationException e) {
+                throw new ELException("Fail to create ExpressionFactory instance", e);
+            } catch (IllegalAccessException e) {
+                throw new ELException("Fail to create ExpressionFactory instance", e);
+            } catch (InvocationTargetException e) {
+                throw new ELException("Fail to create ExpressionFactory instance", e);
+            }
+        } catch (SecurityException e) {
+            throw new ELException("Fail to get constuctor from ExpressionFactory implementation class", e);
+        } catch (NoSuchMethodException e) {
+            return newInstance0(implClass);
+        }
+    }
+
+    private static ExpressionFactory newInstance0(Class<?> implClass) {
+        try {
+            return (ExpressionFactory) implClass.newInstance();
+        } catch (IllegalAccessException e) {
+            throw new ELException("Fail to create ExpressionFactory instance", e);
+        } catch (InstantiationException e) {
+            throw new ELException("Fail to create ExpressionFactory instance", e);
+        }
+    }
+
+    private static String lookupExpressionFactoryImplClass() {
+        ClassLoader cl = Thread.currentThread().getContextClassLoader();
+        if (cl == null) {
+            cl = ClassLoader.getSystemClassLoader();
+        }
+        String implClassName = null;
+        implClassName = lookupByServiceEntryURL(cl);
+        if (implClassName == null) {
+            implClassName = lookupByJREPropertyFile();
+            if (implClassName == null) {
+                implClassName = System.getProperty(SYSTEM_PROPERTY_NAME);
+                if (implClassName == null) {
+                    implClassName = PLATFORM_DEFAULT_FACTORY_CLASS;
+                }
+            }
+        }
+        return implClassName;
+    }
+
+    private static String lookupByServiceEntryURL(ClassLoader cl) {
+        InputStream in = null;
+        try {
+            in = cl.getResourceAsStream(EXPRESSION_FACTORY_SERVICE_ENTRY_URL);
+            if (in != null) {
+                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in, "UTF-8"));
+                return bufferedReader.readLine().trim();
+            } else {
+                return null;
+            }
+        } catch (UnsupportedEncodingException e) {
+            throw new ELException("Fail to read " + EXPRESSION_FACTORY_SERVICE_ENTRY_URL, e);
+        } catch (IOException e) {
+            throw new ELException("Fail to read " + EXPRESSION_FACTORY_SERVICE_ENTRY_URL, e);
+        } finally {
+            if (in != null) {
+                try {
+                    in.close();
+                } catch (Exception e) {
+                }
+            }
+        }
+    }
+
+    private static String lookupByJREPropertyFile() {
+        String jreDirectory = System.getProperty("java.home");
+        File configurationFile = new File(jreDirectory + File.separator + JAVA_RUNTIME_PROPERTY_FILE_LOCATION);
+        if (configurationFile.exists() && configurationFile.canRead()) {
+            Properties properties = new Properties();
+            InputStream in = null;
+            try {
+                in = new FileInputStream(configurationFile);
+                properties.load(in);
+                return properties.getProperty(SYSTEM_PROPERTY_NAME);
+            } catch (IOException e) {
+                throw new ELException("Fail to read " + configurationFile.getAbsolutePath(), e);
+            } finally {
+                if (in != null) {
+                    try {
+                        in.close();
+                    } catch (Exception e) {
+                    }
+                }
+            }
+        } else {
+            return null;
+        }
+    }
+
+    private static Class<?> loadExpressionFactoryImplClass() {
+        String implClassName = null;
+        try {
+            implClassName = lookupExpressionFactoryImplClass();
+            ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
+            if (contextClassLoader != null) {
+                return contextClassLoader.loadClass(implClassName);
+            } else {
+                return Class.forName(implClassName);
+            }
+        } catch (ClassNotFoundException e) {
+            throw new ELException("Fail to load implementation class " + implClassName, e);
+        }
+    }
 }

Modified: geronimo/specs/trunk/geronimo-el_2.2_spec/src/main/java/javax/el/ListELResolver.java
URL: http://svn.apache.org/viewvc/geronimo/specs/trunk/geronimo-el_2.2_spec/src/main/java/javax/el/ListELResolver.java?rev=898637&r1=898636&r2=898637&view=diff
==============================================================================
--- geronimo/specs/trunk/geronimo-el_2.2_spec/src/main/java/javax/el/ListELResolver.java (original)
+++ geronimo/specs/trunk/geronimo-el_2.2_spec/src/main/java/javax/el/ListELResolver.java Wed Jan 13 03:30:30 2010
@@ -5,9 +5,9 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -168,4 +168,9 @@
 		throw new IllegalArgumentException(property != null ? property
 				.toString() : "null");
 	}
+
+    public Object invoke(ELContext context, Object base, Object method, Class<?>[] paramTypes, Object[] params) {
+        // TODO Auto-generated method stub
+        return null;
+    }
 }

Modified: geronimo/specs/trunk/geronimo-el_2.2_spec/src/main/java/javax/el/MapELResolver.java
URL: http://svn.apache.org/viewvc/geronimo/specs/trunk/geronimo-el_2.2_spec/src/main/java/javax/el/MapELResolver.java?rev=898637&r1=898636&r2=898637&view=diff
==============================================================================
--- geronimo/specs/trunk/geronimo-el_2.2_spec/src/main/java/javax/el/MapELResolver.java (original)
+++ geronimo/specs/trunk/geronimo-el_2.2_spec/src/main/java/javax/el/MapELResolver.java Wed Jan 13 03:30:30 2010
@@ -5,9 +5,9 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -50,7 +50,7 @@
 			context.setPropertyResolved(true);
 			return ((Map) base).get(property);
 		}
-		
+
 		return null;
 	}
 
@@ -65,7 +65,7 @@
 			Object obj = ((Map) base).get(property);
 			return (obj != null) ? obj.getClass() : null;
 		}
-		
+
 		return null;
 	}
 
@@ -104,7 +104,7 @@
 			context.setPropertyResolved(true);
 			return this.readOnly || UNMODIFIABLE.equals(base.getClass());
 		}
-		
+
 		return this.readOnly;
 	}
 
@@ -138,4 +138,9 @@
 		return null;
 	}
 
+    public Object invoke(ELContext context, Object base, Object method, Class<?>[] paramTypes, Object[] params) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
 }

Modified: geronimo/specs/trunk/geronimo-el_2.2_spec/src/main/java/javax/el/ResourceBundleELResolver.java
URL: http://svn.apache.org/viewvc/geronimo/specs/trunk/geronimo-el_2.2_spec/src/main/java/javax/el/ResourceBundleELResolver.java?rev=898637&r1=898636&r2=898637&view=diff
==============================================================================
--- geronimo/specs/trunk/geronimo-el_2.2_spec/src/main/java/javax/el/ResourceBundleELResolver.java (original)
+++ geronimo/specs/trunk/geronimo-el_2.2_spec/src/main/java/javax/el/ResourceBundleELResolver.java Wed Jan 13 03:30:30 2010
@@ -5,9 +5,9 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -36,7 +36,7 @@
 		if (context == null) {
 			throw new NullPointerException();
 		}
-		
+
 		if (base instanceof ResourceBundle) {
 			context.setPropertyResolved(true);
 
@@ -58,11 +58,11 @@
 		if (context == null) {
 			throw new NullPointerException();
 		}
-		
+
 		if (base instanceof ResourceBundle) {
 			context.setPropertyResolved(true);
 		}
-		
+
 		return null;
 	}
 
@@ -73,7 +73,7 @@
 		if (context == null) {
 			throw new NullPointerException();
 		}
-		
+
 		if (base instanceof ResourceBundle) {
 			context.setPropertyResolved(true);
 			throw new PropertyNotWritableException(message(context,
@@ -87,11 +87,11 @@
 		if (context == null) {
 			throw new NullPointerException();
 		}
-		
+
 		if (base instanceof ResourceBundle) {
 			context.setPropertyResolved(true);
 		}
-		
+
 		return true;
 	}
 
@@ -125,4 +125,8 @@
 		return null;
 	}
 
+    public Object invoke(ELContext context, Object base, Object method, Class<?>[] paramTypes, Object[] params) {
+        // TODO Auto-generated method stub
+        return null;
+    }
 }