diff --git a/src/main/java/sh/libre/scim/core/Adapter.java b/src/main/java/sh/libre/scim/core/Adapter.java index 174706308240615cac4ae92dabfb80850940830b..f7581a1beca57c12adde567a6ccc8fcdc6e4837d 100644 --- a/src/main/java/sh/libre/scim/core/Adapter.java +++ b/src/main/java/sh/libre/scim/core/Adapter.java @@ -128,7 +128,7 @@ public abstract class Adapter<M extends RoleMapperModel, S extends com.unboundid public abstract Boolean tryToMap(); - public abstract void createEntity(); + public abstract void createEntity() throws Exception; public abstract Stream<M> getResourceStream(); diff --git a/src/main/java/sh/libre/scim/core/ScimClient.java b/src/main/java/sh/libre/scim/core/ScimClient.java index fc2610c13ad66ae2c28406bbf69fc44b2228a7f6..67e15acfa624f0f15b7c64fd66e07f63afed4a29 100644 --- a/src/main/java/sh/libre/scim/core/ScimClient.java +++ b/src/main/java/sh/libre/scim/core/ScimClient.java @@ -78,7 +78,8 @@ public class ScimClient { M kcModel) { var adapter = getAdapter(aClass); adapter.apply(kcModel); - if (adapter.skip) return; + if (adapter.skip) + return; // If mapping exist then it was created by import so skip. if (adapter.query("findById", adapter.getId()).getResultList().size() != 0) { return; @@ -103,7 +104,8 @@ public class ScimClient { var adapter = getAdapter(aClass); try { adapter.apply(kcModel); - if (adapter.skip) return; + if (adapter.skip) + return; var resource = adapter.query("findById", adapter.getId()).getSingleResult(); adapter.apply(resource); var retry = registry.retry("replace-" + adapter.getId()); @@ -200,9 +202,13 @@ public class ScimClient { switch (this.model.get("sync-import-action")) { case "CREATE_LOCAL": LOGGER.info("Create local resource"); - adapter.createEntity(); - adapter.saveMapping(); - syncRes.increaseAdded(); + try { + adapter.createEntity(); + adapter.saveMapping(); + syncRes.increaseAdded(); + } catch (Exception e) { + LOGGER.error(e); + } break; case "DELETE_REMOTE": LOGGER.info("Delete remote resource"); diff --git a/src/main/java/sh/libre/scim/core/UserAdapter.java b/src/main/java/sh/libre/scim/core/UserAdapter.java index df6676e628e3c240d7a44d88a412f30694464f51..f511f9a57862664ae76452638f8721de81b51996 100644 --- a/src/main/java/sh/libre/scim/core/UserAdapter.java +++ b/src/main/java/sh/libre/scim/core/UserAdapter.java @@ -158,7 +158,10 @@ public class UserAdapter extends Adapter<UserModel, UserResource> { } @Override - public void createEntity() { + public void createEntity() throws Exception { + if (StringUtils.isEmpty(username)) { + throw new Exception("can't create user with empty username"); + } var user = session.users().addUser(realm, username); user.setEmail(email); user.setEnabled(active);