in extensions-support/mail/deployment/src/main/java/org/apache/camel/quarkus/support/mail/deployment/SupportMailProcessor.java [63:129]
void registerServices(
CombinedIndexBuildItem combinedIndex,
BuildProducer<ReflectiveClassBuildItem> reflectiveClass,
BuildProducer<NativeImageResourceBuildItem> resource,
BuildProducer<ServiceProviderBuildItem> services) {
List<String> providers = resources("META-INF/services/jakarta.mail.Provider")
.flatMap(this::lines)
.filter(s -> !s.startsWith("#"))
.toList();
List<String> streamProviders = resources("META-INF/services/jakarta.mail.util.StreamProvider")
.flatMap(this::lines)
.filter(s -> !s.startsWith("#"))
.toList();
List<String> imp1 = providers.stream()
.map(this::loadClass)
.map(this::instantiate)
.map(Provider.class::cast)
.map(Provider::getClassName)
.toList();
List<String> imp2 = Stream.of("META-INF/javamail.default.providers", "META-INF/javamail.providers")
.flatMap(this::resources)
.flatMap(this::lines)
.filter(s -> !s.startsWith("#"))
.flatMap(s -> Stream.of(s.split(";")))
.map(String::trim)
.filter(s -> s.startsWith("class="))
.map(s -> s.substring("class=".length()))
.toList();
List<String> imp3 = resources("META-INF/mailcap")
.flatMap(this::lines)
.filter(s -> !s.startsWith("#"))
.flatMap(s -> Stream.of(s.split(";")))
.map(String::trim)
.filter(s -> s.startsWith("x-java-content-handler="))
.map(s -> s.substring("x-java-content-handler=".length()))
.toList();
reflectiveClass.produce(ReflectiveClassBuildItem.builder(Stream.concat(providers.stream(),
Stream.concat(streamProviders.stream(),
Stream.concat(imp1.stream(), Stream.concat(imp2.stream(), imp3.stream()))))
.distinct()
.toArray(String[]::new)).build());
resource.produce(new NativeImageResourceBuildItem(
"META-INF/services/jakarta.mail.Provider",
"META-INF/services/jakarta.mail.util.StreamProvider",
"META-INF/javamail.charset.map",
"META-INF/javamail.default.address.map",
"META-INF/javamail.default.providers",
"META-INF/javamail.address.map",
"META-INF/javamail.providers",
"META-INF/mailcap"));
//jakarta activation spi
combinedIndex.getIndex().getKnownClasses()
.stream()
.map(classInfo -> classInfo.name().toString())
.filter(name -> name.startsWith("jakarta.activation.spi."))
.forEach(name -> combinedIndex.getIndex().getKnownDirectImplementors(DotName.createSimple(name))
.stream()
.forEach(service -> services.produce(
new ServiceProviderBuildItem(name, service.name().toString()))));
}