From 76e573666e7e9ed502ec160b80fe4243bd46422d Mon Sep 17 00:00:00 2001 From: wso2-engineering-bot Date: Wed, 10 Sep 2025 11:54:53 +0530 Subject: [PATCH] Log improvements --- .../common/ClaimManagementDataHolder.java | 22 ++- .../claim/management/common/Constant.java | 11 +- .../server/claim/management/common/Util.java | 24 ++- .../v1/core/ServerClaimManagementService.java | 141 +++++++++++++++--- .../ServerClaimManagementServiceFactory.java | 9 ++ .../impl/ClaimManagementApiServiceImpl.java | 53 +++++++ 6 files changed, 237 insertions(+), 23 deletions(-) diff --git a/components/org.wso2.carbon.identity.api.server.claim.management/org.wso2.carbon.identity.api.server.claim.management.common/src/main/java/org/wso2/carbon/identity/api/server/claim/management/common/ClaimManagementDataHolder.java b/components/org.wso2.carbon.identity.api.server.claim.management/org.wso2.carbon.identity.api.server.claim.management.common/src/main/java/org/wso2/carbon/identity/api/server/claim/management/common/ClaimManagementDataHolder.java index 31cc4235bf..20fa080999 100644 --- a/components/org.wso2.carbon.identity.api.server.claim.management/org.wso2.carbon.identity.api.server.claim.management.common/src/main/java/org/wso2/carbon/identity/api/server/claim/management/common/ClaimManagementDataHolder.java +++ b/components/org.wso2.carbon.identity.api.server.claim.management/org.wso2.carbon.identity.api.server.claim.management.common/src/main/java/org/wso2/carbon/identity/api/server/claim/management/common/ClaimManagementDataHolder.java @@ -16,6 +16,8 @@ package org.wso2.carbon.identity.api.server.claim.management.common; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.wso2.carbon.context.PrivilegedCarbonContext; import org.wso2.carbon.identity.claim.metadata.mgt.ClaimMetadataManagementService; import org.wso2.carbon.identity.organization.management.service.OrganizationManager; @@ -25,6 +27,8 @@ */ public class ClaimManagementDataHolder { + private static final Log log = LogFactory.getLog(ClaimManagementDataHolder.class); + private static class OrganizationManagerHolder { static final OrganizationManager SERVICE = (OrganizationManager) PrivilegedCarbonContext @@ -44,7 +48,14 @@ private static class ClaimMetadataManagementServiceHolder { */ public static ClaimMetadataManagementService getClaimMetadataManagementService() { - return ClaimMetadataManagementServiceHolder.SERVICE; + if (log.isDebugEnabled()) { + log.debug("Retrieving ClaimMetadataManagementService from OSGi context."); + } + ClaimMetadataManagementService service = ClaimMetadataManagementServiceHolder.SERVICE; + if (service == null && log.isDebugEnabled()) { + log.debug("ClaimMetadataManagementService is not available in the OSGi context."); + } + return service; } /** @@ -54,6 +65,13 @@ public static ClaimMetadataManagementService getClaimMetadataManagementService() */ public static OrganizationManager getOrganizationManager() { - return OrganizationManagerHolder.SERVICE; + if (log.isDebugEnabled()) { + log.debug("Retrieving OrganizationManager from OSGi context."); + } + OrganizationManager service = OrganizationManagerHolder.SERVICE; + if (service == null && log.isDebugEnabled()) { + log.debug("OrganizationManager is not available in the OSGi context."); + } + return service; } } diff --git a/components/org.wso2.carbon.identity.api.server.claim.management/org.wso2.carbon.identity.api.server.claim.management.common/src/main/java/org/wso2/carbon/identity/api/server/claim/management/common/Constant.java b/components/org.wso2.carbon.identity.api.server.claim.management/org.wso2.carbon.identity.api.server.claim.management.common/src/main/java/org/wso2/carbon/identity/api/server/claim/management/common/Constant.java index cfcab31e1c..52be241019 100644 --- a/components/org.wso2.carbon.identity.api.server.claim.management/org.wso2.carbon.identity.api.server.claim.management.common/src/main/java/org/wso2/carbon/identity/api/server/claim/management/common/Constant.java +++ b/components/org.wso2.carbon.identity.api.server.claim.management/org.wso2.carbon.identity.api.server.claim.management.common/src/main/java/org/wso2/carbon/identity/api/server/claim/management/common/Constant.java @@ -16,6 +16,9 @@ package org.wso2.carbon.identity.api.server.claim.management.common; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + import java.util.Collections; import java.util.HashMap; import java.util.HashSet; @@ -247,6 +250,7 @@ public enum ErrorMessage { "The attribute: %s is not a string data type and canonical values are only supported for " + "string data type."); + private static final Log log = LogFactory.getLog(ErrorMessage.class); private final String code; private final String message; private final String description; @@ -296,9 +300,14 @@ public static ErrorMessage getMappedErrorMessage(String serverCode) { try { String errorCode = resourceBundle.getString(serverCode); + if (log.isDebugEnabled()) { + log.debug("Successfully mapped server error code: " + serverCode + " to error code: " + errorCode); + } return messageIndex.get(errorCode); } catch (Throwable e) { - // Ignore if error mapping has invalid input. + if (log.isDebugEnabled()) { + log.debug("Failed to map server error code: " + serverCode + ". Using default error code.", e); + } } return ErrorMessage.ERROR_CODE_INVALID_INPUT; } diff --git a/components/org.wso2.carbon.identity.api.server.claim.management/org.wso2.carbon.identity.api.server.claim.management.common/src/main/java/org/wso2/carbon/identity/api/server/claim/management/common/Util.java b/components/org.wso2.carbon.identity.api.server.claim.management/org.wso2.carbon.identity.api.server.claim.management.common/src/main/java/org/wso2/carbon/identity/api/server/claim/management/common/Util.java index 9650a0fd53..a751a8fcb1 100644 --- a/components/org.wso2.carbon.identity.api.server.claim.management/org.wso2.carbon.identity.api.server.claim.management.common/src/main/java/org/wso2/carbon/identity/api/server/claim/management/common/Util.java +++ b/components/org.wso2.carbon.identity.api.server.claim.management/org.wso2.carbon.identity.api.server.claim.management.common/src/main/java/org/wso2/carbon/identity/api/server/claim/management/common/Util.java @@ -16,6 +16,8 @@ package org.wso2.carbon.identity.api.server.claim.management.common; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.wso2.carbon.context.PrivilegedCarbonContext; import org.wso2.carbon.identity.claim.metadata.mgt.ClaimMetadataManagementService; import org.wso2.carbon.user.core.service.RealmService; @@ -25,6 +27,8 @@ */ public class Util { + private static final Log log = LogFactory.getLog(Util.class); + /** * Get ClaimMetadataManagementService osgi service. * @@ -32,8 +36,15 @@ public class Util { */ @Deprecated public static ClaimMetadataManagementService getClaimMetadataManagementService() { - return (ClaimMetadataManagementService) PrivilegedCarbonContext.getThreadLocalCarbonContext() - .getOSGiService(ClaimMetadataManagementService.class, null); + if (log.isDebugEnabled()) { + log.debug("Retrieving deprecated ClaimMetadataManagementService from OSGi context."); + } + ClaimMetadataManagementService service = (ClaimMetadataManagementService) PrivilegedCarbonContext + .getThreadLocalCarbonContext().getOSGiService(ClaimMetadataManagementService.class, null); + if (service == null && log.isDebugEnabled()) { + log.debug("ClaimMetadataManagementService is not available in the OSGi context."); + } + return service; } /** @@ -43,7 +54,14 @@ public static ClaimMetadataManagementService getClaimMetadataManagementService() */ @Deprecated public static RealmService getRealmService() { - return (RealmService) PrivilegedCarbonContext.getThreadLocalCarbonContext() + if (log.isDebugEnabled()) { + log.debug("Retrieving deprecated RealmService from OSGi context."); + } + RealmService service = (RealmService) PrivilegedCarbonContext.getThreadLocalCarbonContext() .getOSGiService(RealmService.class, null); + if (service == null && log.isDebugEnabled()) { + log.debug("RealmService is not available in the OSGi context."); + } + return service; } } diff --git a/components/org.wso2.carbon.identity.api.server.claim.management/org.wso2.carbon.identity.rest.api.server.claim.management.v1/src/main/java/org/wso2/carbon/identity/rest/api/server/claim/management/v1/core/ServerClaimManagementService.java b/components/org.wso2.carbon.identity.api.server.claim.management/org.wso2.carbon.identity.rest.api.server.claim.management.v1/src/main/java/org/wso2/carbon/identity/rest/api/server/claim/management/v1/core/ServerClaimManagementService.java index b9e5bf9c49..a2b17ec3a8 100644 --- a/components/org.wso2.carbon.identity.api.server.claim.management/org.wso2.carbon.identity.rest.api.server.claim.management.v1/src/main/java/org/wso2/carbon/identity/rest/api/server/claim/management/v1/core/ServerClaimManagementService.java +++ b/components/org.wso2.carbon.identity.api.server.claim.management/org.wso2.carbon.identity.rest.api.server.claim.management.v1/src/main/java/org/wso2/carbon/identity/rest/api/server/claim/management/v1/core/ServerClaimManagementService.java @@ -224,6 +224,9 @@ public ServerClaimManagementService(ClaimMetadataManagementService claimMetadata */ public String addClaimDialect(ClaimDialectReqDTO claimDialectReqDTO) { + if (LOG.isDebugEnabled()) { + LOG.debug("Adding claim dialect: " + claimDialectReqDTO.getDialectURI()); + } try { validateClaimModificationEligibility(); getClaimMetadataManagementService().addClaimDialect( @@ -233,8 +236,10 @@ public String addClaimDialect(ClaimDialectReqDTO claimDialectReqDTO) { throw handleClaimManagementException(e, ERROR_CODE_ERROR_ADDING_DIALECT, claimDialectReqDTO.getDialectURI()); } - - return getResourceId(claimDialectReqDTO.getDialectURI()); + + String resourceId = getResourceId(claimDialectReqDTO.getDialectURI()); + LOG.info("Successfully added claim dialect: " + claimDialectReqDTO.getDialectURI()); + return resourceId; } /** @@ -245,6 +250,9 @@ public String addClaimDialect(ClaimDialectReqDTO claimDialectReqDTO) { */ public String addClaimDialect(String dialectURI) { + if (LOG.isDebugEnabled()) { + LOG.debug("Adding claim dialect with URI: " + dialectURI); + } try { validateClaimModificationEligibility(); claimMetadataManagementService.addClaimDialect( @@ -253,8 +261,10 @@ public String addClaimDialect(String dialectURI) { } catch (ClaimMetadataException e) { throw handleClaimManagementException(e, ERROR_CODE_ERROR_ADDING_DIALECT, dialectURI); } - - return getResourceId(dialectURI); + + String resourceId = getResourceId(dialectURI); + LOG.info("Successfully added claim dialect with URI: " + dialectURI); + return resourceId; } /** @@ -264,12 +274,18 @@ public String addClaimDialect(String dialectURI) { */ public void deleteClaimDialect(String dialectId) { + if (LOG.isDebugEnabled()) { + LOG.debug("Deleting claim dialect with ID: " + dialectId); + } String claimDialectURI; try { validateClaimModificationEligibility(); claimDialectURI = base64DecodeId(dialectId); } catch (Exception ignored) { // Ignoring the delete operation and return 204 response code, since the resource does not exist. + if (LOG.isDebugEnabled()) { + LOG.debug("Claim dialect not found or invalid ID, ignoring delete operation: " + dialectId); + } return; } try { @@ -279,7 +295,8 @@ public void deleteClaimDialect(String dialectId) { } catch (ClaimMetadataException e) { throw handleClaimManagementException(e, ERROR_CODE_ERROR_DELETING_DIALECT, dialectId); } - + + LOG.info("Successfully deleted claim dialect with ID: " + dialectId); } /** @@ -290,6 +307,9 @@ public void deleteClaimDialect(String dialectId) { */ public ClaimDialectResDTO getClaimDialect(String dialectId) { + if (LOG.isDebugEnabled()) { + LOG.debug("Retrieving claim dialect with ID: " + dialectId); + } try { List claimDialectList = claimMetadataManagementService.getClaimDialects( ContextLoader.getTenantDomainFromContext()); @@ -305,7 +325,11 @@ public ClaimDialectResDTO getClaimDialect(String dialectId) { throw handleClaimManagementClientError(ERROR_CODE_DIALECT_NOT_FOUND, NOT_FOUND, dialectId); } - return getClaimDialectResDTO(claimDialect); + ClaimDialectResDTO result = getClaimDialectResDTO(claimDialect); + if (LOG.isDebugEnabled()) { + LOG.debug("Successfully retrieved claim dialect: " + result.getDialectURI()); + } + return result; } catch (ClaimMetadataException e) { throw handleClaimManagementException(e, ERROR_CODE_ERROR_RETRIEVING_DIALECT, dialectId); @@ -323,12 +347,20 @@ public ClaimDialectResDTO getClaimDialect(String dialectId) { */ public List getClaimDialects(Integer limit, Integer offset, String filter, String sort) { + if (LOG.isDebugEnabled()) { + LOG.debug("Retrieving claim dialects with parameters - limit: " + limit + ", offset: " + offset + + ", filter: " + filter + ", sort: " + sort); + } handleNotImplementedCapabilities(limit, offset, filter, sort); try { List claimDialectList = claimMetadataManagementService.getClaimDialects(ContextLoader .getTenantDomainFromContext()); - return getClaimDialectResDTOs(claimDialectList); + List result = getClaimDialectResDTOs(claimDialectList); + if (LOG.isDebugEnabled()) { + LOG.debug("Successfully retrieved " + result.size() + " claim dialects"); + } + return result; } catch (ClaimMetadataException e) { throw handleClaimManagementException(e, ERROR_CODE_ERROR_RETRIEVING_DIALECTS); @@ -346,6 +378,10 @@ public List getClaimDialects(Integer limit, Integer offset, */ public String updateClaimDialect(String dialectId, ClaimDialectReqDTO claimDialectReqDTO) { + if (LOG.isDebugEnabled()) { + LOG.debug("Updating claim dialect with ID: " + dialectId + ", new URI: " + + claimDialectReqDTO.getDialectURI()); + } try { validateClaimModificationEligibility(); // If the old and new dialect uri is the same we don't need to do a db update. @@ -364,7 +400,9 @@ public String updateClaimDialect(String dialectId, ClaimDialectReqDTO claimDiale } // Since the dialects identifier has changed we have to send the new identifier in the location header. - return getResourceId(claimDialectReqDTO.getDialectURI()); + String resourceId = getResourceId(claimDialectReqDTO.getDialectURI()); + LOG.info("Successfully updated claim dialect with ID: " + dialectId); + return resourceId; } /** @@ -375,6 +413,9 @@ public String updateClaimDialect(String dialectId, ClaimDialectReqDTO claimDiale */ public String addLocalClaim(LocalClaimReqDTO localClaimReqDTO) { + if (LOG.isDebugEnabled()) { + LOG.debug("Adding local claim: " + localClaimReqDTO.getClaimURI()); + } // Validate mandatory attributes. if (StringUtils.isBlank(localClaimReqDTO.getClaimURI())) { throw handleClaimManagementClientError(Constant.ErrorMessage.ERROR_CODE_CLAIM_URI_NOT_SPECIFIED, @@ -396,8 +437,10 @@ public String addLocalClaim(LocalClaimReqDTO localClaimReqDTO) { } catch (UserStoreException e) { throw handleException(e, ERROR_CODE_ERROR_ADDING_LOCAL_CLAIM, localClaimReqDTO.getClaimURI()); } - - return getResourceId(localClaimReqDTO.getClaimURI()); + + String resourceId = getResourceId(localClaimReqDTO.getClaimURI()); + LOG.info("Successfully added local claim: " + localClaimReqDTO.getClaimURI()); + return resourceId; } /** @@ -407,12 +450,18 @@ public String addLocalClaim(LocalClaimReqDTO localClaimReqDTO) { */ public void deleteLocalClaim(String claimId) { + if (LOG.isDebugEnabled()) { + LOG.debug("Deleting local claim with ID: " + claimId); + } String claimURI; try { validateClaimModificationEligibility(); claimURI = base64DecodeId(claimId); } catch (Exception ignored) { // Ignoring the delete operation and return 204 response code, since the resource does not exist. + if (LOG.isDebugEnabled()) { + LOG.debug("Local claim not found or invalid ID, ignoring delete operation: " + claimId); + } return; } try { @@ -420,7 +469,8 @@ public void deleteLocalClaim(String claimId) { } catch (ClaimMetadataException e) { throw handleClaimManagementException(e, ERROR_CODE_ERROR_DELETING_LOCAL_CLAIM, claimId); } - + + LOG.info("Successfully deleted local claim with ID: " + claimId); } /** @@ -431,6 +481,9 @@ public void deleteLocalClaim(String claimId) { */ public LocalClaimResDTO getLocalClaim(String claimId) { + if (LOG.isDebugEnabled()) { + LOG.debug("Retrieving local claim with ID: " + claimId); + } try { List localClaimList = claimMetadataManagementService.getLocalClaims(ContextLoader .getTenantDomainFromContext()); @@ -441,7 +494,11 @@ public LocalClaimResDTO getLocalClaim(String claimId) { throw handleClaimManagementClientError(ERROR_CODE_LOCAL_CLAIM_NOT_FOUND, NOT_FOUND, claimId); } - return getLocalClaimResDTO(localClaim); + LocalClaimResDTO result = getLocalClaimResDTO(localClaim); + if (LOG.isDebugEnabled()) { + LOG.debug("Successfully retrieved local claim: " + result.getClaimURI()); + } + return result; } catch (ClaimMetadataException e) { throw handleClaimManagementException(e, ERROR_CODE_ERROR_RETRIEVING_LOCAL_CLAIM, claimId); @@ -462,6 +519,11 @@ public LocalClaimResDTO getLocalClaim(String claimId) { public List getLocalClaims(Boolean excludeIdentityClaims, String attributes, Integer limit, Integer offset, String filter, String sort) { + if (LOG.isDebugEnabled()) { + LOG.debug("Retrieving local claims - excludeIdentity: " + excludeIdentityClaims + ", attributes: " + + attributes + ", limit: " + limit + ", offset: " + offset); + } + return getLocalClaims(excludeIdentityClaims, attributes, limit, offset, filter, sort, false, null); } @@ -521,6 +583,10 @@ public List getLocalClaims(Boolean excludeIdentityClaims, Stri */ public void updateLocalClaim(String claimId, LocalClaimReqDTO localClaimReqDTO) { + if (LOG.isDebugEnabled()) { + LOG.debug("Updating local claim with ID: " + claimId + ", URI: " + + localClaimReqDTO.getClaimURI()); + } try { if (isSubOrganizationContext()) { /* @@ -552,6 +618,7 @@ public void updateLocalClaim(String claimId, LocalClaimReqDTO localClaimReqDTO) } catch (UserStoreException e) { throw handleException(e, ERROR_CODE_ERROR_ADDING_LOCAL_CLAIM, localClaimReqDTO.getClaimURI()); } + LOG.info("Successfully updated local claim with ID: " + claimId); getResourceId(localClaimReqDTO.getClaimURI()); } @@ -711,7 +778,9 @@ public FileContent exportClaimDialectToFile(String dialectId, String fileType) { claimResDTOList.addAll(externalClaimResDTOList); dialectConfiguration.setClaims(claimResDTOList); } - return generateFileFromModel(fileType, dialectConfiguration); + FileContent result = generateFileFromModel(fileType, dialectConfiguration); + LOG.info("Successfully exported claim dialect to " + fileType + " file for ID: " + dialectId); + return result; } catch (ClaimMetadataException e) { throw handleClaimManagementException(e, ERROR_CODE_ERROR_RETRIEVING_DIALECT, dialectId); } @@ -808,6 +877,10 @@ private FileContent parseClaimDialectToYaml(ClaimDialectConfiguration dialectCon */ public String addExternalClaim(String dialectId, ExternalClaimReqDTO externalClaimReqDTO) { + if (LOG.isDebugEnabled()) { + LOG.debug("Adding external claim for dialect " + dialectId + ": " + + externalClaimReqDTO.getClaimURI()); + } try { validateClaimModificationEligibility(); if (!isDialectExists(dialectId)) { @@ -820,8 +893,11 @@ public String addExternalClaim(String dialectId, ExternalClaimReqDTO externalCla throw handleClaimManagementException(e, ERROR_CODE_ERROR_ADDING_EXTERNAL_CLAIM, externalClaimReqDTO.getClaimURI()); } - - return getResourceId(externalClaimReqDTO.getClaimURI()); + + String resourceId = getResourceId(externalClaimReqDTO.getClaimURI()); + LOG.info("Successfully added external claim: " + externalClaimReqDTO.getClaimURI() + + " for dialect: " + dialectId); + return resourceId; } /** @@ -832,6 +908,9 @@ public String addExternalClaim(String dialectId, ExternalClaimReqDTO externalCla */ public void deleteExternalClaim(String dialectId, String claimId) { + if (LOG.isDebugEnabled()) { + LOG.debug("Deleting external claim " + claimId + " from dialect: " + dialectId); + } String externalClaimURI; String externalClaimDialectURI; try { @@ -840,6 +919,10 @@ public void deleteExternalClaim(String dialectId, String claimId) { externalClaimDialectURI = base64DecodeId(dialectId); } catch (Exception ignored) { // Ignoring the delete operation and return 204 response code, since the resource does not exist. + if (LOG.isDebugEnabled()) { + LOG.debug("External claim not found or invalid ID, ignoring delete: " + claimId + + " from dialect: " + dialectId); + } return; } @@ -849,7 +932,8 @@ public void deleteExternalClaim(String dialectId, String claimId) { } catch (ClaimMetadataException e) { throw handleClaimManagementException(e, ERROR_CODE_ERROR_DELETING_EXTERNAL_CLAIM, claimId); } - + + LOG.info("Successfully deleted external claim " + claimId + " from dialect: " + dialectId); } /** @@ -861,12 +945,18 @@ public void deleteExternalClaim(String dialectId, String claimId) { */ public ExternalClaimResDTO getExternalClaim(String dialectId, String claimId) { + if (LOG.isDebugEnabled()) { + LOG.debug("Retrieving external claim " + claimId + " from dialect: " + dialectId); + } try { List externalClaimList = claimMetadataManagementService.getExternalClaims( base64DecodeId(dialectId), ContextLoader.getTenantDomainFromContext()); if (CollectionUtils.isEmpty(externalClaimList)) { + if (LOG.isDebugEnabled()) { + LOG.debug("No external claims found for dialect: " + dialectId); + } throw handleClaimManagementClientError(ERROR_CODE_CLAIMS_NOT_FOUND_FOR_DIALECT, NOT_FOUND, dialectId); } @@ -928,6 +1018,10 @@ public List getExternalClaims(String dialectId, Integer lim */ public void updateExternalClaim(String dialectId, String claimId, ExternalClaimReqDTO externalClaimReqDTO) { + if (LOG.isDebugEnabled()) { + LOG.debug("Updating external claim " + claimId + " in dialect " + dialectId + " with URI: " + + externalClaimReqDTO.getClaimURI()); + } try { validateClaimModificationEligibility(); if (!StringUtils.equals(base64DecodeId(claimId), externalClaimReqDTO.getClaimURI())) { @@ -939,6 +1033,7 @@ public void updateExternalClaim(String dialectId, String claimId, ExternalClaimR } catch (ClaimMetadataException e) { throw handleClaimManagementException(e, ERROR_CODE_ERROR_UPDATING_EXTERNAL_CLAIM, claimId, dialectId); } + LOG.info("Successfully updated external claim " + claimId + " in dialect: " + dialectId); getResourceId(externalClaimReqDTO.getClaimURI()); } @@ -1396,7 +1491,8 @@ public String importClaimDialectFromFile(InputStream fileInputStream, Attachment String dialectURI = addClaimDialect(dialectConfiguration.getClaimDialectReqDTO()); importExternalClaims(dialectURI, externalClaimReqDTOList); - + + LOG.info("Successfully imported claim dialect from file: " + fileDetail.getDataHandler().getName()); return dialectId; } catch (ClaimMetadataException e) { throw handleClaimManagementException(e, Constant.ErrorMessage.ERROR_CODE_ERROR_IMPORTING_CLAIM_DIALECT); @@ -1417,8 +1513,12 @@ private void importExternalClaims(String dialectID, List ex } } if (!errors.isEmpty()) { + LOG.warn("Failed to import " + errors.size() + " out of " + externalClaimReqDTOList.size() + + " external claims"); throw handleClaimManagementBulkClientError(Constant.ErrorMessage.ERROR_CODE_IMPORTING_EXTERNAL_CLAIMS, BAD_REQUEST, errors, String.valueOf(errors.size()), String.valueOf(externalClaimReqDTOList.size())); + } else { + LOG.info("Successfully imported all " + externalClaimReqDTOList.size() + " external claims"); } } @@ -1761,6 +1861,10 @@ private List mapToProperties(Map propMap) { private void validateAttributeMappings(List attributeMappingDTOList) throws UserStoreException { + if (LOG.isDebugEnabled()) { + LOG.debug("Validating attribute mappings, count: " + + (attributeMappingDTOList != null ? attributeMappingDTOList.size() : 0)); + } if (attributeMappingDTOList == null) { throw handleClaimManagementClientError(ERROR_CODE_EMPTY_ATTRIBUTE_MAPPINGS, BAD_REQUEST); } @@ -1786,6 +1890,9 @@ private void validateAttributeMappings(List attributeMappin private void validateClaimModificationEligibility() throws ClaimMetadataClientException { String tenantDomain = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantDomain(); + if (LOG.isDebugEnabled()) { + LOG.debug("Validating claim modification eligibility for tenant: " + tenantDomain); + } try { String organizationId = organizationManager.resolveOrganizationId(tenantDomain); boolean isPrimaryOrg = organizationManager.isPrimaryOrganization(organizationId); diff --git a/components/org.wso2.carbon.identity.api.server.claim.management/org.wso2.carbon.identity.rest.api.server.claim.management.v1/src/main/java/org/wso2/carbon/identity/rest/api/server/claim/management/v1/factories/ServerClaimManagementServiceFactory.java b/components/org.wso2.carbon.identity.api.server.claim.management/org.wso2.carbon.identity.rest.api.server.claim.management.v1/src/main/java/org/wso2/carbon/identity/rest/api/server/claim/management/v1/factories/ServerClaimManagementServiceFactory.java index 94dd0ed69b..65ebe28be6 100644 --- a/components/org.wso2.carbon.identity.api.server.claim.management/org.wso2.carbon.identity.rest.api.server.claim.management.v1/src/main/java/org/wso2/carbon/identity/rest/api/server/claim/management/v1/factories/ServerClaimManagementServiceFactory.java +++ b/components/org.wso2.carbon.identity.api.server.claim.management/org.wso2.carbon.identity.rest.api.server.claim.management.v1/src/main/java/org/wso2/carbon/identity/rest/api/server/claim/management/v1/factories/ServerClaimManagementServiceFactory.java @@ -18,6 +18,8 @@ package org.wso2.carbon.identity.rest.api.server.claim.management.v1.factories; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.wso2.carbon.identity.api.server.claim.management.common.ClaimManagementDataHolder; import org.wso2.carbon.identity.claim.metadata.mgt.ClaimMetadataManagementService; import org.wso2.carbon.identity.organization.management.service.OrganizationManager; @@ -28,22 +30,29 @@ */ public class ServerClaimManagementServiceFactory { + private static final Log LOG = LogFactory.getLog(ServerClaimManagementServiceFactory.class); private static final ServerClaimManagementService SERVICE; static { + if (LOG.isDebugEnabled()) { + LOG.debug("Initializing ServerClaimManagementService factory"); + } ClaimMetadataManagementService claimMetadataManagementService = ClaimManagementDataHolder .getClaimMetadataManagementService(); OrganizationManager organizationManager = ClaimManagementDataHolder.getOrganizationManager(); if (claimMetadataManagementService == null) { + LOG.error("ClaimMetadataManagementService is not available from OSGi context"); throw new IllegalStateException("ClaimMetadataManagementService is not available from OSGi context."); } if (organizationManager == null) { + LOG.error("OrganizationManager is not available from OSGi context"); throw new IllegalStateException("OrganizationManager is not available from OSGi context."); } SERVICE = new ServerClaimManagementService(claimMetadataManagementService, organizationManager); + LOG.info("ServerClaimManagementService factory initialized successfully"); } /** diff --git a/components/org.wso2.carbon.identity.api.server.claim.management/org.wso2.carbon.identity.rest.api.server.claim.management.v1/src/main/java/org/wso2/carbon/identity/rest/api/server/claim/management/v1/impl/ClaimManagementApiServiceImpl.java b/components/org.wso2.carbon.identity.api.server.claim.management/org.wso2.carbon.identity.rest.api.server.claim.management.v1/src/main/java/org/wso2/carbon/identity/rest/api/server/claim/management/v1/impl/ClaimManagementApiServiceImpl.java index bbcbeeb038..3d0937c785 100644 --- a/components/org.wso2.carbon.identity.api.server.claim.management/org.wso2.carbon.identity.rest.api.server.claim.management.v1/src/main/java/org/wso2/carbon/identity/rest/api/server/claim/management/v1/impl/ClaimManagementApiServiceImpl.java +++ b/components/org.wso2.carbon.identity.api.server.claim.management/org.wso2.carbon.identity.rest.api.server.claim.management.v1/src/main/java/org/wso2/carbon/identity/rest/api/server/claim/management/v1/impl/ClaimManagementApiServiceImpl.java @@ -18,6 +18,8 @@ package org.wso2.carbon.identity.rest.api.server.claim.management.v1.impl; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.apache.cxf.jaxrs.ext.multipart.Attachment; import org.apache.http.HttpHeaders; import org.wso2.carbon.identity.api.server.common.FileContent; @@ -45,6 +47,7 @@ */ public class ClaimManagementApiServiceImpl extends ClaimManagementApiService { + private static final Log LOG = LogFactory.getLog(ClaimManagementApiServiceImpl.class); private static final String HTTP_HEADER_CONTENT_DISPOSITION = "Content-Disposition"; private final ServerClaimManagementService claimManagementService; @@ -52,8 +55,12 @@ public class ClaimManagementApiServiceImpl extends ClaimManagementApiService { public ClaimManagementApiServiceImpl() { try { + if (LOG.isDebugEnabled()) { + LOG.debug("Initializing ClaimManagementApiServiceImpl"); + } claimManagementService = ServerClaimManagementServiceFactory.getServerClaimManagementService(); } catch (Exception e) { + LOG.error("Error occurred while initiating claim management services", e); throw new RuntimeException("Error occurred while initiating claim management services.", e); } } @@ -61,6 +68,15 @@ public ClaimManagementApiServiceImpl() { @Override public Response addClaimDialect(ClaimDialectReqDTO claimDialect) { + if (claimDialect == null) { + if (LOG.isDebugEnabled()) { + LOG.debug("Null claim dialect provided for addition"); + } + throw new IllegalArgumentException("Claim dialect cannot be null"); + } + if (LOG.isDebugEnabled()) { + LOG.debug("Adding claim dialect: " + claimDialect.getDialectURI()); + } String resourceId = claimManagementService.addClaimDialect(claimDialect); return Response.created(getResourceLocation(resourceId)).build(); } @@ -68,6 +84,16 @@ public Response addClaimDialect(ClaimDialectReqDTO claimDialect) { @Override public Response addExternalClaim(String dialectId, ExternalClaimReqDTO externalClaim) { + if (externalClaim == null) { + if (LOG.isDebugEnabled()) { + LOG.debug("Null external claim provided for addition to dialect: " + dialectId); + } + throw new IllegalArgumentException("External claim cannot be null"); + } + if (LOG.isDebugEnabled()) { + LOG.debug("Adding external claim to dialect: " + dialectId + ", claim URI: " + + externalClaim.getClaimURI()); + } String resourceId = claimManagementService.addExternalClaim(dialectId, externalClaim); return Response.created(getResourceLocation(dialectId, resourceId)).build(); } @@ -75,6 +101,15 @@ public Response addExternalClaim(String dialectId, ExternalClaimReqDTO externalC @Override public Response addLocalClaim(LocalClaimReqDTO localClaim) { + if (localClaim == null) { + if (LOG.isDebugEnabled()) { + LOG.debug("Null local claim provided for addition"); + } + throw new IllegalArgumentException("Local claim cannot be null"); + } + if (LOG.isDebugEnabled()) { + LOG.debug("Adding local claim: " + localClaim.getClaimURI()); + } String resourceId = claimManagementService.addLocalClaim(localClaim); return Response.created(getResourceLocation(LOCAL_DIALECT_PATH, resourceId)).build(); } @@ -82,6 +117,15 @@ public Response addLocalClaim(LocalClaimReqDTO localClaim) { @Override public Response importClaimDialectFromFile(InputStream fileInputStream, Attachment fileDetail) { + if (fileInputStream == null || fileDetail == null) { + if (LOG.isDebugEnabled()) { + LOG.debug("Null file input stream or file detail provided for claim dialect import"); + } + throw new IllegalArgumentException("File input stream and file detail cannot be null"); + } + if (LOG.isDebugEnabled()) { + LOG.debug("Importing claim dialect from file: " + fileDetail.getContentDisposition().getFilename()); + } String resourceId = claimManagementService.importClaimDialectFromFile(fileInputStream, fileDetail); return Response.created(getResourceLocation(resourceId)).build(); } @@ -98,6 +142,9 @@ public Response updateClaimDialectFromFile(InputStream fileInputStream, Attachme @Override public Response deleteClaimDialect(String dialectId) { + if (LOG.isDebugEnabled()) { + LOG.debug("Deleting claim dialect: " + dialectId); + } claimManagementService.deleteClaimDialect(dialectId); return Response.noContent().build(); } @@ -105,6 +152,9 @@ public Response deleteClaimDialect(String dialectId) { @Override public Response deleteExternalClaim(String dialectId, String claimId) { + if (LOG.isDebugEnabled()) { + LOG.debug("Deleting external claim: " + claimId + " from dialect: " + dialectId); + } claimManagementService.deleteExternalClaim(dialectId, claimId); return Response.noContent().build(); } @@ -112,6 +162,9 @@ public Response deleteExternalClaim(String dialectId, String claimId) { @Override public Response deleteLocalClaim(String claimId) { + if (LOG.isDebugEnabled()) { + LOG.debug("Deleting local claim: " + claimId); + } claimManagementService.deleteLocalClaim(claimId); return Response.noContent().build(); }