private static Class<?> safeLoadClass(String className, String defaultImplClassName, ClassLoader classLoader) throws ClassNotFoundException { try { checkPackageAccess(className); } catch (SecurityException se) { if (defaultImplClassName != null && defaultImplClassName.equals(className)) { return Class.forName(className); } throw se; } return nullSafeLoadClass(className, classLoader); }
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 newInstance(String className, String defaultImplClassName, ClassLoader classLoader) throws WebServiceException { try { return safeLoadClass(className, defaultImplClassName, classLoader).getConstructor().newInstance(); } catch (ClassNotFoundException x) { throw new WebServiceException("Provider " + className + " not found", x); } catch (Exception x) { throw new WebServiceException("Provider " + className + " could not be instantiated: " + x, x); } }
@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); }
public static Provider provider() { try { return $FactoryFinder.find(Provider.class, DEFAULT_JAXWSPROVIDER); } catch (WebServiceException ex) { throw ex; } catch (Exception ex) { throw new WebServiceException("Unable to createEndpointReference Provider", ex); } }
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; }