private List<Data> getDataItemsFromJavaBean(Object bean) {

        // Construct a Jackson JavaType for the class
        final JavaType javaType = objectMapper.getTypeFactory().constructType(bean.getClass());

        // Introspect the given type
        final BeanDescription beanDescription = objectMapper.getSerializationConfig().introspect(javaType);

        // Find properties
        final List<BeanPropertyDefinition> properties = beanDescription.findProperties();

        // Get class level ignored properties
        final Set<String> ignoredProperties = new HashSet<>(objectMapper.getSerializationConfig()
                .getAnnotationIntrospector()
                .findPropertyIgnorals(beanDescription.getClassInfo())
                .getIgnored()); // Filter properties removing the class level ignored ones

        if (loggingConfigProvider.get().isOmitRecordDetailsLoggingEnabled()) {
            final Set<String> standardInterfaceProperties = ignorePropertiesFromStandardInterfaces(bean);
            ignoredProperties.addAll(standardInterfaceProperties);
        }

        final List<BeanPropertyDefinition> availableProperties = properties.stream()
                .filter(property -> !ignoredProperties.contains(property.getName()))
                .collect(Collectors.toList());

        return availableProperties.stream().map(
                beanPropDef -> {
                    final Object valObj = extractPropVal(beanPropDef, bean);
                    return convertValToData(beanPropDef.getName(), valObj);
                }).collect(Collectors.toList());
    }
Create {@link Data} items from properties of the supplied POJO

@param obj POJO from which to extract properties
@return List of {@link Data} items representing properties of the supplied POJO
stroom-event-logging/stroom-event-logging-impl/src/main/java/stroom/event/logging/impl/StroomEventLoggingServiceImpl.java