Java 类com.fasterxml.jackson.databind.deser.std.ContainerDeserializerBase 实例源码

项目:QuizUpWinner    文件:BeanDeserializerBase.java   
protected SettableBeanProperty _resolveManagedReferenceProperty(DeserializationContext paramDeserializationContext, SettableBeanProperty paramSettableBeanProperty)
{
  String str1 = paramSettableBeanProperty.getManagedReferenceName();
  if (str1 == null)
    return paramSettableBeanProperty;
  JsonDeserializer localJsonDeserializer1 = paramSettableBeanProperty.getValueDeserializer();
  SettableBeanProperty localSettableBeanProperty;
  boolean bool;
  if ((localJsonDeserializer1 instanceof BeanDeserializerBase))
  {
    localSettableBeanProperty = ((BeanDeserializerBase)localJsonDeserializer1).findBackReference(str1);
    bool = false;
  }
  else if ((localJsonDeserializer1 instanceof ContainerDeserializerBase))
  {
    JsonDeserializer localJsonDeserializer2 = ((ContainerDeserializerBase)localJsonDeserializer1).getContentDeserializer();
    if (!(localJsonDeserializer2 instanceof BeanDeserializerBase))
    {
      String str2;
      if (localJsonDeserializer2 == null)
        str2 = "NULL";
      else
        str2 = localJsonDeserializer2.getClass().getName();
      throw new IllegalArgumentException("Can not handle managed/back reference '" + str1 + "': value deserializer is of type ContainerDeserializerBase, but content type is not handled by a BeanDeserializer  (instead it's of type " + str2 + ")");
    }
    localSettableBeanProperty = ((BeanDeserializerBase)localJsonDeserializer2).findBackReference(str1);
    bool = true;
  }
  else if ((localJsonDeserializer1 instanceof AbstractDeserializer))
  {
    localSettableBeanProperty = ((AbstractDeserializer)localJsonDeserializer1).findBackReference(str1);
    bool = false;
  }
  else
  {
    throw new IllegalArgumentException("Can not handle managed/back reference '" + str1 + "': type for value deserializer is not BeanDeserializer or ContainerDeserializerBase, but " + localJsonDeserializer1.getClass().getName());
  }
  if (localSettableBeanProperty == null)
    throw new IllegalArgumentException("Can not handle managed/back reference '" + str1 + "': no back reference property found from type " + paramSettableBeanProperty.getType());
  JavaType localJavaType1 = this._beanType;
  JavaType localJavaType2 = localSettableBeanProperty.getType();
  if (!localJavaType2.getRawClass().isAssignableFrom(localJavaType1.getRawClass()))
    throw new IllegalArgumentException("Can not handle managed/back reference '" + str1 + "': back reference type (" + localJavaType2.getRawClass().getName() + ") not compatible with managed type (" + localJavaType1.getRawClass().getName() + ")");
  Annotations localAnnotations = this._classAnnotations;
  return new ManagedReferenceProperty(paramSettableBeanProperty, str1, localSettableBeanProperty, localAnnotations, bool);
}
项目:joyplus-tv    文件:BeanDeserializerBase.java   
/**
 * Helper method called to see if given property is part of 'managed' property
 * pair (managed + back reference), and if so, handle resolution details.
 */
protected SettableBeanProperty _resolveManagedReferenceProperty(DeserializationContext ctxt,
        SettableBeanProperty prop)
{
    String refName = prop.getManagedReferenceName();
    if (refName == null) {
        return prop;
    }
    JsonDeserializer<?> valueDeser = prop.getValueDeserializer();
    SettableBeanProperty backProp = null;
    boolean isContainer = false;
    if (valueDeser instanceof BeanDeserializerBase) {
        backProp = ((BeanDeserializerBase) valueDeser).findBackReference(refName);
    } else if (valueDeser instanceof ContainerDeserializerBase<?>) {
        JsonDeserializer<?> contentDeser = ((ContainerDeserializerBase<?>) valueDeser).getContentDeserializer();
        if (!(contentDeser instanceof BeanDeserializerBase)) {
            String deserName = (contentDeser == null) ? "NULL" : contentDeser.getClass().getName();
            throw new IllegalArgumentException("Can not handle managed/back reference '"+refName
                    +"': value deserializer is of type ContainerDeserializerBase, but content type is not handled by a BeanDeserializer "
                    +" (instead it's of type "+deserName+")");
        }
        backProp = ((BeanDeserializerBase) contentDeser).findBackReference(refName);
        isContainer = true;
    } else if (valueDeser instanceof AbstractDeserializer) {
        backProp = ((AbstractDeserializer) valueDeser).findBackReference(refName);
    } else {
        throw new IllegalArgumentException("Can not handle managed/back reference '"+refName
                +"': type for value deserializer is not BeanDeserializer or ContainerDeserializerBase, but "
                +valueDeser.getClass().getName());
    }
    if (backProp == null) {
        throw new IllegalArgumentException("Can not handle managed/back reference '"+refName+"': no back reference property found from type "
                +prop.getType());
    }
    // also: verify that type is compatible
    JavaType referredType = _beanType;
    JavaType backRefType = backProp.getType();
    if (!backRefType.getRawClass().isAssignableFrom(referredType.getRawClass())) {
        throw new IllegalArgumentException("Can not handle managed/back reference '"+refName+"': back reference type ("
                +backRefType.getRawClass().getName()+") not compatible with managed type ("
                +referredType.getRawClass().getName()+")");
    }
    return new ManagedReferenceProperty(prop, refName, backProp,
            _classAnnotations, isContainer);
}