This is an automated email from the ASF dual-hosted git repository. ppalaga pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
The following commit(s) were added to refs/heads/main by this push: new 8adfe8a AtlasMap: Use jandex to discover the types we need to register for reflection #2241 8adfe8a is described below commit 8adfe8a10ada3b1f8f01c70f91173457db5e846b Author: Zineb Bendhiba <bendhiba.zi...@gmail.com> AuthorDate: Thu Apr 22 13:49:56 2021 +0200 AtlasMap: Use jandex to discover the types we need to register for reflection #2241 --- .../atlasmap/deployment/AtlasmapProcessor.java | 331 +++------------------ 1 file changed, 39 insertions(+), 292 deletions(-) diff --git a/extensions/atlasmap/deployment/src/main/java/org/apache/camel/quarkus/component/atlasmap/deployment/AtlasmapProcessor.java b/extensions/atlasmap/deployment/src/main/java/org/apache/camel/quarkus/component/atlasmap/deployment/AtlasmapProcessor.java index 4eee6bf..9ba0849 100644 --- a/extensions/atlasmap/deployment/src/main/java/org/apache/camel/quarkus/component/atlasmap/deployment/AtlasmapProcessor.java +++ b/extensions/atlasmap/deployment/src/main/java/org/apache/camel/quarkus/component/atlasmap/deployment/AtlasmapProcessor.java @@ -22,169 +22,29 @@ import java.util.List; import java.util.Set; import java.util.stream.Stream; -import io.atlasmap.actions.CollectionActions; -import io.atlasmap.actions.DateFieldActions; -import io.atlasmap.actions.ExpressionFieldAction; -import io.atlasmap.actions.NumberFieldActions; -import io.atlasmap.actions.ObjectFieldActions; -import io.atlasmap.actions.StringComplexFieldActions; -import io.atlasmap.actions.StringSimpleFieldActions; -import io.atlasmap.converters.BigDecimalConverter; -import io.atlasmap.converters.BigIntegerConverter; -import io.atlasmap.converters.BooleanConverter; -import io.atlasmap.converters.ByteConverter; -import io.atlasmap.converters.CalendarConverter; -import io.atlasmap.converters.CharBufferConverter; -import io.atlasmap.converters.CharSequenceConverter; -import io.atlasmap.converters.CharacterConverter; -import io.atlasmap.converters.DateConverter; -import io.atlasmap.converters.DoubleConverter; -import io.atlasmap.converters.FloatConverter; -import io.atlasmap.converters.GregorianCalendarConverter; -import io.atlasmap.converters.IntegerConverter; -import io.atlasmap.converters.LocalDateConverter; -import io.atlasmap.converters.LocalDateTimeConverter; -import io.atlasmap.converters.LocalTimeConverter; -import io.atlasmap.converters.LongConverter; -import io.atlasmap.converters.NumberConverter; -import io.atlasmap.converters.ShortConverter; -import io.atlasmap.converters.SqlDateConverter; -import io.atlasmap.converters.SqlTimeConverter; -import io.atlasmap.converters.SqlTimestampConverter; -import io.atlasmap.converters.StringBufferConverter; -import io.atlasmap.converters.StringBuilderConverter; -import io.atlasmap.converters.StringConverter; -import io.atlasmap.converters.ZonedDateTimeConverter; import io.atlasmap.core.DefaultAtlasContextFactory; import io.atlasmap.core.DefaultAtlasModuleInfo; import io.atlasmap.csv.module.CsvModule; -import io.atlasmap.csv.v2.CsvDataSource; -import io.atlasmap.csv.v2.CsvField; import io.atlasmap.dfdl.module.DfdlModule; import io.atlasmap.java.module.JavaModule; -import io.atlasmap.java.v2.JavaField; -import io.atlasmap.java.v2.Modifier; -import io.atlasmap.java.v2.ModifierList; import io.atlasmap.json.module.JsonModule; -import io.atlasmap.json.v2.JsonComplexType; -import io.atlasmap.json.v2.JsonDataSource; -import io.atlasmap.json.v2.JsonEnumField; -import io.atlasmap.json.v2.JsonEnumFields; -import io.atlasmap.json.v2.JsonField; -import io.atlasmap.json.v2.JsonFields; import io.atlasmap.mxbean.AtlasContextFactoryMXBean; import io.atlasmap.mxbean.AtlasModuleInfoMXBean; import io.atlasmap.spi.AtlasConverter; import io.atlasmap.spi.AtlasFieldAction; -import io.atlasmap.v2.ADMDigest; -import io.atlasmap.v2.AbsoluteValue; import io.atlasmap.v2.Action; -import io.atlasmap.v2.Add; -import io.atlasmap.v2.AddDays; -import io.atlasmap.v2.AddSeconds; -import io.atlasmap.v2.Append; -import io.atlasmap.v2.AreaUnitType; -import io.atlasmap.v2.AtlasMapping; -import io.atlasmap.v2.Average; -import io.atlasmap.v2.BaseMapping; -import io.atlasmap.v2.Camelize; -import io.atlasmap.v2.Capitalize; -import io.atlasmap.v2.Ceiling; -import io.atlasmap.v2.CollectionType; -import io.atlasmap.v2.Concatenate; -import io.atlasmap.v2.Constant; -import io.atlasmap.v2.Constants; -import io.atlasmap.v2.Contains; -import io.atlasmap.v2.ConvertAreaUnit; -import io.atlasmap.v2.ConvertDistanceUnit; -import io.atlasmap.v2.ConvertMassUnit; -import io.atlasmap.v2.ConvertVolumeUnit; -import io.atlasmap.v2.CopyTo; -import io.atlasmap.v2.Count; -import io.atlasmap.v2.CurrentDate; -import io.atlasmap.v2.CurrentDateTime; -import io.atlasmap.v2.CurrentTime; -import io.atlasmap.v2.DataSource; import io.atlasmap.v2.DataSourceMetadata; -import io.atlasmap.v2.DataSourceType; -import io.atlasmap.v2.DayOfMonth; -import io.atlasmap.v2.DayOfWeek; -import io.atlasmap.v2.DayOfYear; -import io.atlasmap.v2.DistanceUnitType; -import io.atlasmap.v2.Divide; -import io.atlasmap.v2.EndsWith; -import io.atlasmap.v2.Equals; -import io.atlasmap.v2.Expression; -import io.atlasmap.v2.Field; -import io.atlasmap.v2.FieldAction; -import io.atlasmap.v2.FieldGroup; -import io.atlasmap.v2.FieldStatus; -import io.atlasmap.v2.FieldType; -import io.atlasmap.v2.FileExtension; -import io.atlasmap.v2.Floor; -import io.atlasmap.v2.Format; -import io.atlasmap.v2.GenerateUUID; -import io.atlasmap.v2.IndexOf; -import io.atlasmap.v2.InspectionType; -import io.atlasmap.v2.IsNull; -import io.atlasmap.v2.ItemAt; -import io.atlasmap.v2.LastIndexOf; -import io.atlasmap.v2.Length; -import io.atlasmap.v2.LookupEntry; -import io.atlasmap.v2.LookupTable; -import io.atlasmap.v2.LookupTables; -import io.atlasmap.v2.Lowercase; -import io.atlasmap.v2.LowercaseChar; -import io.atlasmap.v2.Mapping; -import io.atlasmap.v2.MappingType; -import io.atlasmap.v2.Mappings; -import io.atlasmap.v2.MassUnitType; -import io.atlasmap.v2.Maximum; -import io.atlasmap.v2.Minimum; -import io.atlasmap.v2.Multiply; -import io.atlasmap.v2.Normalize; -import io.atlasmap.v2.PadStringLeft; -import io.atlasmap.v2.PadStringRight; -import io.atlasmap.v2.Prepend; -import io.atlasmap.v2.Properties; -import io.atlasmap.v2.Property; -import io.atlasmap.v2.RemoveFileExtension; -import io.atlasmap.v2.Repeat; -import io.atlasmap.v2.ReplaceAll; -import io.atlasmap.v2.ReplaceFirst; -import io.atlasmap.v2.Round; -import io.atlasmap.v2.SeparateByDash; -import io.atlasmap.v2.SeparateByUnderscore; -import io.atlasmap.v2.Split; -import io.atlasmap.v2.StartsWith; -import io.atlasmap.v2.StringList; -import io.atlasmap.v2.SubString; -import io.atlasmap.v2.SubStringAfter; -import io.atlasmap.v2.SubStringBefore; -import io.atlasmap.v2.Subtract; -import io.atlasmap.v2.Trim; -import io.atlasmap.v2.TrimLeft; -import io.atlasmap.v2.TrimRight; -import io.atlasmap.v2.Uppercase; -import io.atlasmap.v2.UppercaseChar; -import io.atlasmap.v2.ValueContainer; -import io.atlasmap.v2.VolumeUnitType; import io.atlasmap.xml.module.XmlModule; -import io.atlasmap.xml.v2.NodeType; -import io.atlasmap.xml.v2.Restriction; -import io.atlasmap.xml.v2.RestrictionType; -import io.atlasmap.xml.v2.Restrictions; -import io.atlasmap.xml.v2.XmlDataSource; -import io.atlasmap.xml.v2.XmlField; -import io.atlasmap.xml.v2.XmlNamespace; -import io.atlasmap.xml.v2.XmlNamespaces; import io.quarkus.deployment.annotations.BuildProducer; import io.quarkus.deployment.annotations.BuildStep; +import io.quarkus.deployment.builditem.CombinedIndexBuildItem; import io.quarkus.deployment.builditem.FeatureBuildItem; +import io.quarkus.deployment.builditem.IndexDependencyBuildItem; import io.quarkus.deployment.builditem.nativeimage.NativeImageResourceBuildItem; import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem; import io.quarkus.deployment.builditem.nativeimage.ServiceProviderBuildItem; import io.quarkus.deployment.util.ServiceUtil; +import org.jboss.jandex.IndexView; class AtlasmapProcessor { @@ -199,160 +59,17 @@ class AtlasmapProcessor { @BuildStep List<ReflectiveClassBuildItem> registerReflectiveClasses() { List<ReflectiveClassBuildItem> items = new ArrayList<ReflectiveClassBuildItem>(); - items.add(new ReflectiveClassBuildItem(true, false, CollectionActions.class)); - items.add(new ReflectiveClassBuildItem(true, false, ExpressionFieldAction.class)); - items.add(new ReflectiveClassBuildItem(true, false, NumberFieldActions.class)); - items.add(new ReflectiveClassBuildItem(true, false, ObjectFieldActions.class)); - items.add(new ReflectiveClassBuildItem(true, false, StringComplexFieldActions.class)); - items.add(new ReflectiveClassBuildItem(true, false, StringSimpleFieldActions.class)); - items.add(new ReflectiveClassBuildItem(true, false, BigDecimalConverter.class)); - items.add(new ReflectiveClassBuildItem(true, false, BigIntegerConverter.class)); - items.add(new ReflectiveClassBuildItem(true, false, BooleanConverter.class)); - items.add(new ReflectiveClassBuildItem(true, false, ByteConverter.class)); - items.add(new ReflectiveClassBuildItem(true, false, CalendarConverter.class)); - items.add(new ReflectiveClassBuildItem(true, false, CharBufferConverter.class)); - items.add(new ReflectiveClassBuildItem(true, false, CharSequenceConverter.class)); - items.add(new ReflectiveClassBuildItem(true, false, CharacterConverter.class)); - items.add(new ReflectiveClassBuildItem(true, false, DateConverter.class)); - items.add(new ReflectiveClassBuildItem(true, false, DoubleConverter.class)); - items.add(new ReflectiveClassBuildItem(true, false, FloatConverter.class)); - items.add(new ReflectiveClassBuildItem(true, false, GregorianCalendarConverter.class)); - items.add(new ReflectiveClassBuildItem(true, false, IntegerConverter.class)); - items.add(new ReflectiveClassBuildItem(true, false, LocalDateConverter.class)); - items.add(new ReflectiveClassBuildItem(true, false, LocalDateTimeConverter.class)); - items.add(new ReflectiveClassBuildItem(true, false, LocalTimeConverter.class)); - items.add(new ReflectiveClassBuildItem(true, false, LongConverter.class)); - items.add(new ReflectiveClassBuildItem(true, false, NumberConverter.class)); - items.add(new ReflectiveClassBuildItem(true, false, ShortConverter.class)); - items.add(new ReflectiveClassBuildItem(true, false, SqlDateConverter.class)); - items.add(new ReflectiveClassBuildItem(true, false, SqlTimeConverter.class)); - items.add(new ReflectiveClassBuildItem(true, false, SqlTimestampConverter.class)); - items.add(new ReflectiveClassBuildItem(true, false, StringBufferConverter.class)); - items.add(new ReflectiveClassBuildItem(true, false, StringBuilderConverter.class)); - items.add(new ReflectiveClassBuildItem(true, false, StringConverter.class)); - items.add(new ReflectiveClassBuildItem(true, false, ZonedDateTimeConverter.class)); items.add(new ReflectiveClassBuildItem(false, false, DefaultAtlasContextFactory.class)); items.add(new ReflectiveClassBuildItem(false, false, DefaultAtlasModuleInfo.class)); + items.add(new ReflectiveClassBuildItem(true, false, JsonModule.class)); items.add(new ReflectiveClassBuildItem(true, false, CsvModule.class)); items.add(new ReflectiveClassBuildItem(true, false, DfdlModule.class)); items.add(new ReflectiveClassBuildItem(true, false, JavaModule.class)); - items.add(new ReflectiveClassBuildItem(true, true, JavaField.class)); - items.add(new ReflectiveClassBuildItem(true, true, Modifier.class)); - items.add(new ReflectiveClassBuildItem(true, true, ModifierList.class)); - items.add(new ReflectiveClassBuildItem(true, false, JsonModule.class)); - items.add(new ReflectiveClassBuildItem(true, true, JsonComplexType.class)); - items.add(new ReflectiveClassBuildItem(true, true, JsonDataSource.class)); - items.add(new ReflectiveClassBuildItem(true, true, JsonEnumField.class)); - items.add(new ReflectiveClassBuildItem(true, true, JsonEnumFields.class)); - items.add(new ReflectiveClassBuildItem(true, true, JsonField.class)); - items.add(new ReflectiveClassBuildItem(true, true, JsonFields.class)); + items.add(new ReflectiveClassBuildItem(true, false, XmlModule.class)); items.add(new ReflectiveClassBuildItem(false, true, false, AtlasContextFactoryMXBean.class)); items.add(new ReflectiveClassBuildItem(false, true, false, AtlasModuleInfoMXBean.class)); - items.add(new ReflectiveClassBuildItem(true, true, AbsoluteValue.class)); - items.add(new ReflectiveClassBuildItem(true, true, Action.class)); - items.add(new ReflectiveClassBuildItem(true, true, Add.class)); - items.add(new ReflectiveClassBuildItem(true, true, AddDays.class)); - items.add(new ReflectiveClassBuildItem(true, true, AddSeconds.class)); - items.add(new ReflectiveClassBuildItem(true, true, Append.class)); - items.add(new ReflectiveClassBuildItem(true, true, AreaUnitType.class)); - items.add(new ReflectiveClassBuildItem(true, true, AtlasMapping.class)); - items.add(new ReflectiveClassBuildItem(true, true, Average.class)); - items.add(new ReflectiveClassBuildItem(true, true, BaseMapping.class)); - items.add(new ReflectiveClassBuildItem(true, true, Camelize.class)); - items.add(new ReflectiveClassBuildItem(true, true, Capitalize.class)); - items.add(new ReflectiveClassBuildItem(true, true, Ceiling.class)); - items.add(new ReflectiveClassBuildItem(false, true, true, CollectionType.class)); - items.add(new ReflectiveClassBuildItem(true, true, Concatenate.class)); - items.add(new ReflectiveClassBuildItem(true, true, Constant.class)); - items.add(new ReflectiveClassBuildItem(true, true, Constants.class)); - items.add(new ReflectiveClassBuildItem(true, true, Contains.class)); - items.add(new ReflectiveClassBuildItem(true, true, ConvertAreaUnit.class)); - items.add(new ReflectiveClassBuildItem(true, true, ConvertDistanceUnit.class)); - items.add(new ReflectiveClassBuildItem(true, true, ConvertMassUnit.class)); - items.add(new ReflectiveClassBuildItem(true, true, ConvertVolumeUnit.class)); - items.add(new ReflectiveClassBuildItem(true, true, CopyTo.class)); - items.add(new ReflectiveClassBuildItem(true, true, Count.class)); - items.add(new ReflectiveClassBuildItem(true, true, CurrentDate.class)); - items.add(new ReflectiveClassBuildItem(true, true, CurrentDateTime.class)); - items.add(new ReflectiveClassBuildItem(true, true, CurrentTime.class)); - items.add(new ReflectiveClassBuildItem(true, true, DataSource.class)); - items.add(new ReflectiveClassBuildItem(false, true, true, DataSourceType.class)); - items.add(new ReflectiveClassBuildItem(true, true, DayOfMonth.class)); - items.add(new ReflectiveClassBuildItem(true, true, DayOfWeek.class)); - items.add(new ReflectiveClassBuildItem(true, true, DayOfYear.class)); - items.add(new ReflectiveClassBuildItem(false, true, true, DistanceUnitType.class)); - items.add(new ReflectiveClassBuildItem(true, true, Divide.class)); - items.add(new ReflectiveClassBuildItem(true, true, EndsWith.class)); - items.add(new ReflectiveClassBuildItem(true, true, Equals.class)); - items.add(new ReflectiveClassBuildItem(true, true, Expression.class)); - items.add(new ReflectiveClassBuildItem(true, true, Field.class)); - items.add(new ReflectiveClassBuildItem(false, true, false, FieldAction.class)); - items.add(new ReflectiveClassBuildItem(true, true, FieldGroup.class)); - items.add(new ReflectiveClassBuildItem(false, true, true, FieldStatus.class)); - items.add(new ReflectiveClassBuildItem(false, true, true, FieldType.class)); - items.add(new ReflectiveClassBuildItem(true, true, FileExtension.class)); - items.add(new ReflectiveClassBuildItem(true, true, Floor.class)); - items.add(new ReflectiveClassBuildItem(true, true, Format.class)); - items.add(new ReflectiveClassBuildItem(true, true, GenerateUUID.class)); - items.add(new ReflectiveClassBuildItem(true, true, IndexOf.class)); - items.add(new ReflectiveClassBuildItem(true, true, IsNull.class)); - items.add(new ReflectiveClassBuildItem(true, true, ItemAt.class)); - items.add(new ReflectiveClassBuildItem(true, true, LastIndexOf.class)); - items.add(new ReflectiveClassBuildItem(true, true, Length.class)); - items.add(new ReflectiveClassBuildItem(true, true, LookupEntry.class)); - items.add(new ReflectiveClassBuildItem(true, true, LookupTable.class)); - items.add(new ReflectiveClassBuildItem(true, true, LookupTables.class)); - items.add(new ReflectiveClassBuildItem(true, true, Lowercase.class)); - items.add(new ReflectiveClassBuildItem(true, true, LowercaseChar.class)); - items.add(new ReflectiveClassBuildItem(true, true, Mapping.class)); - items.add(new ReflectiveClassBuildItem(false, true, true, MappingType.class)); - items.add(new ReflectiveClassBuildItem(true, true, Mappings.class)); - items.add(new ReflectiveClassBuildItem(false, true, true, MassUnitType.class)); - items.add(new ReflectiveClassBuildItem(true, true, Maximum.class)); - items.add(new ReflectiveClassBuildItem(true, true, Minimum.class)); - items.add(new ReflectiveClassBuildItem(true, true, Multiply.class)); - items.add(new ReflectiveClassBuildItem(true, true, Normalize.class)); - items.add(new ReflectiveClassBuildItem(true, true, PadStringLeft.class)); - items.add(new ReflectiveClassBuildItem(true, true, PadStringRight.class)); - items.add(new ReflectiveClassBuildItem(true, true, Prepend.class)); - items.add(new ReflectiveClassBuildItem(true, true, Properties.class)); - items.add(new ReflectiveClassBuildItem(true, true, Property.class)); - items.add(new ReflectiveClassBuildItem(true, true, RemoveFileExtension.class)); - items.add(new ReflectiveClassBuildItem(true, true, Repeat.class)); - items.add(new ReflectiveClassBuildItem(true, true, ReplaceAll.class)); - items.add(new ReflectiveClassBuildItem(true, true, ReplaceFirst.class)); - items.add(new ReflectiveClassBuildItem(true, true, Round.class)); - items.add(new ReflectiveClassBuildItem(true, true, SeparateByDash.class)); - items.add(new ReflectiveClassBuildItem(true, true, SeparateByUnderscore.class)); - items.add(new ReflectiveClassBuildItem(true, true, Split.class)); - items.add(new ReflectiveClassBuildItem(true, true, StartsWith.class)); - items.add(new ReflectiveClassBuildItem(true, true, StringList.class)); - items.add(new ReflectiveClassBuildItem(true, true, SubString.class)); - items.add(new ReflectiveClassBuildItem(true, true, SubStringAfter.class)); - items.add(new ReflectiveClassBuildItem(true, true, SubStringBefore.class)); - items.add(new ReflectiveClassBuildItem(true, true, Subtract.class)); - items.add(new ReflectiveClassBuildItem(true, true, Trim.class)); - items.add(new ReflectiveClassBuildItem(true, true, TrimLeft.class)); - items.add(new ReflectiveClassBuildItem(true, true, TrimRight.class)); - items.add(new ReflectiveClassBuildItem(true, true, Uppercase.class)); - items.add(new ReflectiveClassBuildItem(true, true, UppercaseChar.class)); - items.add(new ReflectiveClassBuildItem(false, true, true, VolumeUnitType.class)); - items.add(new ReflectiveClassBuildItem(true, false, XmlModule.class)); - items.add(new ReflectiveClassBuildItem(false, true, false, DateFieldActions.class)); - items.add(new ReflectiveClassBuildItem(false, true, true, NodeType.class)); - items.add(new ReflectiveClassBuildItem(true, true, Restriction.class)); - items.add(new ReflectiveClassBuildItem(false, true, true, RestrictionType.class)); - items.add(new ReflectiveClassBuildItem(true, true, Restrictions.class)); - items.add(new ReflectiveClassBuildItem(true, true, XmlDataSource.class)); - items.add(new ReflectiveClassBuildItem(true, true, XmlField.class)); - items.add(new ReflectiveClassBuildItem(true, true, XmlNamespace.class)); - items.add(new ReflectiveClassBuildItem(true, true, XmlNamespaces.class)); - items.add(new ReflectiveClassBuildItem(true, true, CsvDataSource.class)); - items.add(new ReflectiveClassBuildItem(true, true, CsvField.class)); - items.add(new ReflectiveClassBuildItem(true, true, ADMDigest.class)); - items.add(new ReflectiveClassBuildItem(true, true, DataSourceMetadata.class)); - items.add(new ReflectiveClassBuildItem(false, true, true, InspectionType.class)); - items.add(new ReflectiveClassBuildItem(true, true, ValueContainer.class)); + // that class needs reflection on both methods and fields : see issue https://github.com/atlasmap/atlasmap/issues/2722 + items.add(new ReflectiveClassBuildItem(false, true, true, DataSourceMetadata.class)); return items; } @@ -362,7 +79,33 @@ class AtlasmapProcessor { } @BuildStep - void registerNativeImageResources(BuildProducer<ServiceProviderBuildItem> services) { + void addDependencies(BuildProducer<IndexDependencyBuildItem> indexDependency) { + indexDependency.produce(new IndexDependencyBuildItem("io.atlasmap", "atlas-model")); + indexDependency.produce(new IndexDependencyBuildItem("io.atlasmap", "atlas-xml-model")); + indexDependency.produce(new IndexDependencyBuildItem("io.atlasmap", "atlas-java-model")); + indexDependency.produce(new IndexDependencyBuildItem("io.atlasmap", "atlas-json-model")); + indexDependency.produce(new IndexDependencyBuildItem("io.atlasmap", "atlas-csv-model")); + indexDependency.produce(new IndexDependencyBuildItem("io.atlasmap", "atlas-dfdl-model")); + } + + @BuildStep + ReflectiveClassBuildItem registerForReflection(CombinedIndexBuildItem combinedIndex) { + IndexView index = combinedIndex.getIndex(); + // register Atlasmap model classes for serialize/deserialize + String[] dtos = index.getKnownClasses().stream().map(ci -> ci.name().toString()) + .filter(n -> n.startsWith("io.atlasmap.v2") + || n.startsWith("io.atlasmap.json.v2") + || n.startsWith("io.atlasmap.java.v2") + || n.startsWith("io.atlasmap.xml.v2") + || n.startsWith("io.atlasmap.csv.v2") + || n.startsWith("io.atlasmap.dfdl.v2")) + .toArray(String[]::new); + return new ReflectiveClassBuildItem(true, false, dtos); + } + + @BuildStep + void registerNativeImageResources(BuildProducer<ServiceProviderBuildItem> services, + BuildProducer<ReflectiveClassBuildItem> reflectiveClass) { Stream.of( AtlasConverter.class.getName(), AtlasFieldAction.class.getName(), @@ -376,10 +119,14 @@ class AtlasmapProcessor { new ServiceProviderBuildItem(service, implementations.toArray(new String[0]))); + // register those classes for reflection too + // we don't need to add external dependency atlas-core for the services + String[] dtos = implementations.stream() + .toArray(String[]::new); + reflectiveClass.produce(new ReflectiveClassBuildItem(true, false, dtos)); } catch (IOException e) { throw new RuntimeException(e); } }); } - }