![JAR search and dependency download from the Maven repository](/logo.png)
org.dasein.cloud.rackspace.RackspaceException Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of dasein-cloud-rackspace Show documentation
Show all versions of dasein-cloud-rackspace Show documentation
Native API implementation for the Rackspace API
The newest version!
/**
* Copyright (C) 2009-2012 enStratus Networks Inc
*
* ====================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ====================================================================
*/
package org.dasein.cloud.rackspace;
import org.dasein.cloud.CloudErrorType;
import org.dasein.cloud.CloudException;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
public class RackspaceException extends CloudException {
private static final long serialVersionUID = -9188123825416917437L;
static public class ExceptionItems {
public CloudErrorType type;
public int code;
public String message;
public String details;
}
static public ExceptionItems parseException(int code, String json) {
ExceptionItems items = new ExceptionItems();
items.code = code;
items.type = CloudErrorType.GENERAL;
items.message = "unknown";
items.details = "The cloud provided an error code without explanation";
if( json != null ) {
try {
JSONObject ob = new JSONObject(json);
if( ob.has("details") ) {
items.details = ob.getString("details");
}
else {
items.details = "[" + code + "] " + items.message;
}
if( ob.has("message") ) {
items.message = ob.getString("message");
if( items.message == null ) {
items.message = "unknown";
}
else {
items.message = items.message.trim();
}
if( code == 400 && items.message.equalsIgnoreCase("validation failure") && ob.has("validationErrors") ) {
JSONObject v = ob.getJSONObject("validationErrors");
if( v.has("messages") ) {
StringBuilder str = new StringBuilder();
JSONArray msgs = v.getJSONArray("messages");
for( int i=0; i 0 ) {
str.append("; ");
}
str.append(msg);
}
}
if( str.length() > 0 ) {
items.details = str.toString();
}
}
}
}
else {
items.message = "unknown";
}
String t = items.message.toLowerCase().trim();
if( t.equals("unauthorized") ) {
items.type = CloudErrorType.AUTHENTICATION;
}
else if( t.equals("serviceunavailable") ) {
items.type = CloudErrorType.CAPACITY;
}
else if( t.equals("badrequest") || t.equals("badmediatype") || t.equals("badmethod") || t.equals("notimplemented") ) {
items.type = CloudErrorType.COMMUNICATION;
}
else if( t.equals("overlimit") ) {
items.type = CloudErrorType.QUOTA;
}
else if( t.equals("servercapacityunavailable") ) {
items.type = CloudErrorType.CAPACITY;
}
else if( t.equals("itemnotfound") ) {
return null;
}
}
catch( JSONException e ) {
RackspaceCloud.getLogger(RackspaceException.class, "std").warn("parseException(): Invalid JSON in cloud response: " + json);
items.details = json;
}
}
return items;
}
public RackspaceException(ExceptionItems items) {
super(items.type, items.code, items.message, items.details);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy