Replace field injection with constructor injection
Cleanup dead code were possible
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..f382d64 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,24 +84,21 @@
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 final Registry registry;
- @Inject
- ScimExtensionRegistry scimExtensionRegistry;
+ private final 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;
}
@Override
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..a0dcfc6 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,6 +100,29 @@
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
}
+ public UpdateRequest(String id, T original, T resource, Registry registry) {
+ this(registry);
+ this.id = id;
+ this.original = original;
+ this.resource = resource;
+ this.schema = registry.getSchema(original.getBaseUrn());
+ initialized = true;
+ }
+
+ public UpdateRequest(String id, T original, List<PatchOperation> patchOperations, Registry registry) {
+ this(registry);
+ this.id = id;
+ this.original = original;
+ this.patchOperations = patchOperations;
+ this.schema = registry.getSchema(original.getBaseUrn());
+
+ initialized = true;
+ }
+
+ /**
+ * @deprecated Use equivalent constructor
+ */
+ @Deprecated
public void initWithResource(String id, T original, T resource) {
this.id = id;
schema = registry.getSchema(original.getBaseUrn());
@@ -114,6 +133,10 @@
initialized = true;
}
+ /**
+ * @deprecated Use equivalent constructor
+ */
+ @Deprecated
public void initWithPatch(String id, T original, List<PatchOperation> patchOperations) {
this.id = id;
this.original = original;
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..26fdca0 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,10 +29,7 @@
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;
@@ -42,6 +39,7 @@
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 +59,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 +82,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 +117,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 +125,6 @@
try {
Provider<T> provider = getProviderInternal();
- endpointUtil.process(uriInfo);
T resource = null;
try {
resource = provider.get(id);
@@ -158,7 +148,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 +252,6 @@
return createAmbiguousAttributeParametersResponse();
}
- endpointUtil.process(uriInfo);
T created;
try {
created = provider.create(resource);
@@ -363,7 +352,6 @@
ListResponse<T> listResponse = new ListResponse<>();
- endpointUtil.process(uriInfo);
FilterResponse<T> filterResp = null;
try {
filterResp = provider.find(filter, pageRequest, sortRequest);
@@ -454,7 +442,6 @@
return createAmbiguousAttributeParametersResponse();
}
- endpointUtil.process(uriInfo);
T stored;
try {
stored = provider.get(id);
@@ -478,7 +465,7 @@
return createETagErrorResponse();
}
- ResponseBuilder evaluatePreconditionsResponse = request.evaluatePreconditions(backingETag);
+ ResponseBuilder evaluatePreconditionsResponse = requestContext.getRequest().evaluatePreconditions(backingETag);
if (evaluatePreconditionsResponse != null) {
return createPreconditionFailedResponse(id, evaluatePreconditionsResponse);
@@ -486,8 +473,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 +542,6 @@
return createAmbiguousAttributeParametersResponse();
}
- endpointUtil.process(uriInfo);
T stored;
try {
stored = provider.get(id);
@@ -580,7 +565,7 @@
return createETagErrorResponse();
}
- ResponseBuilder evaluatePreconditionsResponse = request.evaluatePreconditions(backingETag);
+ ResponseBuilder evaluatePreconditionsResponse = requestContext.getRequest().evaluatePreconditions(backingETag);
if (evaluatePreconditionsResponse != null) {
return createPreconditionFailedResponse(id, evaluatePreconditionsResponse);
@@ -588,8 +573,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 +636,6 @@
Provider<T> provider = getProviderInternal();
try {
- endpointUtil.process(uriInfo);
response = Response.noContent()
.build();
@@ -705,7 +688,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..2ccfe40 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
@@ -96,14 +96,15 @@
// 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;
+ }
@Override
public Response doBulk(BulkRequest request, UriInfo uriInfo) {
@@ -284,8 +285,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 +454,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..7dad42b 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,22 @@
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);
}
}
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..5d4951f
--- /dev/null
+++ b/scim-server/src/main/java/org/apache/directory/scim/server/rest/RequestContext.java
@@ -0,0 +1,43 @@
+/*
+ * 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.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
+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..52216c5 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,16 @@
@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;
+ }
+
@Override
public Response getAllResourceTypes(String filter) {
@@ -56,7 +60,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 +85,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..f1c13f0 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,16 @@
@ApplicationScoped
public class SchemaResourceImpl implements SchemaResource {
-
+
+ private final Registry registry;
+
@Inject
- Registry registry;
-
- @Context
- private UriInfo uriInfo;
-
+ public SchemaResourceImpl(Registry registry) {
+ this.registry = registry;
+ }
+
@Override
- public Response getAllSchemas(String filter) {
+ public Response getAllSchemas(String filter, UriInfo uriInfo) {
if (filter != null) {
return Response.status(Status.FORBIDDEN).build();
@@ -74,7 +75,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..7a10576 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
@@ -44,14 +44,18 @@
@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;
-
- @Context
- SecurityContext securityContext;
+ public SelfResourceImpl(UserResource userResource, Instance<SelfIdResolver> selfIdResolver, RequestContext requestContext) {
+ this.userResource = userResource;
+ this.selfIdResolver = selfIdResolver;
+ this.requestContext = requestContext;
+ }
@Override
public Response getSelf(AttributeReferenceListWrapper attributes, AttributeReferenceListWrapper excludedAttributes) {
@@ -122,7 +126,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..8ad2429 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,16 @@
@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;
- }
-
+
@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..efc8017 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,9 @@
@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);
}
}
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..0ade1ad 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
@@ -61,13 +61,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);
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..d944402 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
@@ -44,9 +44,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..b8ff196 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
@@ -96,11 +96,8 @@
@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()));
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();
}
}