package com.fasterxml.jackson.databind.objectid;
import java.io.IOException;
import java.util.*;
import com.fasterxml.jackson.annotation.*;
import com.fasterxml.jackson.databind.*;
public class ObjectId687Test extends BaseMapTest
{
// for [databind#687]
@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="label")
static class ReferredWithCreator {
public String label;
@JsonCreator
ReferredWithCreator(@JsonProperty("label")String label) {
this.label = label;
}
}
@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="label")
static class ReferringToObjWithCreator {
public String label = "test1";
public List<ReferredWithCreator> refs = new ArrayList<ReferredWithCreator>();
public void addRef(ReferredWithCreator r) {
refs.add(r);
}
}
@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="label")
static class EnclosingForRefsWithCreator {
public String label = "enclosing1";
public ReferredWithCreator baseRef;
public ReferringToObjWithCreator nextRef;
}
@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="label")
static class ReferredWithNoCreator {
public String label = "label2";
}
@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="label")
static class ReferringToObjWithNoCreator {
public String label = "test2";
public List<ReferredWithNoCreator> refs = new ArrayList<ReferredWithNoCreator>();
public void addRef(ReferredWithNoCreator r) {
refs.add(r);
}
}
@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="label")
static class EnclosingForRefWithNoCreator {
public String label = "enclosing2";
public ReferredWithNoCreator baseRef;
public ReferringToObjWithNoCreator nextRef;
}
/*
/*****************************************************
/* Test methods
/*****************************************************
*/
private final ObjectMapper MAPPER = objectMapper();
// for [databind#687]
public void testSerializeDeserializeWithCreator() throws IOException {
ReferredWithCreator base = new ReferredWithCreator("label1");
ReferringToObjWithCreator r = new ReferringToObjWithCreator();
r.addRef(base);
EnclosingForRefsWithCreator e = new EnclosingForRefsWithCreator();
e.baseRef = base;
e.nextRef = r;
String json = MAPPER.writeValueAsString(e);
EnclosingForRefsWithCreator result = MAPPER.readValue(json,
EnclosingForRefsWithCreator.class);
assertNotNull(result);
assertEquals(result.label, e.label);
// also, compare by re-serializing:
assertEquals(json, MAPPER.writeValueAsString(result));
}
public void testSerializeDeserializeNoCreator() throws IOException {
ReferredWithNoCreator base = new ReferredWithNoCreator();
ReferringToObjWithNoCreator r = new ReferringToObjWithNoCreator();
r.addRef(base);
EnclosingForRefWithNoCreator e = new EnclosingForRefWithNoCreator();
e.baseRef = base;
e.nextRef = r;
String json = MAPPER.writeValueAsString(e);
EnclosingForRefWithNoCreator result = MAPPER.readValue(json,
EnclosingForRefWithNoCreator.class);
assertNotNull(result);
assertEquals(result.label, e.label);
// also, compare by re-serializing:
assertEquals(json, MAPPER.writeValueAsString(result));
}
}