/** * Helper method for constructing generic mapping exception for specified type * * @deprecated Since 2.8 use {@link #handleUnexpectedToken(Class, JsonParser)} instead */ @Deprecated public JsonMappingException mappingException(Class<?> targetClass) { return mappingException(targetClass, _parser.getCurrentToken()); }
private String getTokenString() { if (parser.getCurrentToken() != null) { try { return "'" + parser.getText() + "'"; } catch (Exception ex) { return "?"; } } return ""; }
@Override public T extract(JsonParser jsonParser) throws IOException { if (jsonParser.getCurrentToken() == START_OBJECT) { return processJsonObject(jsonParser); } if (jsonParser.getCurrentToken() == START_ARRAY) { return processJsonArray(jsonParser); } throw new JsonParseException(jsonParser, "Expected a JSON object or array"); }
/** * Helper method that may be used to support fallback for Empty String / Empty Array * non-standard representations; usually for things serialized as JSON Objects. * * @since 2.5 */ @SuppressWarnings("unchecked") protected T _deserializeFromEmpty(JsonParser p, DeserializationContext ctxt) throws IOException { JsonToken t = p.getCurrentToken(); if (t == JsonToken.START_ARRAY) { if (ctxt.isEnabled(DeserializationFeature.ACCEPT_EMPTY_ARRAY_AS_NULL_OBJECT)) { t = p.nextToken(); if (t == JsonToken.END_ARRAY) { return null; } return (T) ctxt.handleUnexpectedToken(handledType(), p); } } else if (t == JsonToken.VALUE_STRING) { if (ctxt.isEnabled(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT)) { String str = p.getText().trim(); if (str.isEmpty()) { return null; } } } return (T) ctxt.handleUnexpectedToken(handledType(), p); }
protected static void expectField(String name, JsonParser p) throws IOException, JsonParseException { if (p.getCurrentToken() != JsonToken.FIELD_NAME) { throw new JsonParseException(p, "expected field name, but was: " + p.getCurrentToken()); } if (!name.equals(p.getCurrentName())) { throw new JsonParseException(p, "expected field '" + name + "', but was: '" + p.getCurrentName() + "'"); } p.nextToken(); }
@Override public String readString() throws IOException { if (parser.getCurrentToken() != VALUE_STRING) throw new JsonInputException("Expected token: string but was " + parser.getCurrentToken()); final String value = parser.getText(); if (lastRepeated && parser.nextToken() == END_ARRAY) lastRepeated = false; return value; }
protected Object mapObject(JsonParser p, DeserializationContext ctxt, Map<Object,Object> m) throws IOException { JsonToken t = p.getCurrentToken(); if (t == JsonToken.START_OBJECT) { t = p.nextToken(); } if (t == JsonToken.END_OBJECT) { return m; } // NOTE: we are guaranteed to point to FIELD_NAME String key = p.getCurrentName(); do { p.nextToken(); // and possibly recursive merge here Object old = m.get(key); Object newV; if (old != null) { newV = deserialize(p, ctxt, old); } else { newV = deserialize(p, ctxt); } if (newV != old) { m.put(key, newV); } } while ((key = p.nextFieldName()) != null); return m; }
throw new JsonParseException(jsonParser, "Unexpected end of value"); if (jsonParser.getCurrentToken() == START_ARRAY) { long length = 0; while (true) { JsonToken token = jsonParser.nextToken(); if (token == null) { return null; if (jsonParser.getCurrentToken() == START_OBJECT) { long length = 0; while (true) { JsonToken token = jsonParser.nextToken(); if (token == null) { return null;
@Override public T deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException { // Ok: must point to START_OBJECT or FIELD_NAME JsonToken t = jp.getCurrentToken(); if (t == JsonToken.START_OBJECT) { // If START_OBJECT, move to next; may also be END_OBJECT t = jp.nextToken(); } if (t != JsonToken.FIELD_NAME && t != JsonToken.END_OBJECT) { throw ctxt.mappingException(_mapType.getRawClass()); } return _deserializeEntries(jp, ctxt); }
@Override public DateTime deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException { JsonToken t = jp.getCurrentToken(); if (t == JsonToken.VALUE_NUMBER_INT) { return DateTimes.utc(jp.getLongValue()); } if (t == JsonToken.VALUE_STRING) { String str = jp.getText().trim(); if (str.length() == 0) { // [JACKSON-360] return null; } // make sure to preserve time zone information when parsing timestamps return DateTimes.ISO_DATE_OR_TIME_WITH_OFFSET.parse(str); } throw ctxt.mappingException(getValueClass()); } }
protected JsonToken switchAndReturnNext() throws IOException { while (_nextParserIndex < _parsers.length) { delegate = _parsers[_nextParserIndex++]; if (_checkForExistingToken && delegate.hasCurrentToken()) { return delegate.getCurrentToken(); } JsonToken t = delegate.nextToken(); if (t != null) { return t; } } return null; } }
protected java.util.Date _parseDateFromArray(JsonParser p, DeserializationContext ctxt) throws IOException { JsonToken t; if (ctxt.hasSomeOfFeatures(F_MASK_ACCEPT_ARRAYS)) { t = p.nextToken(); if (t == JsonToken.END_ARRAY) { if (ctxt.isEnabled(DeserializationFeature.ACCEPT_EMPTY_ARRAY_AS_NULL_OBJECT)) { return (java.util.Date) getNullValue(ctxt); } } if (ctxt.isEnabled(DeserializationFeature.UNWRAP_SINGLE_VALUE_ARRAYS)) { final Date parsed = _parseDate(p, ctxt); _verifyEndArrayForSingle(p, ctxt); return parsed; } } else { t = p.getCurrentToken(); } return (java.util.Date) ctxt.handleUnexpectedToken(_valueClass, t, p, null); }
@Override public LocalFile deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException { JsonToken t = jp.getCurrentToken(); if (t == JsonToken.START_OBJECT) { t = jp.nextToken(); LocalFile result; String keyName = jp.getCurrentName(); if ("content".equals(keyName)) { jp.nextToken(); result = LocalFile.ofContent(jp.getValueAsString()); } else if ("base64".equals(keyName)) { jp.nextToken(); ByteArrayOutputStream out = new ByteArrayOutputStream(); jp.readBinaryValue(ctxt.getBase64Variant(), out); result = LocalFile.ofContent(out.toByteArray()); } else { throw ctxt.mappingException("Unknown key '" + keyName + "' to deserialize LocalFile"); t = jp.nextToken(); if (t != JsonToken.END_OBJECT) { throw ctxt.mappingException("Unexpected extra map keys to LocalFile"); case START_ARRAY: case END_ARRAY: throw ctxt.mappingException("Attempted unexpected map or array to LocalFile");
&& ctxt.isEnabled(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT)) { String str = p.getText(); if (str.length() == 0) { return null; ctxt.isEnabled(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY)); if (!canWrap) { JsonToken t = p.getCurrentToken(); if (t == JsonToken.VALUE_STRING JsonToken t = p.getCurrentToken(); Object value;
while (!JsonToken.END_OBJECT.equals(jp.nextToken())) { if (!JsonToken.FIELD_NAME.equals(jp.getCurrentToken())) { throw new JsonParseException(jp, "Expected relation name"); relation = jp.getText(); if (JsonToken.START_ARRAY.equals(jp.nextToken())) { while (!JsonToken.END_ARRAY.equals(jp.nextToken())) { link = jp.readValueAs(Link.class); result.add(new Link(link.getHref(), relation)
@Override public StackTraceElement deserialize(final JsonParser jp, final DeserializationContext ctxt) throws IOException, JsonProcessingException { JsonToken t = jp.getCurrentToken(); final String propName = jp.getCurrentName(); if ("class".equals(propName)) { className = jp.getText(); } else if ("file".equals(propName)) { fileName = jp.getText(); } else if ("line".equals(propName)) { if (t.isNumeric()) { methodName = jp.getText(); } else if ("nativeMethod".equals(propName)) { throw ctxt.mappingException(_valueClass, t);
@Override public Slice extract(JsonParser jsonParser) throws IOException { JsonToken token = jsonParser.getCurrentToken(); if (token == null) { throw new JsonParseException(jsonParser, "Unexpected end of value"); } if (!token.isScalarValue() || token == VALUE_NULL) { return null; } return utf8Slice(jsonParser.getText()); } }
public T find(JsonParser jp, T defaultValue) throws IOException { if (jp.getCurrentToken() == JsonToken.FIELD_NAME) { return stringLookup.getOrDefault(jp.getCurrentName(), defaultValue); } return find(jp.getTextCharacters(), jp.getTextOffset(), jp.getTextLength(), defaultValue); }
@Override public StackTraceElement deserialize(JsonParser p, DeserializationContext ctxt) throws IOException JsonToken t = p.getCurrentToken(); String propName = p.getCurrentName(); className = p.getText(); } else if ("classLoaderName".equals(propName)) { classLoaderName = p.getText(); } else if ("fileName".equals(propName)) { fileName = p.getText(); } else if ("lineNumber".equals(propName)) { if (t.isNumeric()) { } else if (t == JsonToken.START_ARRAY && ctxt.isEnabled(DeserializationFeature.UNWRAP_SINGLE_VALUE_ARRAYS)) { p.nextToken(); final StackTraceElement value = deserialize(p, ctxt); if (p.nextToken() != JsonToken.END_ARRAY) { handleMissingEndArrayForSingle(p, ctxt);
/** * Parses generic object. * * @return number of elements written * @throws IOException if parse input/output fails * @throws SAXException if parse object fails */ private int parseObject() throws SAXException, IOException { int elementsWritten = 0; while (jsonParser.nextToken() != null && jsonParser.getCurrentToken() != END_OBJECT) { if (FIELD_NAME.equals(jsonParser.getCurrentToken())) { String elementName = jsonParser.getCurrentName(); jsonParser.nextToken(); parseElement(elementName); elementsWritten++; } else { throw new JsonParseException(jsonParser, "expected field name, but got " + jsonParser.getCurrentToken(), jsonParser.getCurrentLocation()); } } return elementsWritten; }