From 2dfafe3ba69fde74d9f63bdac86d903f194f467f Mon Sep 17 00:00:00 2001 From: Peter Palaga Date: Thu, 5 Dec 2019 11:57:59 +0100 Subject: [PATCH] Fix #518 Rely on configurers for Configuration classes instead of using reflection --- .../aws/ec2/deployment/AwsEc2Processor.java | 4 +- .../aws/ecs/deployment/AwsEcsProcessor.java | 4 +- .../aws/eks/deployment/AwsEKSProcessor.java | 4 +- .../aws/iam/deployment/AwsIamProcessor.java | 4 +- .../deployment/AwsKinesisProcessor.java | 6 +- .../aws/kms/deployment/AwsKmsProcessor.java | 4 +- .../lambda/deployment/AwsLambdaProcessor.java | 4 +- .../aws/s3/deployment/AwsS3Processor.java | 4 +- .../aws/sns/deployment/AwsSNSProcessor.java | 4 +- .../aws/sqs/deployment/AwsSQSProcessor.java | 4 +- .../deployment/AwsTranslateProcessor.java | 4 +- .../core/deployment/NativeImageProcessor.java | 3 +- .../UnbannedReflectiveBuildItem.java | 47 ++++++++ .../dozer/deployment/DozerProcessor.java | 2 - .../ftp/deployment/FtpProcessor.java | 9 -- .../deployment/InfinispanProcessor.java | 7 -- .../paho/deployment/PahoProcessor.java | 4 +- extensions/support/policy/deployment/pom.xml | 75 ++++++++++++ .../policy/deployment/PolicyProcessor.java | 112 ++++++++++++++++++ extensions/support/policy/pom.xml | 39 ++++++ extensions/support/policy/runtime/pom.xml | 78 ++++++++++++ extensions/support/pom.xml | 1 + .../twitter/deployment/TwitterProcessor.java | 4 +- integration-tests/pom.xml | 7 ++ poms/bom-deployment/pom.xml | 5 + poms/bom/pom.xml | 5 + 26 files changed, 384 insertions(+), 60 deletions(-) create mode 100644 extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/UnbannedReflectiveBuildItem.java create mode 100644 extensions/support/policy/deployment/pom.xml create mode 100644 extensions/support/policy/deployment/src/main/java/org/apache/camel/quarkus/component/support/policy/deployment/PolicyProcessor.java create mode 100644 extensions/support/policy/pom.xml create mode 100644 extensions/support/policy/runtime/pom.xml diff --git a/extensions/aws-ec2/deployment/src/main/java/org/apache/camel/quarkus/component/aws/ec2/deployment/AwsEc2Processor.java b/extensions/aws-ec2/deployment/src/main/java/org/apache/camel/quarkus/component/aws/ec2/deployment/AwsEc2Processor.java index 292e4ef9e3b1..e3e76d02457b 100644 --- a/extensions/aws-ec2/deployment/src/main/java/org/apache/camel/quarkus/component/aws/ec2/deployment/AwsEc2Processor.java +++ b/extensions/aws-ec2/deployment/src/main/java/org/apache/camel/quarkus/component/aws/ec2/deployment/AwsEc2Processor.java @@ -29,7 +29,6 @@ import io.quarkus.deployment.builditem.FeatureBuildItem; import io.quarkus.deployment.builditem.nativeimage.NativeImageResourceBuildItem; import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem; -import org.apache.camel.component.aws.ec2.EC2Configuration; class AwsEc2Processor { public static final String AWS_EC2_APPLICATION_ARCHIVE_MARKERS = "com/amazonaws"; @@ -58,8 +57,7 @@ void process(CombinedIndexBuildItem combinedIndexBuildItem, Endpoint.class.getCanonicalName(), Region.class.getCanonicalName(), Service.class.getCanonicalName(), - CredentialScope.class.getCanonicalName(), - EC2Configuration.class.getCanonicalName())); + CredentialScope.class.getCanonicalName())); } } diff --git a/extensions/aws-ecs/deployment/src/main/java/org/apache/camel/quarkus/component/aws/ecs/deployment/AwsEcsProcessor.java b/extensions/aws-ecs/deployment/src/main/java/org/apache/camel/quarkus/component/aws/ecs/deployment/AwsEcsProcessor.java index b4f20a61229a..ba58aae6068c 100644 --- a/extensions/aws-ecs/deployment/src/main/java/org/apache/camel/quarkus/component/aws/ecs/deployment/AwsEcsProcessor.java +++ b/extensions/aws-ecs/deployment/src/main/java/org/apache/camel/quarkus/component/aws/ecs/deployment/AwsEcsProcessor.java @@ -29,7 +29,6 @@ import io.quarkus.deployment.builditem.FeatureBuildItem; import io.quarkus.deployment.builditem.nativeimage.NativeImageResourceBuildItem; import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem; -import org.apache.camel.component.aws.ecs.ECSConfiguration; class AwsEcsProcessor { @@ -59,7 +58,6 @@ void process(CombinedIndexBuildItem combinedIndexBuildItem, Endpoint.class.getCanonicalName(), Region.class.getCanonicalName(), Service.class.getCanonicalName(), - CredentialScope.class.getCanonicalName(), - ECSConfiguration.class.getCanonicalName())); + CredentialScope.class.getCanonicalName())); } } diff --git a/extensions/aws-eks/deployment/src/main/java/org/apache/camel/quarkus/component/aws/eks/deployment/AwsEKSProcessor.java b/extensions/aws-eks/deployment/src/main/java/org/apache/camel/quarkus/component/aws/eks/deployment/AwsEKSProcessor.java index e4807c86d5cb..4a1d88c9dd33 100644 --- a/extensions/aws-eks/deployment/src/main/java/org/apache/camel/quarkus/component/aws/eks/deployment/AwsEKSProcessor.java +++ b/extensions/aws-eks/deployment/src/main/java/org/apache/camel/quarkus/component/aws/eks/deployment/AwsEKSProcessor.java @@ -29,7 +29,6 @@ import io.quarkus.deployment.builditem.FeatureBuildItem; import io.quarkus.deployment.builditem.nativeimage.NativeImageResourceBuildItem; import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem; -import org.apache.camel.component.aws.eks.EKSConfiguration; class AwsEKSProcessor { @@ -59,7 +58,6 @@ void process(CombinedIndexBuildItem combinedIndexBuildItem, Endpoint.class.getCanonicalName(), Region.class.getCanonicalName(), Service.class.getCanonicalName(), - CredentialScope.class.getCanonicalName(), - EKSConfiguration.class.getCanonicalName())); + CredentialScope.class.getCanonicalName())); } } diff --git a/extensions/aws-iam/deployment/src/main/java/org/apache/camel/quarkus/component/aws/iam/deployment/AwsIamProcessor.java b/extensions/aws-iam/deployment/src/main/java/org/apache/camel/quarkus/component/aws/iam/deployment/AwsIamProcessor.java index 48e3d2436f10..5f640760196f 100644 --- a/extensions/aws-iam/deployment/src/main/java/org/apache/camel/quarkus/component/aws/iam/deployment/AwsIamProcessor.java +++ b/extensions/aws-iam/deployment/src/main/java/org/apache/camel/quarkus/component/aws/iam/deployment/AwsIamProcessor.java @@ -29,7 +29,6 @@ import io.quarkus.deployment.builditem.FeatureBuildItem; import io.quarkus.deployment.builditem.nativeimage.NativeImageResourceBuildItem; import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem; -import org.apache.camel.component.aws.iam.IAMConfiguration; class AwsIamProcessor { @@ -59,7 +58,6 @@ void process(CombinedIndexBuildItem combinedIndexBuildItem, Endpoint.class.getCanonicalName(), Region.class.getCanonicalName(), Service.class.getCanonicalName(), - CredentialScope.class.getCanonicalName(), - IAMConfiguration.class.getCanonicalName())); + CredentialScope.class.getCanonicalName())); } } diff --git a/extensions/aws-kinesis/deployment/src/main/java/org/apache/camel/quarkus/component/aws/kinesis/deployment/AwsKinesisProcessor.java b/extensions/aws-kinesis/deployment/src/main/java/org/apache/camel/quarkus/component/aws/kinesis/deployment/AwsKinesisProcessor.java index b543125d4da3..c2288eae4dd7 100644 --- a/extensions/aws-kinesis/deployment/src/main/java/org/apache/camel/quarkus/component/aws/kinesis/deployment/AwsKinesisProcessor.java +++ b/extensions/aws-kinesis/deployment/src/main/java/org/apache/camel/quarkus/component/aws/kinesis/deployment/AwsKinesisProcessor.java @@ -29,8 +29,6 @@ import io.quarkus.deployment.builditem.FeatureBuildItem; import io.quarkus.deployment.builditem.nativeimage.NativeImageResourceBuildItem; import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem; -import org.apache.camel.component.aws.firehose.KinesisFirehoseConfiguration; -import org.apache.camel.component.aws.kinesis.KinesisConfiguration; class AwsKinesisProcessor { @@ -60,8 +58,6 @@ void process(CombinedIndexBuildItem combinedIndexBuildItem, Endpoint.class.getCanonicalName(), Region.class.getCanonicalName(), Service.class.getCanonicalName(), - CredentialScope.class.getCanonicalName(), - KinesisConfiguration.class.getCanonicalName(), - KinesisFirehoseConfiguration.class.getCanonicalName())); + CredentialScope.class.getCanonicalName())); } } diff --git a/extensions/aws-kms/deployment/src/main/java/org/apache/camel/quarkus/component/aws/kms/deployment/AwsKmsProcessor.java b/extensions/aws-kms/deployment/src/main/java/org/apache/camel/quarkus/component/aws/kms/deployment/AwsKmsProcessor.java index 42889e91f7ef..5b83fac5d96b 100644 --- a/extensions/aws-kms/deployment/src/main/java/org/apache/camel/quarkus/component/aws/kms/deployment/AwsKmsProcessor.java +++ b/extensions/aws-kms/deployment/src/main/java/org/apache/camel/quarkus/component/aws/kms/deployment/AwsKmsProcessor.java @@ -29,7 +29,6 @@ import io.quarkus.deployment.builditem.FeatureBuildItem; import io.quarkus.deployment.builditem.nativeimage.NativeImageResourceBuildItem; import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem; -import org.apache.camel.component.aws.kms.KMSConfiguration; class AwsKmsProcessor { @@ -59,7 +58,6 @@ void process(CombinedIndexBuildItem combinedIndexBuildItem, Endpoint.class.getCanonicalName(), Region.class.getCanonicalName(), Service.class.getCanonicalName(), - CredentialScope.class.getCanonicalName(), - KMSConfiguration.class.getCanonicalName())); + CredentialScope.class.getCanonicalName())); } } diff --git a/extensions/aws-lambda/deployment/src/main/java/org/apache/camel/quarkus/component/aws/lambda/deployment/AwsLambdaProcessor.java b/extensions/aws-lambda/deployment/src/main/java/org/apache/camel/quarkus/component/aws/lambda/deployment/AwsLambdaProcessor.java index d1f9b5474e93..055193647c02 100644 --- a/extensions/aws-lambda/deployment/src/main/java/org/apache/camel/quarkus/component/aws/lambda/deployment/AwsLambdaProcessor.java +++ b/extensions/aws-lambda/deployment/src/main/java/org/apache/camel/quarkus/component/aws/lambda/deployment/AwsLambdaProcessor.java @@ -29,7 +29,6 @@ import io.quarkus.deployment.builditem.FeatureBuildItem; import io.quarkus.deployment.builditem.nativeimage.NativeImageResourceBuildItem; import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem; -import org.apache.camel.component.aws.lambda.LambdaConfiguration; class AwsLambdaProcessor { @@ -59,7 +58,6 @@ void process(CombinedIndexBuildItem combinedIndexBuildItem, Endpoint.class.getCanonicalName(), Region.class.getCanonicalName(), Service.class.getCanonicalName(), - CredentialScope.class.getCanonicalName(), - LambdaConfiguration.class.getCanonicalName())); + CredentialScope.class.getCanonicalName())); } } diff --git a/extensions/aws-s3/deployment/src/main/java/org/apache/camel/quarkus/component/aws/s3/deployment/AwsS3Processor.java b/extensions/aws-s3/deployment/src/main/java/org/apache/camel/quarkus/component/aws/s3/deployment/AwsS3Processor.java index bba660d8f7a3..c3fd692ce0e2 100644 --- a/extensions/aws-s3/deployment/src/main/java/org/apache/camel/quarkus/component/aws/s3/deployment/AwsS3Processor.java +++ b/extensions/aws-s3/deployment/src/main/java/org/apache/camel/quarkus/component/aws/s3/deployment/AwsS3Processor.java @@ -32,7 +32,6 @@ import io.quarkus.deployment.builditem.nativeimage.NativeImageResourceBuildItem; import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem; import io.quarkus.deployment.builditem.nativeimage.RuntimeInitializedClassBuildItem; -import org.apache.camel.component.aws.s3.S3Configuration; class AwsS3Processor { @@ -68,8 +67,7 @@ void process(CombinedIndexBuildItem combinedIndexBuildItem, Region.class.getCanonicalName(), Service.class.getCanonicalName(), CredentialScope.class.getCanonicalName(), - AWSS3V4Signer.class.getCanonicalName(), - S3Configuration.class.getCanonicalName())); + AWSS3V4Signer.class.getCanonicalName())); } } diff --git a/extensions/aws-sns/deployment/src/main/java/org/apache/camel/quarkus/component/aws/sns/deployment/AwsSNSProcessor.java b/extensions/aws-sns/deployment/src/main/java/org/apache/camel/quarkus/component/aws/sns/deployment/AwsSNSProcessor.java index a23588755744..f1d7f92faefa 100644 --- a/extensions/aws-sns/deployment/src/main/java/org/apache/camel/quarkus/component/aws/sns/deployment/AwsSNSProcessor.java +++ b/extensions/aws-sns/deployment/src/main/java/org/apache/camel/quarkus/component/aws/sns/deployment/AwsSNSProcessor.java @@ -30,7 +30,6 @@ import io.quarkus.deployment.builditem.FeatureBuildItem; import io.quarkus.deployment.builditem.nativeimage.NativeImageResourceBuildItem; import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem; -import org.apache.camel.component.aws.sns.SnsConfiguration; class AwsSNSProcessor { @@ -61,8 +60,7 @@ void process(CombinedIndexBuildItem combinedIndexBuildItem, Region.class.getCanonicalName(), Service.class.getCanonicalName(), CredentialScope.class.getCanonicalName(), - AWS4Signer.class.getCanonicalName(), - SnsConfiguration.class.getCanonicalName())); + AWS4Signer.class.getCanonicalName())); } } diff --git a/extensions/aws-sqs/deployment/src/main/java/org/apache/camel/quarkus/component/aws/sqs/deployment/AwsSQSProcessor.java b/extensions/aws-sqs/deployment/src/main/java/org/apache/camel/quarkus/component/aws/sqs/deployment/AwsSQSProcessor.java index de97f4e5132f..26ce52e8712f 100644 --- a/extensions/aws-sqs/deployment/src/main/java/org/apache/camel/quarkus/component/aws/sqs/deployment/AwsSQSProcessor.java +++ b/extensions/aws-sqs/deployment/src/main/java/org/apache/camel/quarkus/component/aws/sqs/deployment/AwsSQSProcessor.java @@ -30,7 +30,6 @@ import io.quarkus.deployment.builditem.FeatureBuildItem; import io.quarkus.deployment.builditem.nativeimage.NativeImageResourceBuildItem; import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem; -import org.apache.camel.component.aws.sqs.SqsConfiguration; class AwsSQSProcessor { @@ -61,7 +60,6 @@ void process(CombinedIndexBuildItem combinedIndexBuildItem, Region.class.getCanonicalName(), Service.class.getCanonicalName(), CredentialScope.class.getCanonicalName(), - AWS4Signer.class.getCanonicalName(), - SqsConfiguration.class.getCanonicalName())); + AWS4Signer.class.getCanonicalName())); } } diff --git a/extensions/aws-translate/deployment/src/main/java/org/apache/camel/quarkus/component/aws/translate/deployment/AwsTranslateProcessor.java b/extensions/aws-translate/deployment/src/main/java/org/apache/camel/quarkus/component/aws/translate/deployment/AwsTranslateProcessor.java index 30446919b7f2..8b236d10fddd 100644 --- a/extensions/aws-translate/deployment/src/main/java/org/apache/camel/quarkus/component/aws/translate/deployment/AwsTranslateProcessor.java +++ b/extensions/aws-translate/deployment/src/main/java/org/apache/camel/quarkus/component/aws/translate/deployment/AwsTranslateProcessor.java @@ -30,7 +30,6 @@ import io.quarkus.deployment.builditem.FeatureBuildItem; import io.quarkus.deployment.builditem.nativeimage.NativeImageResourceBuildItem; import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem; -import org.apache.camel.component.aws.translate.TranslateConfiguration; class AwsTranslateProcessor { @@ -61,7 +60,6 @@ void process(CombinedIndexBuildItem combinedIndexBuildItem, Region.class.getCanonicalName(), Service.class.getCanonicalName(), CredentialScope.class.getCanonicalName(), - AWS4Signer.class.getCanonicalName(), - TranslateConfiguration.class.getCanonicalName())); + AWS4Signer.class.getCanonicalName())); } } diff --git a/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/NativeImageProcessor.java b/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/NativeImageProcessor.java index 034b19139784..75216c847d5d 100644 --- a/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/NativeImageProcessor.java +++ b/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/NativeImageProcessor.java @@ -92,7 +92,8 @@ void reflectiveItems( .filter(ai -> { AnnotationValue av = ai.value("loader"); boolean isLoader = av != null && av.asBoolean(); - // filter out camel-base converters which are automatically inlined in the CoreStaticTypeConverterLoader + // filter out camel-base converters which are automatically inlined in the + // CoreStaticTypeConverterLoader // need to revisit with Camel 3.0.0-M3 which should improve this area if (ai.target().asClass().name().toString().startsWith("org.apache.camel.converter.")) { log.debug("Ignoring core " + ai + " " + ai.target().asClass().name()); diff --git a/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/UnbannedReflectiveBuildItem.java b/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/UnbannedReflectiveBuildItem.java new file mode 100644 index 000000000000..9ed50976f964 --- /dev/null +++ b/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/UnbannedReflectiveBuildItem.java @@ -0,0 +1,47 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.quarkus.core.deployment; + +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.LinkedHashSet; +import java.util.Set; + +import io.quarkus.builder.item.MultiBuildItem; + +/** + * A {@link MultiBuildItem} holding a list of class names that would otherwise not be allowed to be registered for + * reflection due to a Camel Quarkus policy. + */ +public final class UnbannedReflectiveBuildItem extends MultiBuildItem { + + final Set classNames; + + public UnbannedReflectiveBuildItem(Collection classNames) { + this.classNames = new LinkedHashSet<>(classNames); + } + + public UnbannedReflectiveBuildItem(String... classNames) { + this.classNames = new LinkedHashSet<>(Arrays.asList(classNames)); + } + + public Set getClassNames() { + return Collections.unmodifiableSet(classNames); + } + +} diff --git a/extensions/dozer/deployment/src/main/java/org/apache/camel/quarkus/component/dozer/deployment/DozerProcessor.java b/extensions/dozer/deployment/src/main/java/org/apache/camel/quarkus/component/dozer/deployment/DozerProcessor.java index 9bcf0a54bae2..be1bb2e761cf 100644 --- a/extensions/dozer/deployment/src/main/java/org/apache/camel/quarkus/component/dozer/deployment/DozerProcessor.java +++ b/extensions/dozer/deployment/src/main/java/org/apache/camel/quarkus/component/dozer/deployment/DozerProcessor.java @@ -40,7 +40,6 @@ import io.quarkus.deployment.builditem.nativeimage.NativeImageResourceBuildItem; import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem; import io.quarkus.jaxb.deployment.JaxbFileRootBuildItem; -import org.apache.camel.component.dozer.DozerConfiguration; import org.apache.camel.converter.dozer.DozerBeanMapperConfiguration; import org.apache.camel.converter.dozer.DozerThreadContextClassLoader; import org.apache.camel.quarkus.component.dozer.CamelDozerConfig; @@ -121,7 +120,6 @@ void configureCamelDozer(BuildProducer reflectiveClass reflectiveClass.produce(new ReflectiveClassBuildItem( true, false, - DozerConfiguration.class, DozerBeanMapperConfiguration.class)); if (camelDozerConfig.mappingFiles.isPresent()) { diff --git a/extensions/ftp/deployment/src/main/java/org/apache/camel/quarkus/component/ftp/deployment/FtpProcessor.java b/extensions/ftp/deployment/src/main/java/org/apache/camel/quarkus/component/ftp/deployment/FtpProcessor.java index af3ec6a83427..2e8a4371fa58 100644 --- a/extensions/ftp/deployment/src/main/java/org/apache/camel/quarkus/component/ftp/deployment/FtpProcessor.java +++ b/extensions/ftp/deployment/src/main/java/org/apache/camel/quarkus/component/ftp/deployment/FtpProcessor.java @@ -21,10 +21,6 @@ import io.quarkus.deployment.builditem.ExtensionSslNativeSupportBuildItem; import io.quarkus.deployment.builditem.FeatureBuildItem; import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem; -import org.apache.camel.component.file.remote.FtpConfiguration; -import org.apache.camel.component.file.remote.FtpsConfiguration; -import org.apache.camel.component.file.remote.RemoteFileConfiguration; -import org.apache.camel.component.file.remote.SftpConfiguration; class FtpProcessor { @@ -37,11 +33,6 @@ FeatureBuildItem feature() { @BuildStep void registerForReflection(BuildProducer reflectiveClass) { - reflectiveClass.produce(new ReflectiveClassBuildItem(true, false, - RemoteFileConfiguration.class, - FtpConfiguration.class, - FtpsConfiguration.class, - SftpConfiguration.class)); reflectiveClass.produce(new ReflectiveClassBuildItem(true, true, "com.jcraft.jsch.CipherNone", diff --git a/extensions/infinispan/deployment/src/main/java/org/apache/camel/quarkus/component/infinispan/deployment/InfinispanProcessor.java b/extensions/infinispan/deployment/src/main/java/org/apache/camel/quarkus/component/infinispan/deployment/InfinispanProcessor.java index b206edfa3ea2..f305db1c6dbb 100644 --- a/extensions/infinispan/deployment/src/main/java/org/apache/camel/quarkus/component/infinispan/deployment/InfinispanProcessor.java +++ b/extensions/infinispan/deployment/src/main/java/org/apache/camel/quarkus/component/infinispan/deployment/InfinispanProcessor.java @@ -18,18 +18,11 @@ import io.quarkus.deployment.annotations.BuildStep; import io.quarkus.deployment.builditem.FeatureBuildItem; -import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem; -import org.apache.camel.component.infinispan.InfinispanConfiguration; class InfinispanProcessor { private static final String FEATURE = "camel-infinispan"; - @BuildStep - ReflectiveClassBuildItem reflection() { - return new ReflectiveClassBuildItem(true, true, InfinispanConfiguration.class); - } - @BuildStep FeatureBuildItem feature() { return new FeatureBuildItem(FEATURE); diff --git a/extensions/paho/deployment/src/main/java/org/apache/camel/quarkus/component/paho/deployment/PahoProcessor.java b/extensions/paho/deployment/src/main/java/org/apache/camel/quarkus/component/paho/deployment/PahoProcessor.java index 402c34ee0ccb..2e03afe2db31 100644 --- a/extensions/paho/deployment/src/main/java/org/apache/camel/quarkus/component/paho/deployment/PahoProcessor.java +++ b/extensions/paho/deployment/src/main/java/org/apache/camel/quarkus/component/paho/deployment/PahoProcessor.java @@ -27,7 +27,6 @@ import io.quarkus.deployment.builditem.nativeimage.NativeImageResourceBuildItem; import io.quarkus.deployment.builditem.nativeimage.NativeImageResourceBundleBuildItem; import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem; -import org.apache.camel.component.paho.PahoConfiguration; import org.eclipse.paho.client.mqttv3.internal.SSLNetworkModuleFactory; import org.eclipse.paho.client.mqttv3.internal.TCPNetworkModuleFactory; import org.eclipse.paho.client.mqttv3.logging.JSR47Logger; @@ -40,8 +39,7 @@ class PahoProcessor { private static final List> PAHO_REFLECTIVE_CLASSES = Arrays.asList( JSR47Logger.class, TCPNetworkModuleFactory.class, - SSLNetworkModuleFactory.class, - PahoConfiguration.class); + SSLNetworkModuleFactory.class); @Inject BuildProducer resource; diff --git a/extensions/support/policy/deployment/pom.xml b/extensions/support/policy/deployment/pom.xml new file mode 100644 index 000000000000..14fb49b694eb --- /dev/null +++ b/extensions/support/policy/deployment/pom.xml @@ -0,0 +1,75 @@ + + + + 4.0.0 + + org.apache.camel.quarkus + camel-quarkus-support-policy-parent + 1.1.0-SNAPSHOT + ../pom.xml + + + camel-quarkus-support-policy-deployment + Camel Quarkus :: Support :: Policy :: Deployment + + + + + org.apache.camel.quarkus + camel-quarkus-bom-deployment + ${project.version} + pom + import + + + + + + + org.apache.camel.quarkus + camel-quarkus-core-deployment + + + org.apache.camel.quarkus + camel-quarkus-support-policy + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + + io.quarkus + quarkus-extension-processor + ${quarkus.version} + + + + + + + + diff --git a/extensions/support/policy/deployment/src/main/java/org/apache/camel/quarkus/component/support/policy/deployment/PolicyProcessor.java b/extensions/support/policy/deployment/src/main/java/org/apache/camel/quarkus/component/support/policy/deployment/PolicyProcessor.java new file mode 100644 index 000000000000..8993afa11c77 --- /dev/null +++ b/extensions/support/policy/deployment/src/main/java/org/apache/camel/quarkus/component/support/policy/deployment/PolicyProcessor.java @@ -0,0 +1,112 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.quarkus.component.support.policy.deployment; + +import java.util.Collection; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +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.GeneratedResourceBuildItem; +import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem; +import org.apache.camel.quarkus.core.deployment.UnbannedReflectiveBuildItem; +import org.jboss.jandex.AnnotationTarget.Kind; +import org.jboss.jandex.DotName; + +class PolicyProcessor { + + private static final String FEATURE = "camel-policy"; + + @BuildStep + FeatureBuildItem feature() { + return new FeatureBuildItem(FEATURE); + } + + @BuildStep + UnbannedReflectiveBuildItem unbanReflectives() { + /** + * A list of classes annotated with @UriParams which we accept to be registered for reflection + * mostly because there are errors when they are removed. TODO: solve the underlying problems and remove as + * many entries as possible from the list. + */ + return new UnbannedReflectiveBuildItem( + "org.apache.camel.support.processor.DefaultExchangeFormatter", + "org.apache.camel.component.pdf.PdfConfiguration", + "org.apache.camel.component.netty.NettyConfiguration", + "org.apache.camel.component.netty.NettyServerBootstrapConfiguration", + "org.apache.camel.component.fhir.FhirUpdateEndpointConfiguration", + "org.apache.camel.component.fhir.FhirOperationEndpointConfiguration", + "org.apache.camel.component.fhir.FhirConfiguration", + "org.apache.camel.component.fhir.FhirLoadPageEndpointConfiguration", + "org.apache.camel.component.fhir.FhirSearchEndpointConfiguration", + "org.apache.camel.component.fhir.FhirTransactionEndpointConfiguration", + "org.apache.camel.component.fhir.FhirCreateEndpointConfiguration", + "org.apache.camel.component.fhir.FhirValidateEndpointConfiguration", + "org.apache.camel.component.fhir.FhirReadEndpointConfiguration", + "org.apache.camel.component.fhir.FhirCapabilitiesEndpointConfiguration", + "org.apache.camel.component.fhir.FhirHistoryEndpointConfiguration", + "org.apache.camel.component.fhir.FhirMetaEndpointConfiguration", + "org.apache.camel.component.fhir.FhirPatchEndpointConfiguration", + "org.apache.camel.component.fhir.FhirDeleteEndpointConfiguration", + + /* org.apache.camel.component.consul.* can be removed after the upgrade to Camel 3.1 */ + "org.apache.camel.component.consul.ConsulConfiguration", + "org.apache.camel.component.consul.ConsulClientConfiguration", + "org.apache.camel.component.consul.health.ConsulHealthCheckRepositoryConfiguration", + "org.apache.camel.component.consul.cloud.ConsulServiceRegistryConfiguration"); + } + + /* Make the build fail as long as there are banned classes registered for reflection */ + @BuildStep + void bannedReflectiveClasses( + CombinedIndexBuildItem combinedIndex, + List reflectiveClasses, + List unbannedReflectives, + BuildProducer dummy // to force the execution of this method + ) { + final DotName uriParamsDotName = DotName.createSimple("org.apache.camel.spi.UriParams"); + + final Set bannedClassNames = combinedIndex.getIndex() + .getAnnotations(uriParamsDotName) + .stream() + .filter(ai -> ai.target().kind() == Kind.CLASS) + .map(ai -> ai.target().asClass().name().toString()) + .collect(Collectors.toSet()); + + final Set unbannedClassNames = unbannedReflectives.stream() + .map(UnbannedReflectiveBuildItem::getClassNames) + .flatMap(Collection::stream) + .collect(Collectors.toSet()); + + Set violations = reflectiveClasses.stream() + .map(ReflectiveClassBuildItem::getClassNames) + .flatMap(Collection::stream) + .filter(cl -> !unbannedClassNames.contains(cl)) + .filter(bannedClassNames::contains) + .collect(Collectors.toSet()); + + if (!violations.isEmpty()) { + throw new IllegalStateException( + "The following classes should either be whitelisted via an UnbannedReflectiveBuildItem or they should not be registered for reflection via ReflectiveClassBuildItem: " + + violations); + } + } +} diff --git a/extensions/support/policy/pom.xml b/extensions/support/policy/pom.xml new file mode 100644 index 000000000000..e85cbed28f97 --- /dev/null +++ b/extensions/support/policy/pom.xml @@ -0,0 +1,39 @@ + + + + 4.0.0 + + org.apache.camel.quarkus + camel-quarkus-build-parent + 1.1.0-SNAPSHOT + ../../../poms/build-parent/pom.xml + + + camel-quarkus-support-policy-parent + Camel Quarkus :: Support :: Policy + pom + + + deployment + runtime + + diff --git a/extensions/support/policy/runtime/pom.xml b/extensions/support/policy/runtime/pom.xml new file mode 100644 index 000000000000..8a400f2ab935 --- /dev/null +++ b/extensions/support/policy/runtime/pom.xml @@ -0,0 +1,78 @@ + + + + 4.0.0 + + org.apache.camel.quarkus + camel-quarkus-support-policy-parent + 1.1.0-SNAPSHOT + ../pom.xml + + + camel-quarkus-support-policy + Camel Quarkus :: Support :: Policy :: Runtime + + + 1.2.0 + + + + + + org.apache.camel.quarkus + camel-quarkus-bom + ${project.version} + pom + import + + + + + + + org.apache.camel.quarkus + camel-quarkus-core + + + + + + + io.quarkus + quarkus-bootstrap-maven-plugin + + + org.apache.maven.plugins + maven-compiler-plugin + + + + io.quarkus + quarkus-extension-processor + ${quarkus.version} + + + + + + + diff --git a/extensions/support/pom.xml b/extensions/support/pom.xml index bd690f84f97e..a6ef979d0d62 100644 --- a/extensions/support/pom.xml +++ b/extensions/support/pom.xml @@ -39,6 +39,7 @@ consul-client httpclient jetty + policy retrofit spring xstream diff --git a/extensions/twitter/deployment/src/main/java/org/apache/camel/quarkus/component/twitter/deployment/TwitterProcessor.java b/extensions/twitter/deployment/src/main/java/org/apache/camel/quarkus/component/twitter/deployment/TwitterProcessor.java index 2ed9bb2feff7..9c84e099b5bc 100644 --- a/extensions/twitter/deployment/src/main/java/org/apache/camel/quarkus/component/twitter/deployment/TwitterProcessor.java +++ b/extensions/twitter/deployment/src/main/java/org/apache/camel/quarkus/component/twitter/deployment/TwitterProcessor.java @@ -21,7 +21,6 @@ import io.quarkus.deployment.builditem.FeatureBuildItem; import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem; import org.apache.camel.component.twitter.AbstractTwitterComponent; -import org.apache.camel.component.twitter.TwitterConfiguration; class TwitterProcessor { private static final String FEATURE = "camel-twitter"; @@ -34,7 +33,6 @@ FeatureBuildItem feature() { @BuildStep void registerForReflection(BuildProducer reflectiveClass) { reflectiveClass.produce(new ReflectiveClassBuildItem(true, false, - AbstractTwitterComponent.class, - TwitterConfiguration.class)); + AbstractTwitterComponent.class)); } } diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml index 6fe866bc4b7d..62a79432ed34 100644 --- a/integration-tests/pom.xml +++ b/integration-tests/pom.xml @@ -147,6 +147,13 @@ + + + org.apache.camel.quarkus + camel-quarkus-support-policy + + + support diff --git a/poms/bom-deployment/pom.xml b/poms/bom-deployment/pom.xml index e258e266baf3..db8ea1f2e0b2 100644 --- a/poms/bom-deployment/pom.xml +++ b/poms/bom-deployment/pom.xml @@ -409,6 +409,11 @@ camel-quarkus-support-jetty-deployment ${camel-quarkus.version} + + org.apache.camel.quarkus + camel-quarkus-support-policy-deployment + ${camel-quarkus.version} + org.apache.camel.quarkus camel-quarkus-support-retrofit-deployment diff --git a/poms/bom/pom.xml b/poms/bom/pom.xml index ddcef6b3ee45..d7c0dc083462 100644 --- a/poms/bom/pom.xml +++ b/poms/bom/pom.xml @@ -859,6 +859,11 @@ camel-quarkus-support-jetty ${camel-quarkus.version} + + org.apache.camel.quarkus + camel-quarkus-support-policy + ${camel-quarkus.version} + org.apache.camel.quarkus camel-quarkus-support-retrofit