killbill-aplcache

invoice: revisit error handling for getInvoiceAsHTML Throw

6/18/2012 7:57:58 PM

Details

diff --git a/api/src/main/java/com/ning/billing/ErrorCode.java b/api/src/main/java/com/ning/billing/ErrorCode.java
index 2678afc..9e17323 100644
--- a/api/src/main/java/com/ning/billing/ErrorCode.java
+++ b/api/src/main/java/com/ning/billing/ErrorCode.java
@@ -182,6 +182,7 @@ public enum ErrorCode {
     INVOICE_NO_ACCOUNT_ID_FOR_SUBSCRIPTION_ID(4003, "No account id was retrieved for subscription id %s"),
     INVOICE_INVALID_DATE_SEQUENCE(4004, "Date sequence was invalid. Start Date: %s; End Date: %s; Target Date: %s"),
     INVOICE_TARGET_DATE_TOO_FAR_IN_THE_FUTURE(4005, "The target date was too far in the future. Target Date: %s"),
+    INVOICE_NOT_FOUND(4006, "No invoice could be found for id %s."),
 
     /*
      *
diff --git a/api/src/main/java/com/ning/billing/invoice/api/InvoiceUserApi.java b/api/src/main/java/com/ning/billing/invoice/api/InvoiceUserApi.java
index 9c32e46..d95f56d 100644
--- a/api/src/main/java/com/ning/billing/invoice/api/InvoiceUserApi.java
+++ b/api/src/main/java/com/ning/billing/invoice/api/InvoiceUserApi.java
@@ -53,5 +53,5 @@ public interface InvoiceUserApi {
     public InvoiceItem insertCredit(UUID accountId, BigDecimal amount, DateTime effectiveDate,
                                     Currency currency, CallContext context) throws InvoiceApiException;
 
-    public String getInvoiceAsHTML(UUID invoiceId) throws AccountApiException, IOException;
+    public String getInvoiceAsHTML(UUID invoiceId) throws AccountApiException, IOException, InvoiceApiException;
 }
diff --git a/invoice/src/main/java/com/ning/billing/invoice/api/user/DefaultInvoiceUserApi.java b/invoice/src/main/java/com/ning/billing/invoice/api/user/DefaultInvoiceUserApi.java
index 8228898..850f2c4 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/api/user/DefaultInvoiceUserApi.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/api/user/DefaultInvoiceUserApi.java
@@ -24,6 +24,7 @@ import java.util.UUID;
 import org.joda.time.DateTime;
 
 import com.google.inject.Inject;
+import com.ning.billing.ErrorCode;
 import com.ning.billing.account.api.Account;
 import com.ning.billing.account.api.AccountApiException;
 import com.ning.billing.account.api.AccountUserApi;
@@ -113,8 +114,12 @@ public class DefaultInvoiceUserApi implements InvoiceUserApi {
     }
 
     @Override
-    public String getInvoiceAsHTML(final UUID invoiceId) throws AccountApiException, IOException {
+    public String getInvoiceAsHTML(final UUID invoiceId) throws AccountApiException, IOException, InvoiceApiException {
         final Invoice invoice = getInvoice(invoiceId);
+        if (invoice == null) {
+            throw new InvoiceApiException(ErrorCode.INVOICE_NOT_FOUND, invoiceId);
+        }
+
         final Account account = accountUserApi.getAccountById(invoice.getAccountId());
         return generator.generateInvoice(account, invoice);
     }
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/InvoiceResource.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/InvoiceResource.java
index d70840d..dc2d8e9 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/InvoiceResource.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/InvoiceResource.java
@@ -141,6 +141,8 @@ public class InvoiceResource extends JaxRsResourceBase {
             return Response.status(Status.NO_CONTENT).build();
         } catch (IOException e) {
             return Response.status(Status.INTERNAL_SERVER_ERROR).build();
+        } catch (InvoiceApiException e) {
+            return Response.status(Status.NO_CONTENT).build();
         }
     }