package com.fasterxml.jackson.databind.objectid; import com.fasterxml.jackson.annotation.*; import com.fasterxml.jackson.databind.*; public class AlwaysAsReferenceFirstTest extends BaseMapTest { // [databind#1255] @JsonPropertyOrder({ "bar1", "bar2" }) static class Foo { @JsonIdentityReference(alwaysAsId = true) public Bar bar1; @JsonIdentityReference public Bar bar2; } @JsonIdentityInfo(generator = ObjectIdGenerators.IntSequenceGenerator.class) static class Bar { public int value = 3; } // [databind#1607] @JsonIdentityInfo(generator=ObjectIdGenerators.IntSequenceGenerator.class, property="id") static class Value1607 { public int value; public Value1607() { this(0); } public Value1607(int v) { value = v; } } @JsonIdentityInfo(generator=ObjectIdGenerators.IntSequenceGenerator.class, property="id") @JsonIdentityReference(alwaysAsId=true) static class Value1607ViaClass { public int value; public Value1607ViaClass() { this(0); } public Value1607ViaClass(int v) { value = v; } } @JsonPropertyOrder(alphabetic=true) static class ReallyAlwaysContainer { public Value1607ViaClass alwaysClass = new Value1607ViaClass(13); @JsonIdentityReference(alwaysAsId=true) public Value1607 alwaysProp = new Value1607(13); } /* /********************************************************** /* Test methods /********************************************************** */ private final ObjectMapper MAPPER = new ObjectMapper(); // [databind#1255] public void testIssue1255() throws Exception { Foo mo = new Foo(); mo.bar1 = new Bar(); mo.bar2 = mo.bar1; String json = MAPPER.writeValueAsString(mo); Foo result = MAPPER.readValue(json, Foo.class); assertNotNull(result); } // [databind#1607] public void testIssue1607() throws Exception { String json = MAPPER.writeValueAsString(new ReallyAlwaysContainer()); assertEquals(aposToQuotes("{'alwaysClass':1,'alwaysProp':2}"), json); } }