private JavaType[] toJavaTypeArray(TypeFactory typeFactory, Map<String, Argument<?>> typeVariables) { List<JavaType> javaTypes = new ArrayList<>(); for (Argument<?> argument : typeVariables.values()) { if (argument.hasTypeVariables()) { javaTypes.add(typeFactory.constructParametricType(argument.getType(), toJavaTypeArray(typeFactory, argument.getTypeVariables()))); } else { javaTypes.add(typeFactory.constructType(argument.getType())); } } return javaTypes.toArray(new JavaType[javaTypes.size()]); } }
@SuppressWarnings("Duplicates") @Override public <T> T decode(Argument<T> type, InputStream inputStream) throws CodecException { try { if (type.hasTypeVariables()) { JavaType javaType = constructJavaType(type); return objectMapper.readValue(inputStream, javaType); } else { return objectMapper.readValue(inputStream, type.getType()); } } catch (IOException e) { throw new CodecException("Error decoding JSON stream for type [" + type.getName() + "]: " + e.getMessage()); } }
@SuppressWarnings("Duplicates") @Override public <T> T decode(Argument<T> type, String data) throws CodecException { try { if (type.hasTypeVariables()) { JavaType javaType = constructJavaType(type); return objectMapper.readValue(data, javaType); } else { return objectMapper.readValue(data, type.getType()); } } catch (IOException e) { throw new CodecException("Error decoding JSON stream for type [" + type.getName() + "]: " + e.getMessage()); } }
@Override public <T> T decode(Argument<T> type, ByteBuffer<?> buffer) throws CodecException { try { if (CharSequence.class.isAssignableFrom(type.getType())) { return (T) buffer.toString(applicationConfiguration.getDefaultCharset()); } else if (type.hasTypeVariables()) { JavaType javaType = constructJavaType(type); return objectMapper.readValue(buffer.toByteArray(), javaType); } else { return objectMapper.readValue(buffer.toByteArray(), type.getType()); } } catch (IOException e) { throw new CodecException("Error decoding JSON stream for type [" + type.getType() + "]: " + e.getMessage()); } }