Hi Yeah the data format implementation of marshal / unmarshal should be written in a thread-safe manner. So I think the current code in univocity may be wrong, if it has some kind of shared state for some headers.
On Fri, Jul 28, 2017 at 10:51 AM, Zoran Regvart <zo...@regvart.com> wrote: > Hi Cameleers, > > -1 > > not sure that was the correct solution, perhaps `headers` field of > Marshaller needs to be treated as immutable. Hard to tell on such a > rarely used component what was the initial intent of `headers` field, > but I guess it's what all marshallers need to add, so mutating it on a > per write seems wrong. > > Any thoughts? > > zoran > > On Fri, Jul 28, 2017 at 10:27 AM, <ond...@apache.org> wrote: >> Repository: camel >> Updated Branches: >> refs/heads/master 6d0fdee12 -> 27d6c83ec >> >> >> CAMEL-11609:thread-safety if headers get modified on the fly >> >> >> Project: http://git-wip-us.apache.org/repos/asf/camel/repo >> Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/27d6c83e >> Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/27d6c83e >> Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/27d6c83e >> >> Branch: refs/heads/master >> Commit: 27d6c83ecd392168e59971f5de8e4ad258a1f461 >> Parents: 6d0fdee >> Author: onders86 <ondersez...@gmail.com> >> Authored: Thu Jul 27 23:54:18 2017 +0300 >> Committer: onders86 <ondersez...@gmail.com> >> Committed: Fri Jul 28 11:27:06 2017 +0300 >> >> ---------------------------------------------------------------------- >> .../org/apache/camel/dataformat/univocity/Marshaller.java | 8 ++++++-- >> 1 file changed, 6 insertions(+), 2 deletions(-) >> ---------------------------------------------------------------------- >> >> >> http://git-wip-us.apache.org/repos/asf/camel/blob/27d6c83e/components/camel-univocity-parsers/src/main/java/org/apache/camel/dataformat/univocity/Marshaller.java >> ---------------------------------------------------------------------- >> diff --git >> a/components/camel-univocity-parsers/src/main/java/org/apache/camel/dataformat/univocity/Marshaller.java >> >> b/components/camel-univocity-parsers/src/main/java/org/apache/camel/dataformat/univocity/Marshaller.java >> index 5c113cb..e170c95 100644 >> --- >> a/components/camel-univocity-parsers/src/main/java/org/apache/camel/dataformat/univocity/Marshaller.java >> +++ >> b/components/camel-univocity-parsers/src/main/java/org/apache/camel/dataformat/univocity/Marshaller.java >> @@ -46,7 +46,9 @@ final class Marshaller<W extends AbstractWriter<?>> { >> */ >> Marshaller(String[] headers, boolean adaptHeaders) { >> if (headers != null) { >> - this.headers.addAll(Arrays.asList(headers)); >> + synchronized (this.headers) { >> + this.headers.addAll(Arrays.asList(headers)); >> + } >> } >> this.adaptHeaders = adaptHeaders; >> } >> @@ -86,7 +88,9 @@ final class Marshaller<W extends AbstractWriter<?>> { >> Map<?, ?> map = convertToMandatoryType(exchange, Map.class, row); >> if (adaptHeaders) { >> for (Object key : map.keySet()) { >> - headers.add(convertToMandatoryType(exchange, String.class, >> key)); >> + synchronized (headers) { >> + headers.add(convertToMandatoryType(exchange, >> String.class, key)); >> + } >> } >> } >> >> > > > > -- > Zoran Regvart -- Claus Ibsen ----------------- http://davsclaus.com @davsclaus Camel in Action 2: https://www.manning.com/ibsen2