Skip to content

Commit

Permalink
Minor improvements to handling of boolean values (allow long values)
Browse files Browse the repository at this point in the history
  • Loading branch information
Tatu committed Jan 11, 2012
1 parent ba0470f commit 0aef72d
Show file tree
Hide file tree
Showing 4 changed files with 117 additions and 62 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -1198,10 +1198,11 @@ public <T> T readValue(JsonParser jp, TypeReference<?> valueTypeRef)
* {@link TypeFactory}.
*/
@Override
@SuppressWarnings("unchecked")
public final <T> T readValue(JsonParser jp, ResolvedType valueType)
throws IOException, JsonParseException, JsonMappingException
{
return readValue(jp, (JavaType) valueType);
return (T) _readValue(copyDeserializationConfig(), jp, (JavaType) valueType);
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -355,8 +355,9 @@ public <T> T readValue(JsonParser jp, TypeReference<?> valueTypeRef)
* was specified with {@link #withValueToUpdate(Object)}.
*/
@Override
@SuppressWarnings("unchecked")
public <T> T readValue(JsonParser jp, ResolvedType valueType) throws IOException, JsonProcessingException {
return readValue(jp, (JavaType) valueType);
return (T) withType((JavaType)valueType).readValue(jp);
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import java.util.*;

import com.fasterxml.jackson.core.*;
import com.fasterxml.jackson.core.JsonParser.NumberType;
import com.fasterxml.jackson.core.io.NumberInput;

import com.fasterxml.jackson.databind.*;
Expand Down Expand Up @@ -102,7 +103,11 @@ protected final boolean _parseBooleanPrimitive(JsonParser jp, DeserializationCon
}
// [JACKSON-78]: should accept ints too, (0 == false, otherwise true)
if (t == JsonToken.VALUE_NUMBER_INT) {
return (jp.getIntValue() != 0);
// 11-Jan-2012, tatus: May be outside of int...
if (jp.getNumberType() == NumberType.INT) {
return (jp.getIntValue() != 0);
}
return _parseBooleanFromNumber(jp, ctxt);
}
// And finally, let's allow Strings to be converted too
if (t == JsonToken.VALUE_STRING) {
Expand Down Expand Up @@ -131,7 +136,11 @@ protected final Boolean _parseBoolean(JsonParser jp, DeserializationContext ctxt
}
// [JACKSON-78]: should accept ints too, (0 == false, otherwise true)
if (t == JsonToken.VALUE_NUMBER_INT) {
return (jp.getIntValue() == 0) ? Boolean.FALSE : Boolean.TRUE;
// 11-Jan-2012, tatus: May be outside of int...
if (jp.getNumberType() == NumberType.INT) {
return (jp.getIntValue() == 0) ? Boolean.FALSE : Boolean.TRUE;
}
return Boolean.valueOf(_parseBooleanFromNumber(jp, ctxt));
}
if (t == JsonToken.VALUE_NULL) {
return (Boolean) getNullValue();
Expand All @@ -154,6 +163,20 @@ protected final Boolean _parseBoolean(JsonParser jp, DeserializationContext ctxt
throw ctxt.mappingException(_valueClass, t);
}

protected final boolean _parseBooleanFromNumber(JsonParser jp, DeserializationContext ctxt)
throws IOException, JsonProcessingException
{
if (jp.getNumberType() == NumberType.LONG) {
return (jp.getLongValue() == 0L) ? Boolean.FALSE : Boolean.TRUE;
}
// no really good logic; let's actually resort to textual comparison
String str = jp.getText();
if ("0.0".equals(str) || "0".equals(str)) {
return Boolean.FALSE;
}
return Boolean.TRUE;
}

protected Byte _parseByte(JsonParser jp, DeserializationContext ctxt)
throws IOException, JsonProcessingException
{
Expand Down
Loading

0 comments on commit 0aef72d

Please sign in to comment.