JAXP default implementation and JDK-8152063
David M. Lloyd
david.lloyd at redhat.com
Mon Mar 21 19:55:38 UTC 2016
On 03/21/2016 01:38 PM, Alan Bateman wrote:
> On 21/03/2016 14:39, David M. Lloyd wrote:
>> This message is in reference to the aforementioned issue  that I've
>> requested my colleague Andrew Hughes to open on my behalf.
>> As expressed in that issue, the means of specifying a JAXP default
>> provider (via system property which specifies a class name on the
>> application class path) is relatively antiquated at this point. It is
>> actually quite difficult for containers which ship their own JAXP
>> implementation to use the JDK APIs and, at the same time, ship their
>> own implementations, especially without polluting the class path of
>> applications which use JAXP.
> It would be good to expand a bit on what you are looking to do.
> Are you looking to change the system-wide default or are you looking for
> the container/app server to see a different default to the applications
> that it runs?
> As things currently stand then then default can be overridden by
> deploying the XML parser on the class path or as a service provider
> module on the module path. The JPMS requirements document includes a
> requirement for ordering service providers that isn't implemented yet.
> If/when that happens then it might help with part of this.
I need to (optionally) change the system default globally, but from code
that is (probably) not on the module path of the base module layer (in
other words, it's coming from a layer which is loaded after the boot
module is run). I can use the service provider logic to always hook in
a redirection layer (like we do today by way of the system properties),
however if we do this but there is/are no overriding implementation(s)
for one or more of these APIs, then AFAICT it will fail with Jigsaw
because we can't access the JDK's default implementations (or even know
what they are, barring reflection & etc.), which pretty well puts us
back to square one.
An alternative might be to have some way to hook into global service
discovery at run time. I don't have any ideas here that I can
concretely solve & code at this time however; the main appeal (to me) of
having global default setters is that this idea is relatively simple to
achieve and use.
More information about the core-libs-dev