package com.fasterxml.jackson.databind.introspect; import java.beans.Transient; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonPropertyOrder; import com.fasterxml.jackson.databind.*; /** * Tests for both `transient` keyword and JDK 7 * {@link java.beans.Transient} annotation. */ public class TransientTest extends BaseMapTest { // for [databind#296] @JsonPropertyOrder({ "x" }) static class ClassyTransient { public transient int value = 3; public int getValue() { return value; } public int getX() { return 42; } } static class SimplePrunableTransient { public int a = 1; public transient int b = 2; } // for [databind#857] static class BeanTransient { @Transient public int getX() { return 3; } public int getY() { return 4; } } // for [databind#1184] static class OverridableTransient { @JsonProperty // @JsonProperty("value") // should override transient here, to force inclusion public transient int tValue; public OverridableTransient(int v) { tValue = v; } } /* /********************************************************** /* Unit tests /********************************************************** */ private final ObjectMapper MAPPER = objectMapper(); // for [databind#296] public void testTransientFieldHandling() throws Exception { // default handling: remove transient field but do not propagate assertEquals(aposToQuotes("{'x':42,'value':3}"), MAPPER.writeValueAsString(new ClassyTransient())); assertEquals(aposToQuotes("{'a':1}"), MAPPER.writeValueAsString(new SimplePrunableTransient())); // but may change that ObjectMapper m = new ObjectMapper() .enable(MapperFeature.PROPAGATE_TRANSIENT_MARKER); assertEquals(aposToQuotes("{'x':42}"), m.writeValueAsString(new ClassyTransient())); } // for [databind#857] public void testBeanTransient() throws Exception { assertEquals(aposToQuotes("{'y':4}"), MAPPER.writeValueAsString(new BeanTransient())); } // for [databind#1184] public void testOverridingTransient() throws Exception { assertEquals(aposToQuotes("{'tValue':38}"), MAPPER.writeValueAsString(new OverridableTransient(38))); } }