Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -19,16 +19,16 @@ public class ArrayVisitor
implements SchemaBuilder
{
protected final JavaType _type;
protected final DefinedSchemas _schemas;

protected final VisitorFormatWrapperImpl _visitorWrapper;

protected Schema _elementSchema;
public ArrayVisitor(SerializerProvider p, JavaType type, DefinedSchemas schemas)

public ArrayVisitor(SerializerProvider p, JavaType type, VisitorFormatWrapperImpl visitorWrapper)
{
super(p);
_type = type;
_schemas = schemas;
_visitorWrapper = visitorWrapper;
}

@Override
Expand All @@ -53,7 +53,7 @@ public Schema builtAvroSchema() {
public void itemsFormat(JsonFormatVisitable visitable, JavaType type)
throws JsonMappingException
{
VisitorFormatWrapperImpl wrapper = new VisitorFormatWrapperImpl(_schemas, getProvider());
VisitorFormatWrapperImpl wrapper = _visitorWrapper.createChildWrapper();
visitable.acceptJsonFormatVisitor(wrapper, type);
_elementSchema = wrapper.getAvroSchema();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,17 +14,17 @@ public class MapVisitor extends JsonMapFormatVisitor.Base
{
protected final JavaType _type;

protected final DefinedSchemas _schemas;
protected final VisitorFormatWrapperImpl _visitorWrapper;

protected Schema _valueSchema;

protected JavaType _keyType;

public MapVisitor(SerializerProvider p, JavaType type, DefinedSchemas schemas)
public MapVisitor(SerializerProvider p, JavaType type, VisitorFormatWrapperImpl visitorWrapper)
{
super(p);
_type = type;
_schemas = schemas;
_visitorWrapper = visitorWrapper;
}

@Override
Expand Down Expand Up @@ -57,8 +57,8 @@ public void keyFormat(JsonFormatVisitable handler, JavaType keyType)
public void valueFormat(JsonFormatVisitable handler, JavaType valueType)
throws JsonMappingException
{
VisitorFormatWrapperImpl wrapper = new VisitorFormatWrapperImpl(_schemas, getProvider());
handler.acceptJsonFormatVisitor(wrapper, valueType);
_valueSchema = wrapper.getAvroSchema();
VisitorFormatWrapperImpl visitorWrapper = _visitorWrapper.createChildWrapper();
handler.acceptJsonFormatVisitor(visitorWrapper, valueType);
_valueSchema = visitorWrapper.getAvroSchema();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public class RecordVisitor
{
protected final JavaType _type;

protected final DefinedSchemas _schemas;
protected final VisitorFormatWrapperImpl _visitorWrapper;

/**
* Tracks if the schema for this record has been overridden (by an annotation or other means), and calls to the {@code property} and
Expand All @@ -35,11 +35,11 @@ public class RecordVisitor

protected List<Schema.Field> _fields = new ArrayList<Schema.Field>();

public RecordVisitor(SerializerProvider p, JavaType type, DefinedSchemas schemas)
public RecordVisitor(SerializerProvider p, JavaType type, VisitorFormatWrapperImpl visitorWrapper)
{
super(p);
_type = type;
_schemas = schemas;
_visitorWrapper = visitorWrapper;
// Check if the schema for this record is overridden
BeanDescription bean = getProvider().getConfig().introspectDirectClassAnnotations(_type);
List<NamedType> subTypes = getProvider().getAnnotationIntrospector().findSubtypes(bean.getClassInfo());
Expand All @@ -52,7 +52,7 @@ public RecordVisitor(SerializerProvider p, JavaType type, DefinedSchemas schemas
try {
for (NamedType subType : subTypes) {
JsonSerializer<?> ser = getProvider().findValueSerializer(subType.getType());
VisitorFormatWrapperImpl visitor = new VisitorFormatWrapperImpl(_schemas, getProvider());
VisitorFormatWrapperImpl visitor = _visitorWrapper.createChildWrapper();
ser.acceptJsonFormatVisitor(visitor, getProvider().getTypeFactory().constructType(subType.getType()));
unionSchemas.add(visitor.getAvroSchema());
}
Expand All @@ -69,7 +69,7 @@ public RecordVisitor(SerializerProvider p, JavaType type, DefinedSchemas schemas
_avroSchema.addProp(meta.key(), meta.value());
}
}
schemas.addSchema(type, _avroSchema);
_visitorWrapper.getSchemas().addSchema(type, _avroSchema);
}

@Override
Expand Down Expand Up @@ -103,9 +103,9 @@ public void property(String name, JsonFormatVisitable handler,
if (_overridden) {
return;
}
VisitorFormatWrapperImpl wrapper = new VisitorFormatWrapperImpl(_schemas, getProvider());
handler.acceptJsonFormatVisitor(wrapper, type);
Schema schema = wrapper.getAvroSchema();
VisitorFormatWrapperImpl visitorWrapper = _visitorWrapper.createChildWrapper();
handler.acceptJsonFormatVisitor(visitorWrapper, type);
Schema schema = visitorWrapper.getAvroSchema();
_fields.add(new Schema.Field(name, schema, null, (Object) null));
}

Expand All @@ -124,9 +124,9 @@ public void optionalProperty(String name, JsonFormatVisitable handler,
if (_overridden) {
return;
}
VisitorFormatWrapperImpl wrapper = new VisitorFormatWrapperImpl(_schemas, getProvider());
handler.acceptJsonFormatVisitor(wrapper, type);
Schema schema = wrapper.getAvroSchema();
VisitorFormatWrapperImpl visitorWrapper = _visitorWrapper.createChildWrapper();
handler.acceptJsonFormatVisitor(visitorWrapper, type);
Schema schema = visitorWrapper.getAvroSchema();
if (!type.isPrimitive()) {
schema = AvroSchemaHelper.unionWithNull(schema);
}
Expand Down Expand Up @@ -170,9 +170,9 @@ protected Schema.Field schemaFieldForWriter(BeanProperty prop, boolean optional)
}
ser = prov.findValueSerializer(prop.getType(), prop);
}
VisitorFormatWrapperImpl visitor = new VisitorFormatWrapperImpl(_schemas, prov);
ser.acceptJsonFormatVisitor(visitor, prop.getType());
writerSchema = visitor.getAvroSchema();
VisitorFormatWrapperImpl visitorWrapper = _visitorWrapper.createChildWrapper();
ser.acceptJsonFormatVisitor(visitorWrapper, prop.getType());
writerSchema = visitorWrapper.getAvroSchema();
}

/* 23-Nov-2012, tatu: Actually let's also assume that primitive type values
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,10 @@ public VisitorFormatWrapperImpl(DefinedSchemas schemas, SerializerProvider p) {
_provider = p;
}

protected VisitorFormatWrapperImpl createChildWrapper() {
return new VisitorFormatWrapperImpl(_schemas, _provider);
}

@Override
public SerializerProvider getProvider() {
return _provider;
Expand All @@ -60,6 +64,10 @@ public void setProvider(SerializerProvider provider) {
_provider = provider;
}

protected DefinedSchemas getSchemas() {
return _schemas;
}

/*
/**********************************************************************
/* Extended API
Expand Down Expand Up @@ -95,14 +103,14 @@ public JsonObjectFormatVisitor expectObjectFormat(JavaType type) {
_valueSchema = s;
return null;
}
RecordVisitor v = new RecordVisitor(_provider, type, _schemas);
RecordVisitor v = new RecordVisitor(_provider, type, this);
_builder = v;
return v;
}

@Override
public JsonMapFormatVisitor expectMapFormat(JavaType mapType) {
MapVisitor v = new MapVisitor(_provider, mapType, _schemas);
MapVisitor v = new MapVisitor(_provider, mapType, this);
_builder = v;
return v;
}
Expand All @@ -122,7 +130,7 @@ public Schema builtAvroSchema() {
return null;
}
}
ArrayVisitor v = new ArrayVisitor(_provider, convertedType, _schemas);
ArrayVisitor v = new ArrayVisitor(_provider, convertedType, this);
_builder = v;
return v;
}
Expand Down