@@ -109,6 +109,8 @@ class CamelProcessor {
109109 "org.apache.camel.Predicate" );
110110 private static final DotName CONVERTER_TYPE = DotName .createSimple (
111111 "org.apache.camel.Converter" );
112+ private static final DotName TRANSFORMER_TYPE = DotName .createSimple (
113+ "org.apache.camel.spi.Transformer" );
112114
113115 private static final Set <DotName > UNREMOVABLE_BEANS_TYPES = CamelSupport .setOf (
114116 ROUTES_BUILDER_TYPE ,
@@ -433,26 +435,39 @@ CamelComponentNameResolverBuildItem componentNameResolver(
433435 }
434436
435437 /**
436- * Discovers classes annotated with @DataTypeTransformer for package scanning and reflection.
438+ * Discovers all Transformer implementations for package scanning and reflection.
437439 * This enables transformer.scan() to work in native mode.
438440 */
439441 @ BuildStep
440- void discoverDataTypeTransformers (
442+ void discoverTransformers (
443+ ApplicationArchivesBuildItem applicationArchives ,
441444 CombinedIndexBuildItem combinedIndex ,
442445 BuildProducer <CamelPackageScanClassBuildItem > packageScanClass ,
443446 BuildProducer <ReflectiveClassBuildItem > reflectiveClass ) {
444447
445- IndexView view = combinedIndex .getIndex ();
446- DotName dataTypeTransformer = DotName .createSimple ("org.apache.camel.spi.DataTypeTransformer" );
448+ IndexView index = combinedIndex .getIndex ();
449+
450+ Set <String > internalTransformers = new HashSet <>();
451+ // Ignore all Transformer implementations from org.apache.camel:camel-* dependencies
452+ for (ApplicationArchive archive : applicationArchives .getAllApplicationArchives ()) {
453+ ArtifactKey artifactKey = archive .getKey ();
454+ if (artifactKey != null && "org.apache.camel" .equals (artifactKey .getGroupId ())
455+ && artifactKey .getArtifactId ().startsWith ("camel-" )) {
456+ internalTransformers .addAll (archive .getIndex ().getAllKnownSubclasses (TRANSFORMER_TYPE )
457+ .stream ()
458+ .map (classInfo -> classInfo .name ().toString ())
459+ .collect (Collectors .toSet ()));
460+ }
461+ }
447462
448- Set <String > transformerClasses = view . getAnnotations ( dataTypeTransformer )
463+ Set <String > transformerClasses = index . getAllKnownSubclasses ( TRANSFORMER_TYPE )
449464 .stream ()
450- .filter ( ai -> ai . target ().kind () == AnnotationTarget . Kind . CLASS )
451- .map ( ai -> ai . target (). asClass (). name (). toString ( ))
465+ .map ( classInfo -> classInfo . name ().toString () )
466+ .filter ( className -> ! internalTransformers . contains ( className ))
452467 .collect (Collectors .toSet ());
453468
454469 if (!transformerClasses .isEmpty ()) {
455- LOGGER .debug ("Found @DataTypeTransformer annotated classes: {}" , transformerClasses );
470+ LOGGER .debug ("Found Transformer classes: {}" , transformerClasses );
456471 packageScanClass .produce (new CamelPackageScanClassBuildItem (transformerClasses ));
457472
458473 // Register transformer classes for reflection so they can be instantiated at runtime
0 commit comments