diff --git a/src/main/java/org/scribe/extractors/BaseStringExtractorImpl.java b/src/main/java/org/scribe/extractors/BaseStringExtractorImpl.java index f18c62c..ebaf20a 100644 --- a/src/main/java/org/scribe/extractors/BaseStringExtractorImpl.java +++ b/src/main/java/org/scribe/extractors/BaseStringExtractorImpl.java @@ -32,11 +32,11 @@ public class BaseStringExtractorImpl implements BaseStringExtractor private String getSortedAndEncodedParams(OAuthRequest request) { Map params = new HashMap(); - params.putAll(request.getQueryStringParams()); - params.putAll(request.getBodyParams()); - params.putAll(request.getOauthParameters()); + MapUtils.decodeAndAppendEntries(request.getQueryStringParams(), params); + MapUtils.decodeAndAppendEntries(request.getBodyParams(), params); + MapUtils.decodeAndAppendEntries(request.getOauthParameters(), params); params = MapUtils.sort(params); - return URLUtils.percentEncode(URLUtils.formURLEncodeMap(params)); + return URLUtils.percentEncode(URLUtils.concatSortedPercentEncodedParams(params)); } private void checkPreconditions(OAuthRequest request) diff --git a/src/main/java/org/scribe/utils/MapUtils.java b/src/main/java/org/scribe/utils/MapUtils.java index db08db3..a77e4b6 100644 --- a/src/main/java/org/scribe/utils/MapUtils.java +++ b/src/main/java/org/scribe/utils/MapUtils.java @@ -33,4 +33,19 @@ public class MapUtils Collections.sort(keys); return keys; } + + /** + * Form-urlDecodes and appends all keys from the source {@link Map} to the + * target {@link Map} + * + * @param source Map from where the keys get copied and decoded + * @param target Map where the decoded keys are copied to + */ + public static void decodeAndAppendEntries(Map source, Map target) + { + for (String key: source.keySet()) + { + target.put(URLUtils.percentEncode(key), URLUtils.percentEncode(source.get(key))); + } + } } diff --git a/src/main/java/org/scribe/utils/URLUtils.java b/src/main/java/org/scribe/utils/URLUtils.java index 8c6f492..eb82e46 100644 --- a/src/main/java/org/scribe/utils/URLUtils.java +++ b/src/main/java/org/scribe/utils/URLUtils.java @@ -139,6 +139,7 @@ public class URLUtils * @param params key-value map * @return querystring-like String */ + // TODO Move to MapUtils public static String concatSortedPercentEncodedParams(Map params) { StringBuilder result = new StringBuilder(); @@ -156,6 +157,7 @@ public class URLUtils * @param queryString querystring-like String * @return a map with the form-urldecoded parameters */ + // TODO Move to MapUtils public static Map queryStringToMap(String queryString) { Map result = new HashMap();