mirror of https://github.com/apache/jclouds.git
it is possible for an ultradns error to not include a message
This commit is contained in:
parent
6ab744d674
commit
16b43b08db
|
@ -17,24 +17,25 @@
|
||||||
* under the License.
|
* under the License.
|
||||||
*/
|
*/
|
||||||
package org.jclouds.ultradns.ws;
|
package org.jclouds.ultradns.ws;
|
||||||
|
|
||||||
import static com.google.common.base.Objects.equal;
|
import static com.google.common.base.Objects.equal;
|
||||||
import static com.google.common.base.Preconditions.checkNotNull;
|
import static com.google.common.base.Preconditions.checkNotNull;
|
||||||
|
import static java.lang.String.format;
|
||||||
|
|
||||||
import com.google.common.base.Objects;
|
import com.google.common.base.Objects;
|
||||||
|
import com.google.common.base.Optional;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Adrian Cole
|
* @author Adrian Cole
|
||||||
*/
|
*/
|
||||||
public final class UltraDNSWSError {
|
public final class UltraDNSWSError {
|
||||||
public static UltraDNSWSError fromCodeAndDescription(int code, String description) {
|
public static UltraDNSWSError fromCodeAndDescription(int code, Optional<String> description) {
|
||||||
return new UltraDNSWSError(code, description);
|
return new UltraDNSWSError(code, description);
|
||||||
}
|
}
|
||||||
|
|
||||||
private final int code;
|
private final int code;
|
||||||
private final String description;
|
private final Optional<String> description;
|
||||||
|
|
||||||
private UltraDNSWSError(int code, String description) {
|
private UltraDNSWSError(int code, Optional<String> description) {
|
||||||
this.code = code;
|
this.code = code;
|
||||||
this.description = checkNotNull(description, "description for code %s", code);
|
this.description = checkNotNull(description, "description for code %s", code);
|
||||||
}
|
}
|
||||||
|
@ -49,7 +50,7 @@ public final class UltraDNSWSError {
|
||||||
/**
|
/**
|
||||||
* The description of the error. ex {@code Zone does not exist in the system.}
|
* The description of the error. ex {@code Zone does not exist in the system.}
|
||||||
*/
|
*/
|
||||||
public String getDescription() {
|
public Optional<String> getDescription() {
|
||||||
return description;
|
return description;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -70,6 +71,6 @@ public final class UltraDNSWSError {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return String.format("Error %s: %s", code, description);
|
return description.isPresent() ? format("Error %s: %s", code, description.get()) : format("Error %s", code);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -78,10 +78,7 @@ public class UltraDNSWSErrorHandler implements HttpErrorHandler {
|
||||||
* there are 51002 potential codes. This defines the ones we are handling.
|
* there are 51002 potential codes. This defines the ones we are handling.
|
||||||
*/
|
*/
|
||||||
static final class ErrorCodes {
|
static final class ErrorCodes {
|
||||||
/**
|
static final int UNKNOWN = 0;
|
||||||
* Cannot find task with guid.
|
|
||||||
*/
|
|
||||||
static final int TASK_NOT_FOUND = 0;
|
|
||||||
/**
|
/**
|
||||||
* Zone does not exist in the system.
|
* Zone does not exist in the system.
|
||||||
*/
|
*/
|
||||||
|
@ -117,18 +114,23 @@ public class UltraDNSWSErrorHandler implements HttpErrorHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
private Exception refineException(UltraDNSWSResponseException exception) {
|
private Exception refineException(UltraDNSWSResponseException exception) {
|
||||||
|
String message = exception.getError().getDescription().or(exception.getMessage());
|
||||||
switch (exception.getError().getCode()) {
|
switch (exception.getError().getCode()) {
|
||||||
case TASK_NOT_FOUND:
|
case UNKNOWN:
|
||||||
|
if (!exception.getError().getDescription().isPresent())
|
||||||
|
return exception;
|
||||||
|
if (exception.getError().getDescription().get().indexOf("Cannot find") == -1)
|
||||||
|
return exception;
|
||||||
case ZONE_NOT_FOUND:
|
case ZONE_NOT_FOUND:
|
||||||
case RESOURCE_RECORD_NOT_FOUND:
|
case RESOURCE_RECORD_NOT_FOUND:
|
||||||
case ACCOUNT_NOT_FOUND:
|
case ACCOUNT_NOT_FOUND:
|
||||||
case POOL_NOT_FOUND:
|
case POOL_NOT_FOUND:
|
||||||
case POOL_RECORD_NOT_FOUND:
|
case POOL_RECORD_NOT_FOUND:
|
||||||
return new ResourceNotFoundException(exception.getError().getDescription(), exception);
|
return new ResourceNotFoundException(message, exception);
|
||||||
case ZONE_ALREADY_EXISTS:
|
case ZONE_ALREADY_EXISTS:
|
||||||
case RESOURCE_RECORD_ALREADY_EXISTS:
|
case RESOURCE_RECORD_ALREADY_EXISTS:
|
||||||
case POOL_ALREADY_EXISTS:
|
case POOL_ALREADY_EXISTS:
|
||||||
return new ResourceAlreadyExistsException(exception.getError().getDescription(), exception);
|
return new ResourceAlreadyExistsException(message, exception);
|
||||||
}
|
}
|
||||||
return exception;
|
return exception;
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,6 +24,8 @@ import static org.jclouds.util.SaxUtils.equalsOrSuffix;
|
||||||
import org.jclouds.http.functions.ParseSax;
|
import org.jclouds.http.functions.ParseSax;
|
||||||
import org.jclouds.ultradns.ws.UltraDNSWSError;
|
import org.jclouds.ultradns.ws.UltraDNSWSError;
|
||||||
|
|
||||||
|
import com.google.common.base.Optional;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @author Adrian Cole
|
* @author Adrian Cole
|
||||||
|
@ -36,12 +38,7 @@ public class UltraWSExceptionHandler extends ParseSax.HandlerForGeneratedRequest
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public UltraDNSWSError getResult() {
|
public UltraDNSWSError getResult() {
|
||||||
try {
|
return code != -1 ? UltraDNSWSError.fromCodeAndDescription(code, Optional.fromNullable(description)) : null;
|
||||||
return code != -1 ? UltraDNSWSError.fromCodeAndDescription(code, description) : null;
|
|
||||||
} finally {
|
|
||||||
code = -1;
|
|
||||||
description = null;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -53,7 +53,7 @@ public class TaskApiLiveTest extends BaseUltraDNSWSApiLiveTest {
|
||||||
assertEquals(got.getGuid(), task.getGuid());
|
assertEquals(got.getGuid(), task.getGuid());
|
||||||
assertEquals(got.getStatusCode(), task.getStatusCode());
|
assertEquals(got.getStatusCode(), task.getStatusCode());
|
||||||
assertEquals(got.getMessage(), task.getMessage());
|
assertEquals(got.getMessage(), task.getMessage());
|
||||||
assertEquals(got.getResultUrl(), task.getMessage());
|
assertEquals(got.getResultUrl(), task.getResultUrl());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -47,7 +47,26 @@ public class UltraDNSWSErrorHandlerTest {
|
||||||
UltraDNSWSErrorHandler.class);
|
UltraDNSWSErrorHandler.class);
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testCode0SetsResourceNotFoundException() throws IOException {
|
public void testCode0SetsUltraDNSWSResponseException() throws IOException {
|
||||||
|
HttpRequest request = HttpRequest.builder().method("POST")
|
||||||
|
.endpoint("https://ultra-api.ultradns.com:8443/UltraDNS_WS/v01")
|
||||||
|
.addHeader("Host", "ultra-api.ultradns.com:8443").payload(payloadFromResource("/list_tasks.xml")).build();
|
||||||
|
HttpCommand command = new HttpCommand(request);
|
||||||
|
HttpResponse response = HttpResponse.builder().message("Server Error").statusCode(500)
|
||||||
|
.payload(payloadFromResource("/server_fault.xml")).build();
|
||||||
|
|
||||||
|
function.handleError(command, response);
|
||||||
|
|
||||||
|
assertEquals(command.getException().getClass(), UltraDNSWSResponseException.class);
|
||||||
|
assertEquals(command.getException().getMessage(), "Error 0");
|
||||||
|
|
||||||
|
UltraDNSWSResponseException exception = UltraDNSWSResponseException.class.cast(command.getException());
|
||||||
|
|
||||||
|
assertEquals(exception.getError().getCode(), 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testCode0ForDescriptionMatchingCannotFindSetsResourceNotFoundException() throws IOException {
|
||||||
HttpRequest request = HttpRequest.builder().method("POST")
|
HttpRequest request = HttpRequest.builder().method("POST")
|
||||||
.endpoint("https://ultra-api.ultradns.com:8443/UltraDNS_WS/v01")
|
.endpoint("https://ultra-api.ultradns.com:8443/UltraDNS_WS/v01")
|
||||||
.addHeader("Host", "ultra-api.ultradns.com:8443").payload(payloadFromResource("/list_tasks.xml")).build();
|
.addHeader("Host", "ultra-api.ultradns.com:8443").payload(payloadFromResource("/list_tasks.xml")).build();
|
||||||
|
@ -63,7 +82,7 @@ public class UltraDNSWSErrorHandlerTest {
|
||||||
UltraDNSWSResponseException exception = UltraDNSWSResponseException.class.cast(command.getException().getCause());
|
UltraDNSWSResponseException exception = UltraDNSWSResponseException.class.cast(command.getException().getCause());
|
||||||
|
|
||||||
assertEquals(exception.getMessage(), "Error 0: Cannot find task with guid AAAAAAAAAAAAAAAA");
|
assertEquals(exception.getMessage(), "Error 0: Cannot find task with guid AAAAAAAAAAAAAAAA");
|
||||||
assertEquals(exception.getError().getDescription(), "Cannot find task with guid AAAAAAAAAAAAAAAA");
|
assertEquals(exception.getError().getDescription().get(), "Cannot find task with guid AAAAAAAAAAAAAAAA");
|
||||||
assertEquals(exception.getError().getCode(), 0);
|
assertEquals(exception.getError().getCode(), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -85,7 +104,7 @@ public class UltraDNSWSErrorHandlerTest {
|
||||||
UltraDNSWSResponseException exception = UltraDNSWSResponseException.class.cast(command.getException().getCause());
|
UltraDNSWSResponseException exception = UltraDNSWSResponseException.class.cast(command.getException().getCause());
|
||||||
|
|
||||||
assertEquals(exception.getMessage(), "Error 2401: Account not found in the system. ID: AAAAAAAAAAAAAAAA");
|
assertEquals(exception.getMessage(), "Error 2401: Account not found in the system. ID: AAAAAAAAAAAAAAAA");
|
||||||
assertEquals(exception.getError().getDescription(), "Account not found in the system. ID: AAAAAAAAAAAAAAAA");
|
assertEquals(exception.getError().getDescription().get(), "Account not found in the system. ID: AAAAAAAAAAAAAAAA");
|
||||||
assertEquals(exception.getError().getCode(), 2401);
|
assertEquals(exception.getError().getCode(), 2401);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -106,7 +125,7 @@ public class UltraDNSWSErrorHandlerTest {
|
||||||
UltraDNSWSResponseException exception = UltraDNSWSResponseException.class.cast(command.getException().getCause());
|
UltraDNSWSResponseException exception = UltraDNSWSResponseException.class.cast(command.getException().getCause());
|
||||||
|
|
||||||
assertEquals(exception.getMessage(), "Error 1801: Zone does not exist in the system.");
|
assertEquals(exception.getMessage(), "Error 1801: Zone does not exist in the system.");
|
||||||
assertEquals(exception.getError().getDescription(), "Zone does not exist in the system.");
|
assertEquals(exception.getError().getDescription().get(), "Zone does not exist in the system.");
|
||||||
assertEquals(exception.getError().getCode(), 1801);
|
assertEquals(exception.getError().getCode(), 1801);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -127,7 +146,7 @@ public class UltraDNSWSErrorHandlerTest {
|
||||||
UltraDNSWSResponseException exception = UltraDNSWSResponseException.class.cast(command.getException().getCause());
|
UltraDNSWSResponseException exception = UltraDNSWSResponseException.class.cast(command.getException().getCause());
|
||||||
|
|
||||||
assertEquals(exception.getMessage(), "Error 2103: No Resource Record with GUID found in the system AAAAAAAAAAAAAAAA");
|
assertEquals(exception.getMessage(), "Error 2103: No Resource Record with GUID found in the system AAAAAAAAAAAAAAAA");
|
||||||
assertEquals(exception.getError().getDescription(), "No Resource Record with GUID found in the system AAAAAAAAAAAAAAAA");
|
assertEquals(exception.getError().getDescription().get(), "No Resource Record with GUID found in the system AAAAAAAAAAAAAAAA");
|
||||||
assertEquals(exception.getError().getCode(), 2103);
|
assertEquals(exception.getError().getCode(), 2103);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -148,7 +167,7 @@ public class UltraDNSWSErrorHandlerTest {
|
||||||
UltraDNSWSResponseException exception = UltraDNSWSResponseException.class.cast(command.getException().getCause());
|
UltraDNSWSResponseException exception = UltraDNSWSResponseException.class.cast(command.getException().getCause());
|
||||||
|
|
||||||
assertEquals(exception.getMessage(), "Error 1802: Zone already exists in the system.");
|
assertEquals(exception.getMessage(), "Error 1802: Zone already exists in the system.");
|
||||||
assertEquals(exception.getError().getDescription(), "Zone already exists in the system.");
|
assertEquals(exception.getError().getDescription().get(), "Zone already exists in the system.");
|
||||||
assertEquals(exception.getError().getCode(), 1802);
|
assertEquals(exception.getError().getCode(), 1802);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -171,7 +190,7 @@ public class UltraDNSWSErrorHandlerTest {
|
||||||
|
|
||||||
assertEquals(exception.getMessage(),
|
assertEquals(exception.getMessage(),
|
||||||
"Error 2111: Resource Record of type 15 with these attributes already exists in the system.");
|
"Error 2111: Resource Record of type 15 with these attributes already exists in the system.");
|
||||||
assertEquals(exception.getError().getDescription(),
|
assertEquals(exception.getError().getDescription().get(),
|
||||||
"Resource Record of type 15 with these attributes already exists in the system.");
|
"Resource Record of type 15 with these attributes already exists in the system.");
|
||||||
assertEquals(exception.getError().getCode(), 2111);
|
assertEquals(exception.getError().getCode(), 2111);
|
||||||
}
|
}
|
||||||
|
@ -193,7 +212,7 @@ public class UltraDNSWSErrorHandlerTest {
|
||||||
UltraDNSWSResponseException exception = UltraDNSWSResponseException.class.cast(command.getException().getCause());
|
UltraDNSWSResponseException exception = UltraDNSWSResponseException.class.cast(command.getException().getCause());
|
||||||
|
|
||||||
assertEquals(exception.getMessage(), "Error 2911: Pool does not exist in the system");
|
assertEquals(exception.getMessage(), "Error 2911: Pool does not exist in the system");
|
||||||
assertEquals(exception.getError().getDescription(), "Pool does not exist in the system");
|
assertEquals(exception.getError().getDescription().get(), "Pool does not exist in the system");
|
||||||
assertEquals(exception.getError().getCode(), 2911);
|
assertEquals(exception.getError().getCode(), 2911);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -216,7 +235,7 @@ public class UltraDNSWSErrorHandlerTest {
|
||||||
|
|
||||||
assertEquals(exception.getMessage(),
|
assertEquals(exception.getMessage(),
|
||||||
"Error 2912: Pool already created for this host name : www.rrpool.adrianc.rrpool.ultradnstest.jclouds.org.");
|
"Error 2912: Pool already created for this host name : www.rrpool.adrianc.rrpool.ultradnstest.jclouds.org.");
|
||||||
assertEquals(exception.getError().getDescription(),
|
assertEquals(exception.getError().getDescription().get(),
|
||||||
"Pool already created for this host name : www.rrpool.adrianc.rrpool.ultradnstest.jclouds.org.");
|
"Pool already created for this host name : www.rrpool.adrianc.rrpool.ultradnstest.jclouds.org.");
|
||||||
assertEquals(exception.getError().getCode(), 2912);
|
assertEquals(exception.getError().getCode(), 2912);
|
||||||
}
|
}
|
||||||
|
@ -238,7 +257,7 @@ public class UltraDNSWSErrorHandlerTest {
|
||||||
UltraDNSWSResponseException exception = UltraDNSWSResponseException.class.cast(command.getException().getCause());
|
UltraDNSWSResponseException exception = UltraDNSWSResponseException.class.cast(command.getException().getCause());
|
||||||
|
|
||||||
assertEquals(exception.getMessage(), "Error 3101: Pool Record does not exist.");
|
assertEquals(exception.getMessage(), "Error 3101: Pool Record does not exist.");
|
||||||
assertEquals(exception.getError().getDescription(), "Pool Record does not exist.");
|
assertEquals(exception.getError().getDescription().get(), "Pool Record does not exist.");
|
||||||
assertEquals(exception.getError().getCode(), 3101);
|
assertEquals(exception.getError().getCode(), 3101);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -27,6 +27,8 @@ import org.jclouds.ultradns.ws.UltraDNSWSError;
|
||||||
import org.jclouds.ultradns.ws.xml.UltraWSExceptionHandler;
|
import org.jclouds.ultradns.ws.xml.UltraWSExceptionHandler;
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
|
import com.google.common.base.Optional;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Adrian Cole
|
* @author Adrian Cole
|
||||||
*/
|
*/
|
||||||
|
@ -45,6 +47,6 @@ public class TaskNotFoundTest extends BaseHandlerTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
public UltraDNSWSError expected() {
|
public UltraDNSWSError expected() {
|
||||||
return UltraDNSWSError.fromCodeAndDescription(0, "Cannot find task with guid AAAAAAAAAAAAAAAA");
|
return UltraDNSWSError.fromCodeAndDescription(0, Optional.of("Cannot find task with guid AAAAAAAAAAAAAAAA"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,6 +27,8 @@ import org.jclouds.ultradns.ws.UltraDNSWSError;
|
||||||
import org.jclouds.ultradns.ws.xml.UltraWSExceptionHandler;
|
import org.jclouds.ultradns.ws.xml.UltraWSExceptionHandler;
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
|
import com.google.common.base.Optional;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Adrian Cole
|
* @author Adrian Cole
|
||||||
*/
|
*/
|
||||||
|
@ -45,7 +47,7 @@ public class UltraWSExceptionTest extends BaseHandlerTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
public UltraDNSWSError expected() {
|
public UltraDNSWSError expected() {
|
||||||
return UltraDNSWSError.fromCodeAndDescription(1801, "Zone does not exist in the system.");
|
return UltraDNSWSError.fromCodeAndDescription(1801, Optional.of("Zone does not exist in the system."));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
|
||||||
|
<soap:Body>
|
||||||
|
<soap:Fault>
|
||||||
|
<faultcode>soap:Server</faultcode>
|
||||||
|
<faultstring>Fault occurred while processing.</faultstring>
|
||||||
|
<detail>
|
||||||
|
<ns1:UltraWSException xmlns:ns1="http://webservice.api.ultra.neustar.com/v01/">
|
||||||
|
<errorCode xmlns:ns2="http://schema.ultraservice.neustar.com/v01/"
|
||||||
|
xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:type="xs:int">0</errorCode>
|
||||||
|
<errorDescription xmlns:ns2="http://schema.ultraservice.neustar.com/v01/"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true" />
|
||||||
|
</ns1:UltraWSException>
|
||||||
|
</detail>
|
||||||
|
</soap:Fault>
|
||||||
|
</soap:Body>
|
||||||
|
</soap:Envelope>
|
Loading…
Reference in New Issue