RFR: 8150173: JAXBContext.newInstance causes PrivilegedActionException when createContext's declared in absract class extended by discovered JAXB implementation

Daniel Fuchs daniel.fuchs at oracle.com
Wed Jun 22 15:09:16 UTC 2016


Hi Georgiy,

I added the (reworked) promised testcases.
I believe I have captured the intent of what you suggested.

http://cr.openjdk.java.net/~dfuchs/webrev_8150173/webrev.02/

best regards,

-- daniel

http://cr.openjdk.java.net/~dfuchs/webrev_8150173/webrev.02/
On 22/06/16 11:55, Georgiy Rakov wrote:
> This is about backward compatibility, but anyway would it be good to add
> to tests static method case (also please see the attached file):
>
>     public static class FactoryBase {
>         public static JAXBContext createContext(Class[]
> classesToBeBound, Map<String, Object> properties) throws JAXBException {
>             return tmp;
>         }
>
>         public static JAXBContext createContext(String contextPath,
> ClassLoader classLoader, Map<String, Object> properties)
>                 throws JAXBException {
>             return tmp;
>         }
>     }
>
>     public static class Factory extends FactoryBase {
>     }
>
> Now it works fine but it might be useful as a test anyway.
>
> It's a valid case according to spec which reads (please see point 2):
>
>  Once the provider factory class is discovered, context creation is
> delegated to one of its createContext(...) methods. For backward
> compatibility reasons, there are two ways how to implement provider
> factory class:
>
>     ...
>
>     2. the class is not implementation of interface above and then it is
> mandated to implement the following static method signatures:
>
>      public static JAXBContext createContext(
>                                           String contextPath,
>                                           ClassLoader classLoader,
> Map<String,Object> properties ) throws JAXBException
>
>      public static JAXBContext createContext(
>                                           Class[] classes,
> Map<String,Object> properties ) throws JAXBException
>
>
>     In this scenario, appropriate static method is used instead of
> instance method. This approach is incompatible with ServiceLoader so it
> can't be used with step 3.
>
> Thanks,
> Georgiy.
>
> On 21.06.2016 20:39, Daniel Fuchs wrote:
>> Hi,
>>
>> Please find below a somewhat trivial patch for
>>
>> 8150173: JAXBContext.newInstance causes PrivilegedActionException
>>          when createContext's declared in absract class extended
>>          by discovered JAXB implementation
>> https://bugs.openjdk.java.net/browse/JDK-8150173
>>
>> Patch:
>> http://cr.openjdk.java.net/~dfuchs/webrev_8150173/webrev.00
>>
>> This is an oversight that was introduced with JDK-8145104.
>>
>> The issue is simply that newInstance() must be invoked on
>> the concrete class, not on the class that defines the
>> createContext method.
>>
>> best regards,
>>
>> -- daniel
>



More information about the core-libs-dev mailing list