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
}