Skip to content

Commit fffd5ea

Browse files
committed
Minor improvement wrt #2701 (error reporting)
1 parent d4f1b77 commit fffd5ea

File tree

4 files changed

+23
-11
lines changed

4 files changed

+23
-11
lines changed

src/main/java/com/fasterxml/jackson/databind/deser/std/AtomicBooleanDeserializer.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public class AtomicBooleanDeserializer extends StdScalarDeserializer<AtomicBoole
1313
public AtomicBooleanDeserializer() { super(AtomicBoolean.class); }
1414

1515
@Override
16-
public AtomicBoolean deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException {
17-
return new AtomicBoolean(_parseBooleanPrimitive(jp, ctxt));
16+
public AtomicBoolean deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
17+
return new AtomicBoolean(_parseBooleanPrimitive(ctxt, p, AtomicBoolean.class));
1818
}
1919
}

src/main/java/com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -389,7 +389,7 @@ public boolean[] deserialize(JsonParser p, DeserializationContext ctxt)
389389
_verifyNullForPrimitive(ctxt);
390390
value = false;
391391
} else {
392-
value = _parseBooleanPrimitive(p, ctxt);
392+
value = _parseBooleanPrimitive(ctxt, p, Boolean.TYPE);
393393
}
394394
if (ix >= chunk.length) {
395395
chunk = builder.appendCompletedChunk(chunk, ix);
@@ -406,7 +406,7 @@ public boolean[] deserialize(JsonParser p, DeserializationContext ctxt)
406406
@Override
407407
protected boolean[] handleSingleElementUnwrapped(JsonParser p,
408408
DeserializationContext ctxt) throws IOException {
409-
return new boolean[] { _parseBooleanPrimitive(p, ctxt) };
409+
return new boolean[] { _parseBooleanPrimitive(ctxt, p, Boolean.TYPE) };
410410
}
411411

412412
@Override

src/main/java/com/fasterxml/jackson/databind/deser/std/StdDeserializer.java

+11-4
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,14 @@ public Object deserializeWithType(JsonParser p, DeserializationContext ctxt,
168168
/**********************************************************
169169
*/
170170

171-
protected final boolean _parseBooleanPrimitive(JsonParser p, DeserializationContext ctxt) throws IOException
171+
@Deprecated // since 2.11, use overloaded variant
172+
protected final boolean _parseBooleanPrimitive(JsonParser p, DeserializationContext ctxt) throws IOException {
173+
return _parseBooleanPrimitive(ctxt, p, Boolean.TYPE);
174+
}
175+
176+
// @since 2.11
177+
protected final boolean _parseBooleanPrimitive(DeserializationContext ctxt,
178+
JsonParser p, Class<?> targetType) throws IOException
172179
{
173180
JsonToken t = p.getCurrentToken();
174181
if (t == JsonToken.VALUE_TRUE) return true;
@@ -196,19 +203,19 @@ protected final boolean _parseBooleanPrimitive(JsonParser p, DeserializationCont
196203
_verifyNullForPrimitiveCoercion(ctxt, text);
197204
return false;
198205
}
199-
Boolean b = (Boolean) ctxt.handleWeirdStringValue(_valueClass, text,
206+
Boolean b = (Boolean) ctxt.handleWeirdStringValue(targetType, text,
200207
"only \"true\" or \"false\" recognized");
201208
return Boolean.TRUE.equals(b);
202209
}
203210
// [databind#381]
204211
if (t == JsonToken.START_ARRAY && ctxt.isEnabled(DeserializationFeature.UNWRAP_SINGLE_VALUE_ARRAYS)) {
205212
p.nextToken();
206-
final boolean parsed = _parseBooleanPrimitive(p, ctxt);
213+
final boolean parsed = _parseBooleanPrimitive(ctxt, p, targetType);
207214
_verifyEndArrayForSingle(p, ctxt);
208215
return parsed;
209216
}
210217
// Otherwise, no can do:
211-
return ((Boolean) ctxt.handleUnexpectedToken(_valueClass, p)).booleanValue();
218+
return ((Boolean) ctxt.handleUnexpectedToken(targetType, p)).booleanValue();
212219
}
213220

214221
protected boolean _parseBooleanFromInt(JsonParser p, DeserializationContext ctxt)

src/test/java/com/fasterxml/jackson/databind/deser/jdk/JDKScalarsTest.java

+8-3
Original file line numberDiff line numberDiff line change
@@ -883,7 +883,7 @@ public void testVoidDeser() throws Exception
883883

884884
public void testInvalidStringCoercionFail() throws IOException
885885
{
886-
_testInvalidStringCoercionFail(boolean[].class);
886+
_testInvalidStringCoercionFail(boolean[].class, "boolean");
887887
_testInvalidStringCoercionFail(byte[].class);
888888

889889
// char[] is special, cannot use generalized test here
@@ -896,15 +896,20 @@ public void testInvalidStringCoercionFail() throws IOException
896896
}
897897

898898
private void _testInvalidStringCoercionFail(Class<?> cls) throws IOException
899+
{
900+
_testInvalidStringCoercionFail(cls, cls.getSimpleName());
901+
}
902+
903+
private void _testInvalidStringCoercionFail(Class<?> cls, String targetTypeName)
904+
throws IOException
899905
{
900906
final String JSON = "[ \"foobar\" ]";
901-
final String SIMPLE_NAME = cls.getSimpleName();
902907

903908
try {
904909
MAPPER.readerFor(cls).readValue(JSON);
905910
fail("Should not pass");
906911
} catch (JsonMappingException e) {
907-
verifyException(e, "Cannot deserialize value of type `"+SIMPLE_NAME+"` from String \"foobar\"");
912+
verifyException(e, "Cannot deserialize value of type `"+targetTypeName+"` from String \"foobar\"");
908913
}
909914
}
910915
}

0 commit comments

Comments
 (0)