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);
                     }
                 });
     }
-
 }

Reply via email to