Java Code Examples for com.fasterxml.jackson.databind.util.ClassUtil#throwIfRTE()

The following examples show how to use com.fasterxml.jackson.databind.util.ClassUtil#throwIfRTE() . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: StdSerializer.java    From lams with GNU General Public License v2.0 6 votes vote down vote up
/**
 * Method that will modify caught exception (passed in as argument)
 * as necessary to include reference information, and to ensure it
 * is a subtype of {@link IOException}, or an unchecked exception.
 *<p>
 * Rules for wrapping and unwrapping are bit complicated; essentially:
 *<ul>
 * <li>Errors are to be passed as is (if uncovered via unwrapping)
 * <li>"Plain" IOExceptions (ones that are not of type
 *   {@link JsonMappingException} are to be passed as is
 *</ul>
 */
public void wrapAndThrow(SerializerProvider provider,
        Throwable t, Object bean, String fieldName)
    throws IOException
{
    /* 05-Mar-2009, tatu: But one nasty edge is when we get
     *   StackOverflow: usually due to infinite loop. But that
     *   usually gets hidden within an InvocationTargetException...
     */
    while (t instanceof InvocationTargetException && t.getCause() != null) {
        t = t.getCause();
    }
    // Errors and "plain" to be passed as is
    ClassUtil.throwIfError(t);
    // Ditto for IOExceptions... except for mapping exceptions!
    boolean wrap = (provider == null) || provider.isEnabled(SerializationFeature.WRAP_EXCEPTIONS);
    if (t instanceof IOException) {
        if (!wrap || !(t instanceof JsonMappingException)) {
            throw (IOException) t;
        }
    } else if (!wrap) {
        ClassUtil.throwIfRTE(t);
    }
    // Need to add reference information
    throw JsonMappingException.wrapWithPath(t, bean, fieldName);
}
 
Example 2
Source File: StdSerializer.java    From lams with GNU General Public License v2.0 6 votes vote down vote up
public void wrapAndThrow(SerializerProvider provider,
        Throwable t, Object bean, int index)
    throws IOException
{
    while (t instanceof InvocationTargetException && t.getCause() != null) {
        t = t.getCause();
    }
    // Errors are to be passed as is
    ClassUtil.throwIfError(t);
    // Ditto for IOExceptions... except for mapping exceptions!
    boolean wrap = (provider == null) || provider.isEnabled(SerializationFeature.WRAP_EXCEPTIONS);
    if (t instanceof IOException) {
        if (!wrap || !(t instanceof JsonMappingException)) {
            throw (IOException) t;
        }
    } else if (!wrap) {
        ClassUtil.throwIfRTE(t);
    }
    // Need to add reference information
    throw JsonMappingException.wrapWithPath(t, bean, index);
}
 
Example 3
Source File: BasicBeanDescription.java    From lams with GNU General Public License v2.0 6 votes vote down vote up
@Override
public Object instantiateBean(boolean fixAccess) {
    AnnotatedConstructor ac = _classInfo.getDefaultConstructor();
    if (ac == null) {
        return null;
    }
    if (fixAccess) {
        ac.fixAccess(_config.isEnabled(MapperFeature.OVERRIDE_PUBLIC_ACCESS_MODIFIERS));
    }
    try {
        return ac.getAnnotated().newInstance();
    } catch (Exception e) {
        Throwable t = e;
        while (t.getCause() != null) {
            t = t.getCause();
        }
        ClassUtil.throwIfError(t);
        ClassUtil.throwIfRTE(t);
        throw new IllegalArgumentException("Failed to instantiate bean of type "+_classInfo.getAnnotated().getName()+": ("+t.getClass().getName()+") "+t.getMessage(), t);
    }
}
 
Example 4
Source File: FactoryBasedEnumDeserializer.java    From lams with GNU General Public License v2.0 6 votes vote down vote up
private Throwable throwOrReturnThrowable(Throwable t, DeserializationContext ctxt) throws IOException
{
    t = ClassUtil.getRootCause(t);
    // Errors to be passed as is
    ClassUtil.throwIfError(t);
    boolean wrap = (ctxt == null) || ctxt.isEnabled(DeserializationFeature.WRAP_EXCEPTIONS);
    // Ditto for IOExceptions; except we may want to wrap JSON exceptions
    if (t instanceof IOException) {
        if (!wrap || !(t instanceof JsonProcessingException)) {
            throw (IOException) t;
        }
    } else if (!wrap) {
        ClassUtil.throwIfRTE(t);
    }
    return t;
}
 
Example 5
Source File: SettableAnyProperty.java    From lams with GNU General Public License v2.0 6 votes vote down vote up
/**
 * @param e Exception to re-throw or wrap
 * @param propName Name of property (from Json input) to set
 * @param value Value of the property
 */
protected void _throwAsIOE(Exception e, Object propName, Object value)
    throws IOException
{
    if (e instanceof IllegalArgumentException) {
        String actType = ClassUtil.classNameOf(value);
        StringBuilder msg = new StringBuilder("Problem deserializing \"any\" property '").append(propName);
        msg.append("' of class "+getClassName()+" (expected type: ").append(_type);
        msg.append("; actual type: ").append(actType).append(")");
        String origMsg = e.getMessage();
        if (origMsg != null) {
            msg.append(", problem: ").append(origMsg);
        } else {
            msg.append(" (no error message provided)");
        }
        throw new JsonMappingException(null, msg.toString(), e);
    }
    ClassUtil.throwIfIOE(e);
    ClassUtil.throwIfRTE(e);
    // let's wrap the innermost problem
    Throwable t = ClassUtil.getRootCause(e);
    throw new JsonMappingException(null, t.getMessage(), t);
}
 
Example 6
Source File: BeanPropertyMap.java    From lams with GNU General Public License v2.0 6 votes vote down vote up
protected void wrapAndThrow(Throwable t, Object bean, String fieldName, DeserializationContext ctxt)
    throws IOException
{
    // inlined 'throwOrReturnThrowable'
    while (t instanceof InvocationTargetException && t.getCause() != null) {
        t = t.getCause();
    }
    // Errors to be passed as is
    ClassUtil.throwIfError(t);
    // StackOverflowErrors are tricky ones; need to be careful...
    boolean wrap = (ctxt == null) || ctxt.isEnabled(DeserializationFeature.WRAP_EXCEPTIONS);
    // Ditto for IOExceptions; except we may want to wrap JSON exceptions
    if (t instanceof IOException) {
        if (!wrap || !(t instanceof JsonProcessingException)) {
            throw (IOException) t;
        }
    } else if (!wrap) { // allow disabling wrapping for unchecked exceptions
        ClassUtil.throwIfRTE(t);
    }
    throw JsonMappingException.wrapWithPath(t, bean, fieldName);
}
 
Example 7
Source File: SettableBeanProperty.java    From lams with GNU General Public License v2.0 5 votes vote down vote up
/**
 * @since 2.7
 */
protected IOException _throwAsIOE(JsonParser p, Exception e) throws IOException
{
    ClassUtil.throwIfIOE(e);
    ClassUtil.throwIfRTE(e);
    // let's wrap the innermost problem
    Throwable th = ClassUtil.getRootCause(e);
    throw JsonMappingException.from(p, th.getMessage(), th);
}
 
Example 8
Source File: TypeParser.java    From lams with GNU General Public License v2.0 5 votes vote down vote up
protected Class<?> findClass(String className, MyTokenizer tokens)
{
    try {
        return _factory.findClass(className);
    } catch (Exception e) {
        ClassUtil.throwIfRTE(e);
        throw _problem(tokens, "Cannot locate class '"+className+"', problem: "+e.getMessage());
    }
}
 
Example 9
Source File: CollectionDeserializer.java    From lams with GNU General Public License v2.0 4 votes vote down vote up
@Override
public Collection<Object> deserialize(JsonParser p, DeserializationContext ctxt,
        Collection<Object> result)
    throws IOException
{
    // Ok: must point to START_ARRAY (or equivalent)
    if (!p.isExpectedStartArrayToken()) {
        return handleNonArray(p, ctxt, result);
    }
    // [databind#631]: Assign current value, to be accessible by custom serializers
    p.setCurrentValue(result);

    JsonDeserializer<Object> valueDes = _valueDeserializer;
    // Let's offline handling of values with Object Ids (simplifies code here)
    if (valueDes.getObjectIdReader() != null) {
        return _deserializeWithObjectId(p, ctxt, result);
    }
    final TypeDeserializer typeDeser = _valueTypeDeserializer;
    JsonToken t;
    while ((t = p.nextToken()) != JsonToken.END_ARRAY) {
        try {
            Object value;
            if (t == JsonToken.VALUE_NULL) {
                if (_skipNullValues) {
                    continue;
                }
                value = _nullProvider.getNullValue(ctxt);
            } else if (typeDeser == null) {
                value = valueDes.deserialize(p, ctxt);
            } else {
                value = valueDes.deserializeWithType(p, ctxt, typeDeser);
            }
            result.add(value);

            /* 17-Dec-2017, tatu: should not occur at this level...
        } catch (UnresolvedForwardReference reference) {
            throw JsonMappingException
                .from(p, "Unresolved forward reference but no identity info", reference);
            */
        } catch (Exception e) {
            boolean wrap = (ctxt == null) || ctxt.isEnabled(DeserializationFeature.WRAP_EXCEPTIONS);
            if (!wrap) {
                ClassUtil.throwIfRTE(e);
            }
            throw JsonMappingException.wrapWithPath(e, result, result.size());
        }
    }
    return result;
}
 
Example 10
Source File: CollectionDeserializer.java    From lams with GNU General Public License v2.0 4 votes vote down vote up
protected Collection<Object> _deserializeWithObjectId(JsonParser p, DeserializationContext ctxt,
        Collection<Object> result)
    throws IOException
{
    // Ok: must point to START_ARRAY (or equivalent)
    if (!p.isExpectedStartArrayToken()) {
        return handleNonArray(p, ctxt, result);
    }
    // [databind#631]: Assign current value, to be accessible by custom serializers
    p.setCurrentValue(result);

    final JsonDeserializer<Object> valueDes = _valueDeserializer;
    final TypeDeserializer typeDeser = _valueTypeDeserializer;
    CollectionReferringAccumulator referringAccumulator =
            new CollectionReferringAccumulator(_containerType.getContentType().getRawClass(), result);

    JsonToken t;
    while ((t = p.nextToken()) != JsonToken.END_ARRAY) {
        try {
            Object value;
            if (t == JsonToken.VALUE_NULL) {
                if (_skipNullValues) {
                    continue;
                }
                value = _nullProvider.getNullValue(ctxt);
            } else if (typeDeser == null) {
                value = valueDes.deserialize(p, ctxt);
            } else {
                value = valueDes.deserializeWithType(p, ctxt, typeDeser);
            }
            referringAccumulator.add(value);
        } catch (UnresolvedForwardReference reference) {
            Referring ref = referringAccumulator.handleUnresolvedReference(reference);
            reference.getRoid().appendReferring(ref);
        } catch (Exception e) {
            boolean wrap = (ctxt == null) || ctxt.isEnabled(DeserializationFeature.WRAP_EXCEPTIONS);
            if (!wrap) {
                ClassUtil.throwIfRTE(e);
            }
            throw JsonMappingException.wrapWithPath(e, result, result.size());
        }
    }
    return result;
}
 
Example 11
Source File: CustomCollectionDeserializer.java    From caravan with Apache License 2.0 4 votes vote down vote up
@SuppressWarnings("unchecked")
@Override
public Object deserialize(JsonParser p, DeserializationContext ctxt,
    Object result)
    throws IOException {
  // Ok: must point to START_ARRAY (or equivalent)
  if (!p.isExpectedStartArrayToken()) {
    return handleNonArray(p, ctxt, (Collection<Object>) result);
  }
  // [databind#631]: Assign current value, to be accessible by custom serializers
  p.setCurrentValue(result);

  JsonDeserializer<Object> valueDes = _valueDeserializer;
  final TypeDeserializer typeDeser = _valueTypeDeserializer;
  CollectionReferringAccumulator referringAccumulator =
      (valueDes.getObjectIdReader() == null) ? null :
          new CollectionReferringAccumulator(_containerType.getContentType().getRawClass(), (Collection<Object>) result);

  JsonToken t;
  while ((t = p.nextToken()) != JsonToken.END_ARRAY) {
    try {
      Object value;
      if (t == JsonToken.VALUE_NULL) {
        if (_skipNullValues) {
          continue;
        }
        value = _nullProvider.getNullValue(ctxt);
      } else if (typeDeser == null) {
        value = valueDes.deserialize(p, ctxt);
      } else {
        value = valueDes.deserializeWithType(p, ctxt, typeDeser);
      }
      if (referringAccumulator != null) {
        referringAccumulator.add(value);
      } else {
        ((Collection<Object>) result).add(value);
      }
    } catch (UnresolvedForwardReference reference) {
      if (referringAccumulator == null) {
        throw JsonMappingException
            .from(p, "Unresolved forward reference but no identity info", reference);
      }
      Referring ref = referringAccumulator.handleUnresolvedReference(reference);
      reference.getRoid().appendReferring(ref);
    } catch (Exception e) {
      boolean wrap = (ctxt == null) || ctxt.isEnabled(DeserializationFeature.WRAP_EXCEPTIONS);
      if (!wrap) {
        ClassUtil.throwIfRTE(e);
      }
      throw JsonMappingException.wrapWithPath(e, result, ((Collection<Object>) result).size());
    }
  }
  return result;
}
 
Example 12
Source File: ListDeserializer.java    From allure2 with Apache License 2.0 4 votes vote down vote up
@Override
public Collection<Object> deserialize(JsonParser p, DeserializationContext ctxt,
                                      Collection<Object> result)
        throws IOException {
    // Ok: must point to START_ARRAY (or equivalent)
    if (!p.isExpectedStartArrayToken()) {
        return result;
    }
    // [databind#631]: Assign current value, to be accessible by custom serializers
    p.setCurrentValue(result);

    JsonDeserializer<Object> valueDes = _valueDeserializer;
    final TypeDeserializer typeDeser = _valueTypeDeserializer;
    CollectionReferringAccumulator referringAccumulator =
            (valueDes.getObjectIdReader() == null) ? null :
                    new CollectionReferringAccumulator(_containerType.getContentType().getRawClass(), result);

    JsonToken t;
    while ((t = p.nextToken()) != JsonToken.END_ARRAY) {
        try {
            Object value;
            if (t == JsonToken.VALUE_NULL) {
                if (_skipNullValues) {
                    continue;
                }
                value = _nullProvider.getNullValue(ctxt);
            } else if (typeDeser == null) {
                value = valueDes.deserialize(p, ctxt);
            } else {
                value = valueDes.deserializeWithType(p, ctxt, typeDeser);
            }
            if (referringAccumulator != null) {
                referringAccumulator.add(value);
            } else {
                result.add(value);
            }
        } catch (UnresolvedForwardReference reference) {
            if (referringAccumulator == null) {
                throw JsonMappingException
                        .from(p, "Unresolved forward reference but no identity info", reference);
            }
            ReadableObjectId.Referring ref = referringAccumulator.handleUnresolvedReference(reference);
            reference.getRoid().appendReferring(ref);
        } catch (Exception e) {
            boolean wrap = (ctxt == null) || ctxt.isEnabled(DeserializationFeature.WRAP_EXCEPTIONS);
            if (!wrap) {
                ClassUtil.throwIfRTE(e);
            }
            throw JsonMappingException.wrapWithPath(e, result, result.size());
        }
    }
    return result;
}