public static TypeInfo createRoot(String name, Class<?> clz) { // root is always a composite type // FIXME assert its a JAXB type XmlRootElement root = clz.getAnnotation(XmlRootElement.class); if (root == null) { throw new IllegalArgumentException("Not a JAXB type: " + clz); } if (name == null) { name = getRootName(clz); } return new TypeInfo(name, clz, null); }
@Override public synchronized void explore() { if (_explored) { return; } if (LOGGER.isDebugEnabled()) { LOGGER.debug("exploring iteratable type: {} gtype: {}", _class, _accessor.getGenericType()); } Type t = _accessor.getGenericType(); if (t instanceof ParameterizedType) { Type[] pt = ((ParameterizedType) t).getActualTypeArguments(); // First type is a child, ignore rest if (pt.length > 0) { _types.put(_name, new TypeInfo(_name, (Class)pt[0], null)); } } _explored = true; }
TypeInfo subTypeInfo = new TypeInfo(getRootName(target.getClass()), target.getClass(), _accessor); return subTypeInfo.retrieve(target, query, index);
public static TypeInfo createTypeInfo(String name, Accessor accessor) { if (accessor.getAccessibleObject().getAnnotation(XmlElementWrapper.class) != null) { //XmlElementWrapperType return new WrapperTypeInfo(name, accessor); } else if (Collection.class.isAssignableFrom(accessor.getType())) { // collection type return new IteratableTypeInfo(name, accessor); } return new TypeInfo(name, accessor.getType(), accessor); }