Skip to content

Commit 7430341

Browse files
Merge pull request #17581 from AndreiBranza/BAEL-8044-avro-schema-with-list-of-objects
BAEL-8044 - Article code
2 parents 3ac8898 + 78da671 commit 7430341

File tree

11 files changed

+805
-32
lines changed

11 files changed

+805
-32
lines changed

apache-libraries-2/pom.xml

+2-2
Original file line numberDiff line numberDiff line change
@@ -208,8 +208,8 @@
208208
<artifactId>avro-maven-plugin</artifactId>
209209
<version>${apache.avro.version}</version>
210210
<configuration>
211-
<sourceDirectory>src/main/java/com/baeldung/apache/avro/</sourceDirectory>
212-
<outputDirectory>src/main/java/com/baeldung/apache/avro/</outputDirectory>
211+
<sourceDirectory>src/main/java/com/baeldung/apache/avro/schemas</sourceDirectory>
212+
<outputDirectory>src/main/java</outputDirectory>
213213
<stringType>String</stringType>
214214
</configuration>
215215
<executions>

apache-libraries-2/src/main/java/com/baeldung/apache/avro/SerializationDeserializationLogic.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package com.baeldung.apache.avro;
22

3-
import com.baeldung.apache.avro.generated.Car;
4-
53
import org.apache.avro.file.DataFileReader;
64
import org.apache.avro.file.DataFileWriter;
75
import org.apache.avro.io.DatumReader;
@@ -12,6 +10,8 @@
1210
import java.io.File;
1311
import java.io.IOException;
1412

13+
import com.baeldung.apache.avro.generated.Car;
14+
1515
public class SerializationDeserializationLogic {
1616

1717
static void serializeCar(Car car) throws IOException {

apache-libraries-2/src/main/java/com/baeldung/apache/avro/generated/Car.java

+20-18
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,19 @@
55
*/
66
package com.baeldung.apache.avro.generated;
77

8+
import org.apache.avro.generic.GenericArray;
89
import org.apache.avro.specific.SpecificData;
10+
import org.apache.avro.util.Utf8;
911
import org.apache.avro.message.BinaryMessageEncoder;
1012
import org.apache.avro.message.BinaryMessageDecoder;
1113
import org.apache.avro.message.SchemaStore;
1214

1315
@org.apache.avro.specific.AvroGenerated
1416
public class Car extends org.apache.avro.specific.SpecificRecordBase implements org.apache.avro.specific.SpecificRecord {
15-
private static final long serialVersionUID = -8258229058542686289L;
17+
private static final long serialVersionUID = 5432057678575069597L;
1618

1719

18-
public static final org.apache.avro.Schema SCHEMA$ = new org.apache.avro.Schema.Parser().parse("{\"type\":\"record\",\"name\":\"Car\",\"namespace\":\"generated.avro\",\"fields\":[{\"name\":\"brand\",\"type\":{\"type\":\"string\",\"avro.java.string\":\"String\"},\"default\":\"Dacia\"},{\"name\":\"number_of_doors\",\"type\":\"int\",\"default\":4},{\"name\":\"color\",\"type\":[\"null\",{\"type\":\"string\",\"avro.java.string\":\"String\"}],\"default\":null}]}");
20+
public static final org.apache.avro.Schema SCHEMA$ = new org.apache.avro.Schema.Parser().parse("{\"type\":\"record\",\"name\":\"Car\",\"namespace\":\"com.baeldung.apache.avro.generated\",\"fields\":[{\"name\":\"brand\",\"type\":{\"type\":\"string\",\"avro.java.string\":\"String\"},\"default\":\"Dacia\"},{\"name\":\"number_of_doors\",\"type\":\"int\",\"default\":4},{\"name\":\"color\",\"type\":[\"null\",{\"type\":\"string\",\"avro.java.string\":\"String\"}],\"default\":null}]}");
1921
public static org.apache.avro.Schema getClassSchema() { return SCHEMA$; }
2022

2123
private static final SpecificData MODEL$ = new SpecificData();
@@ -178,20 +180,20 @@ public void setColor(java.lang.String value) {
178180
* Creates a new Car RecordBuilder.
179181
* @return A new Car RecordBuilder
180182
*/
181-
public static Car.Builder newBuilder() {
182-
return new Car.Builder();
183+
public static com.baeldung.apache.avro.generated.Car.Builder newBuilder() {
184+
return new com.baeldung.apache.avro.generated.Car.Builder();
183185
}
184186

185187
/**
186188
* Creates a new Car RecordBuilder by copying an existing Builder.
187189
* @param other The existing builder to copy.
188190
* @return A new Car RecordBuilder
189191
*/
190-
public static Car.Builder newBuilder(Car.Builder other) {
192+
public static com.baeldung.apache.avro.generated.Car.Builder newBuilder(com.baeldung.apache.avro.generated.Car.Builder other) {
191193
if (other == null) {
192-
return new Car.Builder();
194+
return new com.baeldung.apache.avro.generated.Car.Builder();
193195
} else {
194-
return new Car.Builder(other);
196+
return new com.baeldung.apache.avro.generated.Car.Builder(other);
195197
}
196198
}
197199

@@ -200,11 +202,11 @@ public static Car.Builder newBuilder(Car.Builder other) {
200202
* @param other The existing instance to copy.
201203
* @return A new Car RecordBuilder
202204
*/
203-
public static Car.Builder newBuilder(Car other) {
205+
public static com.baeldung.apache.avro.generated.Car.Builder newBuilder(com.baeldung.apache.avro.generated.Car other) {
204206
if (other == null) {
205-
return new Car.Builder();
207+
return new com.baeldung.apache.avro.generated.Car.Builder();
206208
} else {
207-
return new Car.Builder(other);
209+
return new com.baeldung.apache.avro.generated.Car.Builder(other);
208210
}
209211
}
210212

@@ -228,7 +230,7 @@ private Builder() {
228230
* Creates a Builder by copying an existing Builder.
229231
* @param other The existing Builder to copy.
230232
*/
231-
private Builder(Car.Builder other) {
233+
private Builder(com.baeldung.apache.avro.generated.Car.Builder other) {
232234
super(other);
233235
if (isValidValue(fields()[0], other.brand)) {
234236
this.brand = data().deepCopy(fields()[0].schema(), other.brand);
@@ -248,7 +250,7 @@ private Builder(Car.Builder other) {
248250
* Creates a Builder by copying an existing Car instance
249251
* @param other The existing instance to copy.
250252
*/
251-
private Builder(Car other) {
253+
private Builder(com.baeldung.apache.avro.generated.Car other) {
252254
super(SCHEMA$, MODEL$);
253255
if (isValidValue(fields()[0], other.brand)) {
254256
this.brand = data().deepCopy(fields()[0].schema(), other.brand);
@@ -278,7 +280,7 @@ public java.lang.String getBrand() {
278280
* @param value The value of 'brand'.
279281
* @return This builder.
280282
*/
281-
public Car.Builder setBrand(java.lang.String value) {
283+
public com.baeldung.apache.avro.generated.Car.Builder setBrand(java.lang.String value) {
282284
validate(fields()[0], value);
283285
this.brand = value;
284286
fieldSetFlags()[0] = true;
@@ -298,7 +300,7 @@ public boolean hasBrand() {
298300
* Clears the value of the 'brand' field.
299301
* @return This builder.
300302
*/
301-
public Car.Builder clearBrand() {
303+
public com.baeldung.apache.avro.generated.Car.Builder clearBrand() {
302304
brand = null;
303305
fieldSetFlags()[0] = false;
304306
return this;
@@ -318,7 +320,7 @@ public int getNumberOfDoors() {
318320
* @param value The value of 'number_of_doors'.
319321
* @return This builder.
320322
*/
321-
public Car.Builder setNumberOfDoors(int value) {
323+
public com.baeldung.apache.avro.generated.Car.Builder setNumberOfDoors(int value) {
322324
validate(fields()[1], value);
323325
this.number_of_doors = value;
324326
fieldSetFlags()[1] = true;
@@ -338,7 +340,7 @@ public boolean hasNumberOfDoors() {
338340
* Clears the value of the 'number_of_doors' field.
339341
* @return This builder.
340342
*/
341-
public Car.Builder clearNumberOfDoors() {
343+
public com.baeldung.apache.avro.generated.Car.Builder clearNumberOfDoors() {
342344
fieldSetFlags()[1] = false;
343345
return this;
344346
}
@@ -357,7 +359,7 @@ public java.lang.String getColor() {
357359
* @param value The value of 'color'.
358360
* @return This builder.
359361
*/
360-
public Car.Builder setColor(java.lang.String value) {
362+
public com.baeldung.apache.avro.generated.Car.Builder setColor(java.lang.String value) {
361363
validate(fields()[2], value);
362364
this.color = value;
363365
fieldSetFlags()[2] = true;
@@ -377,7 +379,7 @@ public boolean hasColor() {
377379
* Clears the value of the 'color' field.
378380
* @return This builder.
379381
*/
380-
public Car.Builder clearColor() {
382+
public com.baeldung.apache.avro.generated.Car.Builder clearColor() {
381383
color = null;
382384
fieldSetFlags()[2] = false;
383385
return this;

apache-libraries-2/src/main/java/com/baeldung/apache/avro/car.avsc renamed to apache-libraries-2/src/main/java/com/baeldung/apache/avro/schemas/car.avsc

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"namespace": "generated",
2+
"namespace": "com.baeldung.apache.avro.generated",
33
"type": "record",
44
"name": "Car",
55
"fields": [

apache-libraries/parent.avro

324 Bytes
Binary file not shown.

apache-libraries/pom.xml

+8-9
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
<dependency>
1919
<groupId>org.apache.avro</groupId>
2020
<artifactId>avro</artifactId>
21-
<version>${avro.version}</version>
21+
<version>${apache.avro.version}</version>
2222
</dependency>
2323
<dependency>
2424
<groupId>org.apache.avro</groupId>
@@ -81,20 +81,18 @@
8181
<plugin>
8282
<groupId>org.apache.avro</groupId>
8383
<artifactId>avro-maven-plugin</artifactId>
84-
<version>${avro.version}</version>
84+
<version>${apache.avro.version}</version>
85+
<configuration>
86+
<sourceDirectory>src/main/java/com/baeldung/apache/avro/schemas</sourceDirectory>
87+
<outputDirectory>src/main/java</outputDirectory>
88+
<stringType>String</stringType>
89+
</configuration>
8590
<executions>
8691
<execution>
87-
<id>schemas</id>
8892
<phase>generate-sources</phase>
8993
<goals>
9094
<goal>schema</goal>
91-
<goal>protocol</goal>
92-
<goal>idl-protocol</goal>
9395
</goals>
94-
<configuration>
95-
<sourceDirectory>${project.basedir}/src/main/resources/</sourceDirectory>
96-
<outputDirectory>${project.basedir}/src/main/java/</outputDirectory>
97-
</configuration>
9896
</execution>
9997
</executions>
10098
</plugin>
@@ -106,6 +104,7 @@
106104
<bval.version>3.0.1</bval.version>
107105
<jakarta.validation.validation-api.version>3.1.0</jakarta.validation.validation-api.version><opennlp.opennlp-tools.version>1.8.4</opennlp.opennlp-tools.version>
108106
<solr.solr-solrj.version>6.4.0</solr.solr-solrj.version>
107+
<apache.avro.version>1.11.3</apache.avro.version>
109108
</properties>
110109

111110
</project>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.baeldung.apache.avro;
2+
3+
import java.io.File;
4+
import java.io.IOException;
5+
6+
import org.apache.avro.file.DataFileReader;
7+
import org.apache.avro.file.DataFileWriter;
8+
import org.apache.avro.io.DatumReader;
9+
import org.apache.avro.io.DatumWriter;
10+
import org.apache.avro.specific.SpecificDatumReader;
11+
import org.apache.avro.specific.SpecificDatumWriter;
12+
13+
import com.baeldung.apache.avro.generated.Parent;
14+
15+
public class SerializationDeserializationLogic {
16+
17+
static void serializeParent(Parent parent) throws IOException {
18+
DatumWriter<Parent> userDatumWriter = new SpecificDatumWriter(Parent.class);
19+
20+
try (DataFileWriter<Parent> dataFileWriter = new DataFileWriter(userDatumWriter)) {
21+
dataFileWriter.create(parent.getSchema(), new File("parent.avro"));
22+
dataFileWriter.append(parent);
23+
}
24+
}
25+
26+
static Parent deserializeParent() throws IOException {
27+
DatumReader<Parent> userDatumReader = new SpecificDatumReader(Parent.class);
28+
29+
try (DataFileReader<Parent> dataFileReader = new DataFileReader(new File("parent.avro"), userDatumReader)) {
30+
return dataFileReader.next();
31+
}
32+
}
33+
}

0 commit comments

Comments
 (0)