You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by nf...@apache.org on 2023/09/07 15:23:25 UTC

[camel] branch main updated: CAMEL-19833: camel-bindy - race condition in BindyAbstractFactory.link() (#11307)

This is an automated email from the ASF dual-hosted git repository.

nfilotto pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/main by this push:
     new c957df03d18 CAMEL-19833: camel-bindy - race condition in BindyAbstractFactory.link() (#11307)
c957df03d18 is described below

commit c957df03d1859913717ef80332ef2452aad15e09
Author: Luigi De Masi <55...@users.noreply.github.com>
AuthorDate: Thu Sep 7 17:23:19 2023 +0200

    CAMEL-19833: camel-bindy - race condition in BindyAbstractFactory.link() (#11307)
---
 .../fixed/link/BindyRaceConditionLinkTest.java     |   85 ++
 .../dataformat/bindy/model/fixed/link/MyModel.java |   37 +
 .../bindy/model/fixed/link/MyModel2.java           |   48 +
 .../fixed/link/bindyRaceConditionLinkTest.csv      | 1500 ++++++++++++++++++++
 .../org/apache/camel/util/ReflectionHelper.java    |   27 +-
 5 files changed, 1673 insertions(+), 24 deletions(-)

diff --git a/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/fixed/link/BindyRaceConditionLinkTest.java b/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/fixed/link/BindyRaceConditionLinkTest.java
new file mode 100644
index 00000000000..23a3a918dfd
--- /dev/null
+++ b/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/fixed/link/BindyRaceConditionLinkTest.java
@@ -0,0 +1,85 @@
+/*
+ * 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.dataformat.bindy.fixed.link;
+
+import java.nio.file.Files;
+import java.nio.file.Path;
+
+import org.apache.camel.Endpoint;
+import org.apache.camel.EndpointInject;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.dataformat.bindy.csv.BindyCsvDataFormat;
+import org.apache.camel.dataformat.bindy.model.fixed.link.MyModel;
+import org.apache.camel.test.junit5.CamelTestSupport;
+import org.junit.jupiter.api.RepeatedTest;
+
+import static java.util.concurrent.TimeUnit.SECONDS;
+
+/** Test for CAMEL-19833 **/
+public class BindyRaceConditionLinkTest extends CamelTestSupport {
+
+    private static final String SOURCE_CSV_FILE_PATH
+            = "org/apache/camel/dataformat/bindy/fixed/link/bindyRaceConditionLinkTest.csv";
+
+    private static final int EXPECTED_SUCCESSFUL_MESSAGE_COUNT = 1500;
+    private static final int EXPECTED_FAILED_MESSAGE_COUNT = 0;
+    private static final long WAIT_TIMEOUT = 5;
+
+    @EndpointInject("mock:fail")
+    private MockEndpoint fail;
+
+    @EndpointInject("mock:end")
+    private MockEndpoint end;
+
+    @EndpointInject("direct:bindy-link-test")
+    private Endpoint begin;
+
+    @RepeatedTest(3)
+    public void raceConditionTest() throws Exception {
+        Path filePath = Path.of(ClassLoader.getSystemResource(SOURCE_CSV_FILE_PATH).toURI());
+        String csv = Files.readString(filePath);
+        template.sendBody(begin, csv);
+        fail.expectedMessageCount(EXPECTED_FAILED_MESSAGE_COUNT);
+        end.expectedMessageCount(EXPECTED_SUCCESSFUL_MESSAGE_COUNT);
+        MockEndpoint.assertIsSatisfied(context, WAIT_TIMEOUT, SECONDS);
+        end.reset();
+        fail.reset();
+    }
+
+    @Override
+    public RouteBuilder createRouteBuilder() {
+        return new RouteBuilder() {
+            @Override
+            public void configure() {
+                BindyCsvDataFormat bindy = new BindyCsvDataFormat(MyModel.class);
+
+                onException(UnsupportedOperationException.class)
+                        .handled(true)
+                        .to(fail);
+
+                from(begin)
+                        .routeId("bindy-link-test")
+                        .convertBodyTo(String.class)
+                        .split(body().tokenize("\n"))
+                            .parallelProcessing(true)
+                        .unmarshal(bindy)
+                        .to(end);
+            }
+        };
+    }
+}
diff --git a/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/model/fixed/link/MyModel.java b/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/model/fixed/link/MyModel.java
new file mode 100644
index 00000000000..9fa3753be51
--- /dev/null
+++ b/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/model/fixed/link/MyModel.java
@@ -0,0 +1,37 @@
+/*
+ * 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.dataformat.bindy.model.fixed.link;
+
+import org.apache.camel.dataformat.bindy.annotation.CsvRecord;
+import org.apache.camel.dataformat.bindy.annotation.Link;
+
+@CsvRecord(separator = ",", skipField = true)
+public class MyModel {
+
+    @Link
+    private MyModel2 myModel2;
+
+    public MyModel2 getMyModel2() {
+        return myModel2;
+    }
+
+    public void setMyModel2(MyModel2 myModel2) {
+        this.myModel2 = myModel2;
+    }
+
+}
diff --git a/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/model/fixed/link/MyModel2.java b/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/model/fixed/link/MyModel2.java
new file mode 100644
index 00000000000..ee5882d415b
--- /dev/null
+++ b/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/model/fixed/link/MyModel2.java
@@ -0,0 +1,48 @@
+/*
+ * 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.dataformat.bindy.model.fixed.link;
+
+import org.apache.camel.dataformat.bindy.annotation.CsvRecord;
+import org.apache.camel.dataformat.bindy.annotation.DataField;
+
+@CsvRecord(separator = ",", skipField = true)
+public class MyModel2 {
+
+    @DataField(pos = 1)
+    private String a;
+
+    @DataField(pos = 2)
+    private String b;
+
+    public String getA() {
+        return a;
+    }
+
+    public void setA(String a) {
+        this.a = a;
+    }
+
+    public String getB() {
+        return b;
+    }
+
+    public void setB(String b) {
+        this.b = b;
+    }
+
+}
diff --git a/components/camel-bindy/src/test/resources/org/apache/camel/dataformat/bindy/fixed/link/bindyRaceConditionLinkTest.csv b/components/camel-bindy/src/test/resources/org/apache/camel/dataformat/bindy/fixed/link/bindyRaceConditionLinkTest.csv
new file mode 100644
index 00000000000..f1fb8b8da37
--- /dev/null
+++ b/components/camel-bindy/src/test/resources/org/apache/camel/dataformat/bindy/fixed/link/bindyRaceConditionLinkTest.csv
@@ -0,0 +1,1500 @@
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
+line1,2
\ No newline at end of file
diff --git a/core/camel-util/src/main/java/org/apache/camel/util/ReflectionHelper.java b/core/camel-util/src/main/java/org/apache/camel/util/ReflectionHelper.java
index 82a965e78e3..719663f3f6f 100644
--- a/core/camel-util/src/main/java/org/apache/camel/util/ReflectionHelper.java
+++ b/core/camel-util/src/main/java/org/apache/camel/util/ReflectionHelper.java
@@ -179,20 +179,10 @@ public final class ReflectionHelper {
 
     public static void setField(Field f, Object instance, Object value) {
         try {
-            boolean oldAccessible = false;
-            try {
-                oldAccessible = f.canAccess(instance);
-            } catch (Exception e) {
-                // ignore
-            }
-            boolean shouldSetAccessible = !Modifier.isPublic(f.getModifiers()) && !oldAccessible;
-            if (shouldSetAccessible) {
+            if (!Modifier.isPublic(f.getModifiers()) && !f.canAccess(instance)) {
                 f.setAccessible(true);
             }
             f.set(instance, value);
-            if (shouldSetAccessible) {
-                f.setAccessible(oldAccessible);
-            }
         } catch (Exception ex) {
             throw new UnsupportedOperationException("Cannot inject value of class: " + value.getClass() + " into: " + f);
         }
@@ -200,21 +190,10 @@ public final class ReflectionHelper {
 
     public static Object getField(Field f, Object instance) {
         try {
-            boolean oldAccessible = false;
-            try {
-                oldAccessible = f.canAccess(instance);
-            } catch (Exception e) {
-                // ignore
-            }
-            boolean shouldSetAccessible = !Modifier.isPublic(f.getModifiers()) && !oldAccessible;
-            if (shouldSetAccessible) {
+            if (!Modifier.isPublic(f.getModifiers()) && !f.canAccess(instance)) {
                 f.setAccessible(true);
             }
-            Object answer = f.get(instance);
-            if (shouldSetAccessible) {
-                f.setAccessible(oldAccessible);
-            }
-            return answer;
+            return f.get(instance);
         } catch (Exception ex) {
             // ignore
         }