Skip to content

Commit 4dd9828

Browse files
committed
Serialization of java.math.BigDecimal to Avro bytes or fixed type added.
1 parent 52705c8 commit 4dd9828

File tree

1 file changed

+13
-0
lines changed

1 file changed

+13
-0
lines changed

avro/src/main/java/com/fasterxml/jackson/dataformat/avro/ser/NonBSGenericDatumWriter.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import java.nio.ByteBuffer;
77
import java.util.ArrayList;
88

9+
import org.apache.avro.Conversions.DecimalConversion;
910
import org.apache.avro.Schema;
1011
import org.apache.avro.Schema.Type;
1112
import org.apache.avro.generic.GenericData;
@@ -27,6 +28,8 @@ public class NonBSGenericDatumWriter<D>
2728
private final static Class<?> CLS_BIG_DECIMAL = BigDecimal.class;
2829
private final static Class<?> CLS_BIG_INTEGER = BigInteger.class;
2930

31+
private final static DecimalConversion BIG_DECIMAL_CONVERSION = new DecimalConversion();
32+
3033
public NonBSGenericDatumWriter(Schema root) {
3134
super(root);
3235
}
@@ -97,6 +100,11 @@ protected void write(Schema schema, Object datum, Encoder out) throws IOExceptio
97100
super.writeWithoutConversion(schema, ByteBuffer.wrap((byte[]) datum), out);
98101
return;
99102
}
103+
if (datum.getClass() == CLS_BIG_DECIMAL) {
104+
super.writeWithoutConversion(schema, BIG_DECIMAL_CONVERSION.toBytes(
105+
(BigDecimal) datum, schema, schema.getLogicalType()), out);
106+
return;
107+
}
100108
break;
101109
case FIXED:
102110
// One more mismatch to fix
@@ -111,6 +119,11 @@ protected void write(Schema schema, Object datum, Encoder out) throws IOExceptio
111119
super.writeWithoutConversion(schema, new GenericData.Fixed(schema, (byte[]) datum), out);
112120
return;
113121
}
122+
if (datum.getClass() == CLS_BIG_DECIMAL) {
123+
super.writeWithoutConversion(schema, BIG_DECIMAL_CONVERSION.toFixed(
124+
(BigDecimal) datum, schema, schema.getLogicalType()), out);
125+
return;
126+
}
114127
break;
115128

116129
default:

0 commit comments

Comments
 (0)