This is an automated email from the ASF dual-hosted git repository. markt pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/tomcat.git
commit 05de46094b0a3a9600c3894245a2e28660fe2967 Author: Mark Thomas <ma...@apache.org> AuthorDate: Mon Jan 27 11:14:15 2020 +0000 Fix BZ 64097 Use ServiceLoader to load EL implementation https://bz.apache.org/bugzilla/show_bug.cgi?id=64097 --- java/jakarta/el/ExpressionFactory.java | 42 +++++++++------------------------- 1 file changed, 11 insertions(+), 31 deletions(-) diff --git a/java/jakarta/el/ExpressionFactory.java b/java/jakarta/el/ExpressionFactory.java index 35253b9..b1ffccc 100644 --- a/java/jakarta/el/ExpressionFactory.java +++ b/java/jakarta/el/ExpressionFactory.java @@ -14,25 +14,23 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package jakarta.el; -import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.UnsupportedEncodingException; import java.lang.ref.WeakReference; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.security.AccessController; import java.security.PrivilegedAction; +import java.util.Iterator; import java.util.Map; import java.util.Properties; +import java.util.ServiceLoader; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReadWriteLock; @@ -47,9 +45,6 @@ public abstract class ExpressionFactory { private static final boolean IS_SECURITY_ENABLED = (System.getSecurityManager() != null); - private static final String SERVICE_RESOURCE_NAME = - "META-INF/services/jakarta.el.ExpressionFactory"; - private static final String PROPERTY_NAME = "jakarta.el.ExpressionFactory"; private static final String PROPERTY_FILE; @@ -371,35 +366,20 @@ public abstract class ExpressionFactory { } private static String getClassNameServices(ClassLoader tccl) { - InputStream is = null; - if (tccl == null) { - is = ClassLoader.getSystemResourceAsStream(SERVICE_RESOURCE_NAME); - } else { - is = tccl.getResourceAsStream(SERVICE_RESOURCE_NAME); + ExpressionFactory result = null; + + ServiceLoader<ExpressionFactory> serviceLoader = ServiceLoader.load(ExpressionFactory.class, tccl); + Iterator<ExpressionFactory> iter = serviceLoader.iterator(); + while (result == null && iter.hasNext()) { + result = iter.next(); } - if (is != null) { - String line = null; - try (InputStreamReader isr = new InputStreamReader(is, "UTF-8"); - BufferedReader br = new BufferedReader(isr)) { - line = br.readLine(); - if (line != null && line.trim().length() > 0) { - return line.trim(); - } - } catch (UnsupportedEncodingException e) { - // Should never happen with UTF-8 - // If it does - ignore & return null - } catch (IOException e) { - throw new ELException(Util.message(null, "expressionFactory.readFailed", SERVICE_RESOURCE_NAME), e); - } finally { - try { - is.close(); - } catch (IOException ioe) {/*Ignore*/} - } + if (result == null) { + return null; } - return null; + return result.getClass().getName(); } private static String getClassNameJreDir() { --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org