public static void loadAndSetEventQualifierSerializer() { logger.info("Attempting to load {}.{}", SERIALIZER_PACKAGE_NAME, SERIALIZER_CLASS_NAME); final Optional<Class<?>> loadedImpl = ClassChangeUtil.loadClassIfPresent( SERIALIZER_PACKAGE_NAME, SERIALIZER_CLASS_NAME); if (loadedImpl.isPresent()) { logger.info("Successfully loaded {}.{}", SERIALIZER_PACKAGE_NAME, SERIALIZER_CLASS_NAME); final Class<?> clazz = loadedImpl.get(); instantiateAndSetEventQualifierSerializer(clazz); } else { logger.warn("No {}.{} found on the classpath. Attempting to generate and load.", SERIALIZER_PACKAGE_NAME, SERIALIZER_CLASS_NAME); final Class<? extends EventQualifierSerializer> clazz; try { clazz = Assert.notNull(generateAndLoad()); } catch (final Throwable t) { throw new RuntimeException("Could not generate " + EventQualifierSerializer.SERIALIZER_CLASS_NAME, t); } logger.info("Successfully generated and loaded {}.{}", SERIALIZER_PACKAGE_NAME, SERIALIZER_CLASS_NAME); instantiateAndSetEventQualifierSerializer(clazz); } }