1 package com.fasterxml.jackson.databind.ser; 2 3 import java.util.*; 4 5 import com.fasterxml.jackson.annotation.JsonPropertyOrder; 6 7 import com.fasterxml.jackson.databind.*; 8 import com.fasterxml.jackson.databind.exc.InvalidDefinitionException; 9 import com.fasterxml.jackson.databind.module.SimpleModule; 10 import com.fasterxml.jackson.databind.ser.BeanPropertyWriter; 11 import com.fasterxml.jackson.databind.ser.BeanSerializerBuilder; 12 import com.fasterxml.jackson.databind.ser.BeanSerializerModifier; 13 14 public class BeanSerializerModifier1612Test extends BaseMapTest 15 { 16 @JsonPropertyOrder({ "a", "b", "c" }) 17 static class Bean1612 { 18 public Integer a; 19 public Integer b; 20 public Double c; 21 Bean1612(Integer a, Integer b, Double c)22 public Bean1612(Integer a, Integer b, Double c) { 23 this.a = a; 24 this.b = b; 25 this.c = c; 26 } 27 } 28 29 static class Modifier1612 extends BeanSerializerModifier { 30 @Override updateBuilder(SerializationConfig config, BeanDescription beanDesc, BeanSerializerBuilder builder)31 public BeanSerializerBuilder updateBuilder(SerializationConfig config, BeanDescription beanDesc, 32 BeanSerializerBuilder builder) { 33 List<BeanPropertyWriter> filtered = new ArrayList<BeanPropertyWriter>(2); 34 List<BeanPropertyWriter> properties = builder.getProperties(); 35 //Make the filtered properties list bigger 36 builder.setFilteredProperties(new BeanPropertyWriter[] {properties.get(0), properties.get(1), properties.get(2)}); 37 38 //The props will be shorter 39 filtered.add(properties.get(1)); 40 filtered.add(properties.get(2)); 41 builder.setProperties(filtered); 42 return builder; 43 } 44 } 45 46 /* 47 /********************************************************** 48 /* Construction and setter methods 49 /********************************************************** 50 */ 51 testIssue1612()52 public void testIssue1612() throws Exception 53 { 54 SimpleModule mod = new SimpleModule(); 55 mod.setSerializerModifier(new Modifier1612()); 56 ObjectMapper objectMapper = new ObjectMapper() 57 .registerModule(mod); 58 try { 59 objectMapper.writeValueAsString(new Bean1612(0, 1, 2d)); 60 fail("Should not pass"); 61 } catch (InvalidDefinitionException e) { 62 verifyException(e, "Failed to construct BeanSerializer"); 63 verifyException(e, Bean1612.class.getName()); 64 } 65 } 66 } 67