Thank you for the response once again.

As you suggested I am using "findNonContextualValueDeserializer" to locate 
deserializer for a given type I expect.

JsonNode eventNode = jsonTree.get("event");

ctxt

.findNonContextualValueDeserializer(ctxt.constructType(Event.class))

.deserialize(eventNode.traverse(parser.getCodec()));


In my case event is an abstract class, I wont know exactly what concrete 
implementation its going to be unless I look at the eventNode and extract 
@class property which contains the fully qualified java class name. 

*My question is:*
Will I have to parse out the *type property** specifying concrete class *first? 
Then 
construct a *JavaType* from it with, and then look for the custom 
deserializer using the *findNonContextualValueDeserializer(javaType).*

Ultimately I am trying to achieve the same dispatching behavior in 
deserializers as Jackson has in the custom serializers. In the serializer 
example below all I have to do is gen.WriteObjectField("fieldName", 
someObject), and  Jackson locates the custom serializers I have declared 
somewhere else for the *someObject. *
 @Override
  public void serialize(EventMessage value, JsonGenerator gen,
      SerializerProvider provider) throws IOException {

    gen.writeStartObject();
    gen.writeObjectField("event", value.getPayLoad());
    gen.writeObjectField("headers", value.getHeaders());
    gen.writeEndObject();
  }

 @Override
  public void serialize(EventMessage value, JsonGenerator gen,
      SerializerProvider provider) throws IOException {

    gen.writeStartObject();
    gen.writeObjectField("event", value.getPayLoad());
    gen.writeObjectField("headers", value.getHeaders());
    gen.writeEndObject();
  }








On Friday, August 18, 2017 at 4:32:56 PM UTC-4, Vladimir wrote:
>
>
> I implement the ResolvableDeserializer within my custom deserializer, 
> which gives me the reference to the default JsonDeserializer<?>.
> Id like to invoke the default deserializer on the "Jail" JsonNode to 
> return to me a Jail object
>
> public class BadStudentDeserializer extends StdDeserializer<BadStudent> 
>     implements ResolvableDeserializer{
>   private static final long serialVersionUID = 1L;
>   private JsonDeserializer<?> defaultDeserializer;
>
>
>   public BadStudentDeserializer(JsonDeserializer<?> defaultDeserializer) {
>     super(BadStudent.class);
>     this.defaultDeserializer = defaultDeserializer;
>   }
>   
>   @Override
>   public BadStudent deserialize(JsonParser p, DeserializationContext ctxt)
>       throws IOException, JsonProcessingException {
>     JsonNode jsonTree = p.getCodec().readTree(p);
>     
>     String id = jsonTree.get("id").asText();
>     String weapon = jsonTree.get("weapon").asText();
>     JsonNode jailNode = jsonTree.get("jail");
>     JsonParser jailNodeParser = jailNode.traverse();
>     //advance it as per documentation
>     jailNodeParser.nextToken();
>     //this doesnt work
>     Jail jail = (Jail)defaultDeserializer.
>         deserialize(jailNodeParser, ctxt);
>     return new BadStudent(id, weapon, jail);
>   }
>
>
>   @Override
>   public void resolve(DeserializationContext ctxt) throws 
> JsonMappingException {
>     ((ResolvableDeserializer) defaultDeserializer).resolve(ctxt);
>     
>   }
>
>  
>
>
> How do I provide the defaultDeserializer a clue as to what class TYPE a 
> tree node is, so that it can pick up the right deserializer or that 
> treeNode?
>
> Hope I am able to explain myself clearly.
>
>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"jackson-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to