blob: 09a85481663618643e05c8bffa931999d89650a3 [file] [log] [blame]
package org.codehaus.jackson.map.deser.std;
import java.io.IOException;
import org.codehaus.jackson.JsonParser;
import org.codehaus.jackson.JsonProcessingException;
import org.codehaus.jackson.JsonToken;
import org.codehaus.jackson.map.DeserializationContext;
import org.codehaus.jackson.type.JavaType;
/**
* @since 1.9
*/
public class JavaTypeDeserializer
extends StdScalarDeserializer<JavaType>
{
public JavaTypeDeserializer() { super(JavaType.class); }
@Override
public JavaType deserialize(JsonParser jp, DeserializationContext ctxt)
throws IOException, JsonProcessingException
{
JsonToken curr = jp.getCurrentToken();
// Usually should just get string value:
if (curr == JsonToken.VALUE_STRING) {
String str = jp.getText().trim();
if (str.length() == 0) {
return getEmptyValue();
}
return ctxt.getTypeFactory().constructFromCanonical(str);
}
// or occasionally just embedded object maybe
if (curr == JsonToken.VALUE_EMBEDDED_OBJECT) {
return (JavaType) jp.getEmbeddedObject();
}
throw ctxt.mappingException(_valueClass);
}
}