diff --git a/src/share/classes/java/util/ServiceLoader.java b/src/share/classes/java/util/ServiceLoader.java index 067537a213d4784b92e6516a3e4b017e61729ae4..45149bdf98b87ea7d3e5cc42a72ce0c34d41b647 100644 --- a/src/share/classes/java/util/ServiceLoader.java +++ b/src/share/classes/java/util/ServiceLoader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -214,7 +214,7 @@ public final class ServiceLoader private ServiceLoader(Class svc, ClassLoader cl) { service = Objects.requireNonNull(svc, "Service interface cannot be null"); - loader = cl; + loader = (cl == null) ? ClassLoader.getSystemClassLoader() : cl; reload(); } diff --git a/test/java/util/ServiceLoader/Basic.java b/test/java/util/ServiceLoader/Basic.java index 9912d688eb4c3f6ed818805214e884f5c7690115..9677db7ccbe56d69da23b47ccf6f508ea95b9ea5 100644 --- a/test/java/util/ServiceLoader/Basic.java +++ b/test/java/util/ServiceLoader/Basic.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -44,10 +44,41 @@ public class Basic { eq, s1, s2)); } + static abstract class TestLoader { + String name; + + TestLoader(String name) { this.name = name; } + + abstract ServiceLoader load(); + } + + static TestLoader tcclLoader = new TestLoader("Thread context class loader") { + ServiceLoader load() { + return ServiceLoader.load(FooService.class); + } + }; + + static TestLoader systemClLoader = new TestLoader("System class loader") { + ServiceLoader load() { + return ServiceLoader.load(FooService.class, ClassLoader.getSystemClassLoader()); + } + }; + + static TestLoader nullClLoader = new TestLoader("null (defer to system class loader)") { + ServiceLoader load() { + return ServiceLoader.load(FooService.class, null); + } + }; + public static void main(String[] args) { + for (TestLoader tl : Arrays.asList(tcclLoader, systemClLoader, nullClLoader)) { + test(tl); + } + } - ServiceLoader sl = ServiceLoader.load(FooService.class); - out.format("%s%n", sl); + static void test(TestLoader tl) { + ServiceLoader sl = tl.load(); + out.format("%s: %s%n", tl.name, sl); // Providers are cached Set ps = setOf(sl); @@ -58,5 +89,4 @@ public class Basic { checkEquals(ps, setOf(sl), false); } - } diff --git a/test/java/util/ServiceLoader/basic.sh b/test/java/util/ServiceLoader/basic.sh index dc9305164a607e82effde3a90d9d668cc904dd75..af8f6e84862be4d521fb9d54f6fb4d762936bb1f 100644 --- a/test/java/util/ServiceLoader/basic.sh +++ b/test/java/util/ServiceLoader/basic.sh @@ -22,7 +22,7 @@ # # @test -# @bug 4640520 6354623 +# @bug 4640520 6354623 7198496 # @summary Unit test for java.util.ServiceLoader # # @build Basic Load FooService FooProvider1 FooProvider2 FooProvider3