Skip to content

Commit

Permalink
AVRO-3644: keep up to date
Browse files Browse the repository at this point in the history
  • Loading branch information
clesaec committed Jun 19, 2023
1 parent 05eec4e commit 84e0028
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 24 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
import java.util.IdentityHashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.ServiceLoader;

public class ConversionsContainer {

Expand Down Expand Up @@ -53,6 +54,21 @@ public Collection<Conversion<?>> getConversions() {
return conversions.values();
}

public ConversionsContainer(ClassLoader classLoader) {
this.loadConversions(classLoader);
}

/**
* Use the Java 6 ServiceLoader to load conversions.
*
* @see #addLogicalTypeConversion(Conversion)
*/
private void loadConversions(ClassLoader classLoader) {
for (Conversion<?> conversion : ServiceLoader.load(Conversion.class, classLoader)) {
addLogicalTypeConversion(conversion);
}
}

/**
* Registers the given conversion to be used when reading and writing with this
* data model.
Expand Down Expand Up @@ -107,11 +123,11 @@ public <T> Conversion<T> getConversionByClass(Class<T> datumClass, LogicalType l
* @return the conversion for the logical type, or null
*/
@SuppressWarnings("unchecked")
public Conversion<Object> getConversionFor(LogicalType logicalType) {
public <T> Conversion<T> getConversionFor(LogicalType logicalType) {
if (logicalType == null) {
return null;
}
return (Conversion<Object>) conversions.get(logicalType.getName());
return (Conversion<T>) conversions.get(logicalType.getName());
}

public ClassConversions forClass(Class<?> clazz) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,25 +17,6 @@
*/
package org.apache.avro.generic;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
import java.time.temporal.Temporal;
import java.util.AbstractList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.IdentityHashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.ServiceLoader;
import java.util.UUID;
import java.util.concurrent.ConcurrentMap;

import org.apache.avro.AvroMissingFieldException;
import org.apache.avro.AvroRuntimeException;
import org.apache.avro.AvroTypeException;
Expand All @@ -57,9 +38,26 @@
import org.apache.avro.io.FastReaderBuilder;
import org.apache.avro.util.Utf8;
import org.apache.avro.util.internal.Accessor;
import org.apache.avro.util.springframework.ConcurrentReferenceHashMap;

import com.fasterxml.jackson.databind.JsonNode;
import org.apache.avro.util.springframework.ConcurrentReferenceHashMap;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
import java.time.temporal.Temporal;
import java.util.AbstractList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.IdentityHashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.ConcurrentMap;

import static org.apache.avro.util.springframework.ConcurrentReferenceHashMap.ReferenceType.WEAK;

Expand Down Expand Up @@ -118,14 +116,15 @@ public GenericData() {
/** For subclasses. GenericData does not use a ClassLoader. */
public GenericData(ClassLoader classLoader) {
this.classLoader = (classLoader != null) ? classLoader : getClass().getClassLoader();
this.conversions = new ConversionsContainer(classLoader);
}

/** Return the class loader that's used (by subclasses). */
public ClassLoader getClassLoader() {
return classLoader;
}

private final ConversionsContainer conversions = new ConversionsContainer();
private final ConversionsContainer conversions;

public Collection<Conversion<?>> getConversions() {
return this.conversions.getConversions();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ class ConversionsContainerTest {

@Test
void getConversions() {
ConversionsContainer conversions = new ConversionsContainer();
ConversionsContainer conversions = new ConversionsContainer(Thread.currentThread().getContextClassLoader());

// test for empty container.
Assertions.assertNull(conversions.getConversionByClass(String.class));
Expand Down

0 comments on commit 84e0028

Please sign in to comment.