private static Object fromJDKProperties(String factoryId, String fallbackClassName, ClassLoader classLoader) { Path path = null; try { String JAVA_HOME = System.getProperty("java.home"); path = Paths.get(JAVA_HOME, "conf", "jaxws.properties"); if (!Files.exists(path)) { path = Paths.get(JAVA_HOME, "lib", "jaxws.properties"); } if (Files.exists(path)) { Properties props = new Properties(); try (InputStream inStream = Files.newInputStream(path)) { props.load(inStream); } String factoryClassName = props.getProperty(factoryId); return newInstance(factoryClassName, fallbackClassName, classLoader); } } catch (Exception ignored) { LOGGER.log(Level.SEVERE, "Error reading JAX-WS configuration from [" + path + "] file. Check it is accessible and has correct format.", ignored); } return null; }
private static Object fromSystemProperty(String factoryId, String fallbackClassName, ClassLoader classLoader) { try { String systemProp = System.getProperty(factoryId); if (systemProp != null) { return newInstance(systemProp, fallbackClassName, classLoader); } } catch (SecurityException ignored) { } return null; }
@SuppressWarnings("unchecked") static <T> T find(Class<T> factoryClass, String fallbackClassName) { ClassLoader classLoader = contextClassLoader(); T provider = firstByServiceLoader(factoryClass); if (provider != null) { return provider; } String factoryId = factoryClass.getName(); provider = (T) fromJDKProperties(factoryId, fallbackClassName, classLoader); if (provider != null) { return provider; } provider = (T) fromSystemProperty(factoryId, fallbackClassName, classLoader); if (provider != null) { return provider; } try { Class<T> spiClass = org.apache.karaf.specs.locator.OsgiLocator.locate(factoryClass); if (spiClass != null) { return spiClass.getConstructor().newInstance(); } } catch (Throwable t) { } if (fallbackClassName == null) { throw new WebServiceException("Provider for " + factoryId + " cannot be found", null); } return (T) newInstance(fallbackClassName, fallbackClassName, classLoader); }