@SuppressWarnings("unchecked") protected Class<T> getType(Entity entity, String className) { try { // TODO use OSGi loader (low priority however); also ensure that allows primitives Maybe<Class<?>> primitive = Boxing.getPrimitiveType(className); if (primitive.isPresent()) return (Class<T>) primitive.get(); return (Class<T>) new ClassLoaderUtils(this, entity).loadClass(className); } catch (ClassNotFoundException e) { if (!className.contains(".")) { // could be assuming "java.lang" package; try again with that try { return (Class<T>) Class.forName("java.lang."+className); } catch (ClassNotFoundException e2) { throw new IllegalArgumentException("Invalid target type for sensor "+name+": " + className+" (also tried java.lang."+className+")"); } } else { throw new IllegalArgumentException("Invalid target type for sensor "+name+": " + className); } } }
@Test public static void testIntPrimitiveAndBoxed() { Assert.assertEquals(Integer.TYPE.getName(), "int"); Class<?> t = Boxing.getPrimitiveType("int").get(); Assert.assertEquals(t, Integer.TYPE); Class<?> bt = Boxing.boxedType(t); Assert.assertEquals(bt, Integer.class); }
@Override public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) { String clazzName = reader.getAttribute("class"); Class<?> clazz; if (clazzName == null) { clazz = defaultImpl; } else if (clazzName.equals("string")) { clazz = String.class; } else if (Boxing.getPrimitiveType(clazzName).isPresent()) { clazz = Boxing.getPrimitiveType(clazzName).get(); } else { try { clazz = loader.getReference().loadClass(clazzName); } catch (ClassNotFoundException e) { throw Exceptions.propagate(e); } } Converter converter = lookup.lookupConverterForType(clazz); return converter.unmarshal(reader, context); } }