diff --git a/pom.xml b/pom.xml index 85b62902..548ca071 100644 --- a/pom.xml +++ b/pom.xml @@ -73,7 +73,7 @@ 1.6 1.9.13 2.17.1 - 20180813 + 20231013 3.1.6 1.2 ${project.basedir}/src/test/java/ diff --git a/src/main/java/io/cdap/plugin/salesforce/plugin/source/streaming/SalesforceStreamingSourceUtil.java b/src/main/java/io/cdap/plugin/salesforce/plugin/source/streaming/SalesforceStreamingSourceUtil.java index e2c3f9f5..232d6692 100644 --- a/src/main/java/io/cdap/plugin/salesforce/plugin/source/streaming/SalesforceStreamingSourceUtil.java +++ b/src/main/java/io/cdap/plugin/salesforce/plugin/source/streaming/SalesforceStreamingSourceUtil.java @@ -33,6 +33,7 @@ import org.slf4j.LoggerFactory; import scala.reflect.ClassTag$; +import java.math.BigDecimal; import java.time.Instant; import java.time.LocalTime; import java.time.format.DateTimeFormatter; @@ -148,6 +149,13 @@ private static Object convertValue(Object value, Schema.Field field) { } } + // NOTE: org.json >= 20230227 returns BigDecimal for all non-integer JSON numbers. + if (value instanceof BigDecimal && fieldSchemaType.equals(Schema.Type.DOUBLE)) { + // Avro Schema.Type.DOUBLE expects a Double instance (or primitive double) at serialization time, + // so converting BigDecimal → double for compatibility. + return ((BigDecimal) value).doubleValue(); + } + return value; }