diff --git a/util/src/main/java/org/killbill/billing/util/customfield/api/DefaultCustomFieldUserApi.java b/util/src/main/java/org/killbill/billing/util/customfield/api/DefaultCustomFieldUserApi.java
index be16a38..45d033b 100644
--- a/util/src/main/java/org/killbill/billing/util/customfield/api/DefaultCustomFieldUserApi.java
+++ b/util/src/main/java/org/killbill/billing/util/customfield/api/DefaultCustomFieldUserApi.java
@@ -92,7 +92,13 @@ public class DefaultCustomFieldUserApi implements CustomFieldUserApi {
final Iterable<CustomFieldModelDao> transformed = Iterables.transform(customFields, new Function<CustomField, CustomFieldModelDao>() {
@Override
public CustomFieldModelDao apply(final CustomField input) {
- return new CustomFieldModelDao(input.getId(), context.getCreatedDate(), context.getCreatedDate(), input.getFieldName(), input.getFieldValue(), input.getObjectId(), input.getObjectType());
+ // Respect user-specified ID
+ // TODO See https://github.com/killbill/killbill/issues/35
+ if (input.getId() != null) {
+ return new CustomFieldModelDao(input.getId(), context.getCreatedDate(), context.getCreatedDate(), input.getFieldName(), input.getFieldValue(), input.getObjectId(), input.getObjectType());
+ } else {
+ return new CustomFieldModelDao(context.getCreatedDate(), input.getFieldName(), input.getFieldValue(), input.getObjectId(), input.getObjectType());
+ }
}
});
((DefaultCustomFieldDao) customFieldDao).create(transformed, internalCallContext);
diff --git a/util/src/test/java/org/killbill/billing/util/customfield/api/TestDefaultCustomFieldUserApi.java b/util/src/test/java/org/killbill/billing/util/customfield/api/TestDefaultCustomFieldUserApi.java
index e8ac37a..a2acf84 100644
--- a/util/src/test/java/org/killbill/billing/util/customfield/api/TestDefaultCustomFieldUserApi.java
+++ b/util/src/test/java/org/killbill/billing/util/customfield/api/TestDefaultCustomFieldUserApi.java
@@ -68,6 +68,20 @@ public class TestDefaultCustomFieldUserApi extends UtilTestSuiteWithEmbeddedDB {
}
@Test(groups = "slow")
+ public void testCustomFieldNoId() throws Exception {
+ // Verify that when coming from a plugin, the id isn't required
+ final CustomField customField = Mockito.mock(CustomField.class);
+ Mockito.when(customField.getObjectId()).thenReturn(accountId);
+ Mockito.when(customField.getObjectType()).thenReturn(ObjectType.ACCOUNT);
+ Mockito.when(customField.getFieldName()).thenReturn(UUID.randomUUID().toString());
+ Mockito.when(customField.getFieldValue()).thenReturn(UUID.randomUUID().toString());
+
+ eventsListener.pushExpectedEvents(NextEvent.CUSTOM_FIELD);
+ customFieldUserApi.addCustomFields(ImmutableList.<CustomField>of(customField), callContext);
+ assertListenerStatus();
+ }
+
+ @Test(groups = "slow")
public void testCustomFieldBasic() throws Exception {
final CustomField customField1 = new StringCustomField("some123", "some 456", ObjectType.ACCOUNT, accountId, callContext.getCreatedDate());