1 package com.fasterxml.jackson.databind.ser.impl;
2
3 import java.io.IOException;
4 import java.lang.reflect.Type;
5
6 import com.fasterxml.jackson.core.*;
7 import com.fasterxml.jackson.core.type.WritableTypeId;
8 import com.fasterxml.jackson.databind.*;
9 import com.fasterxml.jackson.databind.jsonFormatVisitors.JsonFormatVisitorWrapper;
10 import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
11 import com.fasterxml.jackson.databind.ser.std.StdSerializer;
12
13 @SuppressWarnings("serial")
14 public class UnknownSerializer
15 extends StdSerializer<Object>
16 {
17 public UnknownSerializer() {
18 super(Object.class);
19 }
20
21
24 public UnknownSerializer(Class<?> cls) {
25 super(cls, false);
26 }
27
28 @Override
29 public void serialize(Object value, JsonGenerator gen, SerializerProvider provider) throws IOException
30 {
31
32 if (provider.isEnabled(SerializationFeature.FAIL_ON_EMPTY_BEANS)) {
33 failForEmpty(provider, value);
34 }
35
36 gen.writeStartObject(value, 0);
37 gen.writeEndObject();
38 }
39
40 @Override
41 public final void serializeWithType(Object value, JsonGenerator gen, SerializerProvider provider,
42 TypeSerializer typeSer) throws IOException
43 {
44 if (provider.isEnabled(SerializationFeature.FAIL_ON_EMPTY_BEANS)) {
45 failForEmpty(provider, value);
46 }
47 WritableTypeId typeIdDef = typeSer.writeTypePrefix(gen,
48 typeSer.typeId(value, JsonToken.START_OBJECT));
49 typeSer.writeTypeSuffix(gen, typeIdDef);
50 }
51
52 @Override
53 public boolean isEmpty(SerializerProvider provider, Object value) {
54 return true;
55 }
56
57 @Override
58 public JsonNode getSchema(SerializerProvider provider, Type typeHint) throws JsonMappingException {
59 return null;
60 }
61
62 @Override
63 public void acceptJsonFormatVisitor(JsonFormatVisitorWrapper visitor, JavaType typeHint)
64 throws JsonMappingException
65 {
66 visitor.expectAnyFormat(typeHint);
67 }
68
69 protected void failForEmpty(SerializerProvider prov, Object value)
70 throws JsonMappingException {
71 prov.reportBadDefinition(handledType(), String.format(
72 "No serializer found for class %s and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS)",
73 value.getClass().getName()));
74 }
75 }
76