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 }