static

in costcategory/src/main/java/software/amazon/ce/costcategory/CostCategoryParser.java [27:65]


    static {
        OBJECT_MAPPER.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true);

        // Use upper case in JSON key
        OBJECT_MAPPER.setPropertyNamingStrategy(new PropertyNamingStrategy.UpperCamelCaseStrategy());

        // SDK model has private field without getter/setter, make Jackson to use field directly
        OBJECT_MAPPER.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);

        // Skip null or empty values when serializing to JSON
        OBJECT_MAPPER.setSerializationInclusion(JsonInclude.Include.NON_NULL);
        OBJECT_MAPPER.setSerializationInclusion(JsonInclude.Include.NON_EMPTY);

        // SDK model has no default constructor, and build class is private.
        // Add custom builder so Jackson can deserialize the class.
        final Map<Class<?>, Class<?>> buildersMap = ImmutableMap.<Class<?>, Class<?>>builder()
                .put(CostCategoryRule.class, CostCategoryRule.serializableBuilderClass())
                .put(Expression.class, Expression.serializableBuilderClass())
                .put(DimensionValues.class, DimensionValues.serializableBuilderClass())
                .put(TagValues.class, TagValues.serializableBuilderClass())
                .put(CostCategoryValues.class, CostCategoryValues.serializableBuilderClass())
                .put(CostCategoryInheritedValueDimension.class, CostCategoryInheritedValueDimension.serializableBuilderClass())
                .put(CostCategorySplitChargeRule.class, CostCategorySplitChargeRule.serializableBuilderClass())
                .put(CostCategorySplitChargeRuleParameter.class, CostCategorySplitChargeRuleParameter.serializableBuilderClass())
                .build();

        OBJECT_MAPPER.setAnnotationIntrospector(new JacksonAnnotationIntrospector() {
            private static final long serialVersionUID = 1L;

            @Override
            public Class<?> findPOJOBuilder(AnnotatedClass ac) {
                if (buildersMap.containsKey(ac.getRawType())) {
                    return buildersMap.get(ac.getRawType());
                }
                return super.findPOJOBuilder(ac);
            }
        });
        objectWriter = OBJECT_MAPPER.writerWithDefaultPrettyPrinter();
    }