package com.fasterxml.jackson.failing;
import java.beans.ConstructorProperties;
import com.fasterxml.jackson.annotation.*;
import com.fasterxml.jackson.databind.BaseMapTest;
import com.fasterxml.jackson.databind.ObjectMapper;
public class BackReference1516Test extends BaseMapTest
{
static class ParentWithCreator {
String id, name;
@JsonManagedReference
ChildObject1 child;
@ConstructorProperties({ "id", "name", "child" })
public ParentWithCreator(String id, String name,
ChildObject1 child) {
this.id = id;
this.name = name;
this.child = child;
}
}
static class ChildObject1
{
public String id, name;
@JsonBackReference
public ParentWithCreator parent;
@ConstructorProperties({ "id", "name", "parent" })
public ChildObject1(String id, String name,
ParentWithCreator parent) {
this.id = id;
this.name = name;
this.parent = parent;
}
}
static class ParentWithoutCreator {
public String id, name;
@JsonManagedReference
public ChildObject2 child;
}
static class ChildObject2
{
public String id, name;
@JsonBackReference
public ParentWithoutCreator parent;
@ConstructorProperties({ "id", "name", "parent" })
public ChildObject2(String id, String name,
ParentWithoutCreator parent) {
this.id = id;
this.name = name;
this.parent = parent;
}
}
/*
/**********************************************************
/* Unit tests
/**********************************************************
*/
private final ObjectMapper MAPPER = new ObjectMapper();
private final String PARENT_CHILD_JSON = aposToQuotes(
"{ 'id': 'abc',\n"+
" 'name': 'Bob',\n"+
" 'child': { 'id': 'def', 'name':'Bert' }\n"+
"}");
public void testWithParentCreator() throws Exception
{
ParentWithCreator result = MAPPER.readValue(PARENT_CHILD_JSON,
ParentWithCreator.class);
assertNotNull(result);
assertNotNull(result.child);
assertSame(result, result.child.parent);
}
public void testWithParentNoCreator() throws Exception
{
ParentWithoutCreator result = MAPPER.readValue(PARENT_CHILD_JSON,
ParentWithoutCreator.class);
assertNotNull(result);
assertNotNull(result.child);
assertSame(result, result.child.parent);
}
}