Skip to content

Commit 4807f7f

Browse files
committed
Minor improvement to proxied-value serializer to possibly work wrt schema generation
1 parent ec355d5 commit 4807f7f

File tree

3 files changed

+53
-5
lines changed

3 files changed

+53
-5
lines changed

hibernate3/src/main/java/com/fasterxml/jackson/datatype/hibernate3/HibernateProxySerializer.java

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import com.fasterxml.jackson.core.*;
99
import com.fasterxml.jackson.databind.*;
10+
import com.fasterxml.jackson.databind.jsonFormatVisitors.JsonFormatVisitorWrapper;
1011
import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
1112
import com.fasterxml.jackson.databind.ser.ContextualSerializer;
1213
import com.fasterxml.jackson.databind.ser.impl.PropertySerializerMap;
@@ -60,7 +61,7 @@ public HibernateProxySerializer(boolean forceLazyLoading, BeanProperty property)
6061
@Override
6162
public JsonSerializer<?> createContextual(SerializerProvider prov, BeanProperty property) {
6263
return new HibernateProxySerializer(this._forceLazyLoading);
63-
}
64+
}
6465

6566
/*
6667
/**********************************************************************
@@ -105,6 +106,20 @@ public void serializeWithType(HibernateProxy value, JsonGenerator jgen, Serializ
105106
findSerializer(provider, proxiedValue).serializeWithType(proxiedValue, jgen, provider, typeSer);
106107
}
107108

109+
@Override
110+
public void acceptJsonFormatVisitor(JsonFormatVisitorWrapper visitor, JavaType typeHint)
111+
throws JsonMappingException
112+
{
113+
SerializerProvider prov = visitor.getProvider();
114+
if ((prov == null) || (_property == null)) {
115+
super.acceptJsonFormatVisitor(visitor, typeHint);
116+
} else {
117+
JavaType type = _property.getType();
118+
prov.findPrimaryPropertySerializer(type, _property)
119+
.acceptJsonFormatVisitor(visitor, type);
120+
}
121+
}
122+
108123
/*
109124
/**********************************************************************
110125
/* Helper methods
@@ -117,7 +132,8 @@ protected JsonSerializer<Object> findSerializer(SerializerProvider provider, Obj
117132
/* TODO: if Hibernate did use generics, or we wanted to allow use of Jackson
118133
* annotations to indicate type, should take that into account.
119134
*/
120-
Class<?> type = value.getClass();
135+
Class<?> rawType = value.getClass();
136+
121137
/* we will use a map to contain serializers found so far, keyed by type:
122138
* this avoids potentially costly lookup from global caches and/or construction
123139
* of new serializers
@@ -126,7 +142,7 @@ protected JsonSerializer<Object> findSerializer(SerializerProvider provider, Obj
126142
* really anyone's guess at this point; proxies can exist at any level?
127143
*/
128144
PropertySerializerMap.SerializerAndMapResult result =
129-
_dynamicSerializers.findAndAddPrimarySerializer(type, provider, _property);
145+
_dynamicSerializers.findAndAddPrimarySerializer(rawType, provider, _property);
130146
if (_dynamicSerializers != result.map) {
131147
_dynamicSerializers = result.map;
132148
}

hibernate4/src/main/java/com/fasterxml/jackson/datatype/hibernate4/HibernateProxySerializer.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,12 @@
44
import java.util.HashMap;
55

66
import com.fasterxml.jackson.core.*;
7-
87
import com.fasterxml.jackson.databind.BeanProperty;
8+
import com.fasterxml.jackson.databind.JavaType;
9+
import com.fasterxml.jackson.databind.JsonMappingException;
910
import com.fasterxml.jackson.databind.JsonSerializer;
1011
import com.fasterxml.jackson.databind.SerializerProvider;
12+
import com.fasterxml.jackson.databind.jsonFormatVisitors.JsonFormatVisitorWrapper;
1113
import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
1214
import com.fasterxml.jackson.databind.ser.ContextualSerializer;
1315
import com.fasterxml.jackson.databind.ser.impl.PropertySerializerMap;
@@ -121,6 +123,20 @@ public void serializeWithType(HibernateProxy value, JsonGenerator jgen, Serializ
121123
findSerializer(provider, proxiedValue).serializeWithType(proxiedValue, jgen, provider, typeSer);
122124
}
123125

126+
@Override
127+
public void acceptJsonFormatVisitor(JsonFormatVisitorWrapper visitor, JavaType typeHint)
128+
throws JsonMappingException
129+
{
130+
SerializerProvider prov = visitor.getProvider();
131+
if ((prov == null) || (_property == null)) {
132+
super.acceptJsonFormatVisitor(visitor, typeHint);
133+
} else {
134+
JavaType type = _property.getType();
135+
prov.findPrimaryPropertySerializer(type, _property)
136+
.acceptJsonFormatVisitor(visitor, type);
137+
}
138+
}
139+
124140
/*
125141
/**********************************************************************
126142
/* Helper methods

hibernate5/src/main/java/com/fasterxml/jackson/datatype/hibernate5/HibernateProxySerializer.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,12 @@
44
import java.util.HashMap;
55

66
import com.fasterxml.jackson.core.JsonGenerator;
7-
87
import com.fasterxml.jackson.databind.BeanProperty;
8+
import com.fasterxml.jackson.databind.JavaType;
9+
import com.fasterxml.jackson.databind.JsonMappingException;
910
import com.fasterxml.jackson.databind.JsonSerializer;
1011
import com.fasterxml.jackson.databind.SerializerProvider;
12+
import com.fasterxml.jackson.databind.jsonFormatVisitors.JsonFormatVisitorWrapper;
1113
import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
1214
import com.fasterxml.jackson.databind.ser.ContextualSerializer;
1315
import com.fasterxml.jackson.databind.ser.impl.PropertySerializerMap;
@@ -121,6 +123,20 @@ public void serializeWithType(HibernateProxy value, JsonGenerator jgen, Serializ
121123
findSerializer(provider, proxiedValue).serializeWithType(proxiedValue, jgen, provider, typeSer);
122124
}
123125

126+
@Override
127+
public void acceptJsonFormatVisitor(JsonFormatVisitorWrapper visitor, JavaType typeHint)
128+
throws JsonMappingException
129+
{
130+
SerializerProvider prov = visitor.getProvider();
131+
if ((prov == null) || (_property == null)) {
132+
super.acceptJsonFormatVisitor(visitor, typeHint);
133+
} else {
134+
JavaType type = _property.getType();
135+
prov.findPrimaryPropertySerializer(type, _property)
136+
.acceptJsonFormatVisitor(visitor, type);
137+
}
138+
}
139+
124140
/*
125141
/**********************************************************************
126142
/* Helper methods

0 commit comments

Comments
 (0)