Details
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 42162ba..1620cf8 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
@@ -157,6 +157,21 @@ public class InvoiceResource extends JaxRsResourceBase {
}
@GET
+ @Path("/{invoiceNumber:" + NUMBER_PATTERN + "}/")
+ @Produces(APPLICATION_JSON)
+ public Response getInvoiceByNumber(@PathParam("invoiceNumber") final Integer invoiceNumber,
+ @QueryParam(QUERY_INVOICE_WITH_ITEMS) @DefaultValue("false") final boolean withItems,
+ @javax.ws.rs.core.Context final HttpServletRequest request) throws InvoiceApiException {
+ final Invoice invoice = invoiceApi.getInvoiceByNumber(invoiceNumber, context.createContext(request));
+ if (invoice == null) {
+ throw new InvoiceApiException(ErrorCode.INVOICE_NOT_FOUND, invoiceNumber);
+ } else {
+ final InvoiceJsonSimple json = withItems ? new InvoiceJsonWithItems(invoice) : new InvoiceJsonSimple(invoice);
+ return Response.status(Status.OK).entity(json).build();
+ }
+ }
+
+ @GET
@Path("/{invoiceId:" + UUID_PATTERN + "}/html")
@Produces(TEXT_HTML)
public Response getInvoiceAsHTML(@PathParam("invoiceId") final String invoiceId,
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/JaxrsResource.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/JaxrsResource.java
index 74b20ab..d72e7f7 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/JaxrsResource.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/JaxrsResource.java
@@ -39,6 +39,7 @@ public interface JaxrsResource {
*/
public static String STRING_PATTERN = "[\\w-]+";
public static String UUID_PATTERN = "\\w+-\\w+-\\w+-\\w+-\\w+";
+ public static String NUMBER_PATTERN = "[0-9]+";
/*
* Query parameters
diff --git a/server/src/test/java/com/ning/billing/jaxrs/KillbillClient.java b/server/src/test/java/com/ning/billing/jaxrs/KillbillClient.java
index 6195436..ece110f 100644
--- a/server/src/test/java/com/ning/billing/jaxrs/KillbillClient.java
+++ b/server/src/test/java/com/ning/billing/jaxrs/KillbillClient.java
@@ -394,6 +394,10 @@ public abstract class KillbillClient extends GuicyKillbillTestSuiteWithEmbeddedD
return doGetInvoice(invoiceId, Boolean.FALSE, InvoiceJsonSimple.class);
}
+ protected InvoiceJsonSimple getInvoice(final Integer invoiceNumber) throws IOException {
+ return getInvoice(invoiceNumber.toString());
+ }
+
protected InvoiceJsonWithItems getInvoiceWithItems(final String invoiceId) throws IOException {
return doGetInvoice(invoiceId, Boolean.TRUE, InvoiceJsonWithItems.class);
}
diff --git a/server/src/test/java/com/ning/billing/jaxrs/TestInvoice.java b/server/src/test/java/com/ning/billing/jaxrs/TestInvoice.java
index 97d8dbc..69833e4 100644
--- a/server/src/test/java/com/ning/billing/jaxrs/TestInvoice.java
+++ b/server/src/test/java/com/ning/billing/jaxrs/TestInvoice.java
@@ -52,6 +52,10 @@ public class TestInvoice extends TestJaxrsBase {
final InvoiceJsonSimple firstInvoiceJson = getInvoice(invoiceJsonSimple.getInvoiceId());
assertEquals(firstInvoiceJson, invoiceJsonSimple);
+ // Check we can retrieve the invoice by number
+ final InvoiceJsonSimple firstInvoiceByNumberJson = getInvoice(invoiceJsonSimple.getInvoiceNumber());
+ assertEquals(firstInvoiceByNumberJson, invoiceJsonSimple);
+
// Then create a dryRun Invoice
final DateTime futureDate = clock.getUTCNow().plusMonths(1).plusDays(3);
createDryRunInvoice(accountJson.getAccountId(), futureDate);