src/share/jaxws_classes/javax/xml/bind/ContextFinder.java

Print this page

        

*** 1,7 **** /* ! * Copyright (c) 2003, 2011, 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 * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this --- 1,7 ---- /* ! * Copyright (c) 2003, 2013, 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 * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this
*** 308,346 **** if( factoryClassName != null ) { return newInstance( contextPath, factoryClassName, classLoader, properties ); } } ! if (getContextClassLoader() == classLoader) { ! Class factory = lookupUsingOSGiServiceLoader("javax.xml.bind.JAXBContext"); ! if (factory != null) { logger.fine("OSGi environment detected"); ! return newInstance(contextPath, factory, classLoader, properties); ! } } logger.fine("Searching META-INF/services"); // search META-INF services next ! BufferedReader r; try { final StringBuilder resource = new StringBuilder().append("META-INF/services/").append(jaxbContextFQCN); final InputStream resourceStream = classLoader.getResourceAsStream(resource.toString()); if (resourceStream != null) { r = new BufferedReader(new InputStreamReader(resourceStream, "UTF-8")); ! factoryClassName = r.readLine().trim(); r.close(); return newInstance(contextPath, factoryClassName, classLoader, properties); } else { logger.log(Level.FINE, "Unable to load:{0}", resource.toString()); } } catch (UnsupportedEncodingException e) { // should never happen throw new JAXBException(e); } catch (IOException e) { throw new JAXBException(e); } // else no provider found logger.fine("Trying to create the platform default provider"); return newInstance(contextPath, PLATFORM_DEFAULT_FACTORY_CLASS, classLoader, properties); --- 308,356 ---- if( factoryClassName != null ) { return newInstance( contextPath, factoryClassName, classLoader, properties ); } } ! // OSGi search ! Class jaxbContext = lookupJaxbContextUsingOsgiServiceLoader(); ! if (jaxbContext != null) { logger.fine("OSGi environment detected"); ! return newInstance(contextPath, jaxbContext, classLoader, properties); } logger.fine("Searching META-INF/services"); // search META-INF services next ! BufferedReader r = null; try { final StringBuilder resource = new StringBuilder().append("META-INF/services/").append(jaxbContextFQCN); final InputStream resourceStream = classLoader.getResourceAsStream(resource.toString()); if (resourceStream != null) { r = new BufferedReader(new InputStreamReader(resourceStream, "UTF-8")); ! factoryClassName = r.readLine(); ! if (factoryClassName != null) { ! factoryClassName = factoryClassName.trim(); ! } r.close(); return newInstance(contextPath, factoryClassName, classLoader, properties); } else { logger.log(Level.FINE, "Unable to load:{0}", resource.toString()); } } catch (UnsupportedEncodingException e) { // should never happen throw new JAXBException(e); } catch (IOException e) { throw new JAXBException(e); + } finally { + try { + if (r != null) { + r.close(); + } + } catch (IOException ex) { + Logger.getLogger(ContextFinder.class.getName()).log(Level.SEVERE, null, ex); + } } // else no provider found logger.fine("Trying to create the platform default provider"); return newInstance(contextPath, PLATFORM_DEFAULT_FACTORY_CLASS, classLoader, properties);
*** 400,418 **** } else { logger.fine(" not found"); } } ! Class factory = lookupUsingOSGiServiceLoader("javax.xml.bind.JAXBContext"); ! if (factory != null) { logger.fine("OSGi environment detected"); ! return newInstance(classes, properties, factory); } // search META-INF services next logger.fine("Checking META-INF/services"); ! BufferedReader r; try { final String resource = new StringBuilder("META-INF/services/").append(jaxbContextFQCN).toString(); ClassLoader classLoader = getContextClassLoader(); URL resourceURL; if(classLoader==null) --- 410,429 ---- } else { logger.fine(" not found"); } } ! // OSGi search ! Class jaxbContext = lookupJaxbContextUsingOsgiServiceLoader(); ! if (jaxbContext != null) { logger.fine("OSGi environment detected"); ! return newInstance(classes, properties, jaxbContext); } // search META-INF services next logger.fine("Checking META-INF/services"); ! BufferedReader r = null; try { final String resource = new StringBuilder("META-INF/services/").append(jaxbContextFQCN).toString(); ClassLoader classLoader = getContextClassLoader(); URL resourceURL; if(classLoader==null)
*** 421,457 **** resourceURL = classLoader.getResource(resource); if (resourceURL != null) { logger.log(Level.FINE, "Reading {0}", resourceURL); r = new BufferedReader(new InputStreamReader(resourceURL.openStream(), "UTF-8")); ! factoryClassName = r.readLine().trim(); return newInstance(classes, properties, factoryClassName); } else { logger.log(Level.FINE, "Unable to find: {0}", resource); } } catch (UnsupportedEncodingException e) { // should never happen throw new JAXBException(e); } catch (IOException e) { throw new JAXBException(e); } // else no provider found logger.fine("Trying to create the platform default provider"); return newInstance(classes, properties, PLATFORM_DEFAULT_FACTORY_CLASS); } ! private static Class lookupUsingOSGiServiceLoader(String factoryId) { try { ! // Use reflection to avoid having any dependendcy on ServiceLoader class ! Class serviceClass = Class.forName(factoryId); Class target = Class.forName("com.sun.org.glassfish.hk2.osgiresourcelocator.ServiceLoader"); Method m = target.getMethod("lookupProviderClasses", Class.class); ! Iterator iter = ((Iterable) m.invoke(null, serviceClass)).iterator(); return iter.hasNext() ? (Class)iter.next() : null; } catch(Exception e) { ! logger.log(Level.FINE, "Unable to find from OSGi: {0}", factoryId); return null; } } private static Properties loadJAXBProperties( ClassLoader classLoader, --- 432,478 ---- resourceURL = classLoader.getResource(resource); if (resourceURL != null) { logger.log(Level.FINE, "Reading {0}", resourceURL); r = new BufferedReader(new InputStreamReader(resourceURL.openStream(), "UTF-8")); ! factoryClassName = r.readLine(); ! if (factoryClassName != null) { ! factoryClassName = factoryClassName.trim(); ! } return newInstance(classes, properties, factoryClassName); } else { logger.log(Level.FINE, "Unable to find: {0}", resource); } } catch (UnsupportedEncodingException e) { // should never happen throw new JAXBException(e); } catch (IOException e) { throw new JAXBException(e); + } finally { + if (r != null) { + try { + r.close(); + } catch (IOException ex) { + logger.log(Level.FINE, "Unable to close stream", ex); + } + } } // else no provider found logger.fine("Trying to create the platform default provider"); return newInstance(classes, properties, PLATFORM_DEFAULT_FACTORY_CLASS); } ! private static Class lookupJaxbContextUsingOsgiServiceLoader() { try { ! // Use reflection to avoid having any dependency on ServiceLoader class Class target = Class.forName("com.sun.org.glassfish.hk2.osgiresourcelocator.ServiceLoader"); Method m = target.getMethod("lookupProviderClasses", Class.class); ! Iterator iter = ((Iterable) m.invoke(null, JAXBContext.class)).iterator(); return iter.hasNext() ? (Class)iter.next() : null; } catch(Exception e) { ! logger.log(Level.FINE, "Unable to find from OSGi: javax.xml.bind.JAXBContext"); return null; } } private static Properties loadJAXBProperties( ClassLoader classLoader,