org.cloudfoundry.identity.uaa.error.UaaExceptionDeserializer Maven / Gradle / Ivy
The newest version!
/*******************************************************************************
* Cloud Foundry
* Copyright (c) [2009-2016] Pivotal Software, Inc. All Rights Reserved.
*
* This product is licensed to you under the Apache License, Version 2.0 (the "License").
* You may not use this product except in compliance with the License.
*
* This product includes a number of subcomponents with
* separate copyright notices and license terms. Your use of these
* subcomponents is subject to the terms and conditions of the
* subcomponent's license, as noted in the LICENSE file.
*******************************************************************************/
package org.cloudfoundry.identity.uaa.error;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.JsonToken;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/**
* @author Dave Syer
*
*/
public class UaaExceptionDeserializer extends JsonDeserializer {
@Override
public UaaException deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException,
JsonProcessingException {
int status = 400;
JsonToken t = jp.getCurrentToken();
if (t == JsonToken.START_OBJECT) {
t = jp.nextToken();
}
Map errorParams = new HashMap();
for (; t == JsonToken.FIELD_NAME; t = jp.nextToken()) {
// Must point to field name
String fieldName = jp.getCurrentName();
// And then the value...
t = jp.nextToken();
// Note: must handle null explicitly here; value deserializers won't
String value;
if (t == JsonToken.VALUE_NULL) {
value = null;
}
else {
value = jp.getText();
if (fieldName.equals("status")) {
try {
status = Integer.valueOf(value);
} catch (NumberFormatException e) {
// ignore
}
}
}
errorParams.put(fieldName, value);
}
String errorCode = errorParams.get("error");
String errorMessage = errorParams.containsKey("error_description") ? errorParams.get("error_description")
: null;
if (errorMessage == null) {
errorMessage = errorCode == null ? "UAA Error" : errorCode;
}
UaaException ex = new UaaException(errorCode, errorMessage, status);
Set> entries = errorParams.entrySet();
for (Map.Entry entry : entries) {
String key = entry.getKey();
if (!"error".equals(key) && !"error_description".equals(key) && !"status".equals(key)) {
ex.addAdditionalInformation(key, entry.getValue());
}
}
return ex;
}
}