List of usage examples for com.google.gson.reflect TypeToken get
public static <T> TypeToken<T> get(Class<T> type)
From source file:org.mule.runtime.extension.internal.persistence.RestrictiveTypeAdapterFactory.java
License:Open Source License
/** * @param gson The actual Gson serializer * @param type Implementation that GSON is trying to find a {@link TypeAdapter} * @param <T> type of objects that the {@link TypeAdapter} will create * @return if {@param type} is a {@link #clazz} a {@link TypeAdapter}, that serializes and deserialize * {@link T} instances//from ww w . j a v a2 s . c o m */ @Override public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> type) { if (clazz.equals(type.getRawType())) { return gson.getDelegateAdapter(this, TypeToken.get((Class<T>) implementationClazz)); } return null; }
From source file:org.springframework.cloud.iot.coap.converter.GsonCoapMessageConverter.java
License:Apache License
protected TypeToken<?> getTypeToken(Type type) { return TypeToken.get(type); }
From source file:org.syphr.lametrictime.api.common.impl.typeadapters.imported.RuntimeTypeAdapterFactory.java
License:Apache License
public <R> TypeAdapter<R> create(Gson gson, TypeToken<R> type) { if (type.getRawType() != baseType) { return null; }//from w w w .j a va2 s .c om final Map<String, TypeAdapter<?>> labelToDelegate = new LinkedHashMap<String, TypeAdapter<?>>(); final Map<Class<?>, TypeAdapter<?>> subtypeToDelegate = new LinkedHashMap<Class<?>, TypeAdapter<?>>(); for (Map.Entry<String, Class<?>> entry : labelToSubtype.entrySet()) { TypeAdapter<?> delegate = gson.getDelegateAdapter(this, TypeToken.get(entry.getValue())); labelToDelegate.put(entry.getKey(), delegate); subtypeToDelegate.put(entry.getValue(), delegate); } return new TypeAdapter<R>() { @Override public R read(JsonReader in) throws IOException { JsonElement jsonElement = RuntimeTypeAdapterFactory.parse(in); JsonElement labelJsonElement = jsonElement.getAsJsonObject().remove(typeFieldName); if (labelJsonElement == null) { throw new JsonParseException("cannot deserialize " + baseType + " because it does not define a field named " + typeFieldName); } String label = labelJsonElement.getAsString(); @SuppressWarnings("unchecked") // registration requires that subtype extends T TypeAdapter<R> delegate = (TypeAdapter<R>) labelToDelegate.get(label); if (delegate == null) { throw new JsonParseException("cannot deserialize " + baseType + " subtype named " + label + "; did you forget to register a subtype?"); } return delegate.fromJsonTree(jsonElement); } @Override public void write(JsonWriter out, R value) throws IOException { Class<?> srcType = value.getClass(); String label = subtypeToLabel.get(srcType); @SuppressWarnings("unchecked") // registration requires that subtype extends T TypeAdapter<R> delegate = (TypeAdapter<R>) subtypeToDelegate.get(srcType); if (delegate == null) { throw new JsonParseException( "cannot serialize " + srcType.getName() + "; did you forget to register a subtype?"); } JsonObject jsonObject = delegate.toJsonTree(value).getAsJsonObject(); if (jsonObject.has(typeFieldName)) { throw new JsonParseException("cannot serialize " + srcType.getName() + " because it already defines a field named " + typeFieldName); } JsonObject clone = new JsonObject(); clone.add(typeFieldName, new JsonPrimitive(label)); for (Map.Entry<String, JsonElement> e : jsonObject.entrySet()) { clone.add(e.getKey(), e.getValue()); } RuntimeTypeAdapterFactory.write(clone, out); } }.nullSafe(); }
From source file:org.terasology.persistence.typeHandling.gson.PolymorphicTypeAdapterFactory.java
License:Apache License
@Override public <R> TypeAdapter<R> create(Gson gson, TypeToken<R> type) { if (!baseClass.isAssignableFrom(type.getRawType())) { return null; }/*w w w.j av a 2 s . co m*/ return new TypeAdapter<R>() { @SuppressWarnings("unchecked") @Override public void write(JsonWriter out, R value) throws IOException { Class<?> valueClass = value.getClass(); String valueTypeName = valueClass.getName(); TypeToken<?> valueType = TypeToken.get(valueClass); TypeAdapter<R> delegate = (TypeAdapter<R>) gson .getDelegateAdapter(PolymorphicTypeAdapterFactory.this, valueType); if (delegate == null) { throw new JsonParseException("Could not serialize " + valueClass.getName()); } JsonElement jsonElement = delegate.toJsonTree(value); if (valueClass != baseClass) { JsonObject jsonObject = jsonElement.getAsJsonObject(); JsonObject clone = new JsonObject(); clone.add(TYPE_FIELD_NAME, new JsonPrimitive(valueTypeName)); for (Map.Entry<String, JsonElement> e : jsonObject.entrySet()) { clone.add(e.getKey(), e.getValue()); } Streams.write(clone, out); } else { Streams.write(jsonElement, out); } } @SuppressWarnings("unchecked") @Override public R read(JsonReader in) throws IOException { JsonElement jsonElement = Streams.parse(in); Class<?> valueClass; if (jsonElement.isJsonObject()) { JsonElement typeNameJsonElement = jsonElement.getAsJsonObject().remove(TYPE_FIELD_NAME); if (typeNameJsonElement != null) { String typeName = typeNameJsonElement.getAsString(); try { valueClass = Class.forName(typeName); } catch (ClassNotFoundException e) { throw new JsonParseException("Could not find class " + typeName); } } else { valueClass = baseClass; } } else { valueClass = baseClass; } if (!baseClass.isAssignableFrom(valueClass)) { throw new JsonParseException( valueClass.getName() + " does not derive from " + baseClass.getName()); } TypeToken<?> valueType = TypeToken.get(valueClass); TypeAdapter<R> delegate = (TypeAdapter<R>) gson .getDelegateAdapter(PolymorphicTypeAdapterFactory.this, valueType); if (delegate == null) { throw new JsonParseException("Could not deserialize " + valueClass.getName()); } return delegate.fromJsonTree(jsonElement); } }; }
From source file:org.vaadin.spring.samples.mvp.util.JSONUtil.java
License:Apache License
@SuppressWarnings("unchecked") public static <T> T restoreFromJson(final String resourcePath, final Class<T> clazz) { return postSerialize((T) restoreFromJson(resourcePath, TypeToken.get(clazz).getType())); }
From source file:org.wso2.msf4j.internal.router.ParamConvertUtils.java
License:Open Source License
/** * Common helper method to convert value for {@link javax.ws.rs.HeaderParam} and {@link javax.ws.rs.QueryParam}. * * @param resultType Result type//from ww w .j av a 2s . co m * @return Function the function * @see #createHeaderParamConverter(Type) * @see #createQueryParamConverter(Type) */ private static Function<List<String>, Object> createListConverter(Type resultType) { TypeToken<?> typeToken = TypeToken.get(resultType); // Use boxed type if raw type is primitive type. Otherwise the type won't change. Class<?> resultClass = typeToken.getRawType(); // For string, just return the first value if (resultClass == String.class) { return new BasicConverter(Defaults.defaultValue(resultClass)) { @Override protected Object convert(String value) throws Exception { return value; } }; } // Creates converter based on the type // Primitive Function<List<String>, Object> converter = createPrimitiveTypeConverter(resultClass); if (converter != null) { return converter; } // String constructor converter = createStringConstructorConverter(resultClass); if (converter != null) { return converter; } // Static string argument methods converter = createStringMethodConverter(resultClass); if (converter != null) { return converter; } // Collection converter = createCollectionConverter(typeToken); if (converter != null) { return converter; } throw new IllegalArgumentException("Unsupported type " + typeToken); }
From source file:org.wso2.msf4j.internal.router.ParamConvertUtils.java
License:Open Source License
/** * Creates a converter function that converts value into a {@link List}, {@link Set} or {@link SortedSet}. * * @param resultType Result type//from www. j a v a 2 s . c o m * @return A converter function or {@code null} if the given type is not a {@link ParameterizedType} with raw type * as {@link List}, {@link Set} or {@link SortedSet}. Also, for {@link SortedSet} type, if the element type * doesn't implements {@link Comparable}, {@code null} is returned. */ @SuppressWarnings("unchecked") private static Function<List<String>, Object> createCollectionConverter(TypeToken<?> resultType) { final Class<?> rawType = resultType.getRawType(); // Collection. It must be List or Set if (rawType != List.class && rawType != Set.class && rawType != SortedSet.class) { return null; } // Must be ParameterizedType if (!(resultType.getType() instanceof ParameterizedType)) { return null; } // Must have 1 type parameter ParameterizedType type = (ParameterizedType) resultType.getType(); if (type.getActualTypeArguments().length != 1) { return null; } // For SortedSet, the entry type must be Comparable. Type elementType = type.getActualTypeArguments()[0]; if (rawType == SortedSet.class && !Comparable.class.isAssignableFrom(TypeToken.get(elementType).getRawType())) { return null; } //We only support List type for java.io.File if (elementType == File.class && rawType != List.class) { throw new IllegalArgumentException("File doesn't support " + rawType); } // Get the converter for the collection element. final Function<List<String>, Object> elementConverter = createQueryParamConverter(elementType); return new Function<List<String>, Object>() { @Override public Object apply(List<String> values) { Collection<? extends Comparable> collection; if (rawType == List.class) { collection = new ArrayList<>(); } else if (rawType == Set.class) { collection = new HashSet<>(); } else { collection = new TreeSet<>(); } if (values != null) { for (String value : values) { add(collection, elementConverter.apply(Collections.singletonList(value))); } } return collection; } @SuppressWarnings("unchecked") private <T> void add(Collection<T> collection, Object element) { collection.add((T) element); } }; }
From source file:retrofit.KGsonConverterFactory.java
License:Apache License
/** Create a converter for {@code type}. */ @Override/* w w w . j a v a2s. c o m*/ public Converter<?> get(Type type) { TypeAdapter<?> adapter = gson.getAdapter(TypeToken.get(type)); return new KGsonConverter<>(adapter, cache); }
From source file:retrofit2_source.converter.gson.GsonConverterFactory.java
License:Apache License
@Override public retrofit2_source.Converter<ResponseBody, ?> responseBodyConverter(Type type, Annotation[] annotations, retrofit2_source.Retrofit retrofit) { TypeAdapter<?> adapter = gson.getAdapter(TypeToken.get(type)); return new GsonResponseBodyConverter<>(gson, adapter); }
From source file:retrofit2_source.converter.gson.GsonConverterFactory.java
License:Apache License
@Override public retrofit2_source.Converter<?, RequestBody> requestBodyConverter(Type type, Annotation[] parameterAnnotations, Annotation[] methodAnnotations, retrofit2_source.Retrofit retrofit) { TypeAdapter<?> adapter = gson.getAdapter(TypeToken.get(type)); return new retrofit2_source.converter.gson.GsonRequestBodyConverter<>(gson, adapter); }