Details
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/AccountResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/AccountResource.java
index 30a96c2..6d4c2ce 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/AccountResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/AccountResource.java
@@ -333,7 +333,7 @@ public class AccountResource extends JaxRsResourceBase {
final AccountData data = json.toAccountData();
final Account account = accountUserApi.createAccount(data, context.createContext(createdBy, reason, comment, request));
- return uriBuilder.buildResponse(uriInfo, AccountResource.class, "getAccount", account.getId());
+ return uriBuilder.buildResponse(uriInfo, AccountResource.class, "getAccount", account.getId(), jaxrsConfig.getJaxrsReturnPathLikeUrl());
}
@TimedResource
@@ -979,7 +979,7 @@ public class AccountResource extends JaxRsResourceBase {
default:
return Response.status(Status.PRECONDITION_FAILED).entity("TransactionType " + transactionType + " is not allowed for an account").build();
}
- return createPaymentResponse(uriInfo, result, transactionType, json.getTransactionExternalKey());
+ return createPaymentResponse(uriInfo, result, transactionType, json.getTransactionExternalKey(), jaxrsConfig.getJaxrsReturnPathLikeUrl());
}
/*
@@ -1032,8 +1032,8 @@ public class AccountResource extends JaxRsResourceBase {
@HeaderParam(HDR_COMMENT) final String comment,
@javax.ws.rs.core.Context final HttpServletRequest request,
@javax.ws.rs.core.Context final UriInfo uriInfo) throws CustomFieldApiException {
- return super.createCustomFields(UUID.fromString(id), customFields,
- context.createContext(createdBy, reason, comment, request), uriInfo);
+ return super.createCustomFields(UUID.fromString(id), customFields, context.createContext(createdBy, reason,
+ comment, request), uriInfo, jaxrsConfig.getJaxrsReturnPathLikeUrl());
}
@TimedResource
@@ -1207,7 +1207,7 @@ public class AccountResource extends JaxRsResourceBase {
accountUserApi.addEmail(accountId, json.toAccountEmail(UUIDs.randomUUID()), callContext);
}
- return uriBuilder.buildResponse(uriInfo, AccountResource.class, "getEmails", json.getAccountId());
+ return uriBuilder.buildResponse(uriInfo, AccountResource.class, "getEmails", json.getAccountId(), jaxrsConfig.getJaxrsReturnPathLikeUrl());
}
@TimedResource
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/BundleResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/BundleResource.java
index d74eacd..ec604c3 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/BundleResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/BundleResource.java
@@ -68,6 +68,7 @@ import org.killbill.billing.util.api.TagUserApi;
import org.killbill.billing.util.audit.AccountAuditLogs;
import org.killbill.billing.util.callcontext.CallContext;
import org.killbill.billing.util.callcontext.TenantContext;
+import org.killbill.billing.util.config.JaxrsConfig;
import org.killbill.billing.util.entity.Pagination;
import org.killbill.clock.Clock;
import org.killbill.commons.metrics.TimedResource;
@@ -90,6 +91,7 @@ public class BundleResource extends JaxRsResourceBase {
private final SubscriptionApi subscriptionApi;
private final EntitlementApi entitlementApi;
+ private final JaxrsConfig jaxrsConfig;
@Inject
public BundleResource(final JaxrsUriBuilder uriBuilder,
@@ -101,10 +103,12 @@ public class BundleResource extends JaxRsResourceBase {
final EntitlementApi entitlementApi,
final PaymentApi paymentApi,
final Clock clock,
+ final JaxrsConfig jaxrsConfig,
final Context context) {
super(uriBuilder, tagUserApi, customFieldUserApi, auditUserApi, accountUserApi, paymentApi, clock, context);
this.entitlementApi = entitlementApi;
this.subscriptionApi = subscriptionApi;
+ this.jaxrsConfig = jaxrsConfig;
}
@TimedResource
@@ -317,7 +321,7 @@ public class BundleResource extends JaxRsResourceBase {
@javax.ws.rs.core.Context final HttpServletRequest request,
@javax.ws.rs.core.Context final UriInfo uriInfo) throws CustomFieldApiException {
return super.createCustomFields(UUID.fromString(id), customFields,
- context.createContext(createdBy, reason, comment, request), uriInfo);
+ context.createContext(createdBy, reason, comment, request), uriInfo, jaxrsConfig.getJaxrsReturnPathLikeUrl());
}
@TimedResource
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/CatalogResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/CatalogResource.java
index eddf1b9..fe1a911 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/CatalogResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/CatalogResource.java
@@ -51,6 +51,7 @@ import org.killbill.billing.util.api.CustomFieldUserApi;
import org.killbill.billing.util.api.TagUserApi;
import org.killbill.billing.util.callcontext.CallContext;
import org.killbill.billing.util.callcontext.TenantContext;
+import org.killbill.billing.util.config.JaxrsConfig;
import org.killbill.clock.Clock;
import org.killbill.commons.metrics.TimedResource;
import org.killbill.xmlloader.XMLWriter;
@@ -70,6 +71,7 @@ import static javax.ws.rs.core.MediaType.APPLICATION_XML;
public class CatalogResource extends JaxRsResourceBase {
private final CatalogUserApi catalogUserApi;
+ private final JaxrsConfig jaxrsConfig;
@Inject
public CatalogResource(final JaxrsUriBuilder uriBuilder,
@@ -80,9 +82,11 @@ public class CatalogResource extends JaxRsResourceBase {
final PaymentApi paymentApi,
final CatalogUserApi catalogUserApi,
final Clock clock,
+ final JaxrsConfig jaxrsConfig,
final Context context) {
super(uriBuilder, tagUserApi, customFieldUserApi, auditUserApi, accountUserApi, paymentApi, clock, context);
this.catalogUserApi = catalogUserApi;
+ this.jaxrsConfig = jaxrsConfig;
}
@TimedResource
@@ -108,7 +112,7 @@ public class CatalogResource extends JaxRsResourceBase {
@javax.ws.rs.core.Context final UriInfo uriInfo) throws Exception {
final CallContext callContext = context.createContext(createdBy, reason, comment, request);
catalogUserApi.uploadCatalog(catalogXML, callContext);
- return uriBuilder.buildResponse(uriInfo, CatalogResource.class, null, null);
+ return uriBuilder.buildResponse(uriInfo, CatalogResource.class, null, null, jaxrsConfig.getJaxrsReturnPathLikeUrl());
}
@TimedResource
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/CreditResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/CreditResource.java
index bfad1b1..c0b896a 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/CreditResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/CreditResource.java
@@ -47,6 +47,7 @@ import org.killbill.billing.util.api.CustomFieldUserApi;
import org.killbill.billing.util.api.TagUserApi;
import org.killbill.billing.util.callcontext.CallContext;
import org.killbill.billing.util.callcontext.TenantContext;
+import org.killbill.billing.util.config.JaxrsConfig;
import org.killbill.clock.Clock;
import com.google.inject.Inject;
@@ -65,6 +66,7 @@ public class CreditResource extends JaxRsResourceBase {
private final InvoiceUserApi invoiceUserApi;
private final AccountUserApi accountUserApi;
+ private final JaxrsConfig jaxrsConfig;
@Inject
public CreditResource(final InvoiceUserApi invoiceUserApi,
@@ -75,10 +77,12 @@ public class CreditResource extends JaxRsResourceBase {
final AuditUserApi auditUserApi,
final PaymentApi paymentApi,
final Clock clock,
+ final JaxrsConfig jaxrsConfig,
final Context context) {
super(uriBuilder, tagUserApi, customFieldUserApi, auditUserApi, accountUserApi, paymentApi, clock, context);
this.invoiceUserApi = invoiceUserApi;
this.accountUserApi = accountUserApi;
+ this.jaxrsConfig = jaxrsConfig;
}
@GET
@@ -128,7 +132,7 @@ public class CreditResource extends JaxRsResourceBase {
account.getCurrency(), callContext);
}
- return uriBuilder.buildResponse(uriInfo, CreditResource.class, "getCredit", credit.getId());
+ return uriBuilder.buildResponse(uriInfo, CreditResource.class, "getCredit", credit.getId(), jaxrsConfig.getJaxrsReturnPathLikeUrl());
}
@Override
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/InvoicePaymentResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/InvoicePaymentResource.java
index a7b2c9a..c34dd2f 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/InvoicePaymentResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/InvoicePaymentResource.java
@@ -66,6 +66,7 @@ import org.killbill.billing.util.api.TagUserApi;
import org.killbill.billing.util.audit.AccountAuditLogs;
import org.killbill.billing.util.callcontext.CallContext;
import org.killbill.billing.util.callcontext.TenantContext;
+import org.killbill.billing.util.config.JaxrsConfig;
import org.killbill.clock.Clock;
import org.killbill.commons.metrics.TimedResource;
@@ -87,6 +88,7 @@ public class InvoicePaymentResource extends JaxRsResourceBase {
private static final String ID_PARAM_NAME = "paymentId";
private final InvoicePaymentApi invoicePaymentApi;
+ private final JaxrsConfig jaxrsConfig;
@Inject
public InvoicePaymentResource(final AccountUserApi accountUserApi,
@@ -97,9 +99,11 @@ public class InvoicePaymentResource extends JaxRsResourceBase {
final AuditUserApi auditUserApi,
final InvoicePaymentApi invoicePaymentApi,
final Clock clock,
+ final JaxrsConfig jaxrsConfig,
final Context context) {
super(uriBuilder, tagUserApi, customFieldUserApi, auditUserApi, accountUserApi, paymentApi, clock, context);
this.invoicePaymentApi = invoicePaymentApi;
+ this.jaxrsConfig = jaxrsConfig;
}
@TimedResource
@@ -207,7 +211,7 @@ public class InvoicePaymentResource extends JaxRsResourceBase {
final Payment result = paymentApi.createChargebackWithPaymentControl(account, payment.getId(), json.getAmount(), account.getCurrency(),
transactionExternalKey, createInvoicePaymentControlPluginApiPaymentOptions(false), callContext);
- return uriBuilder.buildResponse(uriInfo, InvoicePaymentResource.class, "getInvoicePayment", result.getId());
+ return uriBuilder.buildResponse(uriInfo, InvoicePaymentResource.class, "getInvoicePayment", result.getId(), jaxrsConfig.getJaxrsReturnPathLikeUrl());
}
@TimedResource
@@ -237,7 +241,7 @@ public class InvoicePaymentResource extends JaxRsResourceBase {
@javax.ws.rs.core.Context final HttpServletRequest request,
@javax.ws.rs.core.Context final UriInfo uriInfo) throws CustomFieldApiException {
return super.createCustomFields(UUID.fromString(id), customFields,
- context.createContext(createdBy, reason, comment, request), uriInfo);
+ context.createContext(createdBy, reason, comment, request), uriInfo, jaxrsConfig.getJaxrsReturnPathLikeUrl());
}
@TimedResource
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 dcb2738..1ebc646 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
@@ -103,6 +103,7 @@ import org.killbill.billing.util.api.TagUserApi;
import org.killbill.billing.util.audit.AccountAuditLogs;
import org.killbill.billing.util.callcontext.CallContext;
import org.killbill.billing.util.callcontext.TenantContext;
+import org.killbill.billing.util.config.JaxrsConfig;
import org.killbill.billing.util.entity.Pagination;
import org.killbill.clock.Clock;
import org.killbill.clock.ClockUtil;
@@ -140,6 +141,7 @@ public class InvoiceResource extends JaxRsResourceBase {
private final InvoiceNotifier invoiceNotifier;
private final TenantUserApi tenantApi;
private final Locale defaultLocale;
+ private final JaxrsConfig jaxrsConfig;
private static final Ordering<InvoicePaymentJson> INVOICE_PAYMENT_ORDERING = Ordering.from(new Comparator<InvoicePaymentJson>() {
@Override
@@ -159,12 +161,14 @@ public class InvoiceResource extends JaxRsResourceBase {
final CustomFieldUserApi customFieldUserApi,
final AuditUserApi auditUserApi,
final TenantUserApi tenantApi,
+ final JaxrsConfig jaxrsConfig,
final Context context) {
super(uriBuilder, tagUserApi, customFieldUserApi, auditUserApi, accountUserApi, paymentApi, clock, context);
this.invoiceApi = invoiceApi;
this.invoiceNotifier = invoiceNotifier;
this.tenantApi = tenantApi;
this.defaultLocale = Locale.getDefault();
+ this.jaxrsConfig = jaxrsConfig;
}
@TimedResource
@@ -307,7 +311,7 @@ public class InvoiceResource extends JaxRsResourceBase {
try {
final Invoice generatedInvoice = invoiceApi.triggerInvoiceGeneration(UUID.fromString(accountId), inputDate, null,
callContext);
- return uriBuilder.buildResponse(uriInfo, InvoiceResource.class, "getInvoice", generatedInvoice.getId());
+ return uriBuilder.buildResponse(uriInfo, InvoiceResource.class, "getInvoice", generatedInvoice.getId(), jaxrsConfig.getJaxrsReturnPathLikeUrl());
} catch (InvoiceApiException e) {
if (e.getCode() == ErrorCode.INVOICE_NOTHING_TO_DO.getCode()) {
return Response.status(Status.NOT_FOUND).build();
@@ -444,7 +448,7 @@ public class InvoiceResource extends JaxRsResourceBase {
callContext);
}
- return uriBuilder.buildResponse(uriInfo, InvoiceResource.class, "getInvoice", adjustmentItem.getInvoiceId());
+ return uriBuilder.buildResponse(uriInfo, InvoiceResource.class, "getInvoice", adjustmentItem.getInvoiceId(), jaxrsConfig.getJaxrsReturnPathLikeUrl());
}
@TimedResource
@@ -614,7 +618,7 @@ public class InvoiceResource extends JaxRsResourceBase {
final Payment result = createPurchaseForInvoice(account, invoiceId, payment.getPurchasedAmount(), paymentMethodId, externalPayment, pluginProperties, callContext);
return result != null ?
- uriBuilder.buildResponse(uriInfo, InvoicePaymentResource.class, "getInvoicePayment", result.getId()) :
+ uriBuilder.buildResponse(uriInfo, InvoicePaymentResource.class, "getInvoicePayment", result.getId(), jaxrsConfig.getJaxrsReturnPathLikeUrl()) :
Response.status(Status.NO_CONTENT).build();
}
@@ -829,7 +833,7 @@ public class InvoiceResource extends JaxRsResourceBase {
}
}
tenantApi.addTenantKeyValue(tenantKeyStr, templateResource, callContext);
- return uriBuilder.buildResponse(uriInfo, InvoiceResource.class, getMethodStr, localeStr);
+ return uriBuilder.buildResponse(uriInfo, InvoiceResource.class, getMethodStr, localeStr, jaxrsConfig.getJaxrsReturnPathLikeUrl());
}
private Response getTemplateResource(@Nullable final String localeStr,
@@ -870,7 +874,7 @@ public class InvoiceResource extends JaxRsResourceBase {
@javax.ws.rs.core.Context final HttpServletRequest request,
@javax.ws.rs.core.Context final UriInfo uriInfo) throws CustomFieldApiException {
return super.createCustomFields(UUID.fromString(id), customFields,
- context.createContext(createdBy, reason, comment, request), uriInfo);
+ context.createContext(createdBy, reason, comment, request), uriInfo, jaxrsConfig.getJaxrsReturnPathLikeUrl());
}
@TimedResource
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/JaxRsResourceBase.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/JaxRsResourceBase.java
index b800815..cc836b0 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/JaxRsResourceBase.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/JaxRsResourceBase.java
@@ -83,6 +83,7 @@ import org.killbill.billing.util.audit.AccountAuditLogsForObjectType;
import org.killbill.billing.util.audit.AuditLog;
import org.killbill.billing.util.callcontext.CallContext;
import org.killbill.billing.util.callcontext.TenantContext;
+import org.killbill.billing.util.config.JaxrsConfig;
import org.killbill.billing.util.customfield.CustomField;
import org.killbill.billing.util.customfield.StringCustomField;
import org.killbill.billing.util.entity.Entity;
@@ -218,7 +219,8 @@ public abstract class JaxRsResourceBase implements JaxrsResource {
protected Response createCustomFields(final UUID id,
final List<CustomFieldJson> customFields,
final CallContext context,
- final UriInfo uriInfo) throws CustomFieldApiException {
+ final UriInfo uriInfo,
+ final boolean jaxrsPathLikeUrl) throws CustomFieldApiException {
final LinkedList<CustomField> input = new LinkedList<CustomField>();
for (final CustomFieldJson cur : customFields) {
verifyNonNullOrEmpty(cur.getName(), "CustomFieldJson name needs to be set");
@@ -227,7 +229,7 @@ public abstract class JaxRsResourceBase implements JaxrsResource {
}
customFieldUserApi.addCustomFields(input, context);
- return uriBuilder.buildResponse(uriInfo, this.getClass(), "getCustomFields", id);
+ return uriBuilder.buildResponse(uriInfo, this.getClass(), "getCustomFields", id, jaxrsPathLikeUrl);
}
/**
@@ -544,7 +546,8 @@ public abstract class JaxRsResourceBase implements JaxrsResource {
Preconditions.checkArgument(actual == expected, errorMessage);
}
- protected Response createPaymentResponse(final UriInfo uriInfo, final Payment payment, final TransactionType transactionType, @Nullable final String transactionExternalKey) {
+ protected Response createPaymentResponse(final UriInfo uriInfo, final Payment payment, final TransactionType transactionType,
+ @Nullable final String transactionExternalKey, final boolean jaxrsPathLikeUrl) {
final PaymentTransaction createdTransaction = findCreatedTransaction(payment, transactionType, transactionExternalKey);
Preconditions.checkNotNull(createdTransaction, "No transaction of type '%s' found", transactionType);
@@ -553,7 +556,7 @@ public abstract class JaxRsResourceBase implements JaxrsResource {
switch (createdTransaction.getTransactionStatus()) {
case PENDING:
case SUCCESS:
- return uriBuilder.buildResponse(uriInfo, PaymentResource.class, "getPayment", payment.getId());
+ return uriBuilder.buildResponse(uriInfo, PaymentResource.class, "getPayment", payment.getId(), jaxrsPathLikeUrl);
case PAYMENT_FAILURE:
// 402 - Payment Required
responseBuilder = Response.status(402);
@@ -580,7 +583,7 @@ public abstract class JaxRsResourceBase implements JaxrsResource {
exception = createBillingException("This should never have happened!!!");
}
addExceptionToResponse(responseBuilder, exception);
- return responseBuilder.location(getPaymentLocation(uriInfo, payment)).build();
+ return responseBuilder.location(getPaymentLocation(uriInfo, payment, jaxrsPathLikeUrl)).build();
}
private void addExceptionToResponse(final ResponseBuilder responseBuilder, final BillingExceptionJson exception) {
@@ -598,8 +601,8 @@ public abstract class JaxRsResourceBase implements JaxrsResource {
return exception;
}
- private URI getPaymentLocation(final UriInfo uriInfo, final Payment payment) {
- return uriBuilder.buildLocation(uriInfo, PaymentResource.class, "getPayment", payment.getId());
+ private URI getPaymentLocation(final UriInfo uriInfo, final Payment payment, final boolean jaxrsPathLikeUrl) {
+ return uriBuilder.buildLocation(uriInfo, PaymentResource.class, "getPayment", payment.getId(), jaxrsPathLikeUrl);
}
private PaymentTransaction findCreatedTransaction(final Payment payment, final TransactionType transactionType, @Nullable final String transactionExternalKey) {
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/OverdueResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/OverdueResource.java
index bfe8b11..481fc4a 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/OverdueResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/OverdueResource.java
@@ -43,6 +43,7 @@ import org.killbill.billing.util.api.CustomFieldUserApi;
import org.killbill.billing.util.api.TagUserApi;
import org.killbill.billing.util.callcontext.CallContext;
import org.killbill.billing.util.callcontext.TenantContext;
+import org.killbill.billing.util.config.JaxrsConfig;
import org.killbill.clock.Clock;
import org.killbill.commons.metrics.TimedResource;
import org.killbill.xmlloader.XMLLoader;
@@ -62,6 +63,7 @@ import static javax.ws.rs.core.MediaType.APPLICATION_XML;
public class OverdueResource extends JaxRsResourceBase {
private final OverdueApi overdueApi;
+ private final JaxrsConfig jaxrsConfig;
@Inject
public OverdueResource(final JaxrsUriBuilder uriBuilder,
@@ -72,9 +74,11 @@ public class OverdueResource extends JaxRsResourceBase {
final PaymentApi paymentApi,
final OverdueApi overdueApi,
final Clock clock,
+ final JaxrsConfig jaxrsConfig,
final Context context) {
super(uriBuilder, tagUserApi, customFieldUserApi, auditUserApi, accountUserApi, paymentApi, clock, context);
this.overdueApi = overdueApi;
+ this.jaxrsConfig = jaxrsConfig;
}
@TimedResource
@@ -104,6 +108,6 @@ public class OverdueResource extends JaxRsResourceBase {
final CallContext callContext = context.createContext(createdBy, reason, comment, request);
overdueApi.uploadOverdueConfig(overdueXML, callContext);
- return uriBuilder.buildResponse(uriInfo, OverdueResource.class, null, null);
+ return uriBuilder.buildResponse(uriInfo, OverdueResource.class, null, null, jaxrsConfig.getJaxrsReturnPathLikeUrl());
}
}
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PaymentMethodResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PaymentMethodResource.java
index 731db34..4b632ff 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PaymentMethodResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PaymentMethodResource.java
@@ -59,6 +59,7 @@ import org.killbill.billing.util.api.TagUserApi;
import org.killbill.billing.util.audit.AccountAuditLogs;
import org.killbill.billing.util.callcontext.CallContext;
import org.killbill.billing.util.callcontext.TenantContext;
+import org.killbill.billing.util.config.JaxrsConfig;
import org.killbill.billing.util.entity.Pagination;
import org.killbill.clock.Clock;
import org.killbill.commons.metrics.TimedResource;
@@ -80,6 +81,8 @@ import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
@Api(value = JaxrsResource.PAYMENT_METHODS_PATH, description = "Operations on payment methods")
public class PaymentMethodResource extends JaxRsResourceBase {
+ private final JaxrsConfig jaxrsConfig;
+
@Inject
public PaymentMethodResource(final AccountUserApi accountUserApi,
final JaxrsUriBuilder uriBuilder,
@@ -88,8 +91,10 @@ public class PaymentMethodResource extends JaxRsResourceBase {
final AuditUserApi auditUserApi,
final PaymentApi paymentApi,
final Clock clock,
+ final JaxrsConfig jaxrsConfig,
final Context context) {
super(uriBuilder, tagUserApi, customFieldUserApi, auditUserApi, accountUserApi, paymentApi, clock, context);
+ this.jaxrsConfig = jaxrsConfig;
}
@TimedResource(name = "getPaymentMethod")
@@ -302,7 +307,7 @@ public class PaymentMethodResource extends JaxRsResourceBase {
@javax.ws.rs.core.Context final HttpServletRequest request,
@javax.ws.rs.core.Context final UriInfo uriInfo) throws CustomFieldApiException {
return super.createCustomFields(UUID.fromString(paymentMethodId), customFields,
- context.createContext(createdBy, reason, comment, request), uriInfo);
+ context.createContext(createdBy, reason, comment, request), uriInfo, jaxrsConfig.getJaxrsReturnPathLikeUrl());
}
@TimedResource
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PaymentResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PaymentResource.java
index bf820e2..c7742a4 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PaymentResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PaymentResource.java
@@ -66,6 +66,7 @@ import org.killbill.billing.util.api.TagUserApi;
import org.killbill.billing.util.audit.AccountAuditLogs;
import org.killbill.billing.util.callcontext.CallContext;
import org.killbill.billing.util.callcontext.TenantContext;
+import org.killbill.billing.util.config.JaxrsConfig;
import org.killbill.billing.util.entity.Pagination;
import org.killbill.clock.Clock;
import org.killbill.commons.metrics.MetricTag;
@@ -85,6 +86,8 @@ import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
@Api(value = JaxrsResource.PAYMENTS_PATH, description = "Operations on payments")
public class PaymentResource extends ComboPaymentResource {
+ private final JaxrsConfig jaxrsConfig;
+
@Inject
public PaymentResource(final JaxrsUriBuilder uriBuilder,
final TagUserApi tagUserApi,
@@ -93,8 +96,10 @@ public class PaymentResource extends ComboPaymentResource {
final AccountUserApi accountUserApi,
final PaymentApi paymentApi,
final Clock clock,
+ final JaxrsConfig jaxrsConfig,
final Context context) {
super(uriBuilder, tagUserApi, customFieldUserApi, auditUserApi, accountUserApi, paymentApi, clock, context);
+ this.jaxrsConfig = jaxrsConfig;
}
@TimedResource(name = "getPayment")
@@ -332,7 +337,7 @@ public class PaymentResource extends ComboPaymentResource {
default:
return Response.status(Status.PRECONDITION_FAILED).entity("TransactionType " + pendingTransaction.getTransactionType() + " cannot be completed").build();
}
- return createPaymentResponse(uriInfo, result, pendingTransaction.getTransactionType(), pendingTransaction.getExternalKey());
+ return createPaymentResponse(uriInfo, result, pendingTransaction.getTransactionType(), pendingTransaction.getExternalKey(), jaxrsConfig.getJaxrsReturnPathLikeUrl());
}
@TimedResource(name = "captureAuthorization")
@@ -408,7 +413,7 @@ public class PaymentResource extends ComboPaymentResource {
final Payment payment = paymentApi.createCaptureWithPaymentControl(account, initialPayment.getId(), json.getAmount(), currency,
json.getTransactionExternalKey(), pluginProperties, paymentOptions, callContext);
- return createPaymentResponse(uriInfo, payment, TransactionType.CAPTURE, json.getTransactionExternalKey());
+ return createPaymentResponse(uriInfo, payment, TransactionType.CAPTURE, json.getTransactionExternalKey(), jaxrsConfig.getJaxrsReturnPathLikeUrl());
}
@TimedResource(name = "refundPayment")
@@ -487,7 +492,7 @@ public class PaymentResource extends ComboPaymentResource {
final Payment payment = paymentApi.createRefundWithPaymentControl(account, initialPayment.getId(), json.getAmount(), currency,
json.getTransactionExternalKey(), pluginProperties, paymentOptions, callContext);
- return createPaymentResponse(uriInfo, payment, TransactionType.REFUND, json.getTransactionExternalKey());
+ return createPaymentResponse(uriInfo, payment, TransactionType.REFUND, json.getTransactionExternalKey(), jaxrsConfig.getJaxrsReturnPathLikeUrl());
}
@TimedResource(name = "voidPayment")
@@ -559,7 +564,7 @@ public class PaymentResource extends ComboPaymentResource {
final Payment payment = paymentApi.createVoidWithPaymentControl(account, initialPayment.getId(), transactionExternalKey,
pluginProperties, paymentOptions, callContext);
- return createPaymentResponse(uriInfo, payment, TransactionType.VOID, json.getTransactionExternalKey());
+ return createPaymentResponse(uriInfo, payment, TransactionType.VOID, json.getTransactionExternalKey(), jaxrsConfig.getJaxrsReturnPathLikeUrl());
}
@TimedResource(name = "chargebackPayment")
@@ -635,7 +640,7 @@ public class PaymentResource extends ComboPaymentResource {
final Payment payment = paymentApi.createChargebackWithPaymentControl(account, initialPayment.getId(), json.getAmount(), currency,
json.getTransactionExternalKey(), paymentOptions, callContext);
- return createPaymentResponse(uriInfo, payment, TransactionType.CHARGEBACK, json.getTransactionExternalKey());
+ return createPaymentResponse(uriInfo, payment, TransactionType.CHARGEBACK, json.getTransactionExternalKey(), jaxrsConfig.getJaxrsReturnPathLikeUrl());
}
@TimedResource
@@ -695,7 +700,7 @@ public class PaymentResource extends ComboPaymentResource {
default:
return Response.status(Status.PRECONDITION_FAILED).entity("TransactionType " + transactionType + " is not allowed for an account").build();
}
- return createPaymentResponse(uriInfo, result, transactionType, paymentTransactionJson.getTransactionExternalKey());
+ return createPaymentResponse(uriInfo, result, transactionType, paymentTransactionJson.getTransactionExternalKey(), jaxrsConfig.getJaxrsReturnPathLikeUrl());
}
@Override
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/SubscriptionResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/SubscriptionResource.java
index 5032362..4f77ac7 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/SubscriptionResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/SubscriptionResource.java
@@ -86,6 +86,7 @@ import org.killbill.billing.util.api.TagDefinitionApiException;
import org.killbill.billing.util.api.TagUserApi;
import org.killbill.billing.util.callcontext.CallContext;
import org.killbill.billing.util.callcontext.TenantContext;
+import org.killbill.billing.util.config.JaxrsConfig;
import org.killbill.billing.util.userrequest.CompletionUserRequestBase;
import org.killbill.clock.Clock;
import org.killbill.commons.metrics.TimedResource;
@@ -113,6 +114,7 @@ public class SubscriptionResource extends JaxRsResourceBase {
private final KillbillEventHandler killbillHandler;
private final EntitlementApi entitlementApi;
private final SubscriptionApi subscriptionApi;
+ private final JaxrsConfig jaxrsConfig;
@Inject
public SubscriptionResource(final KillbillEventHandler killbillHandler,
@@ -125,11 +127,13 @@ public class SubscriptionResource extends JaxRsResourceBase {
final AccountUserApi accountUserApi,
final PaymentApi paymentApi,
final Clock clock,
+ final JaxrsConfig jaxrsConfig,
final Context context) {
super(uriBuilder, tagUserApi, customFieldUserApi, auditUserApi, accountUserApi, paymentApi, clock, context);
this.killbillHandler = killbillHandler;
this.entitlementApi = entitlementApi;
this.subscriptionApi = subscriptionApi;
+ this.jaxrsConfig = jaxrsConfig;
}
@TimedResource
@@ -219,7 +223,7 @@ public class SubscriptionResource extends JaxRsResourceBase {
@Override
public Response doResponseOk(final Entitlement createdEntitlement) {
- return uriBuilder.buildResponse(uriInfo, SubscriptionResource.class, "getEntitlement", createdEntitlement.getId());
+ return uriBuilder.buildResponse(uriInfo, SubscriptionResource.class, "getEntitlement", createdEntitlement.getId(), jaxrsConfig.getJaxrsReturnPathLikeUrl());
}
};
@@ -330,7 +334,7 @@ public class SubscriptionResource extends JaxRsResourceBase {
@Override
public Response doResponseOk(final Entitlement entitlement) {
- return uriBuilder.buildResponse(uriInfo, BundleResource.class, "getBundle", entitlement.getBundleId());
+ return uriBuilder.buildResponse(uriInfo, BundleResource.class, "getBundle", entitlement.getBundleId(), jaxrsConfig.getJaxrsReturnPathLikeUrl());
}
};
@@ -620,7 +624,7 @@ public class SubscriptionResource extends JaxRsResourceBase {
@javax.ws.rs.core.Context final HttpServletRequest request,
@javax.ws.rs.core.Context final UriInfo uriInfo) throws CustomFieldApiException {
return super.createCustomFields(UUID.fromString(id), customFields,
- context.createContext(createdBy, reason, comment, request), uriInfo);
+ context.createContext(createdBy, reason, comment, request), uriInfo, jaxrsConfig.getJaxrsReturnPathLikeUrl());
}
@DELETE
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TagDefinitionResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TagDefinitionResource.java
index f5536f2..59c8186 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TagDefinitionResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TagDefinitionResource.java
@@ -48,6 +48,7 @@ import org.killbill.billing.util.api.TagDefinitionApiException;
import org.killbill.billing.util.api.TagUserApi;
import org.killbill.billing.util.audit.AuditLog;
import org.killbill.billing.util.callcontext.TenantContext;
+import org.killbill.billing.util.config.JaxrsConfig;
import org.killbill.billing.util.tag.TagDefinition;
import org.killbill.clock.Clock;
import org.killbill.commons.metrics.TimedResource;
@@ -66,6 +67,8 @@ import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
@Api(value = JaxrsResource.TAG_DEFINITIONS_PATH, description = "Operations on tag definitions")
public class TagDefinitionResource extends JaxRsResourceBase {
+ private final JaxrsConfig jaxrsConfig;
+
@Inject
public TagDefinitionResource(final JaxrsUriBuilder uriBuilder,
final TagUserApi tagUserApi,
@@ -74,8 +77,10 @@ public class TagDefinitionResource extends JaxRsResourceBase {
final AccountUserApi accountUserApi,
final PaymentApi paymentApi,
final Clock clock,
+ final JaxrsConfig jaxrsConfig,
final Context context) {
super(uriBuilder, tagUserApi, customFieldUserApi, auditUserApi, accountUserApi, paymentApi, clock, context);
+ this.jaxrsConfig = jaxrsConfig;
}
@TimedResource
@@ -131,7 +136,7 @@ public class TagDefinitionResource extends JaxRsResourceBase {
json.getDescription(), "TagDefinition description needs to be set");
final TagDefinition createdTagDef = tagUserApi.createTagDefinition(json.getName(), json.getDescription(), context.createContext(createdBy, reason, comment, request));
- return uriBuilder.buildResponse(uriInfo, TagDefinitionResource.class, "getTagDefinition", createdTagDef.getId());
+ return uriBuilder.buildResponse(uriInfo, TagDefinitionResource.class, "getTagDefinition", createdTagDef.getId(), jaxrsConfig.getJaxrsReturnPathLikeUrl());
}
@TimedResource
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TenantResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TenantResource.java
index 8ff2b14..d68388c 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TenantResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TenantResource.java
@@ -51,6 +51,7 @@ import org.killbill.billing.util.api.CustomFieldUserApi;
import org.killbill.billing.util.api.TagUserApi;
import org.killbill.billing.util.callcontext.CallContext;
import org.killbill.billing.util.callcontext.TenantContext;
+import org.killbill.billing.util.config.JaxrsConfig;
import org.killbill.clock.Clock;
import org.killbill.commons.metrics.TimedResource;
@@ -70,6 +71,7 @@ import static javax.ws.rs.core.MediaType.TEXT_PLAIN;
public class TenantResource extends JaxRsResourceBase {
private final TenantUserApi tenantApi;
+ private final JaxrsConfig jaxrsConfig;
@Inject
public TenantResource(final TenantUserApi tenantApi,
@@ -80,9 +82,11 @@ public class TenantResource extends JaxRsResourceBase {
final AccountUserApi accountUserApi,
final PaymentApi paymentApi,
final Clock clock,
+ final JaxrsConfig jaxrsConfig,
final Context context) {
super(uriBuilder, tagUserApi, customFieldUserApi, auditUserApi, accountUserApi, paymentApi, clock, context);
this.tenantApi = tenantApi;
+ this.jaxrsConfig = jaxrsConfig;
}
@TimedResource
@@ -125,7 +129,7 @@ public class TenantResource extends JaxRsResourceBase {
final TenantData data = json.toTenantData();
final Tenant tenant = tenantApi.createTenant(data, context.createContext(createdBy, reason, comment, request));
- return uriBuilder.buildResponse(uriInfo, TenantResource.class, "getTenant", tenant.getId());
+ return uriBuilder.buildResponse(uriInfo, TenantResource.class, "getTenant", tenant.getId(), jaxrsConfig.getJaxrsReturnPathLikeUrl());
}
@TimedResource
@@ -224,7 +228,7 @@ public class TenantResource extends JaxRsResourceBase {
@javax.ws.rs.core.Context final UriInfo uriInfo) throws TenantApiException {
final CallContext callContext = context.createContext(createdBy, reason, comment, request);
tenantApi.addTenantKeyValue(key, value, callContext);
- return uriBuilder.buildResponse(uriInfo, TenantResource.class, "getUserKeyValue", key);
+ return uriBuilder.buildResponse(uriInfo, TenantResource.class, "getUserKeyValue", key, jaxrsConfig.getJaxrsReturnPathLikeUrl());
}
@TimedResource
@@ -272,7 +276,7 @@ public class TenantResource extends JaxRsResourceBase {
final String tenantKey = keyPostfix != null ? key.toString() + keyPostfix : key.toString();
tenantApi.addTenantKeyValue(tenantKey, value, callContext);
- return uriBuilder.buildResponse(uriInfo, TenantResource.class, getMethodStr, keyPostfix);
+ return uriBuilder.buildResponse(uriInfo, TenantResource.class, getMethodStr, keyPostfix, jaxrsConfig.getJaxrsReturnPathLikeUrl());
}
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TransactionResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TransactionResource.java
index f994dd7..a4d27dd 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TransactionResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TransactionResource.java
@@ -46,6 +46,7 @@ import org.killbill.billing.util.api.AuditUserApi;
import org.killbill.billing.util.api.CustomFieldUserApi;
import org.killbill.billing.util.api.TagUserApi;
import org.killbill.billing.util.callcontext.CallContext;
+import org.killbill.billing.util.config.JaxrsConfig;
import org.killbill.clock.Clock;
import org.killbill.commons.metrics.TimedResource;
@@ -61,6 +62,8 @@ import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
@Api(value = JaxrsResource.PAYMENT_TRANSACTIONS_PATH, description = "Operations on payment transactions")
public class TransactionResource extends JaxRsResourceBase {
+ private final JaxrsConfig jaxrsConfig;
+
@Inject
public TransactionResource(final JaxrsUriBuilder uriBuilder,
final TagUserApi tagUserApi,
@@ -69,8 +72,10 @@ public class TransactionResource extends JaxRsResourceBase {
final AccountUserApi accountUserApi,
final PaymentApi paymentApi,
final Clock clock,
+ final JaxrsConfig jaxrsConfig,
final Context context) {
super(uriBuilder, tagUserApi, customFieldUserApi, auditUserApi, accountUserApi, paymentApi, clock, context);
+ this.jaxrsConfig = jaxrsConfig;
}
@TimedResource
@@ -100,7 +105,7 @@ public class TransactionResource extends JaxRsResourceBase {
final boolean success = TransactionStatus.SUCCESS.name().equals(json.getStatus());
final Payment result = paymentApi.notifyPendingTransactionOfStateChanged(account, UUID.fromString(transactionIdStr), success, callContext);
- return uriBuilder.buildResponse(uriInfo, PaymentResource.class, "getPayment", result.getId());
+ return uriBuilder.buildResponse(uriInfo, PaymentResource.class, "getPayment", result.getId(), jaxrsConfig.getJaxrsReturnPathLikeUrl());
}
@Override
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/util/JaxrsUriBuilder.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/util/JaxrsUriBuilder.java
index a40529f..1ea74af 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/util/JaxrsUriBuilder.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/util/JaxrsUriBuilder.java
@@ -30,16 +30,19 @@ import org.killbill.billing.jaxrs.resources.JaxrsResource;
public class JaxrsUriBuilder {
- public Response buildResponse(final UriInfo uriInfo, final Class<? extends JaxrsResource> theClass, final String getMethodName, final Object objectId) {
- final URI location = buildLocation(uriInfo, theClass, getMethodName, objectId);
- return Response.created(location).build();
+ public Response buildResponse(final UriInfo uriInfo, final Class<? extends JaxrsResource> theClass,
+ final String getMethodName, final Object objectId, final boolean pathLikeUrl) {
+ final URI location = buildLocation(uriInfo, theClass, getMethodName, objectId, pathLikeUrl);
+ return pathLikeUrl ? Response.ok().header("Location", location.getPath()).build() : Response.created(location).build();
}
- public URI buildLocation(final UriInfo uriInfo, final Class<? extends JaxrsResource> theClass, final String getMethodName, final Object objectId) {
- final UriBuilder uriBuilder = getUriBuilder(theClass, getMethodName).scheme(uriInfo.getAbsolutePath().getScheme())
- .host(uriInfo.getAbsolutePath().getHost())
- .port(uriInfo.getAbsolutePath().getPort());
-
+ public URI buildLocation(final UriInfo uriInfo, final Class<? extends JaxrsResource> theClass,
+ final String getMethodName, final Object objectId, final boolean pathLikeUrl) {
+ final UriBuilder uriBuilder =
+ pathLikeUrl ? getUriBuilder(uriInfo.getBaseUri().getPath(), theClass, getMethodName) :
+ getUriBuilder(theClass, getMethodName).scheme(uriInfo.getAbsolutePath().getScheme())
+ .host(uriInfo.getAbsolutePath().getHost())
+ .port(uriInfo.getAbsolutePath().getPort());
return objectId != null ? uriBuilder.build(objectId) : uriBuilder.build();
}
@@ -74,6 +77,12 @@ public class JaxrsUriBuilder {
return ri.entity(obj).build();
}
+ private UriBuilder getUriBuilder(final String path, final Class<? extends JaxrsResource> theClassMaybeEnhanced, @Nullable final String getMethodName) {
+ final Class theClass = getNonEnhancedClass(theClassMaybeEnhanced);
+ return getMethodName != null ? UriBuilder.fromPath(path.equals("/") ? path.substring(1) : path).path(theClass).path(theClass, getMethodName) :
+ UriBuilder.fromPath(path).path(theClass);
+ }
+
private UriBuilder getUriBuilder(final Class<? extends JaxrsResource> theClassMaybeEnhanced, @Nullable final String getMethodName) {
final Class theClass = getNonEnhancedClass(theClassMaybeEnhanced);
return getMethodName != null ? UriBuilder.fromResource(theClass).path(theClass, getMethodName) :
diff --git a/util/src/main/java/org/killbill/billing/util/config/JaxrsConfig.java b/util/src/main/java/org/killbill/billing/util/config/JaxrsConfig.java
index a8583e8..38fb3b6 100644
--- a/util/src/main/java/org/killbill/billing/util/config/JaxrsConfig.java
+++ b/util/src/main/java/org/killbill/billing/util/config/JaxrsConfig.java
@@ -34,4 +34,9 @@ public interface JaxrsConfig extends KillbillConfig {
@Description("Total timeout for all callables associated to a given api call (parallel mode)")
TimeSpan getJaxrsTimeout();
+ @Config("org.killbill.jaxrs.return.path.like.url")
+ @Default("false")
+ @Description("Type of return for the jaxrs response location")
+ boolean getJaxrsReturnPathLikeUrl();
+
}