public Type createTypeForClass(TypeClassInfo info) { Class javaType = info.getTypeClass(); Type result = null; boolean newType = true; if (info.getType() != null) { result = createUserType(info); } else if (isHolder(javaType)) { result = createHolderType(info); } else if (isArray(javaType)) { result = createArrayType(info); } else if (isMap(javaType)) { result = createMapType(info); } else if (isCollection(javaType)) { result = createCollectionType(info); } else if (isEnum(javaType)) { result = createEnumType(info); } else { Type type = getTypeMapping().getType(javaType); if (type == null) { type = createDefaultType(info); } else { newType = false; } result = type; } if (newType && !getConfiguration().isDefaultNillable()) result.setNillable(false); return result; }
protected Type createMapType(TypeClassInfo info, Type keyType, Type valueType) { QName schemaType = createMapQName(info, keyType, valueType); MapType type = new MapType(schemaType, keyType, valueType); type.setTypeMapping(getTypeMapping()); type.setTypeClass(info.getTypeClass()); return type; }
protected Type createUserType(TypeClassInfo info) { try { Type type = (Type) info.getType().newInstance(); QName name = info.getTypeName(); if (name == null) name = createQName(info.getTypeClass()); type.setSchemaType(name); type.setTypeClass(info.getTypeClass()); type.setTypeMapping(getTypeMapping()); return type; } catch (InstantiationException e) { throw new XFireRuntimeException( "Couldn't instantiate type classs " + info.getType().getName(), e); } catch (IllegalAccessException e) { throw new XFireRuntimeException("Couldn't access type classs " + info.getType().getName(), e); } }
protected Type createArrayType(TypeClassInfo info) { ArrayType type = new ArrayType(); type.setTypeMapping(getTypeMapping()); type.setTypeClass(info.getTypeClass()); type.setSchemaType(createCollectionQName(info, type.getComponentType())); if (info.getMinOccurs() != -1) type.setMinOccurs(info.getMinOccurs()); if (info.getMaxOccurs() != -1) type.setMaxOccurs(info.getMaxOccurs()); type.setFlat(info.isFlat()); return type; }
protected Type createCollectionTypeFromGeneric(TypeClassInfo info) { Type component = getOrCreateGenericType(info); CollectionType type = new CollectionType(component); type.setTypeMapping(getTypeMapping()); QName name = info.getTypeName(); if (name == null) name = createCollectionQName(info, component); type.setSchemaType(name); type.setTypeClass(info.getTypeClass()); if (info.getMinOccurs() != -1) type.setMinOccurs(info.getMinOccurs()); if (info.getMaxOccurs() != -1) type.setMaxOccurs(info.getMaxOccurs()); type.setFlat(info.isFlat()); return type; }