Details
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/mappers/ExceptionMapperBase.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/mappers/ExceptionMapperBase.java
index c97bf29..7d88a1b 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/mappers/ExceptionMapperBase.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/mappers/ExceptionMapperBase.java
@@ -151,7 +151,7 @@ public abstract class ExceptionMapperBase {
return new LoggingResponse(e, responseBuilder.build());
}
- private void serializeException(final Exception e, final UriInfo uriInfo, final Response.ResponseBuilder responseBuilder) {
+ protected void serializeException(final Exception e, final UriInfo uriInfo, final Response.ResponseBuilder responseBuilder) {
final boolean withStackTrace = uriInfo.getQueryParameters() != null && "true".equals(uriInfo.getQueryParameters().getFirst(QUERY_WITH_STACK_TRACE));
final BillingExceptionJson billingExceptionJson = new BillingExceptionJson(e, withStackTrace);
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/mappers/PaymentApiExceptionMapper.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/mappers/PaymentApiExceptionMapper.java
index efa1828..876cfe5 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/mappers/PaymentApiExceptionMapper.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/mappers/PaymentApiExceptionMapper.java
@@ -19,6 +19,7 @@ package org.killbill.billing.jaxrs.mappers;
import javax.inject.Singleton;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
import javax.ws.rs.core.UriInfo;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;
@@ -70,8 +71,16 @@ public class PaymentApiExceptionMapper extends ExceptionMapperBase implements Ex
return buildInternalErrorResponse(exception, uriInfo);
} else if (exception.getCode() == ErrorCode.PAYMENT_INVALID_PARAMETER.getCode()) {
return buildBadRequestResponse(exception, uriInfo);
+ } else if (exception.getCode() == ErrorCode.PAYMENT_PLUGIN_API_ABORTED.getCode()) {
+ return buildPaymentAbortedResponse(exception, uriInfo);
} else {
return fallback(exception, uriInfo);
}
}
+
+ private Response buildPaymentAbortedResponse(final PaymentApiException exception, final UriInfo uriInfo) {
+ final Response.ResponseBuilder responseBuilder = Response.status(422);
+ serializeException(exception, uriInfo, responseBuilder);
+ return new LoggingResponse(exception, responseBuilder.build());
+ }
}
diff --git a/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestPayment.java b/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestPayment.java
index 20478a2..69a716d 100644
--- a/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestPayment.java
+++ b/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestPayment.java
@@ -52,6 +52,7 @@ import com.google.common.collect.ImmutableMap;
import com.google.inject.Inject;
import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
import static org.testng.Assert.fail;
public class TestPayment extends TestJaxrsBase {
@@ -442,6 +443,24 @@ public class TestPayment extends TestJaxrsBase {
}
@Test(groups = "slow")
+ public void testComboAuthorizationAbortedPayment() throws Exception {
+ final Account accountJson = getAccount();
+ accountJson.setAccountId(null);
+ final String paymentExternalKey = UUID.randomUUID().toString();
+ final ComboPaymentTransaction comboPaymentTransaction = createComboPaymentTransaction(accountJson, paymentExternalKey);
+
+ mockPaymentControlProviderPlugin.setAborted(true);
+ try {
+ killBillClient.createPayment(comboPaymentTransaction, Arrays.asList(MockPaymentControlProviderPlugin.PLUGIN_NAME), ImmutableMap.<String, String>of(), createdBy, reason, comment);
+ fail();
+ } catch (KillBillClientException e) {
+ assertEquals(e.getResponse().getStatusCode(), 422);
+ }
+ assertFalse(mockPaymentControlProviderPlugin.isOnFailureCallExecuted());
+ assertFalse(mockPaymentControlProviderPlugin.isOnSuccessCallExecuted());
+ }
+
+ @Test(groups = "slow")
public void testComboAuthorizationControlPluginException() throws Exception {
final Account accountJson = getAccount();
accountJson.setAccountId(null);