Jackson Data Binding Source Code

Jackson is "the Java JSON library" or "the best JSON parser for Java". Or simply as "JSON for Java".

  • Jackson Data Binding module allows you to converts JSON to and from POJO (Plain Old Java Object) using property accessor or using annotations.
  • Jackson Databind Source Code files are provided in the source packge (jackson-databind-2.12.4-sources.jar). You can download it at Jackson Maven Website.

    You can also browse Jackson Databind Source Code below:

    ✍: FYIcenter.com

    com/fasterxml/jackson/databind/util/SimpleBeanPropertyDefinition.java

    package com.fasterxml.jackson.databind.util;
    
    import java.util.Collections;
    import java.util.Iterator;
    
    import com.fasterxml.jackson.annotation.JsonInclude;
    
    import com.fasterxml.jackson.databind.*;
    import com.fasterxml.jackson.databind.cfg.MapperConfig;
    import com.fasterxml.jackson.databind.introspect.*;
    import com.fasterxml.jackson.databind.type.TypeFactory;
    
    /**
     * Simple immutable {@link BeanPropertyDefinition} implementation that can
     * be wrapped around a {@link AnnotatedMember} that is a simple
     * accessor (getter) or mutator (setter, constructor parameter)
     * (or both, for fields).
     */
    public class SimpleBeanPropertyDefinition
        extends BeanPropertyDefinition
    {
        protected final AnnotationIntrospector _annotationIntrospector;
    
        /**
         * Member that defines logical property. Assumption is that it
         * should be a 'simple' accessor; meaning a zero-argument getter,
         * single-argument setter or constructor parameter.
         *<p>
         * NOTE: for "virtual" properties, this is null.
         */
        protected final AnnotatedMember _member;
    
        /**
         * @since 2.5
         */
        protected final PropertyMetadata _metadata;
    
        /**
         * @since 2.5
         */
        protected final PropertyName _fullName;
    
        /**
         * @since 2.5
         */
        protected final JsonInclude.Value _inclusion;
    
        /*
        /**********************************************************
        /* Construction
        /**********************************************************
         */
    
        /**
         * @since 2.9
         */
        protected SimpleBeanPropertyDefinition(AnnotationIntrospector intr,
                AnnotatedMember member, PropertyName fullName, PropertyMetadata metadata,
                JsonInclude.Value inclusion)
        {
            _annotationIntrospector = intr;
            _member = member;
            _fullName = fullName;
            _metadata = (metadata == null) ? PropertyMetadata.STD_OPTIONAL: metadata;
            _inclusion = inclusion;
        }
    
        /**
         * @since 2.2
         */
        public static SimpleBeanPropertyDefinition construct(MapperConfig<?> config,
        		AnnotatedMember member)
        {
            return new SimpleBeanPropertyDefinition(config.getAnnotationIntrospector(),
                    member, PropertyName.construct(member.getName()), null, EMPTY_INCLUDE);
        }
    
        /**
         * @since 2.5
         */
        public static SimpleBeanPropertyDefinition construct(MapperConfig<?> config,
                AnnotatedMember member, PropertyName name) {
            return construct(config, member, name, null, EMPTY_INCLUDE);
        }
    
        /**
         * Method called to create instance for virtual properties.
         *
         * @since 2.5
         */
        public static SimpleBeanPropertyDefinition construct(MapperConfig<?> config,
                AnnotatedMember member, PropertyName name, PropertyMetadata metadata,
                JsonInclude.Include inclusion)
        {
            JsonInclude.Value inclValue
                 = ((inclusion == null) || (inclusion == JsonInclude.Include.USE_DEFAULTS)) 
                 ? EMPTY_INCLUDE : JsonInclude.Value.construct(inclusion, null);
            return new SimpleBeanPropertyDefinition(config.getAnnotationIntrospector(),
                    member, name, metadata, inclValue);
        }
        
        /**
         * @since 2.7
         */
        public static SimpleBeanPropertyDefinition construct(MapperConfig<?> config,
                AnnotatedMember member, PropertyName name, PropertyMetadata metadata,
                JsonInclude.Value inclusion) {
              return new SimpleBeanPropertyDefinition(config.getAnnotationIntrospector(),
                      member, name, metadata, inclusion);
        }
    
        /*
        /**********************************************************
        /* Fluent factories
        /**********************************************************
         */
    
        @Override
        public BeanPropertyDefinition withSimpleName(String newName) {
            if (_fullName.hasSimpleName(newName) && !_fullName.hasNamespace()) {
                return this;
            }
            return new SimpleBeanPropertyDefinition(_annotationIntrospector,
                    _member, new PropertyName(newName), _metadata, _inclusion);
        }
    
        @Override
        public BeanPropertyDefinition withName(PropertyName newName) {
            if (_fullName.equals(newName)) {
                return this;
            }
            return new SimpleBeanPropertyDefinition(_annotationIntrospector, 
                    _member, newName, _metadata, _inclusion);
        }
    
        /**
         * @since 2.5
         */
        public BeanPropertyDefinition withMetadata(PropertyMetadata metadata) {
            if (metadata.equals(_metadata)) {
                return this;
            }
            return new SimpleBeanPropertyDefinition(_annotationIntrospector,
                    _member, _fullName, metadata, _inclusion);
        }
    
        /**
         * @since 2.5
         */
        public BeanPropertyDefinition withInclusion(JsonInclude.Value inclusion) {
            if (_inclusion == inclusion) {
                return this;
            }
            return new SimpleBeanPropertyDefinition(_annotationIntrospector,
                    _member, _fullName, _metadata, inclusion);
        }
    
        /*
        /**********************************************************
        /* Basic property information, name, type
        /**********************************************************
         */
    
        @Override
        public String getName() { return _fullName.getSimpleName(); }
    
        @Override
        public PropertyName getFullName() { return _fullName; }
    
        @Override
        public boolean hasName(PropertyName name) {
            return _fullName.equals(name);
        }
    
        @Override
        public String getInternalName() { return getName(); }
    
        @Override
        public PropertyName getWrapperName() {
            if ((_annotationIntrospector == null) || (_member == null)) {
                return null;
            }
            return _annotationIntrospector.findWrapperName(_member);
        }
    
        // hmmh. what should we claim here?
    
        @Override public boolean isExplicitlyIncluded() { return false; }
        @Override public boolean isExplicitlyNamed() { return false; }
    
        /**
         * We will indicate that property is optional, since there is nothing
         * to indicate whether it might be required.
         */
        @Override
        public PropertyMetadata getMetadata() {
            return _metadata;
        }
    
        @Override
        public JavaType getPrimaryType() {
            if (_member == null) {
                return TypeFactory.unknownType();
            }
            return _member.getType();
        }
    
        @Override
        public Class<?> getRawPrimaryType() {
            if (_member == null) {
                return Object.class;
            }
            return _member.getRawType();
        }
    
        @Override
        public JsonInclude.Value findInclusion() {
            return _inclusion;
        }
    
        /*
        /**********************************************************
        /* Access to accessors (fields, methods etc)
        /**********************************************************
         */
    
        @Override
        public boolean hasGetter() { return (getGetter() != null); }
    
        @Override
        public boolean hasSetter() { return (getSetter() != null); }
    
        @Override
        public boolean hasField() { return (_member instanceof AnnotatedField); }
    
        @Override
        public boolean hasConstructorParameter() { return (_member instanceof AnnotatedParameter); }
    
        @Override
        public AnnotatedMethod getGetter() {
            if ((_member instanceof AnnotatedMethod)
                    && ((AnnotatedMethod) _member).getParameterCount() == 0) {
                return (AnnotatedMethod) _member;
            }
            return null;
        }
    
        @Override
        public AnnotatedMethod getSetter() {
            if ((_member instanceof AnnotatedMethod)
                    && ((AnnotatedMethod) _member).getParameterCount() == 1) {
                return (AnnotatedMethod) _member;
            }
            return null;
        }
    
        @Override
        public AnnotatedField getField() {
            return (_member instanceof AnnotatedField) ? (AnnotatedField) _member : null;
        }
    
        @Override
        public AnnotatedParameter getConstructorParameter() {
            return (_member instanceof AnnotatedParameter) ? (AnnotatedParameter) _member : null;
        }
    
        @Override
        public Iterator<AnnotatedParameter> getConstructorParameters() {
            AnnotatedParameter param = getConstructorParameter();
            if (param == null) {
                return ClassUtil.emptyIterator();
            }
            return Collections.singleton(param).iterator();
        }
    
        @Override
        public AnnotatedMember getPrimaryMember() { return _member; }
    }
    

    com/fasterxml/jackson/databind/util/SimpleBeanPropertyDefinition.java

     

    ⇒ Jackson Annotations Source Code

    ⇐ Download and Install Jackson Binary Package

    ⇑ Downloading and Reviewing jackson-*.jar

    ⇑⇑ Jackson - Java JSON library

    2022-03-29, 32318👍, 0💬