Skip to content

Commit deadfd6

Browse files
Removes any invalid character from the Avro schema (#11)
Co-authored-by: Emilio Larrambebere <[email protected]>
1 parent a1e993b commit deadfd6

File tree

2 files changed

+15
-8
lines changed

2 files changed

+15
-8
lines changed

source/src/main/java/com/trustpilot/connector/dynamodb/utils/RecordConverter.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import com.amazonaws.services.dynamodbv2.model.TableDescription;
66
import com.fasterxml.jackson.annotation.JsonInclude;
77
import com.fasterxml.jackson.databind.ObjectMapper;
8+
import com.google.common.base.Strings;
89
import com.trustpilot.connector.dynamodb.Envelope;
910
import com.trustpilot.connector.dynamodb.SourceInfo;
1011
import org.apache.kafka.connect.data.Schema;
@@ -129,6 +130,12 @@ private String sanitiseAttributeName(KeySchemaElement element) {
129130
}
130131

131132
private String sanitiseAttributeName(final String attributeName) {
132-
return attributeName.replaceAll("^[^a-zA-Z_]|(?<!^)[^a-zA-Z0-9_]", "_");
133+
final String sanitisedAttributeName = attributeName.replaceAll("^[^a-zA-Z_]|(?<!^)[^a-zA-Z0-9_]", "");
134+
135+
if (Strings.isNullOrEmpty(sanitisedAttributeName)) {
136+
throw new IllegalStateException(String.format("The field name %s couldn't be sanitised correctly", attributeName));
137+
}
138+
139+
return sanitisedAttributeName;
133140
}
134141
}

source/src/test/java/com/trustpilot/connector/dynamodb/utils/RecordConverterTests.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -222,9 +222,9 @@ public void singleItemKeyIsAddedToRecordWhenKeyContainsInvalidCharacters() throw
222222
);
223223

224224
// Assert
225-
assertEquals("test_1234", record.keySchema().fields().get(0).name());
225+
assertEquals("test1234", record.keySchema().fields().get(0).name());
226226
assertEquals(SchemaBuilder.string().build(), record.keySchema().fields().get(0).schema());
227-
assertEquals("testKV1Value", ((Struct) record.key()).getString("test_1234"));
227+
assertEquals("testKV1Value", ((Struct) record.key()).getString("test1234"));
228228
}
229229

230230
@Test
@@ -247,13 +247,13 @@ public void multiItemKeyIsAddedToRecordWhenKeyContainsInvalidCharacters() throws
247247
);
248248

249249
// Assert
250-
assertEquals("test_1234", record.keySchema().fields().get(0).name());
250+
assertEquals("test1234", record.keySchema().fields().get(0).name());
251251
assertEquals(SchemaBuilder.string().build(), record.keySchema().fields().get(0).schema());
252-
assertEquals("testKV1Value", ((Struct) record.key()).getString("test_1234"));
252+
assertEquals("testKV1Value", ((Struct) record.key()).getString("test1234"));
253253

254-
assertEquals("__starts_with_number", record.keySchema().fields().get(1).name());
254+
assertEquals("startswithnumber", record.keySchema().fields().get(1).name());
255255
assertEquals(SchemaBuilder.string().build(), record.keySchema().fields().get(1).schema());
256-
assertEquals("2", ((Struct) record.key()).getString("__starts_with_number"));
256+
assertEquals("2", ((Struct) record.key()).getString("startswithnumber"));
257257
}
258258

259259
@Test
@@ -271,7 +271,7 @@ public void recordAttributesAreAddedToValueDataWhenAttributesContainsInvalidChar
271271
"testSequenceNumberID1"
272272
);
273273

274-
String expected = "{\"test_1234\":{\"s\":\"testKV1Value\"},\"_starts_with_underscore\":{\"n\":\"1\"},\"__starts_with_number\":{\"s\":\"2\"},\"test______\":{\"s\":\"testStringValue\"}}";
274+
String expected = "{\"test1234\":{\"s\":\"testKV1Value\"},\"_starts_with_underscore\":{\"n\":\"1\"},\"startswithnumber\":{\"s\":\"2\"},\"test\":{\"s\":\"testStringValue\"}}";
275275

276276
// Assert
277277
assertEquals(expected,

0 commit comments

Comments
 (0)