RFR [JDK8]: 7169894: JAXP Plugability Layer: using service loader
Joe Wang
huizhe.wang at oracle.com
Wed Aug 29 23:08:13 UTC 2012
I actually updated the webrev yesterday with your suggestion.
Recall our discussions back in June, the suggestion was to delegate to
the ServiceLoader, e.g. ServiceLoader.load(serviceClass). The rational
was that the ServiceLoader uses context and then bootstrap class loader.
The spec for public static <S> ServiceLoader<S> load(Class<S> service,
ClassLoader loader) states:
loader - The class loader to be used to load provider-configuration
files and provider classes, or null if the system class loader (or,
failing that, the bootstrap class loader) is to be used
This is different. In JAXP, null is recognized as bootstrap classloader,
but the ServiceLoader actually assumes it as system class loader. This
will be a problem, whether or now a classloader is passed to the load
method.
--Joe
On 8/29/2012 1:56 AM, Paul Sandoz wrote:
> For the SchemaFactoryFinder there is now a potentially subtle difference in what CL is used to load a class by SL and by SchemaFactoryFinder.createInstance. Previously the same CL was always used whatever the mechanism was used to identify the class name. Errors related to class loaders can be extremely hard to track down hence the conservative position.
>
> --
>
> I will say no more on the above:-)
>
> Paul.
>
> [*] If a developer can declare a service provider then such linkage errors can potentially occur.
More information about the core-libs-dev
mailing list