diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/InvoiceResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/InvoiceResource.java
index d45a84b..461eff6 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/InvoiceResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/InvoiceResource.java
@@ -111,6 +111,7 @@ import com.codahale.metrics.annotation.Timed;
import com.google.common.base.Function;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import com.google.inject.Inject;
@@ -522,9 +523,18 @@ public class InvoiceResource extends JaxRsResourceBase {
final TenantContext tenantContext = context.createContext(request);
final Invoice invoice = invoiceApi.getInvoice(UUID.fromString(invoiceId), tenantContext);
+
+ // Extract unique set of paymentId for this invoice
+ final Set<UUID> invoicePaymentIds = ImmutableSet.copyOf(Iterables.transform(invoice.getPayments(), new Function<InvoicePayment, UUID>() {
+ @Override
+ public UUID apply(final InvoicePayment input) {
+ return input.getPaymentId();
+ }
+ }));
+
final List<Payment> payments = new ArrayList<Payment>();
- for (InvoicePayment cur : invoice.getPayments()) {
- final Payment payment = paymentApi.getPayment(cur.getPaymentId(), withPluginInfo, ImmutableList.<PluginProperty>of(), tenantContext);
+ for (final UUID paymentId : invoicePaymentIds) {
+ final Payment payment = paymentApi.getPayment(paymentId, withPluginInfo, ImmutableList.<PluginProperty>of(), tenantContext);
payments.add(payment);
}
final List<InvoicePaymentJson> result = new ArrayList<InvoicePaymentJson>(payments.size());
diff --git a/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestInvoicePayment.java b/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestInvoicePayment.java
index 880b81c..bf11eaa 100644
--- a/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestInvoicePayment.java
+++ b/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestInvoicePayment.java
@@ -96,6 +96,9 @@ public class TestInvoicePayment extends TestJaxrsBase {
final BigDecimal refundAmount = paymentJson.getPurchasedAmount();
final BigDecimal expectedInvoiceBalance = BigDecimal.ZERO;
+ final InvoicePayments invoicePayments = killBillClient.getInvoicePayment(paymentJson.getTargetInvoiceId());
+ Assert.assertEquals(invoicePayments.size(), 1);
+
// Post and verify the refund
final InvoicePaymentTransaction refund = new InvoicePaymentTransaction();
refund.setPaymentId(paymentJson.getPaymentId());
@@ -106,6 +109,10 @@ public class TestInvoicePayment extends TestJaxrsBase {
// Verify the invoice balance
verifyInvoice(paymentJson, expectedInvoiceBalance);
+
+ final InvoicePayments invoicePaymentsAfterRefund = killBillClient.getInvoicePayment(paymentJson.getTargetInvoiceId());
+ Assert.assertEquals(invoicePaymentsAfterRefund.size(), 1);
+
}
@Test(groups = "slow", description = "Can create a partial refund with invoice adjustment")