From 696ed10aa255fb22126e056e83ed90392191f95c Mon Sep 17 00:00:00 2001 From: Gary Russell Date: Tue, 12 May 2015 18:24:39 +0100 Subject: [PATCH] INT-3715: Fix Thread Safety in SyslogTransformer JIRA: https://jira.spring.io/browse/INT-3715 `SimpleDateFormat` is not thread-safe. --- .../transformer/SyslogToMapTransformer.java | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/spring-integration-core/src/main/java/org/springframework/integration/transformer/SyslogToMapTransformer.java b/spring-integration-core/src/main/java/org/springframework/integration/transformer/SyslogToMapTransformer.java index 719e415e6c..726e732939 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/transformer/SyslogToMapTransformer.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/transformer/SyslogToMapTransformer.java @@ -22,6 +22,8 @@ import java.util.Calendar; import java.util.Date; import java.util.LinkedHashMap; import java.util.Map; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.LinkedBlockingQueue; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -40,6 +42,8 @@ import org.springframework.util.Assert; */ public class SyslogToMapTransformer extends AbstractPayloadTransformer> { + private static final BlockingQueue dateFormats = new LinkedBlockingQueue(); + public static final String FACILITY = "FACILITY"; public static final String SEVERITY = "SEVERITY"; @@ -56,8 +60,6 @@ public class SyslogToMapTransformer extends AbstractPayloadTransformer]+)>(.{15}) ([^ ]+) (?:([^:]+): )?(.*)", Pattern.DOTALL); - private final SimpleDateFormat dateFormat = new SimpleDateFormat("MMM dd HH:mm:ss"); - @Override protected Map transformPayload(Object payload) throws Exception { boolean isByteArray = payload instanceof byte[]; @@ -86,6 +88,10 @@ public class SyslogToMapTransformer extends AbstractPayloadTransformer transform(String payload) { Map map = new LinkedHashMap(); Matcher matcher = pattern.matcher(payload); + SimpleDateFormat dateFormat = dateFormats.poll(); + if (dateFormat == null) { + dateFormat = new SimpleDateFormat("MMM dd HH:mm:ss"); + } if (matcher.matches()) { try { String facilityString = matcher.group(1); @@ -97,7 +103,8 @@ public class SyslogToMapTransformer extends AbstractPayloadTransformer