@Override public boolean canRead(Type type, @Nullable Class<?> contextClass, @Nullable MediaType mediaType) { if (!canRead(mediaType)) { return false; } JavaType javaType = getJavaType(type, contextClass); AtomicReference<Throwable> causeRef = new AtomicReference<>(); if (this.objectMapper.canDeserialize(javaType, causeRef)) { return true; } logWarningIfNecessary(javaType, causeRef.get()); return false; }
@Override protected boolean canConvertFrom(Message<?> message, @Nullable Class<?> targetClass) { if (targetClass == null || !supportsMimeType(message.getHeaders())) { return false; } JavaType javaType = this.objectMapper.constructType(targetClass); AtomicReference<Throwable> causeRef = new AtomicReference<>(); if (this.objectMapper.canDeserialize(javaType, causeRef)) { return true; } logWarningIfNecessary(javaType, causeRef.get()); return false; }
@Override public boolean canDecode(ResolvableType elementType, @Nullable MimeType mimeType) { JavaType javaType = getObjectMapper().getTypeFactory().constructType(elementType.getType()); // Skip String: CharSequenceDecoder + "*/*" comes after return (!CharSequence.class.isAssignableFrom(elementType.toClass()) && getObjectMapper().canDeserialize(javaType) && supportsMimeType(mimeType)); }
@Override public boolean canRead(Type type, @Nullable Class<?> contextClass, @Nullable MediaType mediaType) { if (!canRead(mediaType)) { return false; } JavaType javaType = getJavaType(type, contextClass); AtomicReference<Throwable> causeRef = new AtomicReference<>(); if (this.objectMapper.canDeserialize(javaType, causeRef)) { return true; } logWarningIfNecessary(javaType, causeRef.get()); return false; }
@Override public void validate(Object var,List<ActivitiException> errors) { //we can consider var json so long as it can be stored as json //this doesn't guarantee a string body to be valid json as jackson will wrap a string to make it valid //also doesn't guarantee it will be persisted as json //could be a pojo and then could be persisted as serializable if user sets serializePOJOsInVariablesToJson to false - see JsonType.java if (!objectMapper.canSerialize(var.getClass())){ String message = var.getClass()+" is not serializable as json"; errors.add(new ActivitiException(message)); logger.error(message); } if (!objectMapper.canDeserialize(objectMapper.constructType(var.getClass()))){ String message = var.getClass()+" is not deserializable as json"; errors.add(new ActivitiException(message)); logger.error(message); } } }
@Override public <T> Codec<T> get(final Class<T> clazz) { final JavaType javaType = TypeFactory.defaultInstance().constructType(clazz); if (!mapper.canSerialize(clazz) || !mapper.canDeserialize(javaType)) { throw new CodecConfigurationException(String.format("%s (javaType: %s) not supported by Jackson Mapper", clazz, javaType)); } return new JacksonCodec<>(clazz, mapper); } };
@Override public boolean canDecode(ResolvableType elementType, @Nullable MimeType mimeType) { JavaType javaType = getObjectMapper().getTypeFactory().constructType(elementType.getType()); // Skip String: CharSequenceDecoder + "*/*" comes after return (!CharSequence.class.isAssignableFrom(elementType.toClass()) && getObjectMapper().canDeserialize(javaType) && supportsMimeType(mimeType)); }
@Override public Object parse(final TypeLiteral<?> type, final Context ctx) throws Throwable { MediaType ctype = ctx.type(); if (ctype.isAny()) { // */* return ctx.next(); } JavaType javaType = mapper.constructType(type.getType()); if (matcher.matches(ctype) && mapper.canDeserialize(javaType)) { return ctx .ifparam(values -> mapper.readValue(values.iterator().next(), javaType)) .ifbody(body -> mapper.readValue(body.bytes(), javaType)); } return ctx.next(); }
@Override protected boolean canConvertFrom(Message<?> message, @Nullable Class<?> targetClass) { if (targetClass == null || !supportsMimeType(message.getHeaders())) { return false; } JavaType javaType = this.objectMapper.constructType(targetClass); AtomicReference<Throwable> causeRef = new AtomicReference<>(); if (this.objectMapper.canDeserialize(javaType, causeRef)) { return true; } logWarningIfNecessary(javaType, causeRef.get()); return false; }
if (!mapper.canDeserialize(mapper.constructType(type))) { return false;
@Override public boolean supports(Class<?> type) { return type != Class.class && //To avoid conflicting with resource resolvers for actions objectMapper.canDeserialize(TypeFactory.defaultInstance().constructType(type)); }
@Override public boolean canRead(Type type, @Nullable Class<?> contextClass, @Nullable MediaType mediaType) { if (!canRead(mediaType)) { return false; } JavaType javaType = getJavaType(type, contextClass); AtomicReference<Throwable> causeRef = new AtomicReference<>(); if (this.objectMapper.canDeserialize(javaType, causeRef)) { return true; } logWarningIfNecessary(javaType, causeRef.get()); return false; }
@Override protected boolean canConvertFrom(Message<?> message, @Nullable Class<?> targetClass) { if (targetClass == null || !supportsMimeType(message.getHeaders())) { return false; } JavaType javaType = this.objectMapper.constructType(targetClass); AtomicReference<Throwable> causeRef = new AtomicReference<>(); if (this.objectMapper.canDeserialize(javaType, causeRef)) { return true; } logWarningIfNecessary(javaType, causeRef.get()); return false; }
@Override public <T> Codec<T> get(final Class<T> clazz) { final JavaType javaType = TypeFactory.defaultInstance().constructType(clazz); if (!mapper.canSerialize(clazz) || !mapper.canDeserialize(javaType)) { throw new CodecConfigurationException(String.format("%s (javaType: %s) not supported by Jackson Mapper", clazz, javaType)); } return new JacksonCodec<>(clazz, mapper); } };
@Override public boolean canRead(Type type, @Nullable Class<?> contextClass, @Nullable MediaType mediaType) { if (!canRead(mediaType)) { return false; } JavaType javaType = getJavaType(type, contextClass); AtomicReference<Throwable> causeRef = new AtomicReference<>(); if (this.objectMapper.canDeserialize(javaType, causeRef)) { return true; } logWarningIfNecessary(javaType, causeRef.get()); return false; }
@Override public boolean canRead(Class<?> clazz, MediaType mediaType) { JavaType javaType = getJavaType(clazz); return (this.objectMapper.canDeserialize(javaType) && canRead(mediaType)); }
@Override public boolean canDecode(ResolvableType elementType, @Nullable MimeType mimeType) { JavaType javaType = getObjectMapper().getTypeFactory().constructType(elementType.getType()); // Skip String: CharSequenceDecoder + "*/*" comes after return (!CharSequence.class.isAssignableFrom(elementType.resolve(Object.class)) && getObjectMapper().canDeserialize(javaType) && supportsMimeType(mimeType)); }
@Override public boolean canDecode(ResolvableType elementType, @Nullable MimeType mimeType) { JavaType javaType = getObjectMapper().getTypeFactory().constructType(elementType.getType()); // Skip String: CharSequenceDecoder + "*/*" comes after return (!CharSequence.class.isAssignableFrom(elementType.toClass()) && getObjectMapper().canDeserialize(javaType) && supportsMimeType(mimeType)); }
@Override public boolean canRead(final Type type, @Nullable final Class<?> contextClass, final MediaType mediaType) { final JavaType javaType = getJavaType(type, contextClass); if (Stream.class.isAssignableFrom(javaType.getRawClass())) { final JavaType containedType = javaType.containedType(0); return mapper.canDeserialize(containedType) && canRead(mediaType); } return false; }
@Override public boolean canRead(final Type type, @Nullable final Class<?> contextClass, final MediaType mediaType) { final JavaType javaType = getJavaType(type, contextClass); if (Stream.class.isAssignableFrom(javaType.getRawClass())) { final JavaType containedType = javaType.containedType(0); return mapper.canDeserialize(containedType) && canRead(mediaType); } return false; }