Merge pull request #103 from apache/constructors
Replace field injection with constructors
diff --git a/scim-server-examples/scim-server-jersey/pom.xml b/scim-server-examples/scim-server-jersey/pom.xml
index c8b05ff..f7ff32d 100644
--- a/scim-server-examples/scim-server-jersey/pom.xml
+++ b/scim-server-examples/scim-server-jersey/pom.xml
@@ -28,7 +28,7 @@
<name>SCIM - Server - Examples - Jersey</name>
<properties>
- <jersey.version>3.0.6</jersey.version>
+ <jersey.version>3.0.5</jersey.version>
</properties>
<dependencyManagement>
diff --git a/scim-server/src/main/java/org/apache/directory/scim/server/provider/ProviderRegistry.java b/scim-server/src/main/java/org/apache/directory/scim/server/provider/ProviderRegistry.java
index 2c674ff..14b0339 100644
--- a/scim-server/src/main/java/org/apache/directory/scim/server/provider/ProviderRegistry.java
+++ b/scim-server/src/main/java/org/apache/directory/scim/server/provider/ProviderRegistry.java
@@ -84,26 +84,25 @@
private static final String BYTE_ARRAY_TYPE_IDENTIFIER = "class [B";
private static final String RESOURCE_REFERENCE_TYPE_IDENTIFIER = "class org.apache.directory.scim.spec.schema.ResourceReference$ReferenceType";
- @Inject
- Registry registry;
+ private Registry registry;
- @Inject
- ScimExtensionRegistry scimExtensionRegistry;
+ private ScimExtensionRegistry scimExtensionRegistry;
// Weld needs the '? extends' or the providers will not be found, some CDI
// implementations work fine with just <ScimResources>
- @Inject
- Instance<Provider<? extends ScimResource>> scimProviderInstances;
+ private Instance<Provider<? extends ScimResource>> scimProviderInstances;
private Map<Class<? extends ScimResource>, Provider<? extends ScimResource>> providerMap = new HashMap<>();
-
- public ProviderRegistry() {}
-
- public ProviderRegistry(Registry registry, ScimExtensionRegistry scimExtensionRegistry) {
+
+ @Inject
+ public ProviderRegistry(Registry registry, ScimExtensionRegistry scimExtensionRegistry, Instance<Provider<? extends ScimResource>> scimProviderInstances) {
this.registry = registry;
this.scimExtensionRegistry = scimExtensionRegistry;
+ this.scimProviderInstances = scimProviderInstances;
}
+ ProviderRegistry() {}
+
@Override
@SuppressWarnings("unchecked")
public void configure() {
diff --git a/scim-server/src/main/java/org/apache/directory/scim/server/provider/UpdateRequest.java b/scim-server/src/main/java/org/apache/directory/scim/server/provider/UpdateRequest.java
index fc58542..8dae3dc 100644
--- a/scim-server/src/main/java/org/apache/directory/scim/server/provider/UpdateRequest.java
+++ b/scim-server/src/main/java/org/apache/directory/scim/server/provider/UpdateRequest.java
@@ -54,8 +54,6 @@
import org.apache.directory.scim.spec.schema.Schema;
import org.apache.directory.scim.spec.schema.Schema.Attribute;
-import jakarta.inject.Inject;
-import jakarta.inject.Named;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Arrays;
@@ -69,7 +67,6 @@
import java.util.Set;
import java.util.stream.Collectors;
-@Named
@Slf4j
@EqualsAndHashCode
@ToString
@@ -94,8 +91,7 @@
private Registry registry;
private Map<Attribute, Integer> addRemoveOffsetMap = new HashMap<>();
-
- @Inject
+
public UpdateRequest(Registry registry) {
this.registry = registry;
@@ -104,21 +100,21 @@
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
}
- public void initWithResource(String id, T original, T resource) {
+ public UpdateRequest(String id, T original, T resource, Registry registry) {
+ this(registry);
this.id = id;
- schema = registry.getSchema(original.getBaseUrn());
-
this.original = original;
this.resource = resource;
-
+ this.schema = registry.getSchema(original.getBaseUrn());
initialized = true;
}
- public void initWithPatch(String id, T original, List<PatchOperation> patchOperations) {
+ public UpdateRequest(String id, T original, List<PatchOperation> patchOperations, Registry registry) {
+ this(registry);
this.id = id;
this.original = original;
this.patchOperations = patchOperations;
- schema = registry.getSchema(original.getBaseUrn());
+ this.schema = registry.getSchema(original.getBaseUrn());
initialized = true;
}
diff --git a/scim-server/src/main/java/org/apache/directory/scim/server/rest/BaseResourceTypeResourceImpl.java b/scim-server/src/main/java/org/apache/directory/scim/server/rest/BaseResourceTypeResourceImpl.java
index c086170..0e5d7aa 100644
--- a/scim-server/src/main/java/org/apache/directory/scim/server/rest/BaseResourceTypeResourceImpl.java
+++ b/scim-server/src/main/java/org/apache/directory/scim/server/rest/BaseResourceTypeResourceImpl.java
@@ -29,19 +29,15 @@
import java.util.Optional;
import java.util.Set;
-import jakarta.enterprise.inject.Instance;
import jakarta.enterprise.inject.spi.CDI;
-import jakarta.inject.Inject;
-import jakarta.ws.rs.core.Context;
import jakarta.ws.rs.core.EntityTag;
-import jakarta.ws.rs.core.Request;
import jakarta.ws.rs.core.Response;
import jakarta.ws.rs.core.Response.ResponseBuilder;
import jakarta.ws.rs.core.Response.Status;
import jakarta.ws.rs.core.Response.Status.Family;
-import jakarta.ws.rs.core.UriInfo;
import org.apache.directory.scim.server.provider.ProviderRegistry;
+import org.apache.directory.scim.server.schema.Registry;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -61,7 +57,6 @@
import org.apache.directory.scim.server.provider.extensions.ScimRequestContext;
import org.apache.directory.scim.server.provider.extensions.exceptions.ClientFilterException;
import org.apache.directory.scim.server.utility.AttributeUtil;
-import org.apache.directory.scim.server.utility.EndpointUtil;
import org.apache.directory.scim.server.utility.EtagGenerator;
import org.apache.directory.scim.spec.adapter.FilterWrapper;
import org.apache.directory.scim.spec.protocol.BaseResourceTypeResource;
@@ -85,30 +80,24 @@
private static final Logger LOG = LoggerFactory.getLogger(BaseResourceTypeResourceImpl.class);
- @Context
- UriInfo uriInfo;
+ private final Registry registry;
- @Context
- Request request;
+ private final ProviderRegistry providerRegistry;
- @Inject
- ProviderRegistry providerRegistry;
+ private final AttributeUtil attributeUtil;
- @Inject
- private AttributeUtil attributeUtil;
+ RequestContext requestContext;
- @Inject
- private EndpointUtil endpointUtil;
-
- @Inject
- private EtagGenerator etagGenerator;
-
- @Inject
- private Instance<UpdateRequest<T>> updateRequestInstance;
+ private final EtagGenerator etagGenerator;
private final Class<T> resourceClass;
- protected BaseResourceTypeResourceImpl(Class<T> resourceClass) {
+ public BaseResourceTypeResourceImpl(Registry registry, ProviderRegistry providerRegistry, AttributeUtil attributeUtil, RequestContext requestContext, EtagGenerator etagGenerator, Class<T> resourceClass) {
+ this.registry = registry;
+ this.providerRegistry = providerRegistry;
+ this.attributeUtil = attributeUtil;
+ this.requestContext = requestContext;
+ this.etagGenerator = etagGenerator;
this.resourceClass = resourceClass;
}
@@ -126,7 +115,7 @@
@Override
public Response getById(String id, AttributeReferenceListWrapper attributes, AttributeReferenceListWrapper excludedAttributes) {
- if (uriInfo.getQueryParameters().getFirst("filter") != null) {
+ if (requestContext.getUriInfo().getQueryParameters().getFirst("filter") != null) {
return Response.status(Status.FORBIDDEN)
.build();
}
@@ -134,7 +123,6 @@
try {
Provider<T> provider = getProviderInternal();
- endpointUtil.process(uriInfo);
T resource = null;
try {
resource = provider.get(id);
@@ -158,7 +146,7 @@
return createETagErrorResponse();
}
- ResponseBuilder evaluatePreconditionsResponse = request.evaluatePreconditions(backingETag);
+ ResponseBuilder evaluatePreconditionsResponse = requestContext.getRequest().evaluatePreconditions(backingETag);
if (evaluatePreconditionsResponse != null) {
return Response.status(Status.NOT_MODIFIED)
@@ -262,7 +250,6 @@
return createAmbiguousAttributeParametersResponse();
}
- endpointUtil.process(uriInfo);
T created;
try {
created = provider.create(resource);
@@ -363,7 +350,6 @@
ListResponse<T> listResponse = new ListResponse<>();
- endpointUtil.process(uriInfo);
FilterResponse<T> filterResp = null;
try {
filterResp = provider.find(filter, pageRequest, sortRequest);
@@ -454,7 +440,6 @@
return createAmbiguousAttributeParametersResponse();
}
- endpointUtil.process(uriInfo);
T stored;
try {
stored = provider.get(id);
@@ -478,7 +463,7 @@
return createETagErrorResponse();
}
- ResponseBuilder evaluatePreconditionsResponse = request.evaluatePreconditions(backingETag);
+ ResponseBuilder evaluatePreconditionsResponse = requestContext.getRequest().evaluatePreconditions(backingETag);
if (evaluatePreconditionsResponse != null) {
return createPreconditionFailedResponse(id, evaluatePreconditionsResponse);
@@ -486,8 +471,7 @@
T updated;
try {
- UpdateRequest<T> updateRequest = updateRequestInstance.get();
- updateRequest.initWithResource(id, stored, resource);
+ UpdateRequest<T> updateRequest = new UpdateRequest<>(id, stored, resource, registry);
updated = provider.update(updateRequest);
} catch (UnableToUpdateResourceException e1) {
return createGenericExceptionResponse(e1, e1.getStatus());
@@ -556,7 +540,6 @@
return createAmbiguousAttributeParametersResponse();
}
- endpointUtil.process(uriInfo);
T stored;
try {
stored = provider.get(id);
@@ -580,7 +563,7 @@
return createETagErrorResponse();
}
- ResponseBuilder evaluatePreconditionsResponse = request.evaluatePreconditions(backingETag);
+ ResponseBuilder evaluatePreconditionsResponse = requestContext.getRequest().evaluatePreconditions(backingETag);
if (evaluatePreconditionsResponse != null) {
return createPreconditionFailedResponse(id, evaluatePreconditionsResponse);
@@ -588,8 +571,7 @@
T updated;
try {
- UpdateRequest<T> updateRequest = updateRequestInstance.get();
- updateRequest.initWithPatch(id, stored, patchRequest.getPatchOperationList());
+ UpdateRequest<T> updateRequest = new UpdateRequest<>(id, stored, patchRequest.getPatchOperationList(), registry);
updated = provider.update(updateRequest);
} catch (UnableToUpdateResourceException e1) {
return createGenericExceptionResponse(e1, e1.getStatus());
@@ -652,7 +634,6 @@
Provider<T> provider = getProviderInternal();
try {
- endpointUtil.process(uriInfo);
response = Response.noContent()
.build();
@@ -705,7 +686,7 @@
LOG.warn("Provider must supply an id for a resource");
id = "unknown";
}
- return uriInfo.getAbsolutePathBuilder()
+ return requestContext.getUriInfo().getAbsolutePathBuilder()
.path(id)
.build();
}
diff --git a/scim-server/src/main/java/org/apache/directory/scim/server/rest/BulkResourceImpl.java b/scim-server/src/main/java/org/apache/directory/scim/server/rest/BulkResourceImpl.java
index 79c324a..f301878 100644
--- a/scim-server/src/main/java/org/apache/directory/scim/server/rest/BulkResourceImpl.java
+++ b/scim-server/src/main/java/org/apache/directory/scim/server/rest/BulkResourceImpl.java
@@ -31,7 +31,6 @@
import java.util.regex.Pattern;
import jakarta.enterprise.context.ApplicationScoped;
-import jakarta.enterprise.inject.Instance;
import jakarta.inject.Inject;
import jakarta.ws.rs.core.Response;
import jakarta.ws.rs.core.Response.Status;
@@ -96,14 +95,19 @@
// METHOD_NOT_IMPLEMENTED_STATUS.setCode(METHOD_NOT_IMPLEMENTED);
// }
- @Inject
- Registry registry;
+ private final Registry registry;
+
+ private final ProviderRegistry providerRegistry;
@Inject
- ProviderRegistry providerRegistry;
-
- @Inject
- Instance<UpdateRequest<ScimResource>> updateRequestInstance;
+ public BulkResourceImpl(Registry registry, ProviderRegistry providerRegistry) {
+ this.registry = registry;
+ this.providerRegistry = providerRegistry;
+ }
+
+ BulkResourceImpl() {
+ this(null, null);
+ }
@Override
public Response doBulk(BulkRequest request, UriInfo uriInfo) {
@@ -284,8 +288,7 @@
ScimResource original = provider.get(scimResourceId);
- UpdateRequest<ScimResource> updateRequest = updateRequestInstance.get();
- updateRequest.initWithResource(scimResourceId, original, scimResource);
+ UpdateRequest<ScimResource> updateRequest = new UpdateRequest<>(scimResourceId, original, scimResource, registry);
provider.update(updateRequest);
} catch (UnresolvableOperationException unresolvableOperationException) {
log.error("Could not complete final resolution pass, unresolvable bulkId", unresolvableOperationException);
@@ -454,8 +457,7 @@
try {
ScimResource original = provider.get(id);
- UpdateRequest<ScimResource> updateRequest = updateRequestInstance.get();
- updateRequest.initWithResource(id, original, scimResource);
+ UpdateRequest<ScimResource> updateRequest = new UpdateRequest<>(id, original, scimResource, registry);
provider.update(updateRequest);
operationResult.setStatus(StatusWrapper.wrap(Status.OK));
diff --git a/scim-server/src/main/java/org/apache/directory/scim/server/rest/GroupResourceImpl.java b/scim-server/src/main/java/org/apache/directory/scim/server/rest/GroupResourceImpl.java
index 3801e6e..51cc3f7 100644
--- a/scim-server/src/main/java/org/apache/directory/scim/server/rest/GroupResourceImpl.java
+++ b/scim-server/src/main/java/org/apache/directory/scim/server/rest/GroupResourceImpl.java
@@ -23,15 +23,26 @@
package org.apache.directory.scim.server.rest;
import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
import lombok.extern.slf4j.Slf4j;
+import org.apache.directory.scim.server.provider.ProviderRegistry;
+import org.apache.directory.scim.server.schema.Registry;
+import org.apache.directory.scim.server.utility.AttributeUtil;
+import org.apache.directory.scim.server.utility.EtagGenerator;
import org.apache.directory.scim.spec.protocol.GroupResource;
import org.apache.directory.scim.spec.resources.ScimGroup;
+import org.apache.directory.scim.spec.resources.ScimUser;
@Slf4j
@ApplicationScoped
public class GroupResourceImpl extends BaseResourceTypeResourceImpl<ScimGroup> implements GroupResource {
- public GroupResourceImpl() {
- super(ScimGroup.class);
+ @Inject
+ public GroupResourceImpl(Registry registry, ProviderRegistry providerRegistry, AttributeUtil attributeUtil, RequestContext requestContext, EtagGenerator etagGenerator) {
+ super(registry, providerRegistry, attributeUtil, requestContext, etagGenerator, ScimGroup.class);
+ }
+
+ GroupResourceImpl() {
+ this(null, null, null, null, null);
}
}
diff --git a/scim-server/src/main/java/org/apache/directory/scim/server/rest/RequestContext.java b/scim-server/src/main/java/org/apache/directory/scim/server/rest/RequestContext.java
new file mode 100644
index 0000000..db1516b
--- /dev/null
+++ b/scim-server/src/main/java/org/apache/directory/scim/server/rest/RequestContext.java
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+
+ * http://www.apache.org/licenses/LICENSE-2.0
+
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.directory.scim.server.rest;
+
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.ws.rs.core.Context;
+import jakarta.ws.rs.core.Request;
+import jakarta.ws.rs.core.SecurityContext;
+import jakarta.ws.rs.core.UriInfo;
+import lombok.Data;
+
+/**
+ * Container of JAXRS Context classes. These classes are likely inject via a proxy, so keeping them in a single place
+ * removes the need to have field injection for @Context classes in other places.
+ */
+@Data
+@ApplicationScoped
+public class RequestContext {
+
+ @Context
+ private UriInfo uriInfo;
+
+ @Context
+ private Request request;
+
+ @Context
+ private SecurityContext securityContext;
+}
diff --git a/scim-server/src/main/java/org/apache/directory/scim/server/rest/ResourceTypesResourceImpl.java b/scim-server/src/main/java/org/apache/directory/scim/server/rest/ResourceTypesResourceImpl.java
index 71a487e..0ae55f1 100644
--- a/scim-server/src/main/java/org/apache/directory/scim/server/rest/ResourceTypesResourceImpl.java
+++ b/scim-server/src/main/java/org/apache/directory/scim/server/rest/ResourceTypesResourceImpl.java
@@ -39,12 +39,20 @@
@ApplicationScoped
public class ResourceTypesResourceImpl implements ResourceTypesResource {
+ private final Registry registry;
+
+ private final RequestContext requestContext;
+
@Inject
- private Registry registry;
-
- @Context
- private UriInfo uriInfo;
-
+ public ResourceTypesResourceImpl(Registry registry, RequestContext requestContext) {
+ this.registry = registry;
+ this.requestContext = requestContext;
+ }
+
+ ResourceTypesResourceImpl() {
+ this(null, null);
+ }
+
@Override
public Response getAllResourceTypes(String filter) {
@@ -56,7 +64,7 @@
for (ResourceType resourceType : resourceTypes) {
Meta meta = new Meta();
- meta.setLocation(uriInfo.getAbsolutePathBuilder().path(resourceType.getName()).build().toString());
+ meta.setLocation(requestContext.getUriInfo().getAbsolutePathBuilder().path(resourceType.getName()).build().toString());
meta.setResourceType(resourceType.getResourceType());
resourceType.setMeta(meta);
@@ -81,7 +89,7 @@
}
Meta meta = new Meta();
- meta.setLocation(uriInfo.getAbsolutePath().toString());
+ meta.setLocation(requestContext.getUriInfo().getAbsolutePath().toString());
meta.setResourceType(resourceType.getResourceType());
resourceType.setMeta(meta);
diff --git a/scim-server/src/main/java/org/apache/directory/scim/server/rest/SchemaResourceImpl.java b/scim-server/src/main/java/org/apache/directory/scim/server/rest/SchemaResourceImpl.java
index e587ba1..e4de3d1 100644
--- a/scim-server/src/main/java/org/apache/directory/scim/server/rest/SchemaResourceImpl.java
+++ b/scim-server/src/main/java/org/apache/directory/scim/server/rest/SchemaResourceImpl.java
@@ -38,15 +38,20 @@
@ApplicationScoped
public class SchemaResourceImpl implements SchemaResource {
-
+
+ private final Registry registry;
+
@Inject
- Registry registry;
-
- @Context
- private UriInfo uriInfo;
-
+ public SchemaResourceImpl(Registry registry) {
+ this.registry = registry;
+ }
+
+ SchemaResourceImpl() {
+ this(null);
+ }
+
@Override
- public Response getAllSchemas(String filter) {
+ public Response getAllSchemas(String filter, UriInfo uriInfo) {
if (filter != null) {
return Response.status(Status.FORBIDDEN).build();
@@ -74,7 +79,7 @@
}
@Override
- public Response getSchema(String urn) {
+ public Response getSchema(String urn, UriInfo uriInfo) {
Schema schema = registry.getSchema(urn);
if (schema == null){
diff --git a/scim-server/src/main/java/org/apache/directory/scim/server/rest/SelfResourceImpl.java b/scim-server/src/main/java/org/apache/directory/scim/server/rest/SelfResourceImpl.java
index 32c789e..f5d728a 100644
--- a/scim-server/src/main/java/org/apache/directory/scim/server/rest/SelfResourceImpl.java
+++ b/scim-server/src/main/java/org/apache/directory/scim/server/rest/SelfResourceImpl.java
@@ -24,11 +24,9 @@
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.inject.Instance;
import jakarta.inject.Inject;
-import jakarta.ws.rs.core.Context;
import jakarta.ws.rs.core.Response;
import jakarta.ws.rs.core.Response.Status;
-import jakarta.ws.rs.core.SecurityContext;
import org.apache.directory.scim.server.exception.UnableToResolveIdResourceException;
import org.apache.directory.scim.server.provider.SelfIdResolver;
import org.apache.directory.scim.spec.protocol.SelfResource;
@@ -44,14 +42,22 @@
@ApplicationScoped
public class SelfResourceImpl implements SelfResource {
- @Inject
- UserResource userResource;
+ private final UserResource userResource;
+
+ private final Instance<SelfIdResolver> selfIdResolver;
+
+ private final RequestContext requestContext;
@Inject
- Instance<SelfIdResolver> selfIdResolver;
+ public SelfResourceImpl(UserResource userResource, Instance<SelfIdResolver> selfIdResolver, RequestContext requestContext) {
+ this.userResource = userResource;
+ this.selfIdResolver = selfIdResolver;
+ this.requestContext = requestContext;
+ }
- @Context
- SecurityContext securityContext;
+ SelfResourceImpl() {
+ this(null, null, null);
+ }
@Override
public Response getSelf(AttributeReferenceListWrapper attributes, AttributeReferenceListWrapper excludedAttributes) {
@@ -122,7 +128,7 @@
}
private String getInternalId() throws UnableToResolveIdResourceException {
- Principal callerPrincipal = securityContext.getUserPrincipal();
+ Principal callerPrincipal = requestContext.getSecurityContext().getUserPrincipal();
if (callerPrincipal != null) {
log.debug("Resolved SelfResource principal to : {}", callerPrincipal.getName());
diff --git a/scim-server/src/main/java/org/apache/directory/scim/server/rest/ServiceProviderConfigResourceImpl.java b/scim-server/src/main/java/org/apache/directory/scim/server/rest/ServiceProviderConfigResourceImpl.java
index e39d6cd..26fe41f 100644
--- a/scim-server/src/main/java/org/apache/directory/scim/server/rest/ServiceProviderConfigResourceImpl.java
+++ b/scim-server/src/main/java/org/apache/directory/scim/server/rest/ServiceProviderConfigResourceImpl.java
@@ -47,20 +47,20 @@
@ApplicationScoped
public class ServiceProviderConfigResourceImpl implements ServiceProviderConfigResource {
- @Inject
- ServerConfiguration serverConfiguration;
+ private final ServerConfiguration serverConfiguration;
+
+ private final EtagGenerator etagGenerator;
@Inject
- EtagGenerator etagGenerator;
-
- public ServiceProviderConfigResourceImpl() {
- serverConfiguration = new ServerConfiguration();
+ public ServiceProviderConfigResourceImpl(ServerConfiguration serverConfiguration, EtagGenerator etagGenerator) {
+ this.serverConfiguration = serverConfiguration;
+ this.etagGenerator = etagGenerator;
}
-
- public void registerServerConfiguration(ServerConfiguration configuration) {
- serverConfiguration = configuration;
+
+ ServiceProviderConfigResourceImpl() {
+ this(null, null);
}
-
+
@Override
public Response getServiceProviderConfiguration(UriInfo uriInfo) {
ServiceProviderConfiguration serviceProviderConfiguration = new ServiceProviderConfiguration();
diff --git a/scim-server/src/main/java/org/apache/directory/scim/server/rest/UserResourceImpl.java b/scim-server/src/main/java/org/apache/directory/scim/server/rest/UserResourceImpl.java
index 4aa2580..d77ff62 100644
--- a/scim-server/src/main/java/org/apache/directory/scim/server/rest/UserResourceImpl.java
+++ b/scim-server/src/main/java/org/apache/directory/scim/server/rest/UserResourceImpl.java
@@ -23,7 +23,12 @@
package org.apache.directory.scim.server.rest;
import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
import lombok.extern.slf4j.Slf4j;
+import org.apache.directory.scim.server.provider.ProviderRegistry;
+import org.apache.directory.scim.server.schema.Registry;
+import org.apache.directory.scim.server.utility.AttributeUtil;
+import org.apache.directory.scim.server.utility.EtagGenerator;
import org.apache.directory.scim.spec.protocol.UserResource;
import org.apache.directory.scim.spec.resources.ScimUser;
@@ -34,7 +39,13 @@
@Slf4j
@ApplicationScoped
public class UserResourceImpl extends BaseResourceTypeResourceImpl<ScimUser> implements UserResource {
- public UserResourceImpl() {
- super(ScimUser.class);
+
+ @Inject
+ public UserResourceImpl(Registry registry, ProviderRegistry providerRegistry, AttributeUtil attributeUtil, RequestContext requestContext, EtagGenerator etagGenerator) {
+ super(registry, providerRegistry, attributeUtil, requestContext, etagGenerator, ScimUser.class);
+ }
+
+ UserResourceImpl() {
+ this(null, null, null, null, null);
}
}
diff --git a/scim-server/src/main/java/org/apache/directory/scim/server/rest/WebApplicationExceptionMapper.java b/scim-server/src/main/java/org/apache/directory/scim/server/rest/WebApplicationExceptionMapper.java
index f8d0051..2289944 100644
--- a/scim-server/src/main/java/org/apache/directory/scim/server/rest/WebApplicationExceptionMapper.java
+++ b/scim-server/src/main/java/org/apache/directory/scim/server/rest/WebApplicationExceptionMapper.java
@@ -19,7 +19,6 @@
package org.apache.directory.scim.server.rest;
-import jakarta.enterprise.inject.Specializes;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.WebApplicationException;
import jakarta.ws.rs.core.HttpHeaders;
@@ -32,7 +31,6 @@
import org.apache.directory.scim.spec.protocol.Constants;
import org.apache.directory.scim.spec.protocol.data.ErrorResponse;
-
@Provider
@Produces({Constants.SCIM_CONTENT_TYPE, MediaType.APPLICATION_JSON})
public class WebApplicationExceptionMapper implements ExceptionMapper<WebApplicationException> {
diff --git a/scim-server/src/main/java/org/apache/directory/scim/server/utility/AttributeUtil.java b/scim-server/src/main/java/org/apache/directory/scim/server/utility/AttributeUtil.java
index 7305a1e..e872737 100644
--- a/scim-server/src/main/java/org/apache/directory/scim/server/utility/AttributeUtil.java
+++ b/scim-server/src/main/java/org/apache/directory/scim/server/utility/AttributeUtil.java
@@ -41,7 +41,6 @@
import org.apache.directory.scim.spec.schema.Schema.Attribute.Returned;
import org.apache.directory.scim.spec.schema.Schema.Attribute.Type;
-import jakarta.annotation.PostConstruct;
import jakarta.inject.Inject;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
@@ -61,13 +60,15 @@
@ApplicationScoped
public class AttributeUtil {
- @Inject
Registry registry;
ObjectMapper objectMapper;
- @PostConstruct
- public void init() { // TODO move this to a CDI producer
+ @Inject
+ public AttributeUtil(Registry registry) {
+ this.registry = registry;
+
+ // TODO move this to a CDI producer
objectMapper = ObjectMapperFactory.getObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
objectMapper.setSerializationInclusion(Include.NON_NULL);
@@ -77,6 +78,8 @@
objectMapper.registerModule(module);
}
+ AttributeUtil() {}
+
public <T extends ScimResource> T keepAlwaysAttributesForDisplay(T resource) throws IllegalArgumentException, IllegalAccessException, AttributeDoesNotExistException, IOException {
return setAttributesForDisplayInternal(resource, Returned.DEFAULT, Returned.REQUEST, Returned.NEVER);
}
diff --git a/scim-server/src/main/java/org/apache/directory/scim/server/utility/EndpointUtil.java b/scim-server/src/main/java/org/apache/directory/scim/server/utility/EndpointUtil.java
deleted file mode 100644
index 28b794d..0000000
--- a/scim-server/src/main/java/org/apache/directory/scim/server/utility/EndpointUtil.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements. See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership. The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License. You may obtain a copy of the License at
-
-* http://www.apache.org/licenses/LICENSE-2.0
-
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied. See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-package org.apache.directory.scim.server.utility;
-
-import java.net.URI;
-
-import jakarta.enterprise.context.RequestScoped;
-import jakarta.ws.rs.core.UriBuilder;
-import jakarta.ws.rs.core.UriInfo;
-
-import org.apache.directory.scim.spec.annotation.ScimResourceType;
-import org.apache.directory.scim.spec.exception.ScimResourceInvalidException;
-import org.apache.directory.scim.spec.resources.ScimResource;
-
-@RequestScoped
-public class EndpointUtil {
- private URI baseUri;
-
- public UriBuilder getBaseUriBuilder() {
- return UriBuilder.fromUri(baseUri);
- }
-
- public UriBuilder getEndpointUriBuilder(Class<? extends ScimResource> resource) {
- ScimResourceType[] sr = resource.getAnnotationsByType(ScimResourceType.class);
-
- if (baseUri == null) {
- throw new IllegalStateException("BaseUri for Resource "+resource+" was null");
- }
-
- if (sr.length == 0 || sr.length > 1) {
- throw new ScimResourceInvalidException("ScimResource class must have a ScimResourceType annotation");
- }
-
- // yuck! TODO where to get REST endpoint from?
- String resourceName = sr[0].name() + "s";
-
- return UriBuilder.fromUri(baseUri).path(resourceName);
- }
-
- public void process(UriInfo uriInfo) {
- baseUri = uriInfo.getBaseUri();
- }
-}
diff --git a/scim-server/src/test/java/org/apache/directory/scim/server/provider/ProviderRegistryTest.java b/scim-server/src/test/java/org/apache/directory/scim/server/provider/ProviderRegistryTest.java
index 43a0c68..6c30f5b 100644
--- a/scim-server/src/test/java/org/apache/directory/scim/server/provider/ProviderRegistryTest.java
+++ b/scim-server/src/test/java/org/apache/directory/scim/server/provider/ProviderRegistryTest.java
@@ -21,16 +21,12 @@
import static org.assertj.core.api.Assertions.assertThat;
-import jakarta.enterprise.inject.Instance;
-
import org.apache.directory.scim.server.schema.Registry;
import org.apache.directory.scim.spec.resources.ScimUser;
import org.apache.directory.scim.spec.schema.Schema;
-import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
-import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension;
@ExtendWith(MockitoExtension.class)
@@ -44,9 +40,8 @@
ProviderRegistry providerRegistry;
public ProviderRegistryTest() {
- providerRegistry = new ProviderRegistry();
registry = new Registry();
- providerRegistry.registry = registry;
+ providerRegistry = new ProviderRegistry(registry, null, null);
}
@Test
diff --git a/scim-server/src/test/java/org/apache/directory/scim/server/provider/UpdateRequestTest.java b/scim-server/src/test/java/org/apache/directory/scim/server/provider/UpdateRequestTest.java
index 9e31751..b094af5 100644
--- a/scim-server/src/test/java/org/apache/directory/scim/server/provider/UpdateRequestTest.java
+++ b/scim-server/src/test/java/org/apache/directory/scim/server/provider/UpdateRequestTest.java
@@ -31,8 +31,6 @@
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import jakarta.enterprise.inject.Instance;
-
import org.apache.directory.scim.server.rest.ObjectMapperFactory;
import org.apache.directory.scim.server.schema.Registry;
import org.apache.directory.scim.server.utility.ExampleObjectExtension;
@@ -89,18 +87,12 @@
@Mock
Provider<ScimUser> provider;
- @Mock
- Instance<Provider<ScimUser>> providerInstance;
-
ProviderRegistry providerRegistry;
@BeforeEach
public void initialize() throws Exception {
- providerRegistry = new ProviderRegistry();
registry = new Registry();
-
- providerRegistry.registry = registry;
- providerRegistry.scimExtensionRegistry = ScimExtensionRegistry.getInstance();
+ providerRegistry = new ProviderRegistry(registry, ScimExtensionRegistry.getInstance(), null);
Mockito.when(provider.getExtensionList())
.thenReturn(Stream.of(EnterpriseExtension.class,ExampleObjectExtension.class).collect(Collectors.toList()));
@@ -110,8 +102,7 @@
@Test
public void testResourcePassthrough() throws Exception {
- UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>(registry);
- updateRequest.initWithResource("1234", createUser1(), createUser1());
+ UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>("1234", createUser1(), createUser1(), registry);
ScimUser result = updateRequest.getResource();
log.info("testResourcePassthrough: " + result);
Assertions.assertThat(result)
@@ -120,8 +111,7 @@
@Test
public void testPatchPassthrough() throws Exception {
- UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>(registry);
- updateRequest.initWithPatch("1234", createUser1(), createUser1PatchOps());
+ UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>("1234", createUser1(), createUser1PatchOps(), registry);
List<PatchOperation> result = updateRequest.getPatchOperations();
log.info("testPatchPassthrough: " + result);
Assertions.assertThat(result)
@@ -130,21 +120,16 @@
@Test
public void testPatchToUpdate() throws Exception {
- UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>(registry);
- updateRequest.initWithPatch("1234", createUser1(), createUser1PatchOps());
-
+ UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>("1234", createUser1(), createUser1PatchOps(), registry);
assertThrows(UnsupportedOperationException.class, () -> updateRequest.getResource());
}
@Test
public void testAddSingleAttribute() throws Exception {
- UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>(registry);
-
ScimUser user1 = createUser1();
ScimUser user2 = copy(user1);
user2.setNickName("Jon");
-
- updateRequest.initWithResource("1234", user1, user2);
+ UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>("1234", user1, user2, registry);
List<PatchOperation> result = updateRequest.getPatchOperations();
PatchOperation actual = assertSingleResult(result);
@@ -154,14 +139,12 @@
@Test
public void testAddSingleExtension() throws Exception {
- UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>(registry);
-
ScimUser user1 = createUser1();
EnterpriseExtension ext = user1.removeExtension(EnterpriseExtension.class);
ScimUser user2 = copy(user1);
user2.addExtension(ext);
- updateRequest.initWithResource("1234", user1, user2);
+ UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>("1234", user1, user2, registry);
List<PatchOperation> result = updateRequest.getPatchOperations();
PatchOperation actual = assertSingleResult(result);
@@ -171,14 +154,12 @@
@Test
public void testAddComplexAttribute() throws Exception {
- UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>(registry);
-
ScimUser user1 = createUser1();
ScimUser user2 = copy(user1);
user2.getName()
.setHonorificPrefix("Dr.");
- updateRequest.initWithResource("1234", user1, user2);
+ UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>("1234", user1, user2, registry);
List<PatchOperation> result = updateRequest.getPatchOperations();
PatchOperation actual = assertSingleResult(result);
@@ -188,8 +169,6 @@
@Test
public void testAddMultiValuedAttribute() throws Exception {
- UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>(registry);
-
ScimUser user1 = createUser1();
ScimUser user2 = copy(user1);
PhoneNumber mobilePhone = new GlobalPhoneNumberBuilder().globalNumber("+1(814)867-5306").build();
@@ -197,7 +176,7 @@
mobilePhone.setPrimary(false);
user2.getPhoneNumbers().add(mobilePhone);
- updateRequest.initWithResource("1234", user1, user2);
+ UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>("1234", user1, user2, registry);
List<PatchOperation> result = updateRequest.getPatchOperations();
PatchOperation actual = assertSingleResult(result);
@@ -213,18 +192,16 @@
*/
@Test
public void testAddObjectToEmptyCollection() throws Exception {
- UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>(registry);
-
ScimUser user1 = createUser1();
- user1.setPhoneNumbers(new ArrayList<PhoneNumber>());
+ user1.setPhoneNumbers(new ArrayList<>());
ScimUser user2 = copy(user1);
PhoneNumber mobilePhone = new GlobalPhoneNumberBuilder().globalNumber("+1(814)867-5306").build();
mobilePhone.setType("mobile");
mobilePhone.setPrimary(true);
user2.getPhoneNumbers().add(mobilePhone);
-
- updateRequest.initWithResource("1234", user1, user2);
+
+ UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>("1234", user1, user2, registry);
List<PatchOperation> operations = updateRequest.getPatchOperations();
assertNotNull(operations);
assertEquals(1, operations.size());
@@ -236,10 +213,8 @@
@Test
public void testAddObjectsToEmptyCollection() throws Exception {
- UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>(registry);
-
ScimUser user1 = createUser1();
- user1.setPhoneNumbers(new ArrayList<PhoneNumber>());
+ user1.setPhoneNumbers(new ArrayList<>());
ScimUser user2 = copy(user1);
PhoneNumber mobilePhone = new GlobalPhoneNumberBuilder().globalNumber("+1(814)867-5306").build();
@@ -252,8 +227,9 @@
user2.getPhoneNumbers().add(mobilePhone);
user2.getPhoneNumbers().add(homePhone);
-
- updateRequest.initWithResource("1234", user1, user2);
+
+
+ UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>("1234", user1, user2, registry);
List<PatchOperation> operations = updateRequest.getPatchOperations();
assertNotNull(operations);
assertEquals(2, operations.size());
@@ -271,13 +247,11 @@
@Test
public void testReplaceSingleAttribute() throws Exception {
- UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>(registry);
-
ScimUser user1 = createUser1();
ScimUser user2 = copy(user1);
user2.setActive(false);
- updateRequest.initWithResource("1234", user1, user2);
+ UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>("1234", user1, user2, registry);
List<PatchOperation> result = updateRequest.getPatchOperations();
PatchOperation actual = assertSingleResult(result);
@@ -287,13 +261,11 @@
@Test
public void testReplaceExtensionSingleAttribute() throws Exception {
- UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>(registry);
-
ScimUser user1 = createUser1();
ScimUser user2 = copy(user1);
user2.getExtension(EnterpriseExtension.class).setDepartment("Dept XYZ.");
- updateRequest.initWithResource("1234", user1, user2);
+ UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>("1234", user1, user2, registry);
List<PatchOperation> result = updateRequest.getPatchOperations();
PatchOperation actual = assertSingleResult(result);
@@ -303,14 +275,12 @@
@Test
public void testReplaceComplexAttribute() throws Exception {
- UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>(registry);
-
ScimUser user1 = createUser1();
ScimUser user2 = copy(user1);
user2.getName()
.setFamilyName("Nobody");
- updateRequest.initWithResource("1234", user1, user2);
+ UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>("1234", user1, user2, registry);
List<PatchOperation> result = updateRequest.getPatchOperations();
PatchOperation actual = assertSingleResult(result);
@@ -320,8 +290,6 @@
@Test
public void testReplaceMultiValuedAttribute() throws Exception {
- UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>(registry);
-
ScimUser user1 = createUser1();
ScimUser user2 = copy(user1);
user2.getEmails()
@@ -330,7 +298,7 @@
.equals("work"))
.forEach(e -> e.setValue("nobody@example.com"));
- updateRequest.initWithResource("1234", user1, user2);
+ UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>("1234", user1, user2, registry);
List<PatchOperation> result = updateRequest.getPatchOperations();
PatchOperation actual = assertSingleResult(result);
@@ -340,13 +308,11 @@
@Test
public void testRemoveSingleAttribute() throws Exception {
- UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>(registry);
-
ScimUser user1 = createUser1();
ScimUser user2 = copy(user1);
user2.setUserName(null);
- updateRequest.initWithResource("1234", user1, user2);
+ UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>("1234", user1, user2, registry);
List<PatchOperation> result = updateRequest.getPatchOperations();
PatchOperation actual = assertSingleResult(result);
@@ -356,13 +322,11 @@
@Test
public void testRemoveSingleExtension() throws Exception {
- UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>(registry);
-
ScimUser user1 = createUser1();
ScimUser user2 = copy(user1);
user2.removeExtension(EnterpriseExtension.class);
- updateRequest.initWithResource("1234", user1, user2);
+ UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>("1234", user1, user2, registry);
List<PatchOperation> result = updateRequest.getPatchOperations();
PatchOperation actual = assertSingleResult(result);
@@ -372,14 +336,13 @@
@Test
public void testRemoveComplexAttribute() throws Exception {
- UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>(registry);
-
ScimUser user1 = createUser1();
ScimUser user2 = copy(user1);
user2.getName()
.setMiddleName(null);
- updateRequest.initWithResource("1234", user1, user2);
+
+ UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>("1234", user1, user2, registry);
List<PatchOperation> result = updateRequest.getPatchOperations();
PatchOperation actual = assertSingleResult(result);
@@ -389,13 +352,11 @@
@Test
public void testRemoveFullComplexAttribute() throws Exception {
- UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>(registry);
-
ScimUser user1 = createUser1();
ScimUser user2 = copy(user1);
user2.setName(null);
- updateRequest.initWithResource("1234", user1, user2);
+ UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>("1234", user1, user2, registry);
List<PatchOperation> result = updateRequest.getPatchOperations();
PatchOperation actual = assertSingleResult(result);
@@ -405,8 +366,6 @@
@Test
public void testRemoveMultiValuedAttribute() throws Exception {
- UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>(registry);
-
ScimUser user1 = createUser1();
ScimUser user2 = copy(user1);
List<Email> newEmails = user2.getEmails()
@@ -415,8 +374,8 @@
.equals("work"))
.collect(Collectors.toList());
user2.setEmails(newEmails);
-
- updateRequest.initWithResource("1234", user1, user2);
+
+ UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>("1234", user1, user2, registry);
List<PatchOperation> result = updateRequest.getPatchOperations();
PatchOperation actual = assertSingleResult(result);
@@ -426,8 +385,6 @@
@Test
public void testRemoveMultiValuedAttributeWithSorting() throws Exception {
- UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>(registry);
-
ScimUser user1 = createUser1();
ScimUser user2 = copy(user1);
@@ -439,8 +396,8 @@
localAddress.setType("local");
user1.getAddresses().add(localAddress);
-
- updateRequest.initWithResource("1234", user1, user2);
+
+ UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>("1234", user1, user2, registry);
List<PatchOperation> result = updateRequest.getPatchOperations();
PatchOperation actual = assertSingleResult(result);
@@ -450,8 +407,6 @@
@Test
public void testAddMultiValuedAttributeWithSorting() throws Exception {
- UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>(registry);
-
ScimUser user1 = createUser1();
ScimUser user2 = copy(user1);
@@ -464,8 +419,8 @@
user2.getAddresses().add(localAddress);
user1.getAddresses().get(0).setKey("asdf");
-
- updateRequest.initWithResource("1234", user1, user2);
+
+ UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>("1234", user1, user2, registry);
List<PatchOperation> result = updateRequest.getPatchOperations();
assertEquals(2, result.size());
@@ -475,8 +430,6 @@
@Test
public void verifyEmptyArraysDoNotCauseMove() throws Exception {
- UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>(registry);
-
ScimUser user1 = createUser1();
ScimUser user2 = copy(user1);
@@ -487,39 +440,35 @@
ExampleObjectExtension ext2 = new ExampleObjectExtension();
ext2.setList(new ArrayList<>());
user2.addExtension(ext2);
-
- updateRequest.initWithResource("1234", user1, user2);
+
+ UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>("1234", user1, user2, registry);
List<PatchOperation> operations = updateRequest.getPatchOperations();
assertTrue(operations.isEmpty(), "Empty Arrays caused a diff");
}
@Test
public void verifyEmptyArraysAreNulled() throws Exception {
- UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>(registry);
-
ScimUser user1 = createUser1();
ScimUser user2 = copy(user1);
//Set empty list on root object and verify no differences
user1.setPhotos(new ArrayList<>());
- updateRequest.initWithResource("1234", user1, user2);
+ UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>("1234", user1, user2, registry);
List<PatchOperation> operations = updateRequest.getPatchOperations();
assertTrue(operations.isEmpty(), "Empty Arrays are not being nulled out");
//Reset user 1 and empty list on Extension and verify no differences
user1 = createUser1();
ExampleObjectExtension ext = new ExampleObjectExtension();
- ext.setList(new ArrayList<String>());
- updateRequest.initWithResource("1234", user1, user2);
+ ext.setList(new ArrayList<>());
operations = updateRequest.getPatchOperations();
assertTrue(operations.isEmpty(), "Empty Arrays are not being nulled out");
//Reset extension and set empty list on element of extension then verify no differences
Subobject subobject = new Subobject();
- subobject.setList1(new ArrayList<String>());
+ subobject.setList1(new ArrayList<>());
ext = new ExampleObjectExtension();
ext.setSubobject(subobject);
- updateRequest.initWithResource("1234", user1, user2);
operations = updateRequest.getPatchOperations();
assertTrue(operations.isEmpty(), "Empty Arrays are not being nulled out");
}
@@ -529,8 +478,6 @@
*/
@Test
public void testAddArray() throws Exception {
- UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>(registry);
-
ScimUser user1 = createUser1();
ScimUser user2 = copy(user1);
@@ -547,8 +494,8 @@
ExampleObjectExtension ext2 = new ExampleObjectExtension();
ext2.setList(Stream.of(FIRST,SECOND).collect(Collectors.toList()));
user2.addExtension(ext2);
-
- updateRequest.initWithResource("1234", user1, user2);
+
+ UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>("1234", user1, user2, registry);
List<PatchOperation> operations = updateRequest.getPatchOperations();
Assertions.assertThat(operations)
@@ -562,8 +509,6 @@
@Test
public void testRemoveArray() throws Exception {
- UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>(registry);
-
ScimUser user1 = createUser1();
ScimUser user2 = copy(user1);
@@ -580,8 +525,8 @@
ExampleObjectExtension ext2 = new ExampleObjectExtension();
ext2.setList(null);
user2.addExtension(ext2);
-
- updateRequest.initWithResource("1234", user1, user2);
+
+ UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>("1234", user1, user2, registry);
List<PatchOperation> operations = updateRequest.getPatchOperations();
assertNotNull(operations);
assertEquals(2, operations.size());
@@ -594,8 +539,6 @@
@Disabled
//TODO: do asserts
public void testNonTypedAttributeListGetUseablePath() throws Exception {
- UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>(registry);
-
ScimUser user1 = createUser1();
ScimUser user2 = copy(user1);
@@ -606,8 +549,8 @@
ExampleObjectExtension ext2 = new ExampleObjectExtension();
ext2.setList(Stream.of(FIRST,SECOND,FOURTH).collect(Collectors.toList()));
user2.addExtension(ext2);
-
- updateRequest.initWithResource("1234", user1, user2);
+
+ UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>("1234", user1, user2, registry);
List<PatchOperation> operations = updateRequest.getPatchOperations();
System.out.println("Number of operations: "+operations.size());
operations.stream().forEach(op -> System.out.println(op));
@@ -619,8 +562,6 @@
@Disabled
//TODO: do asserts
public void testMoveFormatNameToNicknamePart1() throws Exception {
- UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>(registry);
-
ScimUser user1 = createUser1();
ScimUser user2 = copy(user1);
@@ -628,8 +569,8 @@
user1.setNickName(nickname);
user2.getName().setFormatted(nickname);
-
- updateRequest.initWithResource("1234", user1, user2);
+
+ UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>("1234", user1, user2, registry);
List<PatchOperation> operations = updateRequest.getPatchOperations();
System.out.println("Number of operations: "+operations.size());
operations.stream().forEach(op -> System.out.println(op));
@@ -639,8 +580,6 @@
@Disabled
//TODO: do asserts
public void testMoveFormatNameToNicknamePart2() throws Exception {
- UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>(registry);
-
ScimUser user1 = createUser1();
ScimUser user2 = copy(user1);
@@ -650,8 +589,8 @@
user2.getName().setFormatted(nickname);
user1.getName().setFormatted("");
-
- updateRequest.initWithResource("1234", user1, user2);
+
+ UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>("1234", user1, user2, registry);
List<PatchOperation> operations = updateRequest.getPatchOperations();
System.out.println("Number of operations: "+operations.size());
operations.stream().forEach(op -> System.out.println(op));
@@ -661,8 +600,6 @@
@Disabled
//TODO: do asserts
public void testMoveFormatNameToNicknamePart3() throws Exception {
- UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>(registry);
-
ScimUser user1 = createUser1();
ScimUser user2 = copy(user1);
@@ -672,8 +609,8 @@
user2.getName().setFormatted(nickname);
user1.getName().setFormatted("");
-
- updateRequest.initWithResource("1234", user1, user2);
+
+ UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>("1234", user1, user2, registry);
List<PatchOperation> operations = updateRequest.getPatchOperations();
System.out.println("Number of operations: "+operations.size());
operations.stream().forEach(op -> System.out.println(op));
@@ -683,7 +620,6 @@
@Disabled
//TODO: do asserts
public void testMoveFormatNameToNicknamePart4() throws Exception {
- UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>(registry);
ScimUser user1 = createUser1();
ScimUser user2 = copy(user1);
@@ -694,8 +630,8 @@
user2.getName().setFormatted(nickname);
user1.getName().setFormatted(null);
-
- updateRequest.initWithResource("1234", user1, user2);
+
+ UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>("1234", user1, user2, registry);
List<PatchOperation> operations = updateRequest.getPatchOperations();
System.out.println("Number of operations: "+operations.size());
operations.stream().forEach(op -> System.out.println(op));
@@ -705,8 +641,6 @@
@Disabled
//TODO: do asserts
public void testMoveFormatNameToNicknamePart5() throws Exception {
- UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>(registry);
-
ScimUser user1 = createUser1();
ScimUser user2 = copy(user1);
@@ -716,8 +650,8 @@
user2.getName().setFormatted(null);
user1.getName().setFormatted(nickname);
-
- updateRequest.initWithResource("1234", user1, user2);
+
+ UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>("1234", user1, user2, registry);
List<PatchOperation> operations = updateRequest.getPatchOperations();
System.out.println("Number of operations: "+operations.size());
operations.stream().forEach(op -> System.out.println(op));
@@ -726,8 +660,6 @@
@ParameterizedTest
@MethodSource("testListOfStringsParameters")
public void testListOfStringsParameterized(List<String> list1, List<String> list2, List<ExpectedPatchOperation> ops) throws Exception {
- UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>(registry);
-
ScimUser user1 = createUser1();
ScimUser user2 = copy(user1);
@@ -738,8 +670,8 @@
ExampleObjectExtension ext2 = new ExampleObjectExtension();
ext2.setList(list2);
user2.addExtension(ext2);
-
- updateRequest.initWithResource("1234", user1, user2);
+
+ UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>("1234", user1, user2, registry);
List<PatchOperation> operations = updateRequest.getPatchOperations();
assertEquals(ops.size(), operations.size());
for(int i = 0; i < operations.size(); i++) {
@@ -798,8 +730,6 @@
@Test
//TODO: do parameterized test
public void offsetTest1() throws Exception {
- UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>(registry);
-
ScimUser user1 = createUser1();
ScimUser user2 = copy(user1);
@@ -811,8 +741,8 @@
//ext2.setList(Stream.of("A","A","B","B","D","F","N","Q","Z").collect(Collectors.toList()));
ext2.setList(Stream.of("A","Z").collect(Collectors.toList()));
user2.addExtension(ext2);
-
- updateRequest.initWithResource("1234", user1, user2);
+
+ UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>("1234", user1, user2, registry);
List<PatchOperation> operations = updateRequest.getPatchOperations();
System.out.println("Number of operations: "+operations.size());
operations.stream().forEach(op -> System.out.println(op));
@@ -821,7 +751,6 @@
@Test
public void testMoveFormatNameToNicknamePart6() throws Exception {
- UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>(registry);
ScimUser user1 = createUser1();
ScimUser user2 = copy(user1);
@@ -832,8 +761,8 @@
user2.getName().setFormatted("");
user1.getName().setFormatted(nickname);
-
- updateRequest.initWithResource("1234", user1, user2);
+
+ UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>("1234", user1, user2, registry);
List<PatchOperation> operations = updateRequest.getPatchOperations();
System.out.println("Number of operations: "+operations.size());
operations.stream().forEach(op -> System.out.println(op));
@@ -850,8 +779,7 @@
public void testShowBugWhereDeleteIsTreatedAsMultipleReplace() throws Exception {
// final int expectedNumberOfOperationsWithoutBug = 1;
// final int expectedNumberOfOperationsWithBug = 4;
-//
-// UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>(registry);
+//
// ScimUser user1 = createUser1();
// ScimUser user2 = copy(user1);
// user2.getPhoneNumbers().removeIf(p -> p.getType().equals("home"));
@@ -860,7 +788,7 @@
// workNumber.setType("home");
// assertNotNull(workNumber);
//
-// updateRequest.initWithResource("1234", user1, user2);
+// UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>("1234", user1, user2, registry);
// List<PatchOperation> operations = updateRequest.getPatchOperations();
// assertNotNull(operations);
// assertEquals(expectedNumberOfOperationsWithBug, operations.size());
diff --git a/scim-server/src/test/java/org/apache/directory/scim/server/rest/BaseResourceTypeResourceImplTest.java b/scim-server/src/test/java/org/apache/directory/scim/server/rest/BaseResourceTypeResourceImplTest.java
index 027a297..63b5244 100644
--- a/scim-server/src/test/java/org/apache/directory/scim/server/rest/BaseResourceTypeResourceImplTest.java
+++ b/scim-server/src/test/java/org/apache/directory/scim/server/rest/BaseResourceTypeResourceImplTest.java
@@ -86,7 +86,7 @@
BaseResourceTypeResourceImpl baseResourceImpl = Mockito.mock(BaseResourceTypeResourceImpl.class);
UriInfo uriInfo = mock(UriInfo.class);
MultivaluedMap queryParams = mock(MultivaluedMap.class);
- baseResourceImpl.uriInfo = uriInfo;
+ baseResourceImpl.requestContext = new RequestContext().setUriInfo(uriInfo);
when(uriInfo.getQueryParameters()).thenReturn(queryParams);
when(queryParams.getFirst("filter")).thenReturn("not null");
diff --git a/scim-server/src/test/java/org/apache/directory/scim/server/rest/SelfResourceImplTest.java b/scim-server/src/test/java/org/apache/directory/scim/server/rest/SelfResourceImplTest.java
index b5e8143..607e4ad 100644
--- a/scim-server/src/test/java/org/apache/directory/scim/server/rest/SelfResourceImplTest.java
+++ b/scim-server/src/test/java/org/apache/directory/scim/server/rest/SelfResourceImplTest.java
@@ -54,9 +54,7 @@
when(principal.getName()).thenReturn("test-user");
when(selfIdResolverInstance.isUnsatisfied()).thenReturn(true);
- SelfResourceImpl selfResource = new SelfResourceImpl();
- selfResource.selfIdResolver = selfIdResolverInstance;
- selfResource.securityContext = securityContext;
+ SelfResourceImpl selfResource = new SelfResourceImpl(null, selfIdResolverInstance, new RequestContext().setSecurityContext(securityContext));
Response response = selfResource.getSelf(null, null);
assertThat(response.getEntity(), instanceOf(ErrorResponse.class));
@@ -84,10 +82,7 @@
when(selfIdResolver.resolveToInternalId(principal)).thenReturn(internalId);
when(userResource.getById(internalId, null, null)).thenReturn(mockResponse);
- SelfResourceImpl selfResource = new SelfResourceImpl();
- selfResource.selfIdResolver = selfIdResolverInstance;
- selfResource.securityContext = securityContext;
- selfResource.userResource = userResource;
+ SelfResourceImpl selfResource = new SelfResourceImpl(userResource, selfIdResolverInstance, new RequestContext().setSecurityContext(securityContext));
// the response is just a passed along from the UserResource, so just validate it is the same instance.
assertThat(selfResource.getSelf(null, null), sameInstance(mockResponse));
diff --git a/scim-server/src/test/java/org/apache/directory/scim/server/utility/AttributeUtilTest.java b/scim-server/src/test/java/org/apache/directory/scim/server/utility/AttributeUtilTest.java
index 22b1e4d..e2dd37b 100644
--- a/scim-server/src/test/java/org/apache/directory/scim/server/utility/AttributeUtilTest.java
+++ b/scim-server/src/test/java/org/apache/directory/scim/server/utility/AttributeUtilTest.java
@@ -67,8 +67,7 @@
@BeforeEach
public void setup() throws Exception {
registry = Mockito.mock(Registry.class);
- attributeUtil = new AttributeUtil();
- attributeUtil.registry = registry;
+ attributeUtil = new AttributeUtil(registry);
Schema scimUserSchema = ProviderRegistry.generateSchema(ScimUser.class, ReflectionUtils.getFieldsUpTo(ScimUser.class, BaseResource.class));
Schema scimEnterpriseUserSchema = ProviderRegistry.generateSchema(EnterpriseExtension.class, ReflectionUtils.getFieldsUpTo(EnterpriseExtension.class, Object.class));
Schema scimExampleSchema = ProviderRegistry.generateSchema(ExampleObjectExtension.class, ReflectionUtils.getFieldsUpTo(ExampleObjectExtension.class, Object.class));
@@ -81,8 +80,6 @@
Mockito.when(registry.getAllSchemas()).thenReturn(Arrays.asList(scimUserSchema, scimEnterpriseUserSchema, scimExampleSchema));
Mockito.when(registry.getAllSchemaUrns()).thenReturn(new HashSet<String>(Arrays.asList(ScimUser.SCHEMA_URI, EnterpriseExtension.URN, ExampleObjectExtension.URN)));
- attributeUtil.init();
-
objectMapper = ObjectMapperFactory.getObjectMapper();
objectMapper.setSerializationInclusion(Include.NON_NULL);
objectMapper.enable(SerializationFeature.INDENT_OUTPUT);
diff --git a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/SchemaResource.java b/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/SchemaResource.java
index 35c36ef..2b704f9 100644
--- a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/SchemaResource.java
+++ b/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/SchemaResource.java
@@ -30,9 +30,11 @@
import jakarta.ws.rs.PathParam;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.QueryParam;
+import jakarta.ws.rs.core.Context;
import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.Response;
import jakarta.ws.rs.core.Response.Status;
+import jakarta.ws.rs.core.UriInfo;
import static org.apache.directory.scim.spec.protocol.Constants.SCIM_CONTENT_TYPE;
@@ -76,7 +78,7 @@
@Operation(description="Get All Schemas")
@ApiResponse(content = @Content(mediaType = SCIM_CONTENT_TYPE,
array = @ArraySchema(schema = @Schema(implementation = org.apache.directory.scim.spec.schema.Schema.class))))
- default Response getAllSchemas(@QueryParam("filter") String filter) {
+ default Response getAllSchemas(@QueryParam("filter") String filter, @Context UriInfo uriInfo) {
if (filter != null) {
return Response.status(Status.FORBIDDEN).build();
@@ -91,7 +93,7 @@
@Operation(description="Get Schemas by URN")
@ApiResponse(content = @Content(mediaType = SCIM_CONTENT_TYPE,
schema = @Schema(implementation = org.apache.directory.scim.spec.schema.Schema.class)))
- default Response getSchema(@PathParam("uri") String uri) {
+ default Response getSchema(@PathParam("uri") String uri, @Context UriInfo uriInfo) {
return Response.status(Status.NOT_IMPLEMENTED).build();
}
}