1 package org.springframework.security.oauth2.provider.client; 2 3 import java.io.IOException; 4 import java.util.Arrays; 5 import java.util.LinkedHashSet; 6 import java.util.Set; 7 8 import org.codehaus.jackson.JsonParser; 9 import org.codehaus.jackson.JsonProcessingException; 10 import org.codehaus.jackson.JsonToken; 11 import org.codehaus.jackson.map.DeserializationContext; 12 import org.codehaus.jackson.map.deser.std.StdDeserializer; 13 import org.codehaus.jackson.map.type.SimpleType; 14 import org.codehaus.jackson.type.JavaType; 15 import org.codehaus.jackson.type.TypeReference; 16 import org.springframework.util.StringUtils; 17 18 public class JacksonArrayOrStringDeserializer extends StdDeserializer<Set<String>> { 19 20 public JacksonArrayOrStringDeserializer() { 21 super(Set.class); 22 } 23 24 @Override 25 public JavaType getValueType() { 26 return SimpleType.construct(String.class); 27 } 28 29 @Override 30 public Set<String> deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, 31 JsonProcessingException { 32 JsonToken token = jp.getCurrentToken(); 33 if (token.isScalarValue()) { 34 String list = jp.getText(); 35 list = list.replaceAll("\\s+", ","); 36 return new LinkedHashSet<String>(Arrays.asList(StringUtils.commaDelimitedListToStringArray(list))); 37 } 38 return jp.readValueAs(new TypeReference<Set<String>>() { 39 }); 40 } 41 }