/** * Like {@link #loadInstanceOf(String, Class, Class[], Object[])} for no-arg constructors. * * @param implClassName implementation class name * @param superClass superclass or interface that the implementation extends * @param <T> type of returned instance * @return instance of {@code implClassName} */ public static <T> T loadInstanceOf(String implClassName, Class<T> superClass) { return loadInstanceOf(implClassName, superClass, NO_TYPES, NO_ARGS); }
/** * Like {@link #loadInstanceOf(String, Class)} where the reference returned is of the same type as * the class being loaded -- not any supertype. * * @param clazz {@link Class} to make an instance of * @param <T> type of returned instance * @return instance of {@code clazz} */ public static <T> T loadInstanceOf(Class<T> clazz) { return loadInstanceOf(clazz.getName(), clazz); }
@SuppressWarnings("unchecked") private ServingModelManager<U> loadManagerInstance() { Class<?> managerClass = ClassUtils.loadClass(modelManagerClassName); if (ServingModelManager.class.isAssignableFrom(managerClass)) { try { return ClassUtils.loadInstanceOf( modelManagerClassName, ServingModelManager.class, new Class<?>[] { Config.class }, new Object[] { config }); } catch (IllegalArgumentException iae) { return ClassUtils.loadInstanceOf(modelManagerClassName, ServingModelManager.class); } } else if (ScalaServingModelManager.class.isAssignableFrom(managerClass)) { try { return new ScalaServingModelManagerAdapter<>(ClassUtils.loadInstanceOf( modelManagerClassName, ScalaServingModelManager.class, new Class<?>[] { Config.class }, new Object[] { config })); } catch (IllegalArgumentException iae) { return new ScalaServingModelManagerAdapter<>(ClassUtils.loadInstanceOf( modelManagerClassName, ScalaServingModelManager.class)); } } else { throw new IllegalArgumentException("Bad manager class: " + managerClass); } }
@SuppressWarnings("unchecked") private BatchLayerUpdate<K,M,U> loadUpdateInstance() { Class<?> updateClass = ClassUtils.loadClass(updateClassName); if (BatchLayerUpdate.class.isAssignableFrom(updateClass)) { try { return ClassUtils.loadInstanceOf( updateClassName, BatchLayerUpdate.class, new Class<?>[] { Config.class }, new Object[] { getConfig() }); } catch (IllegalArgumentException iae) { return ClassUtils.loadInstanceOf(updateClassName, BatchLayerUpdate.class); } } else if (ScalaBatchLayerUpdate.class.isAssignableFrom(updateClass)) { try { return new ScalaBatchLayerUpdateAdapter<>(ClassUtils.loadInstanceOf( updateClassName, ScalaBatchLayerUpdate.class, new Class<?>[] { Config.class }, new Object[] { getConfig() })); } catch (IllegalArgumentException iae) { return new ScalaBatchLayerUpdateAdapter<>(ClassUtils.loadInstanceOf( updateClassName, ScalaBatchLayerUpdate.class)); } } else { throw new IllegalArgumentException("Bad update class: " + updateClassName); } }
@SuppressWarnings("unchecked") private SpeedModelManager<K,M,U> loadManagerInstance() { Class<?> managerClass = ClassUtils.loadClass(modelManagerClassName); if (SpeedModelManager.class.isAssignableFrom(managerClass)) { try { return ClassUtils.loadInstanceOf( modelManagerClassName, SpeedModelManager.class, new Class<?>[] { Config.class }, new Object[] { getConfig() }); } catch (IllegalArgumentException iae) { return ClassUtils.loadInstanceOf(modelManagerClassName, SpeedModelManager.class); } } else if (ScalaSpeedModelManager.class.isAssignableFrom(managerClass)) { try { return new ScalaSpeedModelManagerAdapter<>(ClassUtils.loadInstanceOf( modelManagerClassName, ScalaSpeedModelManager.class, new Class<?>[] { Config.class }, new Object[] { getConfig() })); } catch (IllegalArgumentException iae) { return new ScalaSpeedModelManagerAdapter<>(ClassUtils.loadInstanceOf( modelManagerClassName, ScalaSpeedModelManager.class)); } } else { throw new IllegalArgumentException("Bad manager class: " + managerClass); } }
@Test(expected = IllegalStateException.class) public void tesInvocationException() { ClassUtils.loadInstanceOf(String.class.getName(), String.class, new Class<?>[] { char[].class }, new Object[] { null }); }
@Test(expected = IllegalArgumentException.class) public void testNoSuchMethod() { ClassUtils.loadInstanceOf(Long.class.getName(), Long.class); }
protected static byte[] compress( String data, Class<? extends OutputStream> compressingClass) { ByteArrayOutputStream bytes = new ByteArrayOutputStream(); try (OutputStream compressingStream = ClassUtils.loadInstanceOf(compressingClass.getName(), compressingClass, new Class<?>[]{OutputStream.class}, new Object[]{bytes})) { if (compressingStream instanceof ZipOutputStream) { ((ZipOutputStream) compressingStream).putNextEntry(new ZipEntry("data")); } compressingStream.write(data.getBytes(StandardCharsets.UTF_8)); if (compressingStream instanceof ZipOutputStream) { ((ZipOutputStream) compressingStream).closeEntry(); } compressingStream.flush(); } catch (IOException e) { // Can't happen throw new IllegalStateException(e); } return bytes.toByteArray(); }
@Test public void testInstantiateWithArgs() { Number n = ClassUtils.loadInstanceOf(Integer.class.getName(), Number.class, new Class<?>[]{int.class}, new Object[]{3}); assertEquals(3, n.intValue()); }
@Test public void testLoadInstanceOf2() { assertInstanceOf(ClassUtils.loadInstanceOf(HashSet.class.getName(), Set.class), HashSet.class); }
private void doTestCompressedResponse( String encoding, Class<? extends InputStream> decompressingStreamClass) throws IOException { byte[] bytes = target("/item/allIDs").request().acceptEncoding(encoding).get(byte[].class); String content; try (Reader reader = new InputStreamReader( ClassUtils.loadInstanceOf(decompressingStreamClass.getName(), decompressingStreamClass, new Class<?>[] { InputStream.class }, new Object[] { new ByteArrayInputStream(bytes) }), StandardCharsets.UTF_8)) { content = CharStreams.toString(reader); } String expected = target("/item/allIDs").request().get(String.class); Assert.assertEquals(expected, content); }
@Test public void testLoadInstanceOf() { assertInstanceOf(ClassUtils.loadInstanceOf(HashSet.class), HashSet.class); }
/** * Like {@link #loadInstanceOf(String, Class, Class[], Object[])} for no-arg constructors. * * @param implClassName implementation class name * @param superClass superclass or interface that the implementation extends * @param <T> type of returned instance * @return instance of {@code implClassName} */ public static <T> T loadInstanceOf(String implClassName, Class<T> superClass) { return loadInstanceOf(implClassName, superClass, NO_TYPES, NO_ARGS); }
/** * Like {@link #loadInstanceOf(String, Class)} where the reference returned is of the same type as * the class being loaded -- not any supertype. * * @param clazz {@link Class} to make an instance of * @param <T> type of returned instance * @return instance of {@code clazz} */ public static <T> T loadInstanceOf(Class<T> clazz) { return loadInstanceOf(clazz.getName(), clazz); }
@SuppressWarnings("unchecked") private SpeedModelManager<K,M,U> loadManagerInstance() { Class<?> managerClass = ClassUtils.loadClass(modelManagerClassName); if (SpeedModelManager.class.isAssignableFrom(managerClass)) { try { return ClassUtils.loadInstanceOf( modelManagerClassName, SpeedModelManager.class, new Class<?>[] { Config.class }, new Object[] { getConfig() }); } catch (IllegalArgumentException iae) { return ClassUtils.loadInstanceOf(modelManagerClassName, SpeedModelManager.class); } } else if (ScalaSpeedModelManager.class.isAssignableFrom(managerClass)) { try { return new ScalaSpeedModelManagerAdapter<>(ClassUtils.loadInstanceOf( modelManagerClassName, ScalaSpeedModelManager.class, new Class<?>[] { Config.class }, new Object[] { getConfig() })); } catch (IllegalArgumentException iae) { return new ScalaSpeedModelManagerAdapter<>(ClassUtils.loadInstanceOf( modelManagerClassName, ScalaSpeedModelManager.class)); } } else { throw new IllegalArgumentException("Bad manager class: " + managerClass); } }
@SuppressWarnings("unchecked") private BatchLayerUpdate<K,M,U> loadUpdateInstance() { Class<?> updateClass = ClassUtils.loadClass(updateClassName); if (BatchLayerUpdate.class.isAssignableFrom(updateClass)) { try { return ClassUtils.loadInstanceOf( updateClassName, BatchLayerUpdate.class, new Class<?>[] { Config.class }, new Object[] { getConfig() }); } catch (IllegalArgumentException iae) { return ClassUtils.loadInstanceOf(updateClassName, BatchLayerUpdate.class); } } else if (ScalaBatchLayerUpdate.class.isAssignableFrom(updateClass)) { try { return new ScalaBatchLayerUpdateAdapter<>(ClassUtils.loadInstanceOf( updateClassName, ScalaBatchLayerUpdate.class, new Class<?>[] { Config.class }, new Object[] { getConfig() })); } catch (IllegalArgumentException iae) { return new ScalaBatchLayerUpdateAdapter<>(ClassUtils.loadInstanceOf( updateClassName, ScalaBatchLayerUpdate.class)); } } else { throw new IllegalArgumentException("Bad update class: " + updateClassName); } }