/** * Helper method used to decide whether we can omit introspection * for members (methods, fields, constructors); we may do so for * a limited number of container types JDK provides. */ protected boolean _isStdJDKCollection(JavaType type) { if (!type.isContainerType() || type.isArrayType()) { return false; } Class<?> raw = type.getRawClass(); String pkgName = ClassUtil.getPackageName(raw); if (pkgName != null) { if (pkgName.startsWith("java.lang") || pkgName.startsWith("java.util")) { /* 23-Sep-2014, tatu: Should we be conservative here (minimal number * of matches), or ambitious? Let's do latter for now. */ if (Collection.class.isAssignableFrom(raw) || Map.class.isAssignableFrom(raw)) { return true; } } } return false; }
public static boolean isSystemType(JavaType type) { // used while resolving container types to skip resolving system types; possibly extend by checking classloader // and/or other packages for (String systemPrefix: PrimitiveType.systemPrefixes()) { if (type.getRawClass().getName().startsWith(systemPrefix)) { if ( !PrimitiveType.nonSystemTypes().contains(type.getRawClass().getName()) && !PrimitiveType.nonSystemTypePackages().contains(type.getRawClass().getPackage().getName())) { return true; } } } if (type.isArrayType()) { return true; } return false; } }
public boolean useForType(JavaType t) { switch (_appliesFor) { case NON_CONCRETE_AND_ARRAYS: while (t.isArrayType()) { t = t.getContentType(); } // fall through case OBJECT_AND_NON_CONCRETE: return (t.getRawClass() == Object.class) || !t.isConcrete(); case NON_FINAL: while (t.isArrayType()) { t = t.getContentType(); } // to fix problem with wrong long to int conversion if (t.getRawClass() == Long.class) { return true; } if (t.getRawClass() == XMLGregorianCalendar.class) { return false; } return !t.isFinal(); // includes Object.class default: // case JAVA_LANG_OBJECT: return (t.getRawClass() == Object.class); } } };
public static AnnotatedClass resolve(MapperConfig<?> config, JavaType forType, MixInResolver r) { if (forType.isArrayType() && skippableArray(config, forType.getRawClass())) { return createArrayType(config, forType.getRawClass()); } return new AnnotatedClassResolver(config, forType, r).resolveFully(); }
public boolean useForType(JavaType t) { switch (_appliesFor) { case NON_CONCRETE_AND_ARRAYS: while (t.isArrayType()) { t = t.getContentType(); } // fall through case OBJECT_AND_NON_CONCRETE: return (t.getRawClass() == Object.class) || !t.isConcrete(); case NON_FINAL: while (t.isArrayType()) { t = t.getContentType(); } // to fix problem with wrong long to int conversion if (t.getRawClass() == Long.class) { return true; } if (t.getRawClass() == XMLGregorianCalendar.class) { return false; } return !t.isFinal(); // includes Object.class default: // case JAVA_LANG_OBJECT: return (t.getRawClass() == Object.class); } } };
public static AnnotatedClass resolveWithoutSuperTypes(MapperConfig<?> config, JavaType forType, MixInResolver r) { if (forType.isArrayType() && skippableArray(config, forType.getRawClass())) { return createArrayType(config, forType.getRawClass()); } return new AnnotatedClassResolver(config, forType, r).resolveWithoutSuperTypes(); }
while (t.isArrayType()) { t = t.getContentType(); while (t.isArrayType()) { t = t.getContentType();
protected String _findTypeName(JavaType type, BeanDescription beanDesc) { // First, handle container types; they require recursion if (type.isArrayType()) { return "Array"; } if (type.isMapLikeType() && ReflectionUtils.isSystemType(type)) { return "Map"; } if (type.isContainerType() && ReflectionUtils.isSystemType(type)) { if (Set.class.isAssignableFrom(type.getRawClass())) { return "Set"; } return "List"; } if (beanDesc == null) { beanDesc = _mapper.getSerializationConfig().introspectClassAnnotations(type); } PropertyName rootName = _intr.findRootName(beanDesc.getClassInfo()); if (rootName != null && rootName.hasSimpleName()) { return rootName.getSimpleName(); } return _typeNameResolver.nameForType(type); }
if (type.isArrayType()) { return factory.createArrayDeserializer(ctxt, (ArrayType) type, beanDesc);
if (type.isArrayType()) { return buildArraySerializer(prov, (ArrayType) type, beanDesc, staticTyping, elementTypeSerializer, elementValueSerializer);
public static <T> T constructEnumArrayClass(JavaType javaType) { if (javaType.isArrayType()) { return ReflectUtils.constructArrayType(javaType.getContentType().getRawClass()); } return ReflectUtils.constructArrayType(Object.class); } }
@Override @SuppressWarnings({ "unchecked" }) protected JavaType extractJavaType(Map<String, Object> javaTypes) throws Exception { JavaType classType = this.createJavaType(javaTypes, JsonHeaders.TYPE_ID); if (!classType.isContainerType() || classType.isArrayType()) { return classType; } JavaType contentClassType = this.createJavaType(javaTypes, JsonHeaders.CONTENT_TYPE_ID); if (classType.getKeyType() == null) { return this.objectMapper.getTypeFactory() .constructCollectionType((Class<? extends Collection<?>>) classType.getRawClass(), contentClassType); } JavaType keyClassType = this.createJavaType(javaTypes, JsonHeaders.KEY_TYPE_ID); return this.objectMapper.getTypeFactory() .constructMapType((Class<? extends Map<?, ?>>) classType.getRawClass(), keyClassType, contentClassType); }
@Override public JavaType toJavaType(Headers headers) { String typeIdHeader = retrieveHeaderAsString(headers, getClassIdFieldName()); if (typeIdHeader != null) { JavaType classType = getClassIdType(typeIdHeader); if (!classType.isContainerType() || classType.isArrayType()) { return classType; } JavaType contentClassType = getClassIdType(retrieveHeader(headers, getContentClassIdFieldName())); if (classType.getKeyType() == null) { return TypeFactory.defaultInstance() .constructCollectionLikeType(classType.getRawClass(), contentClassType); } JavaType keyClassType = getClassIdType(retrieveHeader(headers, getKeyClassIdFieldName())); return TypeFactory.defaultInstance() .constructMapLikeType(classType.getRawClass(), keyClassType, contentClassType); } return null; }
@Override public void fromJavaType(JavaType javaType, Headers headers) { addHeader(headers, getClassIdFieldName(), javaType.getRawClass()); if (javaType.isContainerType() && !javaType.isArrayType()) { addHeader(headers, getContentClassIdFieldName(), javaType.getContentType().getRawClass()); } if (javaType.getKeyType() != null) { addHeader(headers, getKeyClassIdFieldName(), javaType.getKeyType().getRawClass()); } }
StreamSpliterator(final JavaType type, final JsonParser parser) { this.type = type; this.parser = parser; this.isNotStreamOfArrays = !type.isArrayType() && !type.isCollectionLikeType(); }
StreamSpliterator(final JavaType type, final JsonParser parser) { this.type = type; this.parser = parser; this.isNotStreamOfArrays = !type.isArrayType() && !type.isCollectionLikeType(); }
/** * Returns true if no type info should be written for this base type. * * @param baseType Base type. * @return True to suppress writing of type information. */ private boolean noTypeInfo(JavaType baseType) { return baseType.isPrimitive() || baseType.isArrayType() || baseType.isCollectionLikeType() || Date.class.isAssignableFrom(baseType.getRawClass()); } }
public static AnnotatedClass resolveWithoutSuperTypes(MapperConfig<?> config, JavaType forType, MixInResolver r) { if (forType.isArrayType() && skippableArray(config, forType.getRawClass())) { return createArrayType(config, forType.getRawClass()); } return new AnnotatedClassResolver(config, forType, r).resolveWithoutSuperTypes(); }
public static AnnotatedClass resolve(MapperConfig<?> config, JavaType forType, MixInResolver r) { if (forType.isArrayType() && skippableArray(config, forType.getRawClass())) { return createArrayType(config, forType.getRawClass()); } return new AnnotatedClassResolver(config, forType, r).resolveFully(); }
@Override public void fromJavaType(JavaType javaType, MessageProperties properties) { addHeader(properties, getClassIdFieldName(), javaType.getRawClass()); if (javaType.isContainerType() && !javaType.isArrayType()) { addHeader(properties, getContentClassIdFieldName(), javaType.getContentType().getRawClass()); } if (javaType.getKeyType() != null) { addHeader(properties, getKeyClassIdFieldName(), javaType.getKeyType().getRawClass()); } }