private static List<Class<?>> getResourceRelatedClasses() {
        final Set<Class<?>> stroomClasses = new HashSet<>();
        try (ScanResult scanResult =
                new ClassGraph()
                        .enableClassInfo()             // Scan classes, methods, fields, annotations
                        .acceptPackages(PACKAGE_NAME)  // Scan com.xyz and subpackages (omit to scan all packages)
                        .scan()) {                   // Start the scan
            for (ClassInfo routeClassInfo : scanResult.getClassesImplementing(DirectRestService.class.getName())) {
                final Class<?> clazz = routeClassInfo.loadClass();
                addPublicMethods(stroomClasses, clazz);
            }
            for (ClassInfo routeClassInfo : scanResult.getClassesImplementing(RestResource.class.getName())) {
                final Class<?> clazz = routeClassInfo.loadClass();
                addPublicMethods(stroomClasses, clazz);
            }
        }

        return stroomClasses
                .stream()
                .sorted(Comparator.comparing(Class::getName))
                .collect(Collectors.toList());
    }
Test that classes that will be subject to JSON serialisation have the full complement of JSON annotations.
stroom-app/src/test/java/stroom/importexport/TestJsonSerialisation.java