From 13a7bfb519c0936c88fc2485cc0a25197af6e716 Mon Sep 17 00:00:00 2001 From: amontenegro Date: Tue, 3 Mar 2026 16:16:41 -0600 Subject: [PATCH 01/77] Initial set of changes, nothing works --- orcid-api-web/pom.xml | 6 +- orcid-core/pom.xml | 4 - .../oauth/OrcidOauth2TokenDetailService.java | 83 --- .../service/OrcidAuthorizationEndpoint.java | 173 ------ .../service/OrcidOAuth2RequestValidator.java | 118 ---- .../OrcidOauth2TokenDetailServiceImpl.java | 281 --------- .../core/oauth/service/OrcidTokenStore.java | 30 - .../service/OrcidTokenStoreServiceImpl.java | 560 ------------------ .../src/main/resources/orcid-core-context.xml | 46 +- orcid-persistence/pom.xml | 6 +- .../jpa/entities/ClientDetailsEntity.java | 32 +- orcid-pub-web/pom.xml | 4 - orcid-web/pom.xml | 4 - .../web/controllers/OpenIDController.java | 7 +- .../resources/orcid-core-context-spam.xml | 32 +- pom.xml | 7 - 16 files changed, 13 insertions(+), 1380 deletions(-) delete mode 100644 orcid-core/src/main/java/org/orcid/core/oauth/OrcidOauth2TokenDetailService.java delete mode 100644 orcid-core/src/main/java/org/orcid/core/oauth/service/OrcidAuthorizationEndpoint.java delete mode 100644 orcid-core/src/main/java/org/orcid/core/oauth/service/OrcidOAuth2RequestValidator.java delete mode 100644 orcid-core/src/main/java/org/orcid/core/oauth/service/OrcidOauth2TokenDetailServiceImpl.java delete mode 100644 orcid-core/src/main/java/org/orcid/core/oauth/service/OrcidTokenStore.java delete mode 100644 orcid-core/src/main/java/org/orcid/core/oauth/service/OrcidTokenStoreServiceImpl.java diff --git a/orcid-api-web/pom.xml b/orcid-api-web/pom.xml index 5a3cdfcf8f0..7f0c9be7db7 100644 --- a/orcid-api-web/pom.xml +++ b/orcid-api-web/pom.xml @@ -38,11 +38,7 @@ org.springframework.security spring-security-web - - org.springframework.security.oauth - spring-security-oauth2 - - + ${project.groupId} diff --git a/orcid-core/pom.xml b/orcid-core/pom.xml index c5163a6ac6a..2971359b4ce 100644 --- a/orcid-core/pom.xml +++ b/orcid-core/pom.xml @@ -79,10 +79,6 @@ org.springframework spring-jdbc - - org.springframework.security.oauth - spring-security-oauth2 - org.freemarker freemarker diff --git a/orcid-core/src/main/java/org/orcid/core/oauth/OrcidOauth2TokenDetailService.java b/orcid-core/src/main/java/org/orcid/core/oauth/OrcidOauth2TokenDetailService.java deleted file mode 100644 index a26fbe676c5..00000000000 --- a/orcid-core/src/main/java/org/orcid/core/oauth/OrcidOauth2TokenDetailService.java +++ /dev/null @@ -1,83 +0,0 @@ -package org.orcid.core.oauth; - -import java.util.List; -import java.util.Set; - -import org.orcid.core.constants.RevokeReason; -import org.orcid.persistence.dao.OrcidOauth2TokenDetailDao; -import org.orcid.persistence.jpa.entities.OrcidOauth2TokenDetail; - -/** - * @author Declan Newman (declan) Date: 19/04/2012 - */ -public interface OrcidOauth2TokenDetailService { - - void setOrcidOauth2TokenDetailDao(OrcidOauth2TokenDetailDao orcidOauth2TokenDetailDao); - - OrcidOauth2TokenDetail findNonDisabledByTokenValue(String token); - - OrcidOauth2TokenDetail findIgnoringDisabledByTokenValue(String token); - - OrcidOauth2TokenDetail findByRefreshTokenValue(String refreshTokenValue); - - void removeByRefreshTokenValue(String refreshToken); - - List findByAuthenticationKey(String authKey); - - List findByUserName(String userName); - - List findByClientId(String clientId); - - List findByClientIdAndUserName(String clientId, String userName); - - boolean doesClientKnowUser(String clientId, String userName); - - /** - * This should NOT delete the row, but merely set it as disabled - * - * @param accessToken - * the value to use to identify the row containing the access - * token - */ - void disableAccessToken(String accessToken); - - /** - * This should NOT delete the row, but merely set it as disabled and store the revoke date - * - * @param accessToken - * the value to use to identify the row containing the access - * token - */ - void revokeAccessToken(String accessToken); - - void disableAccessTokenByRefreshToken(String refreshTokenValue); - - /** - * This should NOT delete the row, but merely set it as disabled - * - * @param tokenId - * the id of the token that should be disabled - * @param userOrcid - * the id of the user owner of the token - */ - void disableAccessToken(Long tokenId, String userOrcid); - - void createNew(OrcidOauth2TokenDetail detail); - - boolean hasToken(String userName, long lastModified); - - int disableAccessTokenByCodeAndClient(String authorizationCode, String clientID, RevokeReason reason); - - /** - * This should NOT delete the row, but merely set it as disabled - * - * @param userOrcid - * the id of the user owner of the token - */ - void disableAccessTokenByUserOrcid(String userOrcid, RevokeReason reason); - - void disableClientAccess(String clientDetailsId, String userOrcid); - - boolean updateScopes(String acessToken, Set newScopes); - -} diff --git a/orcid-core/src/main/java/org/orcid/core/oauth/service/OrcidAuthorizationEndpoint.java b/orcid-core/src/main/java/org/orcid/core/oauth/service/OrcidAuthorizationEndpoint.java deleted file mode 100644 index e586c118a79..00000000000 --- a/orcid-core/src/main/java/org/orcid/core/oauth/service/OrcidAuthorizationEndpoint.java +++ /dev/null @@ -1,173 +0,0 @@ -package org.orcid.core.oauth.service; - -import java.net.URI; -import java.net.URISyntaxException; -import java.security.Principal; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -import org.apache.commons.lang3.StringUtils; -import org.orcid.core.constants.OrcidOauth2Constants; -import org.orcid.core.oauth.service.OrcidOAuth2RequestValidator.OpenIDConnectScopesToIgnore; -import org.orcid.jaxb.model.message.ScopePathType; -import org.springframework.security.oauth2.common.exceptions.ClientAuthenticationException; -import org.springframework.security.oauth2.common.exceptions.InvalidScopeException; -import org.springframework.security.oauth2.common.exceptions.OAuth2Exception; -import org.springframework.security.oauth2.common.exceptions.RedirectMismatchException; -import org.springframework.security.oauth2.common.util.OAuth2Utils; -import org.springframework.security.oauth2.provider.ClientDetails; -import org.springframework.security.oauth2.provider.endpoint.AuthorizationEndpoint; -import org.springframework.web.HttpSessionRequiredException; -import org.springframework.web.bind.annotation.ExceptionHandler; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.support.SessionStatus; -import org.springframework.web.context.request.ServletWebRequest; -import org.springframework.web.servlet.ModelAndView; -import org.springframework.web.servlet.view.RedirectView; - -@RequestMapping(value = "/oauth/authorize") -public class OrcidAuthorizationEndpoint extends AuthorizationEndpoint { - - private String redirectUriError = "forward:/oauth/error/redirect-uri-mismatch"; - private String oauthError = "forward:/oauth/error"; - private OrcidOAuth2RequestValidator orcidOAuth2RequestValidator; - - @Override - @ExceptionHandler(HttpSessionRequiredException.class) - public ModelAndView handleHttpSessionRequiredException(HttpSessionRequiredException e, ServletWebRequest webRequest) throws Exception { - return new ModelAndView("redirect:" + buildRedirectUri(webRequest).toString()); - } - - @Override - @ExceptionHandler(OAuth2Exception.class) - public ModelAndView handleOAuth2Exception(OAuth2Exception e, ServletWebRequest webRequest) throws Exception { - logger.info("Handling OAuth2 error: " + e.getSummary()); - if (e instanceof RedirectMismatchException) { - return new ModelAndView(redirectUriError); - } else if (e instanceof ClientAuthenticationException) { - return new ModelAndView(oauthError); - } - - return super.handleOAuth2Exception(e, webRequest); - } - - @Override - @RequestMapping - public ModelAndView authorize(Map model, - @RequestParam Map requestParameters, SessionStatus sessionStatus, Principal principal) { - try { - modifyRequestParameters(requestParameters); - } catch (InvalidScopeException ise) { - String redirectUri = requestParameters.get("redirect_uri"); - String redirectUriWithParams = ""; - if(redirectUri != null) { - redirectUriWithParams = redirectUri; - } - redirectUriWithParams += "?error=invalid_scope&error_description=" + ise.getMessage(); - RedirectView rView = new RedirectView(redirectUriWithParams); - - ModelAndView error = new ModelAndView(); - error.setView(rView); - return error; - } - return super.authorize(model, requestParameters, sessionStatus, principal); - } - - private void modifyRequestParameters(Map requestParameters) throws InvalidScopeException { - for (Map.Entry entry : requestParameters.entrySet()) { - requestParameters.put(entry.getKey(), entry.getValue().trim()); - } - String scopes = requestParameters.get(OAuth2Utils.SCOPE); - if (scopes != null) { - requestParameters.put(OAuth2Utils.SCOPE, trimClientCredentialScopes(scopes.trim().replaceAll(" +", " "))); - } - // if we have an id_token response_type but no token scope, add it in. - // this is because spring can't cope without the 'token' response type. - if(isOpenIdWithTokenResponseType(requestParameters.get(OAuth2Utils.SCOPE), requestParameters.get(OAuth2Utils.RESPONSE_TYPE))) { - requestParameters.put(OAuth2Utils.RESPONSE_TYPE, "id_token token"); - } - } - - /** - * Validate if the given client have the defined scope - * @param scopes a space or comma separated list of scopes - * @param clientDetails - * @param responseType - * @throws InvalidScopeException in case the given client doesnt have any of the given scopes - * */ - public void validateScope(String scopes, ClientDetails clientDetails, String responseType) throws InvalidScopeException { - Map parameters = new HashMap(); - parameters.put(OAuth2Utils.SCOPE, scopes); - - //Check the user have permissions to the other scopes - orcidOAuth2RequestValidator.validateParameters(parameters, clientDetails,responseType); - } - - private URI buildRedirectUri(ServletWebRequest webRequest) throws URISyntaxException { - String[] referers = webRequest.getHeaderValues("referer"); - if (referers != null && referers.length > 0) { - return new URI(referers[0]); - } - String uri = "/session-expired"; - String contextPath = webRequest.getContextPath(); - if (contextPath != null) { - uri = contextPath + uri; - } - return new URI(uri); - } - - private String trimClientCredentialScopes(String scopes) throws InvalidScopeException { - String result = scopes; - for (String scope : OAuth2Utils.parseParameterList(scopes)) { - if (StringUtils.isNotBlank(scope)) { - if (OpenIDConnectScopesToIgnore.contains(scope)) {//remove openid connect scopes we do not support. - result = result.replaceAll(scope, ""); - continue; - } - ScopePathType scopeType = null; - try { - scopeType = ScopePathType.fromValue(scope); - } catch (Exception e) { - throw new InvalidScopeException("Invalid scope: " + scope); - } - if (scopeType.isClientCreditalScope()) { - if (result.contains(ScopePathType.ORCID_PROFILE_CREATE.getContent())) - result = result.replaceAll(ScopePathType.ORCID_PROFILE_CREATE.getContent(), ""); - else if (result.contains(ScopePathType.READ_PUBLIC.getContent())) - result = result.replaceAll(ScopePathType.READ_PUBLIC.getContent(), ""); - else if (result.contains(ScopePathType.WEBHOOK.getContent())) - result = result.replaceAll(ScopePathType.WEBHOOK.getContent(), ""); - } - } - } - - return result; - } - - public OrcidOAuth2RequestValidator getOrcidOAuth2RequestValidator() { - return orcidOAuth2RequestValidator; - } - - public void setOrcidOAuth2RequestValidator(OrcidOAuth2RequestValidator orcidOAuth2RequestValidator) { - this.orcidOAuth2RequestValidator = orcidOAuth2RequestValidator; - } - - public boolean isOpenIdWithTokenResponseType(String scopes, String responseTypes) { - // if we have an id_token response_type but no token scope, add it in. - // this is because spring can't cope without the 'token' response type. - List scopesList = Arrays.stream(scopes.split("\\s+")).map(String::trim).collect(Collectors.toList()); - boolean isOpenId = scopesList.contains(ScopePathType.OPENID.value()); - if (isOpenId && responseTypes != null) { - List responseTypeList = Arrays.stream(responseTypes.split("\\s+")).collect(Collectors.toList()); - if (responseTypeList != null - && (responseTypeList.contains(OrcidOauth2Constants.ID_TOKEN) || responseTypeList.contains(OrcidOauth2Constants.IMPLICIT_TOKEN_RESPONSE_TYPE))) { - return true; - } - } - return false; - } -} diff --git a/orcid-core/src/main/java/org/orcid/core/oauth/service/OrcidOAuth2RequestValidator.java b/orcid-core/src/main/java/org/orcid/core/oauth/service/OrcidOAuth2RequestValidator.java deleted file mode 100644 index 565a82e6683..00000000000 --- a/orcid-core/src/main/java/org/orcid/core/oauth/service/OrcidOAuth2RequestValidator.java +++ /dev/null @@ -1,118 +0,0 @@ -package org.orcid.core.oauth.service; - -import java.util.Map; -import java.util.Set; - -import org.orcid.core.exception.ClientDeactivatedException; -import org.orcid.core.exception.LockedException; -import org.orcid.core.manager.ProfileEntityCacheManager; -import org.orcid.jaxb.model.message.ScopePathType; -import org.orcid.persistence.jpa.entities.ClientDetailsEntity; -import org.orcid.persistence.jpa.entities.ProfileEntity; -import org.springframework.security.oauth2.common.exceptions.InvalidScopeException; -import org.springframework.security.oauth2.common.util.OAuth2Utils; -import org.springframework.security.oauth2.provider.AuthorizationRequest; -import org.springframework.security.oauth2.provider.ClientDetails; -import org.springframework.security.oauth2.provider.TokenRequest; -import org.springframework.security.oauth2.provider.request.DefaultOAuth2RequestValidator; - -public class OrcidOAuth2RequestValidator extends DefaultOAuth2RequestValidator { - - public static enum ImplicitScopes { - OPENID("openid"), AUTHENTICATE("/authenticate"); - private String value; - ImplicitScopes(String v){ - value=v; - } - public static boolean isValid(Set test) { - for (String t : test){ - boolean found = false; - for (ImplicitScopes scope : ImplicitScopes.values()) { - if (scope.value.equals(t)) { - found = true; - } - } - if (!found) - return false; - } - return true; - } - public String toString(){ - return value; - } - }; - - public static enum OpenIDConnectScopesToIgnore { - PROFILE("profile"), EMAIL("email"), ADDRESS("address"), PHONE("phone"), OFFLINE_ACCESS("offline_access"); - private String value; - OpenIDConnectScopesToIgnore(String v){ - value = v; - } - public static boolean contains(String test) { - for (OpenIDConnectScopesToIgnore scope : OpenIDConnectScopesToIgnore.values()) { - if (scope.value.equals(test)) { - return true; - } - } - return false; - } - public String toString(){ - return value; - } - } - - private ProfileEntityCacheManager profileEntityCacheManager; - - public OrcidOAuth2RequestValidator(ProfileEntityCacheManager profileEntityCacheManager) { - this.profileEntityCacheManager = profileEntityCacheManager; - } - - //called by spring AuthorizationEndpoint using unmodified parameter map - //also called by LoginController before login. - public void validateParameters(Map parameters, ClientDetails clientDetails, String responseType) { - if (parameters.containsKey("scope")) { - if (clientDetails.isScoped()) { - Set validScope = clientDetails.getScope(); - for (String scope : OAuth2Utils.parseParameterList(parameters.get("scope"))) { - if (OpenIDConnectScopesToIgnore.contains(scope)) {//ignore openid scopes - continue; - } - ScopePathType scopeType = null; - try { - scopeType = ScopePathType.fromValue(scope); - } catch(Exception e) { - throw new InvalidScopeException("Invalid scope: " + scope); - } - if (scopeType.isClientCreditalScope()) - throw new InvalidScopeException("Invalid scope: " + scope); - if (!validScope.contains(scope)) - throw new InvalidScopeException("Invalid scope: " + scope); - } - } - } - } - - public void validateClientIsEnabled(ClientDetailsEntity clientDetails) throws LockedException { - ProfileEntity memberEntity = profileEntityCacheManager.retrieve(clientDetails.getGroupProfileId()); - //If it is locked - if(!memberEntity.isAccountNonLocked()) { - throw new LockedException("The client is locked"); - } - - if (clientDetails.getDeactivatedDate() != null) { - throw new ClientDeactivatedException(clientDetails.getClientId()); - } - } - - //included for clarity - @Override - public void validateScope(AuthorizationRequest authorizationRequest, ClientDetails client) throws InvalidScopeException { - super.validateScope(authorizationRequest, client); - } - - @Override - public void validateScope(TokenRequest tokenRequest, ClientDetails client) throws InvalidScopeException { - super.validateScope(tokenRequest, client); - } - -} diff --git a/orcid-core/src/main/java/org/orcid/core/oauth/service/OrcidOauth2TokenDetailServiceImpl.java b/orcid-core/src/main/java/org/orcid/core/oauth/service/OrcidOauth2TokenDetailServiceImpl.java deleted file mode 100644 index 5b1cbc6c4cb..00000000000 --- a/orcid-core/src/main/java/org/orcid/core/oauth/service/OrcidOauth2TokenDetailServiceImpl.java +++ /dev/null @@ -1,281 +0,0 @@ -package org.orcid.core.oauth.service; - -import java.util.Arrays; -import java.util.Date; -import java.util.List; -import java.util.Set; - -import javax.annotation.Resource; -import javax.persistence.NoResultException; - -import org.apache.commons.lang3.StringUtils; -import org.orcid.core.constants.RevokeReason; -import org.orcid.core.oauth.OrcidOauth2TokenDetailService; -import org.orcid.core.utils.cache.redis.RedisClient; -import org.orcid.jaxb.model.message.ScopePathType; -import org.orcid.persistence.dao.OrcidOauth2TokenDetailDao; -import org.orcid.persistence.jpa.entities.OrcidOauth2TokenDetail; -import org.orcid.pojo.ajaxForm.PojoUtil; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.cache.annotation.Cacheable; -import org.springframework.security.oauth2.common.util.OAuth2Utils; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -/** - * @author Declan Newman (declan) Date: 19/04/2012 - */ -@Service -public class OrcidOauth2TokenDetailServiceImpl implements OrcidOauth2TokenDetailService { - - private static final Logger LOGGER = LoggerFactory.getLogger(OrcidOauth2TokenDetailServiceImpl.class); - - @Resource(name="orcidOauth2TokenDetailDao") - private OrcidOauth2TokenDetailDao orcidOauth2TokenDetailDao; - - @Resource(name="orcidOauth2TokenDetailDaoReadOnly") - private OrcidOauth2TokenDetailDao orcidOauth2TokenDetailDaoReadOnly; - - @Resource - private RedisClient redisClient; - - @Value("${org.orcid.core.utils.cache.redis.enabled:true}") - private boolean isTokenCacheEnabled; - - @Override - public void setOrcidOauth2TokenDetailDao(OrcidOauth2TokenDetailDao orcidOauth2TokenDetailDao) { - this.orcidOauth2TokenDetailDao = orcidOauth2TokenDetailDao; - } - - @Override - public OrcidOauth2TokenDetail findNonDisabledByTokenValue(String token) { - if(StringUtils.isBlank(token)) { - return null; - } - try { - return orcidOauth2TokenDetailDaoReadOnly.findNonDisabledByTokenValue(token); - } catch (NoResultException e) { - LOGGER.debug("No token found for token value {}", e, token); - return null; - } - } - - @Override - public OrcidOauth2TokenDetail findIgnoringDisabledByTokenValue(String token) { - try { - return orcidOauth2TokenDetailDaoReadOnly.findByTokenValue(token); - } catch (NoResultException e) { - LOGGER.debug("No token found for token value {}", e, token); - return null; - } - } - - @Override - public OrcidOauth2TokenDetail findByRefreshTokenValue(String refreshTokenValue) { - try { - return orcidOauth2TokenDetailDaoReadOnly.findByRefreshTokenValue(refreshTokenValue); - } catch (NoResultException e) { - LOGGER.debug("No token found for refresh token value {}", e, refreshTokenValue); - return null; - } - } - - @Override - @Transactional - public void removeByRefreshTokenValue(String refreshToken) { - orcidOauth2TokenDetailDao.removeByRefreshTokenValue(refreshToken); - } - - @Override - public List findByAuthenticationKey(String authKey) { - try { - return orcidOauth2TokenDetailDaoReadOnly.findByAuthenticationKey(authKey); - } catch (NoResultException e) { - LOGGER.debug("No token found for auth token {}", e, authKey); - return null; - } - } - - @Override - public List findByUserName(String userName) { - try { - return orcidOauth2TokenDetailDaoReadOnly.findByUserName(userName); - } catch (NoResultException e) { - LOGGER.debug("No token found for username {}", e, userName); - return null; - } - } - - @Override - @Cacheable(value = "count-tokens", key = "#userName.concat('-').concat(#lastModified)") - public boolean hasToken(String userName, long lastModified) { - return orcidOauth2TokenDetailDaoReadOnly.hasToken(userName); - } - - @Override - public List findByClientId(String clientId) { - try { - return orcidOauth2TokenDetailDaoReadOnly.findByClientId(clientId); - } catch (NoResultException e) { - LOGGER.debug("No token found for client id {}", e, clientId); - return null; - } - } - - /** - * This should NOT delete the row, but merely set it as disabled - * - * @param accessToken - * the value to use to identify the row containing the access - * token - */ - @Override - @Transactional - public void disableAccessToken(String accessToken) { - orcidOauth2TokenDetailDao.disableAccessToken(accessToken); - } - - @Override - @Transactional - public void revokeAccessToken(String accessToken) { - // Remove the token from the cache - if(isTokenCacheEnabled) { - redisClient.remove(accessToken); - } - // Revoke the token - orcidOauth2TokenDetailDao.revokeAccessToken(accessToken); - } - - /** - * This should NOT delete the row, but merely set it as disabled - * - * @param tokenId - * the id of the token that should be disabled - * @param userOrcid - * the id of the user owner of the token - */ - @Override - @Transactional - public void disableAccessToken(Long tokenId, String userOrcid) { - if(PojoUtil.isEmpty(userOrcid) || tokenId == null) { - throw new IllegalArgumentException("One of the provided params is empty: userOrcid='" + userOrcid + "' tokenId='" + String.valueOf(tokenId) + "'"); - } - - //Iterate over all tokens that belongs to this user and client, to remove all the ones that have the same scopes - OrcidOauth2TokenDetail tokenToDisable = orcidOauth2TokenDetailDaoReadOnly.find(tokenId); - String scopesToDisableString = tokenToDisable.getScope(); - Set scopesToDisable = ScopePathType.getScopesFromSpaceSeparatedString(scopesToDisableString); - - List allTokens = orcidOauth2TokenDetailDaoReadOnly.findByClientIdAndUserName(tokenToDisable.getClientDetailsId(), userOrcid); - //Iterate over all tokens and verify we disable all the ones that have the same scopes - for(OrcidOauth2TokenDetail token : allTokens) { - if(token.getTokenDisabled() == null || !token.getTokenDisabled()) { - if(!PojoUtil.isEmpty(token.getScope())) { - Set tokenScopes = ScopePathType.getScopesFromSpaceSeparatedString(token.getScope()); - if(scopesToDisable.equals(tokenScopes)) { - orcidOauth2TokenDetailDao.disableAccessTokenById(token.getId(), userOrcid); - } - } - } - } - } - - /** - * This should NOT delete the row, but merely remove the value from it - * - * @param refreshTokenValue - * the value to use to identify the row containing the access - * token - */ - @Override - @Transactional - public void disableAccessTokenByRefreshToken(String refreshTokenValue) { - orcidOauth2TokenDetailDao.disableAccessTokenByRefreshToken(refreshTokenValue); - } - - @Override - @Transactional - public void createNew(OrcidOauth2TokenDetail detail) { - orcidOauth2TokenDetailDao.persist(detail); - orcidOauth2TokenDetailDao.flush(); - } - - @Override - public List findByClientIdAndUserName(String clientId, String userName) { - try { - return orcidOauth2TokenDetailDaoReadOnly.findByClientIdAndUserName(clientId, userName); - } catch (NoResultException e) { - LOGGER.debug("No token found for client id {}", e, clientId); - return null; - } - } - - @Override - public boolean doesClientKnowUser(String clientId, String userOrcid) { - List existingTokens = orcidOauth2TokenDetailDaoReadOnly.findByClientIdAndUserName(clientId, userOrcid); - if (existingTokens == null || existingTokens.isEmpty()) { - return false; - } - Date now = new Date(); - for (OrcidOauth2TokenDetail token : existingTokens) { - if (token.getTokenExpiration() != null && token.getTokenExpiration().after(now) && (token.getTokenDisabled() == null || !token.getTokenDisabled())) { - // Verify the token have at least one of the required scopes - List scopes = Arrays.asList(ScopePathType.ACTIVITIES_UPDATE.value(), ScopePathType.AFFILIATIONS_CREATE.value(), ScopePathType.AFFILIATIONS_UPDATE.value()); - if(!PojoUtil.isEmpty(token.getScope())) { - for(String scope : token.getScope().split(" ")) { - if(scopes.contains(scope.trim())) { - return true; - } - } - } - } - } - return false; - } - - @Override - @Transactional - public int disableAccessTokenByCodeAndClient(String authorizationCode, String clientID, RevokeReason reason) { - // Find the tokens to disable - List tokensToDisable = orcidOauth2TokenDetailDao.findAccessTokenByCodeAndClient(authorizationCode, clientID); - // Remove them from the cache - for(String accessToken : tokensToDisable) { - LOGGER.info("Token {} will be disabled because auth code {} was reused", accessToken, authorizationCode); - if(isTokenCacheEnabled) { - redisClient.remove(accessToken); - } - } - // Disable them - return orcidOauth2TokenDetailDao.disableAccessTokenByCodeAndClient(authorizationCode, clientID, reason.name()); - } - - @Override - @Transactional - public void disableAccessTokenByUserOrcid(String userOrcid, RevokeReason reason) { - orcidOauth2TokenDetailDao.disableAccessTokenByUserOrcid(userOrcid, reason.name()); - } - - @Override - @Transactional - public void disableClientAccess(String clientDetailsId, String userOrcid) { - // As a security measure, remove any user tokens from the cache - List userTokens = findByUserName(userOrcid); - if(userTokens != null && !userTokens.isEmpty()) { - for(OrcidOauth2TokenDetail token : userTokens) { - if(clientDetailsId.equals(token.getClientDetailsId())) { - redisClient.remove(token.getTokenValue()); - } - } - } - // And then disable all user tokens - orcidOauth2TokenDetailDao.disableClientAccessTokensByUserOrcid(userOrcid, clientDetailsId); - } - - @Override - @Transactional - public boolean updateScopes(String acessToken, Set newScopes) { - return orcidOauth2TokenDetailDao.updateScopes(acessToken, OAuth2Utils.formatParameterList(newScopes)); - } -} diff --git a/orcid-core/src/main/java/org/orcid/core/oauth/service/OrcidTokenStore.java b/orcid-core/src/main/java/org/orcid/core/oauth/service/OrcidTokenStore.java deleted file mode 100644 index 1397e77f4e2..00000000000 --- a/orcid-core/src/main/java/org/orcid/core/oauth/service/OrcidTokenStore.java +++ /dev/null @@ -1,30 +0,0 @@ -package org.orcid.core.oauth.service; - -import java.util.Map; - -import org.orcid.core.constants.RevokeReason; -import org.orcid.persistence.jpa.entities.OrcidOauth2TokenDetail; -import org.springframework.security.oauth2.common.DefaultOAuth2AccessToken; -import org.springframework.security.oauth2.common.OAuth2AccessToken; -import org.springframework.security.oauth2.common.exceptions.InvalidTokenException; -import org.springframework.security.oauth2.provider.OAuth2Authentication; -import org.springframework.security.oauth2.provider.token.TokenStore; - -public interface OrcidTokenStore extends TokenStore { - - OrcidOauth2TokenDetail readOrcidOauth2TokenDetail(String tokenValue); - - OAuth2AccessToken readEvenDisabledAccessToken(String tokenValue); - - OAuth2Authentication readAuthenticationEvenOnDisabledTokens(String tokenValue); - - void storeRevokedAccessToken(DefaultOAuth2AccessToken token, OAuth2Authentication authentication, RevokeReason revokeReason); - - void removeAccessToken(String accessTokenValue); - - OAuth2Authentication readAuthenticationFromCachedToken(Map cachedTokenData); - - void isClientEnabled(String clientId) throws InvalidTokenException; - - String readClientId(String tokenValue); -} diff --git a/orcid-core/src/main/java/org/orcid/core/oauth/service/OrcidTokenStoreServiceImpl.java b/orcid-core/src/main/java/org/orcid/core/oauth/service/OrcidTokenStoreServiceImpl.java deleted file mode 100644 index 61eb00eec8d..00000000000 --- a/orcid-core/src/main/java/org/orcid/core/oauth/service/OrcidTokenStoreServiceImpl.java +++ /dev/null @@ -1,560 +0,0 @@ -package org.orcid.core.oauth.service; - -import java.text.ParseException; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Date; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import javax.annotation.Resource; - -import org.apache.commons.lang.StringUtils; -import org.orcid.core.constants.OrcidOauth2Constants; -import org.orcid.core.constants.RevokeReason; -import org.orcid.core.exception.ClientDeactivatedException; -import org.orcid.core.exception.LockedException; -import org.orcid.core.manager.ClientDetailsEntityCacheManager; -import org.orcid.core.manager.ProfileEntityCacheManager; -import org.orcid.core.oauth.OrcidOAuth2Authentication; -import org.orcid.core.oauth.OrcidOauth2TokenDetailService; -import org.orcid.core.oauth.OrcidOauth2UserAuthentication; -import org.orcid.persistence.jpa.entities.ClientDetailsEntity; -import org.orcid.persistence.jpa.entities.OrcidOauth2TokenDetail; -import org.orcid.persistence.jpa.entities.ProfileEntity; -import org.orcid.pojo.ajaxForm.PojoUtil; -import org.springframework.security.core.Authentication; -import org.springframework.security.oauth2.common.DefaultExpiringOAuth2RefreshToken; -import org.springframework.security.oauth2.common.DefaultOAuth2AccessToken; -import org.springframework.security.oauth2.common.DefaultOAuth2RefreshToken; -import org.springframework.security.oauth2.common.ExpiringOAuth2RefreshToken; -import org.springframework.security.oauth2.common.OAuth2AccessToken; -import org.springframework.security.oauth2.common.OAuth2RefreshToken; -import org.springframework.security.oauth2.common.exceptions.InvalidTokenException; -import org.springframework.security.oauth2.common.util.OAuth2Utils; -import org.springframework.security.oauth2.provider.AuthorizationRequest; -import org.springframework.security.oauth2.provider.OAuth2Authentication; -import org.springframework.security.oauth2.provider.OAuth2Request; -import org.springframework.security.oauth2.provider.token.AuthenticationKeyGenerator; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Propagation; -import org.springframework.transaction.annotation.Transactional; - -import com.nimbusds.jwt.SignedJWT; - -/** - * @author Declan Newman (declan) Date: 15/04/2012 - */ - -@Service("orcidTokenStore") -public class OrcidTokenStoreServiceImpl implements OrcidTokenStore { - - @Resource - private OrcidOauth2TokenDetailService orcidOauthTokenDetailService; - - @Resource(name = "profileEntityCacheManager") - ProfileEntityCacheManager profileEntityCacheManager; - - @Resource - ClientDetailsEntityCacheManager clientDetailsEntityCacheManager; - - @Resource - private OrcidOAuth2RequestValidator orcidOAuth2RequestValidator; - - @Resource - private AuthenticationKeyGenerator authenticationKeyGenerator; - - @Override - public OrcidOauth2TokenDetail readOrcidOauth2TokenDetail(String token) { - return orcidOauthTokenDetailService.findIgnoringDisabledByTokenValue(token); - } - - @Override - public String readClientId(String token) { - String clientId = null; - OrcidOauth2TokenDetail orcidTokenDetail = orcidOauthTokenDetailService.findIgnoringDisabledByTokenValue(token); - if(orcidTokenDetail != null) { - clientId = orcidTokenDetail.getClientDetailsId(); - } - return clientId; - } - - /** - * Read the authentication stored under the specified token value. - * - * @param token - * The token value under which the authentication is stored. - * @return The authentication, or null if none. - */ - @Override - @Transactional - public OAuth2Authentication readAuthentication(String token) { - OrcidOauth2TokenDetail detail = orcidOauthTokenDetailService.findNonDisabledByTokenValue(token); - return getOAuth2AuthenticationFromDetails(detail); - } - - @Override - @Transactional - public OAuth2Authentication readAuthenticationEvenOnDisabledTokens(String token) { - OrcidOauth2TokenDetail detail = orcidOauthTokenDetailService.findIgnoringDisabledByTokenValue(token); - return getOAuth2AuthenticationFromDetails(detail); - } - - @Override - @Transactional - public OAuth2Authentication readAuthentication(OAuth2AccessToken token) { - return readAuthentication(token.getValue()); - } - - @Override - public OAuth2Authentication readAuthenticationFromCachedToken(Map cachedTokenData) { - String accessTokenValue = (String) cachedTokenData.get(OrcidOauth2Constants.ACCESS_TOKEN); - long tokenExpirationTime = Long.valueOf((String) cachedTokenData.get(OrcidOauth2Constants.TOKEN_EXPIRATION_TIME)); - isTokenExpired(tokenExpirationTime, accessTokenValue); - - String clientId = (String) cachedTokenData.get(OrcidOauth2Constants.CLIENT_ID); - String scopeString = (String) cachedTokenData.get(OrcidOauth2Constants.SCOPE_PARAM); - String resourceId = (String) cachedTokenData.get(OrcidOauth2Constants.RESOURCE_IDS); - String orcid = (String) cachedTokenData.get(OrcidOauth2Constants.ORCID); - boolean approved = Boolean.valueOf((String) cachedTokenData.get(OrcidOauth2Constants.APPROVED)); - - OrcidOauth2TokenDetail tokenDetails = new OrcidOauth2TokenDetail(); - tokenDetails.setClientDetailsId(clientId); - tokenDetails.setScope(scopeString); - tokenDetails.setResourceId(resourceId); - tokenDetails.setTokenValue(accessTokenValue); - tokenDetails.setOrcid(orcid); - tokenDetails.setApproved(approved); - return getOAuth2AuthenticationFromDetails(tokenDetails); - } - - /** - * Store an access token. - * - * @param token - * The token to store. - * @param authentication - * The authentication associated with the token. - */ - @Deprecated(since = "Once the authorization server is deployed", forRemoval = true) - @Override - public void storeAccessToken(OAuth2AccessToken token, OAuth2Authentication authentication) { - OrcidOauth2TokenDetail detail = populatePropertiesFromTokenAndAuthentication(token, authentication, null); - orcidOauthTokenDetailService.createNew(detail); - // Set the token id in the additional details - token.getAdditionalInformation().put(OrcidOauth2Constants.TOKEN_ID, detail.getId()); - if(detail.getOboClientDetailsId() != null) { - token.getAdditionalInformation().put(OrcidOauth2Constants.IS_OBO_TOKEN, "true"); - } - } - - /** - * Store a revoked access token with the intention of allowing the member to use it for deleting their own activities when required - * */ - @Override - public void storeRevokedAccessToken(DefaultOAuth2AccessToken token, OAuth2Authentication authentication, RevokeReason revokeReason) { - OrcidOauth2TokenDetail detail = populatePropertiesFromTokenAndAuthentication(token, authentication, null); - detail.setTokenDisabled(true); - detail.setRevocationDate(new Date()); - if(revokeReason != null) { - detail.setRevokeReason(revokeReason.name()); - } - orcidOauthTokenDetailService.createNew(detail); - // Set the token id in the additional details - token.getAdditionalInformation().put(OrcidOauth2Constants.TOKEN_ID, detail.getId()); - } - - /** - * Read an access token from the store. - * - * @param tokenValue - * The token value. - * @return The access token to read. - */ - @Override - public OAuth2AccessToken readAccessToken(String tokenValue) { - return readAccessToken(tokenValue, false); - } - - /** - * Read an access token from the store even if they are marked as disabled. - * - * @param tokenValue - * The token value. - * @return The access token to read. - */ - @Override - public OAuth2AccessToken readEvenDisabledAccessToken(String tokenValue) { - return readAccessToken(tokenValue, true); - } - - /** - * Read an access token from the store. If `includeDisabled` is false, the - * token will not be returned if it is disabled - * - * @param tokenValue - * The token value. - * @param includeDisabled - * @return The access token to read. - */ - private OAuth2AccessToken readAccessToken(String tokenValue, boolean includeDisabled) { - if (tokenValue == null) { - return null; - } - - OrcidOauth2TokenDetail detail; - if (includeDisabled) { - detail = orcidOauthTokenDetailService.findIgnoringDisabledByTokenValue(tokenValue); - } else { - detail = orcidOauthTokenDetailService.findNonDisabledByTokenValue(tokenValue); - } - return getOauth2AccessTokenFromDetails(detail); - } - - /** - * Disable an access token from the database. - * - * @param tokenValue - * The token to remove from the database. - */ - @Override - @Transactional(propagation = Propagation.REQUIRES_NEW) - public void removeAccessToken(OAuth2AccessToken accessToken) { - orcidOauthTokenDetailService.disableAccessToken(accessToken.getValue()); - } - - /** - * Disable an access token from the database. - * - * @param tokenValue - * The token to remove from the database. - */ - @Override - @Transactional(propagation = Propagation.REQUIRES_NEW) - public void removeAccessToken(String accessTokenValue) { - orcidOauthTokenDetailService.disableAccessToken(accessTokenValue); - } - - /** - * Store the specified refresh token in the database. - * - * @param refreshToken - * The refresh token to store. - * @param authentication - * The authentication associated with the refresh token. - */ - @Override - public void storeRefreshToken(OAuth2RefreshToken refreshToken, OAuth2Authentication authentication) { - // The refresh token will be stored during the token creation. We don't - // want to create it beforehand - } - - /** - * Read a refresh token from the store. - * - * @param refreshTokenValue - * The value of the token to read. - * @return The token. - */ - @Override - public ExpiringOAuth2RefreshToken readRefreshToken(String refreshTokenValue) { - OrcidOauth2TokenDetail detail = orcidOauthTokenDetailService.findByRefreshTokenValue(refreshTokenValue); - if (detail != null && StringUtils.isNotBlank(detail.getTokenValue())) { - return new DefaultExpiringOAuth2RefreshToken(detail.getRefreshTokenValue(), detail.getRefreshTokenExpiration()); - } - return null; - } - - /** - * @param refreshTokenValue - * a refresh token value - * @return the authentication originally used to grant the refresh token - */ - @Override - public OAuth2Authentication readAuthenticationForRefreshToken(OAuth2RefreshToken refreshToken) { - OrcidOauth2TokenDetail detail = orcidOauthTokenDetailService.findByRefreshTokenValue(refreshToken.getValue()); - return getOAuth2AuthenticationFromDetails(detail); - } - - /** - * Remove a refresh token from the database. - * - * @param refreshTokenValue - * The value of the token to remove from the database. - */ - @Override - @Transactional - public void removeRefreshToken(OAuth2RefreshToken refreshToken) { - orcidOauthTokenDetailService.removeByRefreshTokenValue(refreshToken.getValue()); - } - - /** - * Remove an access token using a refresh token. This functionality is - * necessary so refresh tokens can't be used to create an unlimited number - * of access tokens. - * - * @param refreshTokenValue - * The refresh token. - */ - @Override - @Transactional - public void removeAccessTokenUsingRefreshToken(OAuth2RefreshToken refreshToken) { - orcidOauthTokenDetailService.disableAccessTokenByRefreshToken(refreshToken.getValue()); - } - - /** - * Retrieve an access token stored against the provided authentication key, - * if it exists. - * - * @param authentication - * the authentication key for the access token - * @return the access token or null if there was none - */ - @Override - public OAuth2AccessToken getAccessToken(OAuth2Authentication authentication) { - String authKey = authenticationKeyGenerator.extractKey(authentication); - List details = orcidOauthTokenDetailService.findByAuthenticationKey(authKey); - // Since we are now able to have more than one token for the combo - // user-scopes, we will need to return the oldest token, the first token - // created with these scopes - if (details != null && !details.isEmpty()) { - OrcidOauth2TokenDetail oldestToken = null; - for (OrcidOauth2TokenDetail tokenDetails : details) { - if (oldestToken == null) { - oldestToken = tokenDetails; - } else { - if (tokenDetails.getDateCreated().before(oldestToken.getDateCreated())) { - oldestToken = tokenDetails; - } - } - } - return getOauth2AccessTokenFromDetails(oldestToken); - } - return null; - } - - /** - * @param userName - * the user name to search - * @return a collection of access tokens - */ - public Collection findTokensByUserName(String userName) { - List details = orcidOauthTokenDetailService.findByUserName(userName); - List accessTokens = new ArrayList(); - if (details != null && !details.isEmpty()) { - for (OrcidOauth2TokenDetail detail : details) { - accessTokens.add(getOauth2AccessTokenFromDetails(detail)); - } - } - return accessTokens; - } - - /** - * @param clientId - * the client id - * @return a collection of access tokens - */ - @Override - public Collection findTokensByClientId(String clientId) { - List details = orcidOauthTokenDetailService.findByClientId(clientId); - List accessTokens = new ArrayList(); - if (details != null && !details.isEmpty()) { - for (OrcidOauth2TokenDetail detail : details) { - accessTokens.add(getOauth2AccessTokenFromDetails(detail)); - } - } - return accessTokens; - } - - private OAuth2AccessToken getOauth2AccessTokenFromDetails(OrcidOauth2TokenDetail detail) { - DefaultOAuth2AccessToken token = null; - if (detail != null && StringUtils.isNotBlank(detail.getTokenValue())) { - token = new DefaultOAuth2AccessToken(detail.getTokenValue()); - token.setExpiration(detail.getTokenExpiration()); - token.setScope(OAuth2Utils.parseParameterList(detail.getScope())); - token.setTokenType(detail.getTokenType()); - String refreshToken = detail.getRefreshTokenValue(); - OAuth2RefreshToken rt; - if (StringUtils.isNotBlank(refreshToken)) { - if (detail.getRefreshTokenExpiration() != null) { - rt = new DefaultExpiringOAuth2RefreshToken(detail.getRefreshTokenValue(), detail.getRefreshTokenExpiration()); - } else { - rt = new DefaultOAuth2RefreshToken(detail.getRefreshTokenValue()); - } - token.setRefreshToken(rt); - } - String orcid = detail.getOrcid(); - if (orcid != null) { - Map additionalInfo = new HashMap(); - additionalInfo.put(OrcidOauth2Constants.ORCID, orcid); - additionalInfo.put(OrcidOauth2Constants.PERSISTENT, detail.isPersistent()); - additionalInfo.put(OrcidOauth2Constants.DATE_CREATED, detail.getDateCreated()); - additionalInfo.put(OrcidOauth2Constants.TOKEN_VERSION, detail.getVersion()); - token.setAdditionalInformation(additionalInfo); - } - - String clientId = detail.getClientDetailsId(); - if(!PojoUtil.isEmpty(clientId)) { - Map additionalInfo = new HashMap(); - Map additionalInfoInToken = token.getAdditionalInformation(); - if(additionalInfoInToken != null && !additionalInfoInToken.isEmpty()) { - additionalInfo.putAll(additionalInfoInToken); - } - // Copy to a new one to avoid unmodifiable - additionalInfo.put(OrcidOauth2Constants.CLIENT_ID, clientId); - token.setAdditionalInformation(additionalInfo); - } - } - - return token; - } - - private OAuth2Authentication getOAuth2AuthenticationFromDetails(OrcidOauth2TokenDetail details) { - if (details != null) { - // Check member is not locked - isClientEnabled(details.getClientDetailsId()); - ClientDetailsEntity clientDetailsEntity = clientDetailsEntityCacheManager.retrieve(details.getClientDetailsId()); - Authentication authentication = null; - AuthorizationRequest request = null; - if (clientDetailsEntity != null) { - Set scopes = OAuth2Utils.parseParameterList(details.getScope()); - request = new AuthorizationRequest(clientDetailsEntity.getClientId(), scopes); - request.setAuthorities(clientDetailsEntity.getAuthorities()); - Set resourceIds = new HashSet<>(); - resourceIds.add(details.getResourceId()); - request.setResourceIds(resourceIds); - request.setApproved(details.isApproved()); - String orcid = details.getOrcid(); - if (orcid != null) { - ProfileEntity profile = profileEntityCacheManager.retrieve(orcid); - authentication = new OrcidOauth2UserAuthentication(profile, details.isApproved()); - } - } - return new OrcidOAuth2Authentication(request, authentication, details.getTokenValue()); - } - throw new InvalidTokenException("Token not found"); - } - - private OrcidOauth2TokenDetail populatePropertiesFromTokenAndAuthentication(OAuth2AccessToken token, OAuth2Authentication authentication, - OrcidOauth2TokenDetail detail) { - OAuth2Request authorizationRequest = authentication.getOAuth2Request(); - if (detail == null) { - detail = new OrcidOauth2TokenDetail(); - } - - //Update to put auth code in token detail so it can be revoked based on code if needed. - if (authentication.getOAuth2Request().getRequestParameters().get("code") != null){ - detail.setAuthorizationCode(authentication.getOAuth2Request().getRequestParameters().get("code").toString()); - } - - String clientId = authorizationRequest.getClientId(); - String authKey = authenticationKeyGenerator.extractKey(authentication); - detail.setAuthenticationKey(authKey); - detail.setClientDetailsId(clientId); - - OAuth2RefreshToken refreshToken = token.getRefreshToken(); - if (refreshToken != null && StringUtils.isNotBlank(refreshToken.getValue())) { - if (refreshToken instanceof ExpiringOAuth2RefreshToken) { - // Override the refresh token expiration from the client - // details, and make it the same as the token itself - detail.setRefreshTokenExpiration(token.getExpiration()); - } - detail.setRefreshTokenValue(refreshToken.getValue()); - } - if (!authentication.isClientOnly()) { - Object principal = authentication.getPrincipal(); - if (principal instanceof ProfileEntity) { - ProfileEntity profileEntity = (ProfileEntity) authentication.getPrincipal(); - detail.setOrcid(profileEntity.getId()); - } - } - - detail.setTokenValue(token.getValue()); - detail.setTokenType(token.getTokenType()); - detail.setTokenExpiration(token.getExpiration()); - detail.setApproved(authorizationRequest.isApproved()); - detail.setRedirectUri(authorizationRequest.getRedirectUri()); - - Set resourceIds = authorizationRequest.getResourceIds(); - if(resourceIds == null || resourceIds.isEmpty()) { - ClientDetailsEntity clientDetails = clientDetailsEntityCacheManager.retrieve(clientId); - resourceIds = clientDetails.getResourceIds(); - } - - detail.setResourceId(OAuth2Utils.formatParameterList(resourceIds)); - detail.setResponseType(OAuth2Utils.formatParameterList(authorizationRequest.getResponseTypes())); - detail.setScope(OAuth2Utils.formatParameterList(authorizationRequest.getScope())); - - Map additionalInfo = token.getAdditionalInformation(); - if (additionalInfo != null) { - if (additionalInfo.containsKey(OrcidOauth2Constants.TOKEN_VERSION)) { - String sVersion = String.valueOf(additionalInfo.get(OrcidOauth2Constants.TOKEN_VERSION)); - detail.setVersion(Long.valueOf(sVersion)); - } else { - // TODO: As of Jan 2015 all tokens will be new tokens, so, we - // will have to remove the token version code and - // treat all tokens as new tokens - detail.setVersion(Long.valueOf(OrcidOauth2Constants.PERSISTENT_TOKEN)); - } - - if (additionalInfo.containsKey(OrcidOauth2Constants.PERSISTENT)) { - boolean isPersistentKey = (Boolean) additionalInfo.get(OrcidOauth2Constants.PERSISTENT); - detail.setPersistent(isPersistentKey); - } else { - detail.setPersistent(false); - } - } else { - detail.setPersistent(false); - } - - //Set OBO client if possible. - if(OrcidOauth2Constants.IETF_EXCHANGE_GRANT_TYPE.equals(authentication.getOAuth2Request().getGrantType()) - && authentication.getOAuth2Request().getRequestParameters().containsKey(OrcidOauth2Constants.IETF_EXCHANGE_SUBJECT_TOKEN) - && OrcidOauth2Constants.IETF_EXCHANGE_ID_TOKEN.equals(authentication.getOAuth2Request().getRequestParameters().get(OrcidOauth2Constants.IETF_EXCHANGE_SUBJECT_TOKEN_TYPE))) { - try { - SignedJWT claims = SignedJWT.parse(authentication.getOAuth2Request().getRequestParameters().get(OrcidOauth2Constants.IETF_EXCHANGE_SUBJECT_TOKEN)); - detail.setOboClientDetailsId(claims.getJWTClaimsSet().getAudience().get(0)); - } catch (ParseException e) { - throw new IllegalArgumentException("Unexpected id token value, cannot parse the id_token"); - } - } - - return detail; - } - - @Override - public Collection findTokensByClientIdAndUserName(String clientId, String userName) { - List details = orcidOauthTokenDetailService.findByClientIdAndUserName(clientId, userName); - List accessTokens = new ArrayList(); - if (details != null && !details.isEmpty()) { - for (OrcidOauth2TokenDetail detail : details) { - if(detail.getTokenDisabled() == null || !detail.getTokenDisabled()) { - accessTokens.add(getOauth2AccessTokenFromDetails(detail)); - } - } - } - return accessTokens; - } - - private void isTokenExpired(long expirationTime, String tokenValue) { - Date expirationDate = new Date(expirationTime); - if(expirationDate.before(new Date())) { - removeAccessToken(tokenValue); - throw new InvalidTokenException("Access token expired: " + tokenValue); - } - } - - public void isClientEnabled(String clientId) throws InvalidTokenException { - ClientDetailsEntity clientEntity = clientDetailsEntityCacheManager.retrieve(clientId); - try { - orcidOAuth2RequestValidator.validateClientIsEnabled(clientEntity); - } catch (LockedException le) { - throw new InvalidTokenException(le.getMessage()); - } catch (ClientDeactivatedException e) { - throw new InvalidTokenException(e.getMessage()); - } - } -} diff --git a/orcid-core/src/main/resources/orcid-core-context.xml b/orcid-core/src/main/resources/orcid-core-context.xml index cbfaecf05bb..78fbe4c6335 100644 --- a/orcid-core/src/main/resources/orcid-core-context.xml +++ b/orcid-core/src/main/resources/orcid-core-context.xml @@ -41,34 +41,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -82,17 +54,13 @@ - - - - - - - - - - - + + + + + + + diff --git a/orcid-persistence/pom.xml b/orcid-persistence/pom.xml index b071541a8d2..3be4e120a5d 100644 --- a/orcid-persistence/pom.xml +++ b/orcid-persistence/pom.xml @@ -103,11 +103,7 @@ org.springframework.security spring-security-core - - org.springframework.security.oauth - spring-security-oauth2 - - + org.aspectj diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ClientDetailsEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ClientDetailsEntity.java index 431893bf308..edb52480e83 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ClientDetailsEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ClientDetailsEntity.java @@ -25,7 +25,6 @@ import org.hibernate.annotations.Sort; import org.hibernate.annotations.SortType; import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.oauth2.provider.ClientDetails; import org.springframework.util.StringUtils; /** @@ -33,7 +32,7 @@ */ @Entity @Table(name = "client_details") -public class ClientDetailsEntity extends BaseEntity implements ClientDetails, Serializable { +public class ClientDetailsEntity extends BaseEntity implements Serializable { private static final long serialVersionUID = 1L; @@ -194,7 +193,6 @@ public void setGroupProfileId(String groupProfileId) { * * @return The client id. */ - @Override @Transient public String getClientId() { return clientId; @@ -205,7 +203,6 @@ public String getClientId() { * * @return The resources of this client. */ - @Override @Transient public Set getResourceIds() { Set rids = new HashSet(); @@ -222,7 +219,6 @@ public Set getResourceIds() { * * @return Whether a secret is required to authenticate this client. */ - @Override @Transient public boolean isSecretRequired() { return StringUtils.hasText(clientSecret); @@ -234,7 +230,6 @@ public boolean isSecretRequired() { * * @return The client secret. */ - @Override @Transient public String getClientSecret() { return getDecryptedClientSecret(); @@ -310,7 +305,6 @@ public void setDecryptedClientSecret(String decryptedClientSecret) { * * @return Whether this client is limited to a specific scope. */ - @Override @Transient public boolean isScoped() { return this.clientScopes != null && !this.clientScopes.isEmpty(); @@ -322,7 +316,6 @@ public boolean isScoped() { * * @return The scope of this client. */ - @Override @Transient public Set getScope() { Set sps = new HashSet(); @@ -339,7 +332,6 @@ public Set getScope() { * * @return The grant types for which this client is authorized. */ - @Override @Transient public Set getAuthorizedGrantTypes() { Set grants = new HashSet(); @@ -357,7 +349,6 @@ public Set getAuthorizedGrantTypes() { * * @return The pre-defined redirect URI for this client. */ - @Override @Transient public Set getRegisteredRedirectUri() { Set redirects = null; @@ -378,7 +369,6 @@ public Set getRegisteredRedirectUri() { * * @return The authorities. */ - @Override @Transient public Collection getAuthorities() { Collection gas = new ArrayList(); @@ -394,31 +384,11 @@ public Collection getAuthorities() { * * @return the access token validity period */ - @Override @Transient public Integer getAccessTokenValiditySeconds() { return accessTokenValiditySeconds; } - @Override - @Transient - public Integer getRefreshTokenValiditySeconds() { - // Not currently required - return null; - } - - @Override - @Transient - public Map getAdditionalInformation() { - // Not currently required - return null; - } - - @Override - @Transient - public boolean isAutoApprove(String scope) { - return false; - } @Column(name = "authentication_provider_id") public String getAuthenticationProviderId() { diff --git a/orcid-pub-web/pom.xml b/orcid-pub-web/pom.xml index 417c07440fa..8f8c49ed465 100644 --- a/orcid-pub-web/pom.xml +++ b/orcid-pub-web/pom.xml @@ -38,10 +38,6 @@ org.springframework.security spring-security-web - - org.springframework.security.oauth - spring-security-oauth2 - diff --git a/orcid-web/pom.xml b/orcid-web/pom.xml index 00c9512757e..233d25b585d 100644 --- a/orcid-web/pom.xml +++ b/orcid-web/pom.xml @@ -99,10 +99,6 @@ org.springframework.security spring-security-core - - org.springframework.security.oauth - spring-security-oauth2 - org.springframework.security spring-security-web diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/OpenIDController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/OpenIDController.java index e07a47db3ec..7b589d15088 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/OpenIDController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/OpenIDController.java @@ -16,8 +16,6 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import org.springframework.security.oauth2.common.OAuth2AccessToken; -import org.springframework.security.oauth2.provider.token.TokenStore; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @@ -41,9 +39,6 @@ public class OpenIDController { @Resource(name = "personDetailsManagerReadOnlyV3") private PersonDetailsManagerReadOnly personDetailsManagerReadOnly; - @Resource(name="orcidTokenStore") - private TokenStore tokenStore; - @Resource OpenIDConnectDiscoveryService openIDConnectDiscoveryService; @Value("${org.orcid.core.baseUri}") @@ -91,6 +86,8 @@ public class OpenIDController { //lookup token, check it's valid, check scope. //deal with incorrect bearer case in request (I'm looking at you spring security!) private OpenIDConnectUserInfo getInfoFromToken(String tokenValue) { + //TODO: Refactor this to get the information from the database + // This is unexpected and should be done with token introspection form the oauth server OAuth2AccessToken tok = tokenStore.readAccessToken(tokenValue); if (tok != null && !tok.isExpired()){ boolean hasScope = false; diff --git a/orcid-web/src/main/resources/orcid-core-context-spam.xml b/orcid-web/src/main/resources/orcid-core-context-spam.xml index 0a6853e380d..5581f7b200d 100644 --- a/orcid-web/src/main/resources/orcid-core-context-spam.xml +++ b/orcid-web/src/main/resources/orcid-core-context-spam.xml @@ -38,29 +38,9 @@ - - - - - - - - - - - - - - - - - - - - @@ -71,17 +51,7 @@ - - - - - - - - - - - + diff --git a/pom.xml b/pom.xml index 9826712f270..ff319996d1f 100644 --- a/pom.xml +++ b/pom.xml @@ -507,13 +507,6 @@ the software. - - - org.springframework.security.oauth - spring-security-oauth2 - 2.5.2.RELEASE - compile - org.springframework.security spring-security-acl From 23e3438c72af9ca11e866a04461b68f9947850ef Mon Sep 17 00:00:00 2001 From: amontenegro Date: Wed, 4 Mar 2026 14:12:27 -0600 Subject: [PATCH 02/77] Nothing works yet --- ...rcidClientCredentialEndPointDelegator.java | 16 - ...ClientCredentialEndPointDelegatorImpl.java | 358 ------------------ .../orcid-oauth2-api-common-config.xml | 80 +--- orcid-core/pom.xml | 4 + .../openid/OpenIDConnectDiscoveryService.java | 125 ------ .../oauth/openid/OpenIDConnectKeyService.java | 128 ------- .../openid/OpenIDConnectTokenEnhancer.java | 154 -------- .../OrcidRandomValueTokenServicesImpl.java | 14 - .../src/main/resources/orcid-core-context.xml | 22 +- .../web/controllers/OpenIDController.java | 72 ++-- .../resources/orcid-core-context-spam.xml | 20 +- 11 files changed, 38 insertions(+), 955 deletions(-) delete mode 100644 orcid-api-common/src/main/java/org/orcid/api/common/oauth/OrcidClientCredentialEndPointDelegator.java delete mode 100644 orcid-api-common/src/main/java/org/orcid/api/common/oauth/OrcidClientCredentialEndPointDelegatorImpl.java delete mode 100644 orcid-core/src/main/java/org/orcid/core/oauth/openid/OpenIDConnectDiscoveryService.java delete mode 100644 orcid-core/src/main/java/org/orcid/core/oauth/openid/OpenIDConnectKeyService.java delete mode 100644 orcid-core/src/main/java/org/orcid/core/oauth/openid/OpenIDConnectTokenEnhancer.java diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/oauth/OrcidClientCredentialEndPointDelegator.java b/orcid-api-common/src/main/java/org/orcid/api/common/oauth/OrcidClientCredentialEndPointDelegator.java deleted file mode 100644 index ade7ee9897f..00000000000 --- a/orcid-api-common/src/main/java/org/orcid/api/common/oauth/OrcidClientCredentialEndPointDelegator.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.orcid.api.common.oauth; - -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.core.Response; - -/** - * @author Declan Newman (declan) Date: 18/04/2012 - */ -public interface OrcidClientCredentialEndPointDelegator { - - Response obtainOauth2Token(String authorization, MultivaluedMap formParams); - - void setTokenCacheEnabled(boolean enabled); - - boolean isTokenCacheEnabled(); -} diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/oauth/OrcidClientCredentialEndPointDelegatorImpl.java b/orcid-api-common/src/main/java/org/orcid/api/common/oauth/OrcidClientCredentialEndPointDelegatorImpl.java deleted file mode 100644 index df5f9b9dedf..00000000000 --- a/orcid-api-common/src/main/java/org/orcid/api/common/oauth/OrcidClientCredentialEndPointDelegatorImpl.java +++ /dev/null @@ -1,358 +0,0 @@ -package org.orcid.api.common.oauth; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import javax.annotation.Resource; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.core.Response; - -import org.apache.commons.lang.StringUtils; -import org.orcid.core.constants.OrcidOauth2Constants; -import org.orcid.core.exception.OrcidInvalidScopeException; -import org.orcid.core.locale.LocaleManager; -import org.orcid.core.oauth.OAuthError; -import org.orcid.core.oauth.OAuthErrorUtils; -import org.orcid.core.utils.JsonUtils; -import org.orcid.core.utils.cache.redis.RedisClient; -import org.orcid.jaxb.model.message.ScopePathType; -import org.orcid.persistence.dao.OrcidOauth2AuthoriziationCodeDetailDao; -import org.orcid.persistence.dao.ProfileLastModifiedDao; -import org.orcid.persistence.jpa.entities.IndexingStatus; -import org.orcid.persistence.jpa.entities.OrcidOauth2AuthoriziationCodeDetail; -import org.orcid.persistence.jpa.entities.OrcidOauth2TokenDetail; -import org.orcid.pojo.ajaxForm.PojoUtil; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.security.authentication.InsufficientAuthenticationException; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.oauth2.common.DefaultOAuth2AccessToken; -import org.springframework.security.oauth2.common.OAuth2AccessToken; -import org.springframework.security.oauth2.common.exceptions.InvalidGrantException; -import org.springframework.security.oauth2.common.exceptions.UnsupportedGrantTypeException; -import org.springframework.security.oauth2.common.util.OAuth2Utils; -import org.springframework.security.oauth2.provider.AuthorizationRequest; -import org.springframework.security.oauth2.provider.TokenRequest; -import org.springframework.security.oauth2.provider.endpoint.AbstractEndpoint; -import org.springframework.stereotype.Component; -import org.springframework.transaction.annotation.Transactional; - -/** - * @author Declan Newman (declan) Date: 18/04/2012 - */ -@Component("orcidClientCredentialEndPointDelegator") -public class OrcidClientCredentialEndPointDelegatorImpl extends AbstractEndpoint implements OrcidClientCredentialEndPointDelegator { - - private static final Logger LOGGER = LoggerFactory.getLogger(OrcidClientCredentialEndPointDelegatorImpl.class); - - @Resource - private OrcidOauth2AuthoriziationCodeDetailDao orcidOauth2AuthoriziationCodeDetailDao; - - @Resource - protected LocaleManager localeManager; - - @Resource(name="profileLastModifiedDao") - private ProfileLastModifiedDao profileLastModifiedDao; - - @Resource - private RedisClient redisClient; - - @Value("${org.orcid.core.utils.cache.redis.enabled:true}") - private boolean isTokenCacheEnabled; - - @Transactional - public Response obtainOauth2Token(String authorization, MultivaluedMap formParams) { - String code = formParams.getFirst("code"); - String clientId = formParams.getFirst(OrcidOauth2Constants.CLIENT_ID_PARAM); - String state = formParams.getFirst(OrcidOauth2Constants.STATE_PARAM); - String redirectUri = formParams.getFirst(OrcidOauth2Constants.REDIRECT_URI_PARAM); - String refreshToken = formParams.getFirst(OrcidOauth2Constants.REFRESH_TOKEN); - String scopeList = formParams.getFirst(OrcidOauth2Constants.SCOPE_PARAM); - String grantType = formParams.getFirst(OrcidOauth2Constants.GRANT_TYPE); - Boolean revokeOld = formParams.containsKey(OrcidOauth2Constants.REVOKE_OLD) ? Boolean.valueOf(formParams.getFirst(OrcidOauth2Constants.REVOKE_OLD)) : true; - Long expiresIn = calculateExpiresIn(formParams); - //IETF Token exchange - String subjectToken = formParams.getFirst(OrcidOauth2Constants.IETF_EXCHANGE_SUBJECT_TOKEN); - String subjectTokenType = formParams.getFirst(OrcidOauth2Constants.IETF_EXCHANGE_SUBJECT_TOKEN_TYPE); - String requestedTokenType = formParams.getFirst(OrcidOauth2Constants.IETF_EXCHANGE_REQUESTED_TOKEN_TYPE); - - String bearerToken = null; - Set scopes = new HashSet(); - if (StringUtils.isNotEmpty(scopeList)) { - scopes = OAuth2Utils.parseParameterList(scopeList); - } - if(OrcidOauth2Constants.REFRESH_TOKEN.equals(grantType)) { - if(!PojoUtil.isEmpty(authorization)) { - if ((authorization.toLowerCase().startsWith(OAuth2AccessToken.BEARER_TYPE.toLowerCase()))) { - String authHeaderValue = authorization.substring(OAuth2AccessToken.BEARER_TYPE.length()).trim(); - int commaIndex = authHeaderValue.indexOf(','); - if (commaIndex > 0) { - authHeaderValue = authHeaderValue.substring(0, commaIndex); - } - bearerToken = authHeaderValue; - if(PojoUtil.isEmpty(bearerToken)) { - throw new IllegalArgumentException("Refresh token request doesnt include the authorization"); - } - } - } - } - - Authentication client = getClientAuthentication(); - if (!client.isAuthenticated()) { - LOGGER.error("Not authenticated for OAuth2: clientId={}, grantType={}, refreshToken={}, code={}, scopes={}, state={}, redirectUri={}", new Object[] { - clientId, grantType, refreshToken, code, scopes, state, redirectUri }); - throw new InsufficientAuthenticationException(localeManager.resolveMessage("apiError.client_not_authenticated.exception")); - } - - /** - * Patch, update any orcid-grants scope to funding scope - * */ - for (String scope : scopes) { - if (scope.contains("orcid-grants")) { - String newScope = scope.replace("orcid-grants", "funding"); - LOGGER.info("Client {} provided a grants scope {} which will be updated to {}", new Object[] { clientId, scope, newScope }); - scopes.remove(scope); - scopes.add(newScope); - } - } - - try { - if (scopes != null) { - List toRemove = new ArrayList(); - for (String scope : scopes) { - ScopePathType scopeType = ScopePathType.fromValue(scope); - if(scopeType.isInternalScope()) { - // You should not allow any internal scope here! go away! - String message = localeManager.resolveMessage("apiError.9015.developerMessage", new Object[]{}); - throw new OrcidInvalidScopeException(message, clientId, scope); - } else if(OrcidOauth2Constants.GRANT_TYPE_CLIENT_CREDENTIALS.equals(grantType)) { - if(!scopeType.isClientCreditalScope()) - toRemove.add(scope); - } else { - if(scopeType.isClientCreditalScope()) - toRemove.add(scope); - } - } - - for (String remove : toRemove) { - scopes.remove(remove); - } - } - } catch (IllegalArgumentException iae) { - String message = localeManager.resolveMessage("apiError.9015.developerMessage", new Object[]{}); - if(scopes != null) { - message += " Provided scopes: " + String.join(",", scopes); - } - throw new OrcidInvalidScopeException(message, clientId, iae.getMessage()); - } - - try{ - OAuth2AccessToken token = generateToken(client, scopes, code, redirectUri, grantType, refreshToken, state, bearerToken, revokeOld, expiresIn, subjectToken, subjectTokenType, requestedTokenType); - - //Lets check if the user needs to be indexed - if(token != null && token.getAdditionalInformation() != null) { - if(token.getAdditionalInformation().containsKey(OrcidOauth2Constants.ORCID)) { - String orcidId = (String) token.getAdditionalInformation().get(OrcidOauth2Constants.ORCID); - if(!PojoUtil.isEmpty(orcidId)) { - profileLastModifiedDao.updateIndexingStatus(Arrays.asList(orcidId), IndexingStatus.PENDING); - } - } - } - - // Do not put the token in the cache if the token is disabled - if(token.getAdditionalInformation() != null && !token.getAdditionalInformation().containsKey(OrcidOauth2Constants.TOKEN_DISABLED)) { - setToCache(client.getName(), token); - } - removeMetadataFromToken(token); - return getResponse(token); - } catch (InvalidGrantException e){ //this needs to be caught here so the transaction doesn't roll back - OAuthError error = OAuthErrorUtils.getOAuthError(e); - return Response.status(error.getResponseStatus().getStatusCode()).entity(error).build(); - } - } - - /** - * Set the access token in the cache - * */ - protected void setToCache(String clientId, OAuth2AccessToken accessToken) { - if(isTokenCacheEnabled) { - try { - String tokenValue = accessToken.getValue(); - Map tokenData = new HashMap(); - tokenData.put(OrcidOauth2Constants.ACCESS_TOKEN, tokenValue); - tokenData.put(OrcidOauth2Constants.TOKEN_EXPIRATION_TIME, String.valueOf(accessToken.getExpiration().getTime())); - StringBuilder sb = new StringBuilder(); - accessToken.getScope().forEach(x -> {sb.append(x); sb.append(' ');}); - tokenData.put(OrcidOauth2Constants.SCOPE_PARAM, sb.toString()); - tokenData.put(OrcidOauth2Constants.ORCID, (String) accessToken.getAdditionalInformation().get(OrcidOauth2Constants.ORCID)); - tokenData.put(OrcidOauth2Constants.CLIENT_ID, clientId); - tokenData.put(OrcidOauth2Constants.RESOURCE_IDS, OrcidOauth2Constants.ORCID); - tokenData.put(OrcidOauth2Constants.APPROVED, Boolean.TRUE.toString()); - if(accessToken.getAdditionalInformation().containsKey(OrcidOauth2Constants.IS_OBO_TOKEN)) { - tokenData.put(OrcidOauth2Constants.IS_OBO_TOKEN, Boolean.TRUE.toString()); - } - redisClient.set(tokenValue, JsonUtils.convertToJsonString(tokenData)); - } catch(Exception e) { - LOGGER.info("Unable to set token in Redis cache", e); - } - } - } - - /** - * Calculates the real value of the "expires_in" param based on the current time - * - * @param formParams - * The params container - * - * @return the expiration time in milliseconds based on the param OrcidOauth2Constants.EXPIRES_IN. - * @throws IllegalArgumentException in case the parameter is not a number - * */ - private Long calculateExpiresIn(MultivaluedMap formParams) { - if(!formParams.containsKey(OrcidOauth2Constants.EXPIRES_IN)){ - return 0L; - } - - String expiresInParam = formParams.getFirst(OrcidOauth2Constants.EXPIRES_IN); - Long result = 0L; - - try { - result = Long.valueOf(expiresInParam); - } catch(Exception e) { - throw new IllegalArgumentException(expiresInParam + " is not a number"); - } - - return result == 0 ? result : (System.currentTimeMillis() + (result * 1000)); - } - - protected OAuth2AccessToken generateToken(Authentication client, Set scopes, String grantType) { - return generateToken(client, scopes, null, null, grantType, null, null, null, false, 0L, null, null, null); - } - - protected OAuth2AccessToken generateToken(Authentication client, Set scopes, String code, String redirectUri, String grantType, String refreshToken, String state, String authorization, boolean revokeOld, Long expiresIn, String subjectToken, String subjectTokenType, String requestedTokenType) { - String clientId = client.getName(); - Map authorizationParameters = new HashMap(); - - if(scopes != null) { - String scopesString = StringUtils.join(scopes, ' '); - authorizationParameters.put(OAuth2Utils.SCOPE, scopesString); - } - - authorizationParameters.put(OAuth2Utils.CLIENT_ID, clientId); - if (code != null) { - authorizationParameters.put("code", code); - OrcidOauth2AuthoriziationCodeDetail authorizationCodeEntity = orcidOauth2AuthoriziationCodeDetailDao.find(code); - - if(authorizationCodeEntity != null) { - if(orcidOauth2AuthoriziationCodeDetailDao.isPersistentToken(code)) { - authorizationParameters.put(OrcidOauth2Constants.IS_PERSISTENT, "true"); - } else { - authorizationParameters.put(OrcidOauth2Constants.IS_PERSISTENT, "false"); - } - - if(!authorizationParameters.containsKey(OAuth2Utils.SCOPE) || PojoUtil.isEmpty(authorizationParameters.get(OAuth2Utils.SCOPE))) { - //////// - // TODO: The name should change to `scopes` once the authorization server generates all authorization codes - //////// - Set newScopes = StringUtils.isNotBlank(authorizationCodeEntity.getNewScopes()) ? Stream.of(authorizationCodeEntity.getNewScopes().split(",")).map(String::trim).collect(Collectors.toSet()) : Set.of(); - - Set allScopes = new HashSet(); - allScopes.addAll(newScopes); - allScopes.addAll(authorizationCodeEntity.getScopes()); - - String scopesString = StringUtils.join(allScopes, ' '); - authorizationParameters.put(OAuth2Utils.SCOPE, scopesString); - } - - //This will pass through to the token generator as a request param. - if (authorizationCodeEntity.getNonce() !=null){ - authorizationParameters.put(OrcidOauth2Constants.NONCE, authorizationCodeEntity.getNonce()); - } - } else { - authorizationParameters.put(OrcidOauth2Constants.IS_PERSISTENT, "false"); - } - } - - //If it is a refresh token request, set the needed authorization parameters - if(OrcidOauth2Constants.REFRESH_TOKEN.equals(grantType)) { - authorizationParameters.put(OrcidOauth2Constants.AUTHORIZATION, authorization); - authorizationParameters.put(OrcidOauth2Constants.REVOKE_OLD, String.valueOf(revokeOld)); - authorizationParameters.put(OrcidOauth2Constants.EXPIRES_IN, String.valueOf(expiresIn)); - authorizationParameters.put(OrcidOauth2Constants.REFRESH_TOKEN, String.valueOf(refreshToken)); - } else if (OrcidOauth2Constants.IETF_EXCHANGE_GRANT_TYPE.equals(grantType)) { - authorizationParameters.put(OrcidOauth2Constants.IETF_EXCHANGE_SUBJECT_TOKEN, String.valueOf(subjectToken)); - authorizationParameters.put(OrcidOauth2Constants.IETF_EXCHANGE_SUBJECT_TOKEN_TYPE, String.valueOf(subjectTokenType)); - authorizationParameters.put(OrcidOauth2Constants.IETF_EXCHANGE_REQUESTED_TOKEN_TYPE, String.valueOf(requestedTokenType)); - //required so OrcidRandomValueTokenServicesImpl doesn't generate a refresh token - authorizationParameters.put(OrcidOauth2Constants.GRANT_TYPE, OrcidOauth2Constants.IETF_EXCHANGE_GRANT_TYPE); - } - - if (redirectUri != null) { - authorizationParameters.put(OAuth2Utils.REDIRECT_URI, redirectUri); - } - AuthorizationRequest authorizationRequest = getOAuth2RequestFactory().createAuthorizationRequest(authorizationParameters); - - TokenRequest tokenRequest = getOAuth2RequestFactory().createTokenRequest(authorizationRequest, grantType); - //Need to change this to either the DefaultTokenType or start using a different token type. - OAuth2AccessToken token = getTokenGranter().grant(grantType, tokenRequest); - Object params[] = {grantType}; - if (token == null) { - LOGGER.error("Unsupported grant type for OAuth2: clientId={}, grantType={}, code={}", new Object[] { - clientId, grantType, code}); - throw new UnsupportedGrantTypeException(localeManager.resolveMessage("apiError.unsupported_client_type.exception", params)); - } - - Long tokenId = token.getAdditionalInformation() != null ? (Long) token.getAdditionalInformation().get(OrcidOauth2Constants.TOKEN_ID) : null; - - LOGGER.info("OAuth2 access token granted: tokenId={}, clientId={}, code={}, scopes={}", new Object[] { - tokenId, clientId, code, token.getScope() }); - - return token; - } - - protected void removeMetadataFromToken(OAuth2AccessToken accessToken) { - if(accessToken != null && accessToken.getAdditionalInformation() != null) { - if(accessToken.getAdditionalInformation().containsKey(OrcidOauth2Constants.TOKEN_VERSION)) - accessToken.getAdditionalInformation().remove(OrcidOauth2Constants.TOKEN_VERSION); - if(accessToken.getAdditionalInformation().containsKey(OrcidOauth2Constants.PERSISTENT)) - accessToken.getAdditionalInformation().remove(OrcidOauth2Constants.PERSISTENT); - if(accessToken.getAdditionalInformation().containsKey(OrcidOauth2Constants.DATE_CREATED)) - accessToken.getAdditionalInformation().remove(OrcidOauth2Constants.DATE_CREATED); - if(accessToken.getAdditionalInformation().containsKey(OrcidOauth2Constants.TOKEN_ID)) - accessToken.getAdditionalInformation().remove(OrcidOauth2Constants.TOKEN_ID); - if(accessToken.getAdditionalInformation().containsKey(OrcidOauth2Constants.TOKEN_DISABLED)) - accessToken.getAdditionalInformation().remove(OrcidOauth2Constants.TOKEN_DISABLED); - } - } - - protected Response getResponse(OAuth2AccessToken accessToken) { - return Response.ok((DefaultOAuth2AccessToken)accessToken).header("Cache-Control", "no-store").header("Pragma", "no-cache").build(); - } - - protected Authentication getClientAuthentication() { - Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); - if (authentication != null) { - return authentication; - } else { - throw new InsufficientAuthenticationException(localeManager.resolveMessage("apiError.client_authentication_notfound.exception")); - } - - } - - public boolean isTokenCacheEnabled() { - return isTokenCacheEnabled; - } - - public void setTokenCacheEnabled(boolean isTokenCacheEnabled) { - this.isTokenCacheEnabled = isTokenCacheEnabled; - } - -} diff --git a/orcid-api-common/src/main/resources/orcid-oauth2-api-common-config.xml b/orcid-api-common/src/main/resources/orcid-oauth2-api-common-config.xml index 89682ff1873..75d7bacafd6 100644 --- a/orcid-api-common/src/main/resources/orcid-oauth2-api-common-config.xml +++ b/orcid-api-common/src/main/resources/orcid-oauth2-api-common-config.xml @@ -46,85 +46,7 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + diff --git a/orcid-core/pom.xml b/orcid-core/pom.xml index 2971359b4ce..cbfbebdab72 100644 --- a/orcid-core/pom.xml +++ b/orcid-core/pom.xml @@ -79,6 +79,10 @@ org.springframework spring-jdbc + + org.springframework + spring-web + org.freemarker freemarker diff --git a/orcid-core/src/main/java/org/orcid/core/oauth/openid/OpenIDConnectDiscoveryService.java b/orcid-core/src/main/java/org/orcid/core/oauth/openid/OpenIDConnectDiscoveryService.java deleted file mode 100644 index 90d586e8525..00000000000 --- a/orcid-core/src/main/java/org/orcid/core/oauth/openid/OpenIDConnectDiscoveryService.java +++ /dev/null @@ -1,125 +0,0 @@ -package org.orcid.core.oauth.openid; - -import java.util.List; - -import org.springframework.beans.factory.annotation.Value; - -import com.google.common.collect.Lists; - -public class OpenIDConnectDiscoveryService { - - private OpenIDConnectDiscoveryServiceConfig config; - - public static class OpenIDConnectDiscoveryServiceConfig{ - @Value("${org.orcid.core.baseUri}") - private String path; - - private List token_endpoint_auth_signing_alg_values_supported = Lists.newArrayList("RS256"); - private List id_token_signing_alg_values_supported = Lists.newArrayList("RS256"); - private String userinfo_endpoint = "/oauth/userinfo"; - private String authorization_endpoint = "/oauth/authorize"; - private String token_endpoint = "/oauth/token"; - private String jwks_uri = "/oauth/jwks"; - private List claims_supported = Lists.newArrayList("family_name","given_name","name","auth_time","iss","sub"); - private List scopes_supported = Lists.newArrayList("openid"); - private List subject_types_supported = Lists.newArrayList("public"); - private List response_types_supported = Lists.newArrayList("code","id_token","id_token token"); - private Boolean claims_parameter_supported = false; - private List token_endpoint_auth_methods_supported = Lists.newArrayList("client_secret_post"); - private List grant_types_supported = Lists.newArrayList("authorization_code","implicit","refresh_token"); - public String getIssuer() { - return path; - } - public List getToken_endpoint_auth_signing_alg_values_supported() { - return token_endpoint_auth_signing_alg_values_supported; - } - public List getId_token_signing_alg_values_supported() { - return id_token_signing_alg_values_supported; - } - public String getUserinfo_endpoint() { - return path+userinfo_endpoint; - } - public String getAuthorization_endpoint() { - return path+authorization_endpoint; - } - public String getToken_endpoint() { - return path+token_endpoint; - } - public String getJwks_uri() { - return path+jwks_uri; - } - public List getClaims_supported() { - return claims_supported; - } - public List getScopes_supported() { - return scopes_supported; - } - public List getSubject_types_supported() { - return subject_types_supported; - } - public List getResponse_types_supported() { - return response_types_supported; - } - public Boolean getClaims_parameter_supported() { - return claims_parameter_supported; - } - public List getToken_endpoint_auth_methods_supported() { - return token_endpoint_auth_methods_supported; - } - public List getGrant_types_supported() { - return grant_types_supported; - } - - /* example: - * "provider_info":{ - "token_endpoint_auth_signing_alg_values_supported":[ - "RS256" - ], - "userinfo_endpoint":"https://qa.orcid.org/oauth/userinfo", - "authorization_endpoint":"https://qa.orcid.org/oauth/authorize", - "claims_supported":[ - "family_name", - "given_name", - "name", - "auth_time", - "iss", - "sub" - ], - "scopes_supported":[ - "openid" - ], - "grant_types_supported":[ - "authorization_code" - ], - "token_endpoint":"https://qa.orcid.org/oauth/token", - "id_token_signing_alg_values_supported":[ - "RS256" - ], - "subject_types_supported":[ - "public" - ], - "response_types_supported":[ - "code" - ], - "jwks_uri":"https://qa.orcid.org/oauth/jwks", - "claims_parameter_supported":"false", - "token_endpoint_auth_methods_supported":[ - "client_secret_basic" - ], - "claim_types_supported":[ - "normal" - ], - "issuer":"https://orcid.org" - } - - */ - } - - public OpenIDConnectDiscoveryService(OpenIDConnectDiscoveryServiceConfig config){ - this.config = config; - } - - public OpenIDConnectDiscoveryServiceConfig getConfig(){ - return config; - } -} diff --git a/orcid-core/src/main/java/org/orcid/core/oauth/openid/OpenIDConnectKeyService.java b/orcid-core/src/main/java/org/orcid/core/oauth/openid/OpenIDConnectKeyService.java deleted file mode 100644 index 28e46200f25..00000000000 --- a/orcid-core/src/main/java/org/orcid/core/oauth/openid/OpenIDConnectKeyService.java +++ /dev/null @@ -1,128 +0,0 @@ -package org.orcid.core.oauth.openid; - -import java.io.File; -import java.io.IOException; -import java.net.URISyntaxException; -import java.security.NoSuchAlgorithmException; -import java.text.ParseException; - -import com.nimbusds.jose.JOSEException; -import com.nimbusds.jose.JWSAlgorithm; -import com.nimbusds.jose.JWSHeader; -import com.nimbusds.jose.JWSSigner; -import com.nimbusds.jose.JWSVerifier; -import com.nimbusds.jose.crypto.RSASSASigner; -import com.nimbusds.jose.crypto.RSASSAVerifier; -import com.nimbusds.jose.jwk.JWKSet; -import com.nimbusds.jose.jwk.RSAKey; -import com.nimbusds.jwt.JWTClaimsSet; -import com.nimbusds.jwt.SignedJWT; - -public class OpenIDConnectKeyService { - - private final String keyID; - private final RSAKey publicJWK; - private final RSAKey privateJWK; - private final JWSAlgorithm defaultAlg = JWSAlgorithm.RS256; - - public static class OpenIDConnectKeyServiceConfig{ - String jwksLocation; - public String getJwksLocation() { - return jwksLocation; - } - public void setJwksLocation(String jwksLocation) { - this.jwksLocation = jwksLocation; - } - public String getJsonKey() { - return jsonKey; - } - public void setJsonKey(String jsonKey) { - this.jsonKey = jsonKey; - } - public String getKeyName() { - return keyName; - } - public void setKeyName(String keyName) { - this.keyName = keyName; - } - String jsonKey; - String keyName; - } - - /** Use a configured key ${org.orcid.openid.jwksLocation} or ${org.orcid.openid.jwksTestKey} + ${org.orcid.openid.jwksKeyName} - * - * New keys can be generated using this: https://mkjwk.org/ or a command line tool found here: https://connect2id.com/products/nimbus-jose-jwt/generator - * @throws NoSuchAlgorithmException - * @throws ParseException - * @throws IOException - * @throws URISyntaxException - */ - public OpenIDConnectKeyService(OpenIDConnectKeyServiceConfig config) throws NoSuchAlgorithmException, IOException, ParseException, URISyntaxException{ - if (config.jwksLocation !=null && !config.jwksLocation.isEmpty() && config.keyName!=null && !config.keyName.isEmpty()){ - //use a configured key. - this.keyID = config.keyName; - JWKSet keys = JWKSet.load(new File(config.jwksLocation)); - privateJWK = (RSAKey) keys.getKeyByKeyId(keyID); - publicJWK = privateJWK.toPublicJWK(); - }else if (config.jsonKey!=null){ - //use a key embedded in the properties file - this.keyID = config.keyName; - JWKSet keys = JWKSet.parse(config.jsonKey); - privateJWK = (RSAKey) keys.getKeyByKeyId(keyID); - publicJWK = privateJWK.toPublicJWK(); - }else - throw new RuntimeException("OpenID jwks not configured!"); - } - - /** Get the private key for signing - * - * @return - * @throws JOSEException - */ - public SignedJWT sign(JWTClaimsSet claims) throws JOSEException{ - JWSSigner signer = new RSASSASigner(privateJWK); - JWSHeader.Builder head = new JWSHeader.Builder(defaultAlg); - head.keyID(getDefaultKeyID()); - SignedJWT signedJWT = new SignedJWT(head.build(), claims); - signedJWT.sign(signer); - return signedJWT; - - /* For HMAC we could do the following. This may be useful for the implicit flow: - ClientDetailsEntity clientEntity = clientDetailsEntityCacheManager.retrieve(authentication.getOAuth2Request().getClientId()); - JWSSigner signer = new MACSigner(StringUtils.rightPad(clientEntity.getDecryptedClientSecret(), 32, "#").getBytes()); - signedJWT = new SignedJWT(new JWSHeader(JWSAlgorithm.HS256), claims.build()); - signedJWT.sign(signer); - */ - } - - /** Get the key ID we'll be using - * - * @return - */ - public String getDefaultKeyID(){ - return keyID; - } - - /** get the Json Web Key representation of the public key - * - * @return a JWK. use .toString() to generate JSON representation. - */ - public JWKSet getPublicJWK(){ - return new JWKSet(publicJWK); - } - - /** verify an id_token was signed by us - * - * @param signed - * @return - */ - public boolean verify(SignedJWT signed) { - try { - JWSVerifier verifier = new RSASSAVerifier(publicJWK); - return signed.verify(verifier); - } catch (JOSEException e) { - throw new RuntimeException(e); - } - } - -} diff --git a/orcid-core/src/main/java/org/orcid/core/oauth/openid/OpenIDConnectTokenEnhancer.java b/orcid-core/src/main/java/org/orcid/core/oauth/openid/OpenIDConnectTokenEnhancer.java deleted file mode 100644 index 3d6931442c4..00000000000 --- a/orcid-core/src/main/java/org/orcid/core/oauth/openid/OpenIDConnectTokenEnhancer.java +++ /dev/null @@ -1,154 +0,0 @@ -package org.orcid.core.oauth.openid; - -import java.util.Calendar; -import java.util.Date; -import java.util.Map; -import java.util.UUID; - -import javax.annotation.Resource; - -import org.apache.commons.lang.StringUtils; -import org.orcid.core.constants.OrcidOauth2Constants; -import org.orcid.core.manager.ClientDetailsEntityCacheManager; -import org.orcid.core.manager.ProfileEntityCacheManager; -import org.orcid.core.manager.read_only.PersonDetailsManagerReadOnly; -import org.orcid.jaxb.model.clientgroup.ClientType; -import org.orcid.jaxb.model.message.ScopePathType; -import org.orcid.jaxb.model.record_v2.Person; -import org.orcid.persistence.jpa.entities.ClientDetailsEntity; -import org.orcid.persistence.jpa.entities.ProfileEntity; -import org.orcid.pojo.ajaxForm.PojoUtil; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.security.oauth2.common.OAuth2AccessToken; -import org.springframework.security.oauth2.provider.OAuth2Authentication; -import org.springframework.security.oauth2.provider.token.TokenEnhancer; - -import com.nimbusds.jose.JOSEException; -import com.nimbusds.jose.JWSAlgorithm; -import com.nimbusds.jwt.JWTClaimsSet; -import com.nimbusds.jwt.JWTClaimsSet.Builder; -import com.nimbusds.jwt.SignedJWT; -import com.nimbusds.oauth2.sdk.token.BearerAccessToken; -import com.nimbusds.openid.connect.sdk.claims.AccessTokenHash; - -/** - * This class creates and appends JWT id_tokens to the response. - * - * @author tom - * - */ -public class OpenIDConnectTokenEnhancer implements TokenEnhancer { - - @Value("${org.orcid.core.baseUri}") - private String path; - - @Resource - private ProfileEntityCacheManager profileEntityCacheManager; - - @Resource - private PersonDetailsManagerReadOnly personDetailsManagerReadOnly; - - @Resource - private ClientDetailsEntityCacheManager clientDetailsEntityCacheManager; - - @Resource - private OpenIDConnectKeyService keyManager; - - @Value("${org.orcid.core.token.read_validity_seconds:631138519}") - private int readValiditySeconds; - - @Override - public OAuth2AccessToken enhance(OAuth2AccessToken accessToken, OAuth2Authentication authentication) { - // We check for a nonce and max_age which are added back into request by - // OrcidClientCredentialEndPointDelegatorImpl - Map params = authentication.getOAuth2Request().getRequestParameters(); - - // only add if we're using openid scope. - // only add in implicit flow if response_type id_token is present - String scopes = params.get(OrcidOauth2Constants.SCOPE_PARAM); - if (PojoUtil.isEmpty(scopes) || !ScopePathType.getScopesFromSpaceSeparatedString(scopes).contains(ScopePathType.OPENID)) { - return accessToken; - } - // inject the OpenID Connect "id_token" (authn). This is distinct from - // the access token (authz), so is for transporting info to the client - // only - // this means we do not have to support using them for authentication - // purposes. Some APIs support it, but it is not part of the spec. - try { - String idTok = buildIdToken(accessToken, authentication.getName(), params.get(OrcidOauth2Constants.CLIENT_ID_PARAM),params.get(OrcidOauth2Constants.NONCE) ); - accessToken.getAdditionalInformation().put(OrcidOauth2Constants.ID_TOKEN, idTok); - } catch (JOSEException e) { - e.printStackTrace(); - } catch (Exception e) { - e.printStackTrace(); - } - - return accessToken; - - } - - public String buildIdToken(OAuth2AccessToken accessToken, String orcid, String clientID, String nonce) throws JOSEException { - Builder claims = new JWTClaimsSet.Builder(); - claims.audience(clientID); - claims.subject(orcid); - claims.issuer(path); - claims.claim("at_hash", createAccessTokenHash(accessToken.getValue())); - - Date now = new Date(); - Calendar twentyFourHrs = Calendar.getInstance(); - twentyFourHrs.setTime(now); - twentyFourHrs.add(Calendar.DAY_OF_YEAR, 1); - - claims.issueTime(now); - claims.expirationTime(twentyFourHrs.getTime()); - - claims.jwtID(UUID.randomUUID().toString()); - if (nonce != null) - claims.claim(OrcidOauth2Constants.NONCE, nonce); - - ProfileEntity e = profileEntityCacheManager.retrieve(orcid); - - claims.claim(OrcidOauth2Constants.AUTH_TIME, e.getLastLogin()); - - // If it is a member, include AMR - ClientDetailsEntity c = clientDetailsEntityCacheManager.retrieve(clientID); - - if (StringUtils.isNotEmpty(c.getClientType()) && !ClientType.PUBLIC_CLIENT.equals(ClientType.valueOf(c.getClientType()))) { - claims.claim(OrcidOauth2Constants.AUTHENTICATION_METHODS_REFERENCES, (e.getUsing2FA() ? OrcidOauth2Constants.AMR_MFA : OrcidOauth2Constants.AMR_PWD)); - } - - Person person = personDetailsManagerReadOnly.getPublicPersonDetails(orcid); - if (person.getName() != null) { - if (person.getName().getCreditName() != null) { - claims.claim("name", person.getName().getCreditName().getContent()); - } - if (person.getName().getFamilyName() != null) { - claims.claim("family_name", person.getName().getFamilyName().getContent()); - } - if (person.getName().getGivenNames() != null) { - claims.claim("given_name", person.getName().getGivenNames().getContent()); - } - } - - SignedJWT signedJWT = keyManager.sign(claims.build()); - return signedJWT.serialize(); - } - - /** - * Access Token hash value. If the ID Token is issued with an access_token - * in an Implicit Flow, this is REQUIRED, which is the case for this subset - * of OpenID Connect. Its value is the base64url encoding of the left-most - * half of the hash of the octets of the ASCII representation of the - * access_token value, where the hash algorithm used is the hash algorithm - * used in the alg Header Parameter of the ID Token's JOSE Header. For - * instance, if the alg is RS256, hash the access_token value with SHA-256, - * then take the left-most 128 bits and base64url-encode them. The at_hash - * value is a case-sensitive string. - * - * @param accessToken - * @return - */ - private String createAccessTokenHash(String accessToken) { - return AccessTokenHash.compute(new BearerAccessToken(accessToken), JWSAlgorithm.RS256).toString(); - } -} diff --git a/orcid-core/src/main/java/org/orcid/core/oauth/service/OrcidRandomValueTokenServicesImpl.java b/orcid-core/src/main/java/org/orcid/core/oauth/service/OrcidRandomValueTokenServicesImpl.java index 7ea84be6b88..dd1755d9001 100644 --- a/orcid-core/src/main/java/org/orcid/core/oauth/service/OrcidRandomValueTokenServicesImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/oauth/service/OrcidRandomValueTokenServicesImpl.java @@ -35,20 +35,6 @@ import org.springframework.security.core.AuthenticationException; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; -import org.springframework.security.oauth2.common.DefaultOAuth2AccessToken; -import org.springframework.security.oauth2.common.DefaultOAuth2RefreshToken; -import org.springframework.security.oauth2.common.OAuth2AccessToken; -import org.springframework.security.oauth2.common.OAuth2RefreshToken; -import org.springframework.security.oauth2.common.exceptions.InvalidGrantException; -import org.springframework.security.oauth2.common.exceptions.InvalidTokenException; -import org.springframework.security.oauth2.common.util.OAuth2Utils; -import org.springframework.security.oauth2.provider.AuthorizationRequest; -import org.springframework.security.oauth2.provider.OAuth2Authentication; -import org.springframework.security.oauth2.provider.OAuth2Request; -import org.springframework.security.oauth2.provider.TokenRequest; -import org.springframework.security.oauth2.provider.token.AuthenticationKeyGenerator; -import org.springframework.security.oauth2.provider.token.DefaultTokenServices; -import org.springframework.security.oauth2.provider.token.TokenEnhancer; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.context.request.RequestContextHolder; diff --git a/orcid-core/src/main/resources/orcid-core-context.xml b/orcid-core/src/main/resources/orcid-core-context.xml index 78fbe4c6335..9b5db759fcc 100644 --- a/orcid-core/src/main/resources/orcid-core-context.xml +++ b/orcid-core/src/main/resources/orcid-core-context.xml @@ -50,17 +50,6 @@ - - - - - - - - - - - @@ -393,7 +382,7 @@ - + @@ -694,7 +683,6 @@ - @@ -782,8 +770,6 @@ - - @@ -791,8 +777,7 @@ - - + @@ -1227,8 +1212,7 @@ - - + diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/OpenIDController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/OpenIDController.java index 7b589d15088..f1a45e11595 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/OpenIDController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/OpenIDController.java @@ -7,12 +7,9 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; -import org.orcid.core.manager.v3.read_only.PersonDetailsManagerReadOnly; -import org.orcid.core.oauth.openid.OpenIDConnectDiscoveryService; -import org.orcid.core.oauth.openid.OpenIDConnectKeyService; +import org.orcid.core.oauth.authorizationServer.AuthorizationServerUtil; import org.orcid.core.oauth.openid.OpenIDConnectUserInfo; import org.orcid.jaxb.model.message.ScopePathType; -import org.orcid.jaxb.model.v3.release.record.Person; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -21,26 +18,19 @@ import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonInclude.Include; -import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.ObjectWriter; import net.minidev.json.JSONObject; @Controller public class OpenIDController { - - @Resource - private OpenIDConnectKeyService openIDConnectKeyService; @Resource(name = "personDetailsManagerReadOnlyV3") private PersonDetailsManagerReadOnly personDetailsManagerReadOnly; - @Resource OpenIDConnectDiscoveryService openIDConnectDiscoveryService; - + @Resource + private AuthorizationServerUtil authorizationServerUtil; + @Value("${org.orcid.core.baseUri}") private String path; @@ -54,7 +44,8 @@ public class OpenIDController { */ @RequestMapping(value = "/oauth/jwks", method = RequestMethod.GET, produces = "application/json") public @ResponseBody JSONObject getJWKS(HttpServletRequest request) { - return openIDConnectKeyService.getPublicJWK().toJSONObject(); + //TODO: This should be a FW proxy to the auth server, maybe from nginx + throw new UnsupportedOperationException("Should be requested from the auth server"); } /** Manually checks bearer token in header, looks up user or throws 403. @@ -88,21 +79,28 @@ public class OpenIDController { private OpenIDConnectUserInfo getInfoFromToken(String tokenValue) { //TODO: Refactor this to get the information from the database // This is unexpected and should be done with token introspection form the oauth server - OAuth2AccessToken tok = tokenStore.readAccessToken(tokenValue); - if (tok != null && !tok.isExpired()){ - boolean hasScope = false; - Set requestedScopes = ScopePathType.getScopesFromStrings(tok.getScope()); - for (ScopePathType scope : requestedScopes) { - if (scope.hasScope(ScopePathType.AUTHENTICATE)) { - hasScope = true; + JSONObject tokenInfo = authorizationServerUtil.tokenIntrospection(tokenValue); + if(tokenInfo == null) { + return null; + } + + boolean isTokenActive = tokenInfo.getBoolean("active"); + + if(isTokenActive) { + // If the token is user revoked it might be used for DELETE requests + Set scopes = OAuth2Utils.parseParameterList(tokenInfo.getString("scope")); + OpenIDConnectUserInfo info = scopes.stream().forEach(s -> + { + ScopePathType scope = ScopePathType.fromValue(s); + if(scope.hasScope(ScopePathType.AUTHENTICATE)) { + OpenIDConnectUserInfo t = new OpenIDConnectUserInfo(); + //TODO set data to the token + //TODO the name doesn't come in the token introspection data, so, we should get it from the names cache + return t; } - } - if (hasScope){ - String orcid = tok.getAdditionalInformation().get("orcid").toString(); - Person person = personDetailsManagerReadOnly.getPublicPersonDetails(orcid); - return new OpenIDConnectUserInfo(orcid,person,path); - } - } + }); + return info; + } return null; } @@ -115,20 +113,8 @@ private OpenIDConnectUserInfo getInfoFromToken(String tokenValue) { */ @RequestMapping(value = "/.well-known/openid-configuration", method = RequestMethod.GET, produces = "application/json") public @ResponseBody String getOpenIDDiscovery(HttpServletRequest request) throws JsonProcessingException { - ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter(); - String json = ow.writeValueAsString(openIDConnectDiscoveryService.getConfig()); - return json; + //TODO: This should be a FW proxy to the auth server, maybe from nginx + throw new UnsupportedOperationException("Should be requested from the auth server"); } - - @JsonInclude(Include.NON_NULL) - public static class OpenIDConnectUserInfoAccessDenied extends OpenIDConnectUserInfo{ - @JsonProperty("error") - String error = "access_denied"; - @JsonProperty("error-description") - String errorDescription="access_token is invalid"; - OpenIDConnectUserInfoAccessDenied(){ - - } - } } diff --git a/orcid-web/src/main/resources/orcid-core-context-spam.xml b/orcid-web/src/main/resources/orcid-core-context-spam.xml index 5581f7b200d..08de0c879d9 100644 --- a/orcid-web/src/main/resources/orcid-core-context-spam.xml +++ b/orcid-web/src/main/resources/orcid-core-context-spam.xml @@ -25,10 +25,6 @@ - - - - @@ -40,17 +36,6 @@ - - - - - - - - - - - @@ -759,8 +744,6 @@ - - @@ -769,8 +752,7 @@ - - + From aa5d92c9e2b12c34f8415c9e5d2977a65d48bf69 Mon Sep 17 00:00:00 2001 From: amontenegro Date: Fri, 20 Mar 2026 14:19:54 -0600 Subject: [PATCH 03/77] Removing some dependencies --- .../api/common/jaxb/OrcidExceptionMapper.java | 10 - orcid-core/pom.xml | 5 + .../exception/OrcidCoreExceptionMapper.java | 2 - .../core/manager/ProfileEntityManager.java | 4 +- .../ClientDetailsEntityCacheManagerImpl.java | 6 +- .../impl/ProfileEntityManagerImpl.java | 9 - .../ClientDetailsManagerReadOnly.java | 3 +- .../ClientDetailsManagerReadOnlyImpl.java | 27 - .../ClientDetailsManagerReadOnly.java | 3 +- .../ClientDetailsManagerReadOnlyImpl.java | 27 - .../org/orcid/core/oauth/OAuthErrorUtils.java | 16 - .../core/utils/SecurityContextTestUtils.java | 2 - .../service/ClientDetailsManagerTest.java | 28 +- .../frontend/oauth2/OauthController.java | 488 ------------------ .../frontend/oauth2/RevokeController.java | 58 +-- .../web/controllers/LoginController.java | 35 +- 16 files changed, 24 insertions(+), 699 deletions(-) delete mode 100644 orcid-web/src/main/java/org/orcid/frontend/oauth2/OauthController.java diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/jaxb/OrcidExceptionMapper.java b/orcid-api-common/src/main/java/org/orcid/api/common/jaxb/OrcidExceptionMapper.java index c6423c3e94b..ee9f3285b6e 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/jaxb/OrcidExceptionMapper.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/jaxb/OrcidExceptionMapper.java @@ -41,9 +41,6 @@ import org.springframework.context.MessageSource; import org.springframework.security.authentication.DisabledException; import org.springframework.security.core.AuthenticationException; -import org.springframework.security.oauth2.common.exceptions.InvalidClientException; -import org.springframework.security.oauth2.common.exceptions.OAuth2Exception; -import org.springframework.security.oauth2.common.exceptions.RedirectMismatchException; import org.springframework.stereotype.Component; import org.springframework.web.context.request.RequestAttributes; import org.springframework.web.context.request.RequestContextHolder; @@ -112,8 +109,6 @@ public Response toResponse(Throwable t) { logShortError(t, clientId); } else if (t instanceof OrcidBadRequestException) { logShortError(t, clientId); - } else if (t instanceof RedirectMismatchException) { - logShortError(t, clientId); } else if (t instanceof DuplicatedGroupIdRecordException) { logShortError(t, clientId); } else if (t instanceof OrcidNotificationException) { @@ -138,8 +133,6 @@ public Response toResponse(Throwable t) { logShortError(t, clientId); } else if(t instanceof StartDateAfterEndDateException) { logShortError(t, clientId); - } else if(t instanceof InvalidClientException) { - logShortError(t, clientId); } else if (t instanceof SearchStartParameterLimitExceededException) { logShortError(t, clientId); } else if (t instanceof InvalidDisambiguatedOrgException) { @@ -208,9 +201,6 @@ private Response legacyErrorResponse(Throwable t) { } else if (AuthenticationException.class.isAssignableFrom(t.getClass())) { OrcidMessage entity = getLegacyOrcidEntity("Authentication problem : ", t); return Response.status(Response.Status.UNAUTHORIZED).entity(entity).build(); - } else if (OAuth2Exception.class.isAssignableFrom(t.getClass())) { - OrcidMessage entity = getLegacyOrcidEntity("OAuth2 problem : ", t); - return Response.status(Response.Status.UNAUTHORIZED).entity(entity).build(); } else if (OrcidInvalidScopeException.class.isAssignableFrom(t.getClass())) { OrcidMessage entity = getLegacyOrcidEntity("OAuth2 problem : ", t); return Response.status(Response.Status.UNAUTHORIZED).entity(entity).build(); diff --git a/orcid-core/pom.xml b/orcid-core/pom.xml index cbfbebdab72..85eb46b76fd 100644 --- a/orcid-core/pom.xml +++ b/orcid-core/pom.xml @@ -82,6 +82,11 @@ org.springframework spring-web + 5.3.20 + + + org.springframework.security + spring-security-web org.freemarker diff --git a/orcid-core/src/main/java/org/orcid/core/exception/OrcidCoreExceptionMapper.java b/orcid-core/src/main/java/org/orcid/core/exception/OrcidCoreExceptionMapper.java index d09e1f386e6..69b63df304d 100644 --- a/orcid-core/src/main/java/org/orcid/core/exception/OrcidCoreExceptionMapper.java +++ b/orcid-core/src/main/java/org/orcid/core/exception/OrcidCoreExceptionMapper.java @@ -20,7 +20,6 @@ import org.orcid.jaxb.model.v3.release.error.OrcidError; import org.springframework.context.MessageSource; import org.springframework.security.core.AuthenticationException; -import org.springframework.security.oauth2.common.exceptions.OAuth2Exception; import com.fasterxml.jackson.core.JsonParseException; @@ -83,7 +82,6 @@ public class OrcidCoreExceptionMapper { // 401 HTTP_STATUS_AND_ERROR_CODE_BY_THROWABLE_TYPE.put(AuthenticationException.class, new ImmutablePair<>(Response.Status.UNAUTHORIZED, 9002)); - HTTP_STATUS_AND_ERROR_CODE_BY_THROWABLE_TYPE.put(OAuth2Exception.class, new ImmutablePair<>(Response.Status.UNAUTHORIZED, 9003)); HTTP_STATUS_AND_ERROR_CODE_BY_THROWABLE_TYPE.put(OrcidUnauthorizedException.class, new ImmutablePair<>(Response.Status.UNAUTHORIZED, 9017)); HTTP_STATUS_AND_ERROR_CODE_BY_THROWABLE_TYPE.put(OrcidInvalidScopeException.class, new ImmutablePair<>(Response.Status.UNAUTHORIZED, 9015)); diff --git a/orcid-core/src/main/java/org/orcid/core/manager/ProfileEntityManager.java b/orcid-core/src/main/java/org/orcid/core/manager/ProfileEntityManager.java index 5a2eb26c5c5..f048f069e74 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/ProfileEntityManager.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/ProfileEntityManager.java @@ -19,7 +19,7 @@ public interface ProfileEntityManager extends ProfileEntityManagerReadOnly { boolean hasBeenGivenPermissionTo(String giverOrcid, String receiverOrcid); - boolean existsAndNotClaimedAndBelongsTo(String messageOrcid, String clientId); + boolean existsAndNotClaimedAndBelongsTo(String messageOrcid, String clientId); boolean isProfileDeprecated(String orcid); @@ -39,8 +39,6 @@ public interface ProfileEntityManager extends ProfileEntityManagerReadOnly { boolean reviewProfile(String orcid); - void disableApplication(Long tokenId, String userOrcid); - String getOrcidHash(String orcid) throws NoSuchAlgorithmException; String retrivePublicDisplayName(String orcid); diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/ClientDetailsEntityCacheManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/ClientDetailsEntityCacheManagerImpl.java index b1e331c8235..3ddaae1dbbd 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/ClientDetailsEntityCacheManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/ClientDetailsEntityCacheManagerImpl.java @@ -11,7 +11,6 @@ import org.orcid.core.utils.ReleaseNameUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.security.oauth2.common.exceptions.InvalidClientException; public class ClientDetailsEntityCacheManagerImpl implements ClientDetailsEntityCacheManager { @@ -26,20 +25,19 @@ public class ClientDetailsEntityCacheManagerImpl implements ClientDetailsEntityC @Resource(name = "clientDetailsEntityIdPCache") private Cache clientDetailsIdPCache; - private String releaseName = ReleaseNameUtils.getReleaseName(); + private final String releaseName = ReleaseNameUtils.getReleaseName(); @Override public ClientDetailsEntity retrieve(String clientId) throws IllegalArgumentException { Object key = new ClientIdCacheKey(clientId, releaseName); Date dbDate = retrieveLastModifiedDate(clientId); - ; ClientDetailsEntity clientDetails = clientDetailsCache.get(key); if (needsFresh(dbDate, clientDetails)) { clientDetails = clientDetailsCache.get(key); if (needsFresh(dbDate, clientDetails)) { clientDetails = clientDetailsManager.findByClientId(clientId); if (clientDetails == null) - throw new InvalidClientException("Client not found: " + clientId); + throw new IllegalArgumentException("Client not found: " + clientId); clientDetailsCache.put(key, clientDetails); } } diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/ProfileEntityManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/ProfileEntityManagerImpl.java index e711732854a..e21af5b6f5d 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/ProfileEntityManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/ProfileEntityManagerImpl.java @@ -13,7 +13,6 @@ import org.orcid.core.manager.read_only.RecordNameManagerReadOnly; import org.orcid.core.manager.read_only.impl.ProfileEntityManagerReadOnlyImpl; import org.orcid.core.manager.v3.EmailManager; -import org.orcid.core.oauth.OrcidOauth2TokenDetailService; import org.orcid.jaxb.model.clientgroup.MemberType; import org.orcid.jaxb.model.common_v2.Locale; import org.orcid.jaxb.model.record_v2.Name; @@ -33,9 +32,6 @@ public class ProfileEntityManagerImpl extends ProfileEntityManagerReadOnlyImpl i @Resource(name = "emailManagerV3") private EmailManager emailManagerV3; - @Resource - private OrcidOauth2TokenDetailService orcidOauth2TokenService; - @Resource private RecordNameManager recordNameManager; @@ -132,11 +128,6 @@ public boolean unreviewProfile(String orcid) { return profileDao.unreviewProfile(orcid); } - @Override - public void disableApplication(Long tokenId, String userOrcid) { - orcidOauth2TokenService.disableAccessToken(tokenId, userOrcid); - } - @Override public String getOrcidHash(String orcid) throws NoSuchAlgorithmException { if (PojoUtil.isEmpty(orcid)) { diff --git a/orcid-core/src/main/java/org/orcid/core/manager/read_only/ClientDetailsManagerReadOnly.java b/orcid-core/src/main/java/org/orcid/core/manager/read_only/ClientDetailsManagerReadOnly.java index 8cbdf99badd..af9d9e67fd3 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/read_only/ClientDetailsManagerReadOnly.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/read_only/ClientDetailsManagerReadOnly.java @@ -4,9 +4,8 @@ import java.util.List; import org.orcid.persistence.jpa.entities.ClientDetailsEntity; -import org.springframework.security.oauth2.provider.ClientDetailsService; -public interface ClientDetailsManagerReadOnly extends ClientDetailsService { +public interface ClientDetailsManagerReadOnly { ClientDetailsEntity findByClientId(String orcid); List getAll(); diff --git a/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/ClientDetailsManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/ClientDetailsManagerReadOnlyImpl.java index fed04a51b54..10029e48d82 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/ClientDetailsManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/ClientDetailsManagerReadOnlyImpl.java @@ -17,8 +17,6 @@ import org.orcid.persistence.jpa.entities.ClientDetailsEntity; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.security.oauth2.common.exceptions.InvalidClientException; -import org.springframework.security.oauth2.common.exceptions.OAuth2Exception; public class ClientDetailsManagerReadOnlyImpl implements ClientDetailsManagerReadOnly { @@ -49,31 +47,6 @@ public void setClientSecretDao(ClientSecretDao clientSecretDao) { public void setClientRedirectDao(ClientRedirectDao clientRedirectDao) { this.clientRedirectDao = clientRedirectDao; } - - /** - * Load a client by the client id. This method must NOT return null. - * - * @param clientId - * The client id. - * @return The client details. - * @throws org.springframework.security.oauth2.common.exceptions.OAuth2Exception - * If the client account is locked, expired, disabled, or for - * any other reason. - */ - @Override - public ClientDetailsEntity loadClientByClientId(String clientId) throws OAuth2Exception { - ClientDetailsEntity clientDetails = findByClientId(clientId); - if (clientDetails != null) { - if (!clientDetails.getClientId().equals(clientId)) - LOGGER.error("Client getClientId doesn't match. Requested: " + clientId + " Returned: " + clientDetails.getClientId()); - if (!clientDetails.getId().equals(clientId)) - LOGGER.error("Client getId() doesn't match. Requested: " + clientId + " Returned: " + clientDetails.getId()); - clientDetails.setDecryptedClientSecret(encryptionManager.decryptForInternalUse(clientDetails.getClientSecretForJpa())); - return clientDetails; - } else { - throw new InvalidClientException("Client not found: " + clientId); - } - } @Override public ClientDetailsEntity findByClientId(String clientId) { diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/ClientDetailsManagerReadOnly.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/ClientDetailsManagerReadOnly.java index 74c2b38e6b5..ba6ded14b2d 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/ClientDetailsManagerReadOnly.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/ClientDetailsManagerReadOnly.java @@ -5,9 +5,8 @@ import org.orcid.jaxb.model.v3.release.client.ClientSummary; import org.orcid.persistence.jpa.entities.ClientDetailsEntity; -import org.springframework.security.oauth2.provider.ClientDetailsService; -public interface ClientDetailsManagerReadOnly extends ClientDetailsService { +public interface ClientDetailsManagerReadOnly { ClientDetailsEntity findByClientId(String orcid); List getAll(); diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ClientDetailsManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ClientDetailsManagerReadOnlyImpl.java index 50819febf2b..2a03d5d22da 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ClientDetailsManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ClientDetailsManagerReadOnlyImpl.java @@ -18,8 +18,6 @@ import org.orcid.persistence.jpa.entities.ClientDetailsEntity; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.security.oauth2.common.exceptions.InvalidClientException; -import org.springframework.security.oauth2.common.exceptions.OAuth2Exception; public class ClientDetailsManagerReadOnlyImpl implements ClientDetailsManagerReadOnly { @@ -51,31 +49,6 @@ public void setClientRedirectDao(ClientRedirectDao clientRedirectDao) { this.clientRedirectDao = clientRedirectDao; } - /** - * Load a client by the client id. This method must NOT return null. - * - * @param clientId - * The client id. - * @return The client details. - * @throws org.springframework.security.oauth2.common.exceptions.OAuth2Exception - * If the client account is locked, expired, disabled, or for - * any other reason. - */ - @Override - public ClientDetailsEntity loadClientByClientId(String clientId) throws OAuth2Exception { - ClientDetailsEntity clientDetails = findByClientId(clientId); - if (clientDetails != null) { - if (!clientDetails.getClientId().equals(clientId)) - LOGGER.error("Client getClientId doesn't match. Requested: " + clientId + " Returned: " + clientDetails.getClientId()); - if (!clientDetails.getId().equals(clientId)) - LOGGER.error("Client getId() doesn't match. Requested: " + clientId + " Returned: " + clientDetails.getId()); - clientDetails.setDecryptedClientSecret(encryptionManager.decryptForInternalUse(clientDetails.getClientSecretForJpa())); - return clientDetails; - } else { - throw new InvalidClientException("Client not found: " + clientId); - } - } - @Override public ClientDetailsEntity findByClientId(String clientId) { ClientDetailsEntity result = null; diff --git a/orcid-core/src/main/java/org/orcid/core/oauth/OAuthErrorUtils.java b/orcid-core/src/main/java/org/orcid/core/oauth/OAuthErrorUtils.java index 83548f13281..a63b7f07347 100644 --- a/orcid-core/src/main/java/org/orcid/core/oauth/OAuthErrorUtils.java +++ b/orcid-core/src/main/java/org/orcid/core/oauth/OAuthErrorUtils.java @@ -9,10 +9,6 @@ import org.orcid.core.exception.OrcidDeprecatedException; import org.orcid.core.exception.OrcidInvalidScopeException; import org.springframework.security.authentication.InsufficientAuthenticationException; -import org.springframework.security.oauth2.common.exceptions.InvalidGrantException; -import org.springframework.security.oauth2.common.exceptions.InvalidScopeException; -import org.springframework.security.oauth2.common.exceptions.InvalidTokenException; -import org.springframework.security.oauth2.common.exceptions.UnsupportedGrantTypeException; public class OAuthErrorUtils { @@ -25,33 +21,21 @@ public static OAuthError getOAuthError(Throwable t) { } else if (ClientDeactivatedException.class.isAssignableFrom(t.getClass())) { error.setError(OAuthError.UNAUTHORIZED_CLIENT); error.setResponseStatus(Status.BAD_REQUEST); - } else if (UnsupportedGrantTypeException.class.isAssignableFrom(t.getClass())) { - error.setError(OAuthError.UNSUPPORTED_GRANT_TYPE); - error.setResponseStatus(Status.BAD_REQUEST); } else if (OrcidInvalidScopeException.class.isAssignableFrom(t.getClass())) { error.setError(OAuthError.INVALID_SCOPE); error.setResponseStatus(Status.UNAUTHORIZED); - } else if (InvalidScopeException.class.isAssignableFrom(t.getClass())) { - error.setError(OAuthError.INVALID_SCOPE); - error.setResponseStatus(Status.BAD_REQUEST); } else if (InsufficientAuthenticationException.class.isAssignableFrom(t.getClass())) { error.setError(OAuthError.UNAUTHORIZED_CLIENT); error.setResponseStatus(Status.UNAUTHORIZED); } else if (IllegalArgumentException.class.isAssignableFrom(t.getClass())) { error.setError(OAuthError.INVALID_REQUEST); error.setResponseStatus(Status.BAD_REQUEST); - } else if (InvalidGrantException.class.isAssignableFrom(t.getClass())) { - error.setError(OAuthError.INVALID_GRANT); - error.setResponseStatus(Status.BAD_REQUEST); } else if(DeactivatedException.class.isAssignableFrom(t.getClass())) { error.setError(OAuthError.UNAUTHORIZED_CLIENT); error.setResponseStatus(Status.BAD_REQUEST); } else if(OrcidDeprecatedException.class.isAssignableFrom(t.getClass())) { error.setError(OAuthError.UNAUTHORIZED_CLIENT); error.setResponseStatus(Status.BAD_REQUEST); - } else if (InvalidTokenException.class.isAssignableFrom(t.getClass())) { - error.setError(OAuthError.UNAUTHORIZED_CLIENT); - error.setResponseStatus(Status.BAD_REQUEST); } else if(MissingArgumentException.class.isAssignableFrom(t.getClass())) { error.setError(OAuthError.UNAUTHORIZED_CLIENT); error.setResponseStatus(Status.BAD_REQUEST); diff --git a/orcid-core/src/main/java/org/orcid/core/utils/SecurityContextTestUtils.java b/orcid-core/src/main/java/org/orcid/core/utils/SecurityContextTestUtils.java index fc41cd175ea..8a6510a3387 100644 --- a/orcid-core/src/main/java/org/orcid/core/utils/SecurityContextTestUtils.java +++ b/orcid-core/src/main/java/org/orcid/core/utils/SecurityContextTestUtils.java @@ -18,8 +18,6 @@ import org.springframework.security.core.context.SecurityContextImpl; import org.springframework.security.core.userdetails.User; import org.springframework.security.core.userdetails.UserDetails; -import org.springframework.security.oauth2.provider.OAuth2Request; -import org.springframework.security.oauth2.provider.authentication.OAuth2AuthenticationDetails; public class SecurityContextTestUtils { diff --git a/orcid-core/src/test/java/org/orcid/core/oauth/service/ClientDetailsManagerTest.java b/orcid-core/src/test/java/org/orcid/core/oauth/service/ClientDetailsManagerTest.java index a31dc0cc51d..b80f0457509 100644 --- a/orcid-core/src/test/java/org/orcid/core/oauth/service/ClientDetailsManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/oauth/service/ClientDetailsManagerTest.java @@ -25,7 +25,6 @@ import org.orcid.test.DBUnitTest; import org.orcid.test.OrcidJUnit4ClassRunner; import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.oauth2.provider.ClientDetails; import org.springframework.test.annotation.Rollback; import org.springframework.test.context.ContextConfiguration; import org.springframework.transaction.annotation.Transactional; @@ -58,24 +57,6 @@ public static void removeDBUnitData() throws Exception { removeDBUnitData(Arrays.asList("/data/ClientDetailsEntityData.xml", "/data/ProfileEntityData.xml")); } - @Test - @Rollback - @Transactional - public void testLoadClientByClientId() throws Exception { - List all = clientDetailsManager.getAll(); - String[] clientExceptionList = new String[] { "APP-5555555555555555", "APP-5555555555555556", "APP-5555555555555557", "APP-5555555555555558", - "APP-6666666666666666" }; - assertEquals(12, all.size()); - for (ClientDetailsEntity clientDetailsEntity : all) { - ClientDetails clientDetails = clientDetailsManager.loadClientByClientId(clientDetailsEntity.getId()); - assertNotNull(clientDetails); - boolean exceptionClients = Arrays.stream(clientExceptionList).anyMatch(x -> x.equals(clientDetailsEntity.getId())); - if (!exceptionClients) { - checkClientDetails(clientDetails); - } - } - } - @Test @Rollback @Transactional @@ -152,20 +133,15 @@ private void checkClientDetails(ClientDetailsEntity clientDetails) { assertNotNull(clientDetails); assertEquals(clientDetails.getClientDescription(), CLIENT_DESCRIPTION); assertEquals(clientDetails.getClientName(), CLIENT_NAME); - checkClientDetails((ClientDetails) clientDetails); - } - - private void checkClientDetails(ClientDetails clientDetails) { String clientId = clientDetails.getClientId(); assertNotNull(clientId); Set registeredRedirectUris = clientDetails.getRegisteredRedirectUri(); assertNotNull(registeredRedirectUris); - if (clientDetails.getClientId().equals("4444-4444-4444-4445") || clientDetails.getClientId().equals("4444-4444-4444-4498")) { + if (clientId.equals("4444-4444-4444-4445") || clientId.equals("4444-4444-4444-4498")) { assertEquals(2, registeredRedirectUris.size()); } else { assertEquals(1, registeredRedirectUris.size()); } - Collection authorities = clientDetails.getAuthorities(); assertNotNull(authorities); assertEquals(1, authorities.size()); @@ -176,7 +152,7 @@ private void checkClientDetails(ClientDetails clientDetails) { } else if (!clientDetails.getClientId().equals("APP-1234567898765432")) { assertEquals(3, authorizedGrantTypes.size()); } - + String clientSecret = clientDetails.getClientSecret(); assertNotNull(clientSecret); Set resourceIds = clientDetails.getResourceIds(); diff --git a/orcid-web/src/main/java/org/orcid/frontend/oauth2/OauthController.java b/orcid-web/src/main/java/org/orcid/frontend/oauth2/OauthController.java deleted file mode 100644 index 39d9c367553..00000000000 --- a/orcid-web/src/main/java/org/orcid/frontend/oauth2/OauthController.java +++ /dev/null @@ -1,488 +0,0 @@ -package org.orcid.frontend.oauth2; - -import java.io.UnsupportedEncodingException; -import java.net.URLDecoder; -import java.security.Principal; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; - -import org.apache.commons.lang3.StringUtils; -import org.orcid.core.common.manager.EventManager; -import org.orcid.core.constants.OrcidOauth2Constants; -import org.orcid.core.exception.ClientDeactivatedException; -import org.orcid.core.exception.LockedException; -import org.orcid.core.manager.ClientDetailsEntityCacheManager; -import org.orcid.core.manager.impl.OrcidUrlManager; -import org.orcid.core.manager.v3.ProfileEntityManager; -import org.orcid.core.oauth.OrcidRandomValueTokenServices; -import org.orcid.core.oauth.service.OrcidAuthorizationEndpoint; -import org.orcid.core.oauth.service.OrcidOAuth2RequestValidator; -import org.orcid.core.togglz.Features; -import org.orcid.frontend.util.AuthorizationRequestLocalCache; -import org.orcid.frontend.util.OriginalAuthorizationRequestLocalCache; -import org.orcid.frontend.util.RequestInfoFormLocalCache; -import org.orcid.frontend.web.controllers.BaseControllerUtil; -import org.orcid.frontend.web.controllers.helper.OauthHelper; -import org.orcid.frontend.web.exception.OauthInvalidRequestException; -import org.orcid.jaxb.model.message.ScopePathType; -import org.orcid.persistence.jpa.entities.ClientDetailsEntity; -import org.orcid.persistence.jpa.entities.ClientGrantedAuthorityEntity; -import org.orcid.persistence.jpa.entities.EventType; -import org.orcid.persistence.jpa.entities.keys.ClientGrantedAuthorityPk; -import org.orcid.pojo.ajaxForm.PojoUtil; -import org.orcid.pojo.ajaxForm.RequestInfoForm; -import org.springframework.security.core.context.SecurityContext; -import org.springframework.security.oauth2.common.exceptions.InvalidClientException; -import org.springframework.security.oauth2.common.exceptions.InvalidRequestException; -import org.springframework.security.oauth2.common.exceptions.InvalidScopeException; -import org.springframework.security.oauth2.common.exceptions.RedirectMismatchException; -import org.springframework.security.oauth2.common.exceptions.UnsupportedResponseTypeException; -import org.springframework.security.oauth2.common.util.OAuth2Utils; -import org.springframework.security.oauth2.provider.AuthorizationRequest; -import org.springframework.stereotype.Controller; -import org.springframework.util.MultiValueMap; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.support.SessionStatus; -import org.springframework.web.bind.support.SimpleSessionStatus; -import org.springframework.web.servlet.ModelAndView; -import org.springframework.web.servlet.view.RedirectView; -import org.springframework.web.util.UriComponentsBuilder; - -@Controller("oauthController") -public class OauthController { - - private BaseControllerUtil baseControllerUtil = new BaseControllerUtil(); - - @Resource - private OauthHelper oauthHelper; - - @Resource - private OrcidAuthorizationEndpoint authorizationEndpoint; - - @Resource - private OrcidOAuth2RequestValidator orcidOAuth2RequestValidator; - - @Resource - private ClientDetailsEntityCacheManager clientDetailsEntityCacheManager; - - @Resource - protected OrcidUrlManager orcidUrlManager; - - @Resource - protected OrcidRandomValueTokenServices tokenServices; - - @Resource(name = "profileEntityManagerV3") - private ProfileEntityManager profileEntityManager; - - @Resource - private EventManager eventManager; - - @Resource - private RequestInfoFormLocalCache requestInfoFormLocalCache; - - @Resource - private AuthorizationRequestLocalCache authorizationRequestLocalCache; - - @Resource - private OriginalAuthorizationRequestLocalCache originalAuthorizationRequestLocalCache; - - @RequestMapping(value = { "/oauth/custom/init.json" }, method = RequestMethod.POST) - public @ResponseBody RequestInfoForm loginGetHandler(HttpServletRequest request, Map model, @RequestParam Map requestParameters, - SessionStatus sessionStatus, Principal principal) throws UnsupportedEncodingException { - // Populate the request info form - RequestInfoForm requestInfoForm = generateRequestInfoForm(request, request.getQueryString(), model, requestParameters, sessionStatus, principal); - - // Store the request info form in the cache - requestInfoFormLocalCache.put(request.getSession().getId(), requestInfoForm); - - boolean isResponseSet = false; - - // Verify if we already have the response set in the URL - if (!PojoUtil.isEmpty(requestInfoForm.getResponseType())) { - MultiValueMap parameters = UriComponentsBuilder.fromUriString(requestInfoForm.getRedirectUrl()).build().getQueryParams(); - List responseParam = parameters.get(requestInfoForm.getResponseType()); - if (responseParam != null && !responseParam.isEmpty() && !PojoUtil.isEmpty(responseParam.get(0))) { - isResponseSet = true; - if (Features.EVENTS.isActive()) { - eventManager.createReauthorizeEvent(requestInfoForm.getClientId()); - } - } - } - - if (requestInfoForm.getError() != null || isResponseSet) { - return requestInfoForm; - } - - // validate client scopes - try { - ClientDetailsEntity clientDetails = clientDetailsEntityCacheManager.retrieve(requestInfoForm.getClientId()); - authorizationEndpoint.validateScope(requestInfoForm.getScopesAsString(), clientDetails, requestInfoForm.getResponseType()); - orcidOAuth2RequestValidator.validateClientIsEnabled(clientDetails); - } catch (InvalidScopeException | LockedException | ClientDeactivatedException | InvalidClientException e) { - if (e instanceof InvalidScopeException) { - requestInfoForm.setError("invalid_scope"); - requestInfoForm.setErrorDescription(e.getMessage()); - } else if (e instanceof InvalidClientException) { - requestInfoForm.setError("invalid_client"); - requestInfoForm.setErrorDescription(e.getMessage()); - } else if (e instanceof LockedException){ - requestInfoForm.setError("client_locked"); - requestInfoForm.setErrorDescription(e.getMessage()); - } else { - requestInfoForm.setError("client_deactivated"); - requestInfoForm.setErrorDescription(e.getMessage()); - } - return requestInfoForm; - } - - // Authorize the request if needed - return setAuthorizationRequest(request, model, requestParameters, sessionStatus, principal, requestInfoForm); - } - - @RequestMapping(value = { "/oauth/custom/authorize.json" }, method = RequestMethod.GET) - public @ResponseBody RequestInfoForm requestInfoForm(HttpServletRequest request, Map model, @RequestParam Map requestParameters, - SessionStatus sessionStatus, Principal principal) throws UnsupportedEncodingException { - RequestInfoForm requestInfoForm = requestInfoFormLocalCache.get(request.getSession().getId()); - oauthHelper.setUserName(requestInfoForm); - requestInfoFormLocalCache.put(request.getSession().getId(), requestInfoForm); - return setAuthorizationRequest(request, model, requestParameters, sessionStatus, principal, requestInfoForm); - } - - @RequestMapping(value = { "/oauth/custom/requestInfoForm.json" }, method = RequestMethod.GET) - public @ResponseBody RequestInfoForm customRequestInfoForm(HttpServletRequest request, Map model, @RequestParam Map requestParameters, - SessionStatus sessionStatus, Principal principal) throws UnsupportedEncodingException { - RequestInfoForm requestInfoForm = new RequestInfoForm(); - if(requestInfoFormLocalCache.containsKey(request.getSession().getId())) { - requestInfoForm = requestInfoFormLocalCache.get(request.getSession().getId()); - oauthHelper.setUserName(requestInfoForm); - if (requestParameters.isEmpty() && request.getSession().getAttribute(OrcidOauth2Constants.OAUTH_QUERY_STRING) != null) { - try { - String url = URLDecoder.decode((String) request.getSession().getAttribute(OrcidOauth2Constants.OAUTH_QUERY_STRING), "UTF-8").trim(); - if (url.startsWith("oauth=&")) { - url = url.replaceFirst("oauth=&", ""); - } - String[] pairs = url.split("&"); - for (int i = 0; i < pairs.length; i++) { - String pair = pairs[i]; - String[] keyValue = pair.split("="); - requestParameters.put(keyValue[0], keyValue[1]); - } - setAuthorizationRequest(request, model, requestParameters, sessionStatus, principal, requestInfoForm); - } catch (NullPointerException | ArrayIndexOutOfBoundsException e) { - requestInfoForm.setError("oauth_error"); - requestInfoForm.setErrorDescription("Invalid request"); - } - } - } - return requestInfoForm; - } - - private RequestInfoForm generateRequestInfoForm(HttpServletRequest request, String queryString, Map model, @RequestParam Map requestParameters, - SessionStatus sessionStatus, Principal principal) throws UnsupportedEncodingException { - // Generate the request info form - String url = request.getQueryString(); - RequestInfoForm requestInfoForm = new RequestInfoForm(); - try { - // Get and save the request information form - requestInfoForm = oauthHelper.generateRequestInfoForm(url); - } catch (InvalidClientException e) { - requestInfoForm.setError("invalid_client"); - requestInfoForm.setErrorDescription(e.getMessage()); - return requestInfoForm; - } catch (OauthInvalidRequestException e) { - requestInfoForm.setError("oauth_error"); - requestInfoForm.setErrorDescription(e.getMessage()); - return requestInfoForm; - } catch (InvalidRequestException e) { - requestInfoForm.setError("oauth_error"); - requestInfoForm.setErrorDescription(e.getMessage()); - return requestInfoForm; - } - - // Check that the client have the required permissions - // Get client name - String clientId = requestInfoForm.getClientId(); - if (PojoUtil.isEmpty(clientId)) { - requestInfoForm.setError("invalid_client"); - requestInfoForm.setErrorDescription("invalid client_id"); - return requestInfoForm; - } - - // Validate client details - ClientDetailsEntity clientDetails = clientDetailsEntityCacheManager.retrieve(clientId); - try { - orcidOAuth2RequestValidator.validateClientIsEnabled(clientDetails); - } catch (LockedException e) { - requestInfoForm.setError("client_locked"); - requestInfoForm.setErrorDescription(e.getMessage()); - return requestInfoForm; - } catch (ClientDeactivatedException e) { - requestInfoForm.setError("client_deactivated"); - requestInfoForm.setErrorDescription(e.getMessage()); - return requestInfoForm; - } - - // Populate the user session - populateSession(request, requestInfoForm); - - // handle openID behaviour - if (!PojoUtil.isEmpty(requestInfoForm.getScopesAsString()) - && ScopePathType.getScopesFromSpaceSeparatedString(requestInfoForm.getScopesAsString()).contains(ScopePathType.OPENID)) { - String prompt = request.getParameter(OrcidOauth2Constants.PROMPT); - if (prompt != null && prompt.equals(OrcidOauth2Constants.PROMPT_NONE)) { - SecurityContext sci = getSecurityContext(request); - if (baseControllerUtil.getCurrentUser(sci) != null) { - requestInfoForm.setError("interaction_required"); - } else { - requestInfoForm.setError("login_required"); - } - - return requestInfoForm; - } - } - - // force a login even if the user is already logged in if openid - // prompt=login param present - boolean forceLogin = false; - if (!PojoUtil.isEmpty(requestInfoForm.getScopesAsString()) - && ScopePathType.getScopesFromSpaceSeparatedString(requestInfoForm.getScopesAsString()).contains(ScopePathType.OPENID)) { - String prompt = request.getParameter(OrcidOauth2Constants.PROMPT); - if (prompt != null && prompt.equals(OrcidOauth2Constants.PROMPT_LOGIN)) { - requestInfoForm.setForceLogin(true); - return requestInfoForm; - } - } - - //implicit id_token requests must have nonce. - if (!PojoUtil.isEmpty(requestInfoForm.getScopesAsString()) - && ScopePathType.getScopesFromSpaceSeparatedString(requestInfoForm.getScopesAsString()).contains(ScopePathType.OPENID) - && request.getParameter(OAuth2Utils.RESPONSE_TYPE).contains("id_token") - && request.getParameter(OrcidOauth2Constants.NONCE) == null) { - requestInfoForm.setError("invalid_request"); - requestInfoForm.setErrorDescription("Implicit id_token requests must have nonce"); - return requestInfoForm; - } - - SecurityContext sci = getSecurityContext(request); - - //Check for prompt=login and max_age. This is a MUST in the openid spec. - //If found redirect back to the signin page. - //Add check for prompt=confirm here. This is a SHOULD in the openid spec. - //If found, force user to confirm permissions. - boolean forceConfirm = false; - if (!PojoUtil.isEmpty(requestInfoForm.getScopesAsString()) && ScopePathType.getScopesFromSpaceSeparatedString(requestInfoForm.getScopesAsString()).contains(ScopePathType.OPENID) ){ - String prompt = request.getParameter(OrcidOauth2Constants.PROMPT); - String maxAge = request.getParameter(OrcidOauth2Constants.MAX_AGE); - if (baseControllerUtil.getCurrentUser(sci) != null) { - String orcid = baseControllerUtil.getCurrentUser(sci).getUsername(); - if (maxAge != null) { - //if maxAge+lastlogin > now, force login. max_age is in seconds. - java.util.Date authTime = profileEntityManager.getLastLogin(orcid); //is also on the entity. - try { - long max = Long.parseLong(maxAge); - if (authTime == null || ((authTime.getTime() + (max * 1000)) < (new java.util.Date()).getTime())) { - requestInfoForm.setForceLogin(true); - return requestInfoForm; - } - } catch (NumberFormatException e) { - //ignore - } - } - if (prompt != null && prompt.equals(OrcidOauth2Constants.PROMPT_CONFIRM)) { - forceConfirm = true; - } else if (prompt != null && prompt.equals(OrcidOauth2Constants.PROMPT_LOGIN)) { - requestInfoForm.setForceLogin(true); - return requestInfoForm; - } - } - } - boolean usePersistentTokens = false; - - // Check if the client has persistent tokens enabled - if (clientDetails.isPersistentTokensEnabled()) { - usePersistentTokens = true; - } - - if (!forceConfirm && usePersistentTokens && baseControllerUtil.getCurrentUser(sci) != null) { - boolean tokenLongLifeAlreadyExists = tokenServices.longLifeTokenExist(requestInfoForm.getClientId(), baseControllerUtil.getCurrentUser(sci).getUsername(), OAuth2Utils.parseParameterList(requestInfoForm.getScopesAsString())); - if (tokenLongLifeAlreadyExists) { - setAuthorizationRequest(request, model, requestParameters, sessionStatus, principal, requestInfoForm); - AuthorizationRequest authorizationRequest = authorizationRequestLocalCache.get(request.getSession().getId()); - if (authorizationRequest != null) { - Map requestParams = new HashMap(); - copyRequestParameters(request, requestParams); - Map approvalParams = new HashMap(); - - requestParams.put(OAuth2Utils.USER_OAUTH_APPROVAL, "true"); - approvalParams.put(OAuth2Utils.USER_OAUTH_APPROVAL, "true"); - - requestParams.put(OrcidOauth2Constants.TOKEN_VERSION, OrcidOauth2Constants.PERSISTENT_TOKEN); - - boolean hasPersistent = hasPersistenTokensEnabled(requestInfoForm.getClientId(), requestInfoForm); - // Don't let non persistent clients persist - if (!hasPersistent && "true".equals(requestParams.get(OrcidOauth2Constants.GRANT_PERSISTENT_TOKEN))){ - requestParams.put(OrcidOauth2Constants.GRANT_PERSISTENT_TOKEN, "false"); - } - //default to client default if not set - if (requestParams.get(OrcidOauth2Constants.GRANT_PERSISTENT_TOKEN) == null) { - if (hasPersistent) - requestParams.put(OrcidOauth2Constants.GRANT_PERSISTENT_TOKEN, "true"); - else - requestParams.put(OrcidOauth2Constants.GRANT_PERSISTENT_TOKEN, "false"); - } - - // Session status - SimpleSessionStatus status = new SimpleSessionStatus(); - - authorizationRequest.setRequestParameters(requestParams); - // Authorization request model - Map modelAuth = new HashMap(); - modelAuth.put("authorizationRequest", authorizationRequest); - - Map originalRequest = originalAuthorizationRequestLocalCache.get(request.getSession().getId()); - if(originalRequest != null) { - modelAuth.put(OrcidOauth2Constants.ORIGINAL_AUTHORIZATION_REQUEST, originalRequest); - } - - // Approve using the spring authorization endpoint code. - //note this will also handle generating implicit tokens via getTokenGranter().grant("implicit",new ImplicitTokenRequest(tokenRequest, storedOAuth2Request)); - RedirectView view = (RedirectView) authorizationEndpoint.approveOrDeny(approvalParams, modelAuth, status, principal); - requestInfoForm.setRedirectUrl(view.getUrl()); - // Oauth has been approved, hence, remove the oauth flag from the session - requestInfoFormLocalCache.remove(request.getSession().getId()); - request.getSession().removeAttribute(OrcidOauth2Constants.OAUTH_2SCREENS); - } - } - } - - return requestInfoForm; - } - - private void populateSession(HttpServletRequest request, RequestInfoForm requestInfoForm) { - String url = request.getQueryString(); - - requestInfoFormLocalCache.put(request.getSession().getId(), requestInfoForm); - - // Save also the original query string - request.getSession().setAttribute(OrcidOauth2Constants.OAUTH_QUERY_STRING, url); - - // Save a flag to indicate this is a Oauth request - request.getSession().setAttribute(OrcidOauth2Constants.OAUTH_2SCREENS, true); - - //Required to be able to work with org.springframework.security.oauth2.provider.endpoint.AuthorizationEndpoint to authorize the request - Map authorizationRequestMap = new HashMap(); - - authorizationRequestMap.put(OAuth2Utils.CLIENT_ID, requestInfoForm.getClientId()); - authorizationRequestMap.put(OAuth2Utils.REDIRECT_URI, requestInfoForm.getRedirectUrl()); - authorizationRequestMap.put(OrcidOauth2Constants.APPROVED, false); - authorizationRequestMap.put(OrcidOauth2Constants.RESOURCE_IDS, Set.of("orcid")); - - ClientDetailsEntity clientDetails = clientDetailsEntityCacheManager.retrieve(requestInfoForm.getClientId()); - ClientGrantedAuthorityEntity cgae = new ClientGrantedAuthorityEntity(); - cgae.setClientId(clientDetails.getClientId()); - cgae.setAuthority((clientDetails.getClientGrantedAuthorities().isEmpty()) ? "ROLE_CLIENT" : clientDetails.getClientGrantedAuthorities().get(0).getAuthority()); - authorizationRequestMap.put(OrcidOauth2Constants.AUTHORITIES, Set.of(cgae)); - - if(requestInfoForm.getStateParam() != null) { - authorizationRequestMap.put(OAuth2Utils.STATE, requestInfoForm.getStateParam()); - } - - if (requestInfoForm.getScopes() != null) { - Set scopes = new HashSet(); - requestInfoForm.getScopes().forEach(s -> {scopes.add(s.getValue());}); - authorizationRequestMap.put(OAuth2Utils.SCOPE, Set.copyOf(scopes)); - } - - if (requestInfoForm.getResponseType() != null) { - String scope = requestInfoForm.getScopesAsString(); - String responseType = requestInfoForm.getResponseType(); - if(authorizationEndpoint.isOpenIdWithTokenResponseType(scope, responseType)) { - authorizationRequestMap.put(OAuth2Utils.RESPONSE_TYPE, Set.of("id_token", "token")); - } else { - authorizationRequestMap.put(OAuth2Utils.RESPONSE_TYPE, Set.of(requestInfoForm.getResponseType())); - } - } - - Map originalAuthorizationRequest = Map.copyOf(authorizationRequestMap); - originalAuthorizationRequestLocalCache.put(request.getSession().getId(), originalAuthorizationRequest); - } - - private RequestInfoForm setAuthorizationRequest(HttpServletRequest request, Map model, @RequestParam Map requestParameters, - SessionStatus sessionStatus, Principal principal, RequestInfoForm requestInfoForm) { - SecurityContext sci = getSecurityContext(request); - authorizationRequestLocalCache.remove(request.getSession().getId()); - if (baseControllerUtil.getCurrentUser(sci) != null) { - // Authorize the request - try { - ModelAndView mav = authorizationEndpoint.authorize(model, requestParameters, sessionStatus, principal); - RedirectView rev = (RedirectView) mav.getView(); - if (rev != null) { - String url = rev.getUrl(); - String errorDescription = "error_description="; - if (url.contains("error")) { - requestInfoForm.setError("invalid_scope"); - requestInfoForm.setErrorDescription(url.substring(url.indexOf("error_description=") + errorDescription.length())); - } - } - - // If there are not errors, store the authorizationRequest in the local cache - if(StringUtils.isEmpty(requestInfoForm.getError())) { - AuthorizationRequest authRequest = (AuthorizationRequest) mav.getModel().get("authorizationRequest"); - authorizationRequestLocalCache.put(request.getSession().getId(), authRequest); - } - } catch (RedirectMismatchException e ) { - requestInfoForm.setError("invalid_grant"); - requestInfoForm.setErrorDescription("Redirect URI doesn't match your registered redirect URIs."); - } catch (UnsupportedResponseTypeException e) { - requestInfoForm.setError("unsupported_response_type"); - requestInfoForm.setErrorDescription("Unsupported response type."); - } - } - return requestInfoForm; - } - - private SecurityContext getSecurityContext(HttpServletRequest request) { - SecurityContext sci = null; - if (request.getSession() != null) { - sci = (SecurityContext) request.getSession().getAttribute("SPRING_SECURITY_CONTEXT"); - } - return sci; - } - - protected boolean hasPersistenTokensEnabled(String clientId, RequestInfoForm requestInfoForm) throws IllegalArgumentException { - ClientDetailsEntity clientDetails = clientDetailsEntityCacheManager.retrieve(clientId); - if (clientDetails == null) { - requestInfoForm.setError("invalid_client"); - requestInfoForm.setErrorDescription("invalid client_id"); - return false; - } else { - return clientDetails.isPersistentTokensEnabled(); - } - } - - private void copyRequestParameters(HttpServletRequest request, Map params) { - if (request != null && request.getParameterMap() != null) { - Map savedParams = request.getParameterMap(); - copy(savedParams, params); - } - } - - protected void copy(Map savedParams, Map params) { - if (savedParams != null && !savedParams.isEmpty()) { - for (String key : savedParams.keySet()) { - String[] values = savedParams.get(key); - if (values != null && values.length > 0) - params.put(key, values[0]); - } - } - } -} diff --git a/orcid-web/src/main/java/org/orcid/frontend/oauth2/RevokeController.java b/orcid-web/src/main/java/org/orcid/frontend/oauth2/RevokeController.java index c5943681dd8..d0ebd391458 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/oauth2/RevokeController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/oauth2/RevokeController.java @@ -28,59 +28,23 @@ public class RevokeController { private static final Logger LOGGER = LoggerFactory.getLogger(RevokeController.class); - @Resource - private OrcidOauth2TokenDetailService orcidOauth2TokenDetailService; - @Resource private AuthorizationServerUtil authorizationServerUtil; - public void setOrcidOauth2TokenDetailService(OrcidOauth2TokenDetailService orcidOauth2TokenDetailService) { - this.orcidOauth2TokenDetailService = orcidOauth2TokenDetailService; - } - @RequestMapping public ResponseEntity revoke(HttpServletRequest request) throws IOException, URISyntaxException, InterruptedException { - if(Features.OAUTH_TOKEN_VALIDATION.isActive()) { - // Forward the request to the authorization server - String clientId = SecurityContextHolder.getContext().getAuthentication().getName(); - String clientSecret = request.getParameter("client_secret"); - String tokenToRevoke = request.getParameter("token"); - if (PojoUtil.isEmpty(tokenToRevoke)) { - throw new IllegalArgumentException("Please provide the token to be param"); - } - Response r = authorizationServerUtil.forwardTokenRevocationRequest(clientId, clientSecret, tokenToRevoke); - HttpHeaders responseHeaders = new HttpHeaders(); - responseHeaders.set(Features.OAUTH_TOKEN_VALIDATION.name(), - "ON"); - return ResponseEntity.status(r.getStatus()).headers(responseHeaders).body(r.getEntity()); - } else { - String clientId = SecurityContextHolder.getContext().getAuthentication().getName(); - if (PojoUtil.isEmpty(clientId)) { - throw new IllegalArgumentException("Unable to validate client credentials"); - } - - String tokenToRevoke = request.getParameter("token"); - if (PojoUtil.isEmpty(tokenToRevoke)) { - throw new IllegalArgumentException("Please provide the token to be param"); - } - - OrcidOauth2TokenDetail token = orcidOauth2TokenDetailService.findIgnoringDisabledByTokenValue(tokenToRevoke); - if (token == null) { - // Try to find it by refresh token - token = orcidOauth2TokenDetailService.findByRefreshTokenValue(tokenToRevoke); - } - - if (token != null && (token.getTokenDisabled() == null || !token.getTokenDisabled())) { - String tokenOwner = token.getClientDetailsId(); - if (clientId.equals(tokenOwner)) { - orcidOauth2TokenDetailService.revokeAccessToken(token.getTokenValue()); - } else { - LOGGER.warn("Client {} is trying to revoke token that belongs to client {}", clientId, tokenOwner); - } - } + // Forward the request to the authorization server + String clientId = SecurityContextHolder.getContext().getAuthentication().getName(); + String clientSecret = request.getParameter("client_secret"); + String tokenToRevoke = request.getParameter("token"); + if (PojoUtil.isEmpty(tokenToRevoke)) { + throw new IllegalArgumentException("Please provide the token to be param"); } - - return ResponseEntity.ok().build(); + Response r = authorizationServerUtil.forwardTokenRevocationRequest(clientId, clientSecret, tokenToRevoke); + HttpHeaders responseHeaders = new HttpHeaders(); + responseHeaders.set(Features.OAUTH_TOKEN_VALIDATION.name(), + "ON"); + return ResponseEntity.status(r.getStatus()).headers(responseHeaders).body(r.getEntity()); } } diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/LoginController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/LoginController.java index 4b26382d314..8269f518a03 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/LoginController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/LoginController.java @@ -14,13 +14,9 @@ import org.codehaus.jettison.json.JSONObject; import org.orcid.core.common.manager.EventManager; import org.orcid.core.constants.OrcidOauth2Constants; -import org.orcid.core.exception.ClientDeactivatedException; -import org.orcid.core.exception.LockedException; import org.orcid.core.manager.ClientDetailsEntityCacheManager; import org.orcid.core.manager.UserConnectionManager; import org.orcid.core.manager.v3.read_only.RecordNameManagerReadOnly; -import org.orcid.core.oauth.service.OrcidAuthorizationEndpoint; -import org.orcid.core.oauth.service.OrcidOAuth2RequestValidator; import org.orcid.core.security.OrcidUserDetailsService; import org.orcid.core.togglz.Features; import org.orcid.frontend.spring.web.social.config.SocialSignInUtils; @@ -31,7 +27,6 @@ import org.orcid.jaxb.model.message.ScopePathType; import org.orcid.jaxb.model.v3.release.common.Visibility; import org.orcid.jaxb.model.v3.release.record.Name; -import org.orcid.persistence.jpa.entities.ClientDetailsEntity; import org.orcid.persistence.jpa.entities.EventType; import org.orcid.persistence.jpa.entities.ProfileEntity; import org.orcid.persistence.jpa.entities.UserconnectionEntity; @@ -45,9 +40,6 @@ import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.userdetails.UserDetails; -import org.springframework.security.oauth2.common.exceptions.InvalidClientException; -import org.springframework.security.oauth2.common.exceptions.InvalidRequestException; -import org.springframework.security.oauth2.common.exceptions.InvalidScopeException; import org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationToken; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; @@ -66,12 +58,6 @@ public class LoginController extends OauthControllerBase { @Resource protected ClientDetailsEntityCacheManager clientDetailsEntityCacheManager; - @Resource - protected OrcidOAuth2RequestValidator orcidOAuth2RequestValidator; - - @Resource - protected OrcidAuthorizationEndpoint authorizationEndpoint; - @Resource(name = "recordNameManagerV3") private RecordNameManagerReadOnly recordNameManager; @@ -162,7 +148,7 @@ private ModelAndView handleOauthSignIn(HttpServletRequest request, HttpServletRe RequestInfoForm requestInfoForm; try { requestInfoForm = oauthHelper.generateRequestInfoForm(queryString); - } catch (InvalidRequestException | InvalidClientException e) { + } catch (Exception e) { // convert to a 400 ModelAndView mav = new ModelAndView("oauth-error"); mav.setStatus(HttpStatus.BAD_REQUEST); @@ -202,25 +188,6 @@ private ModelAndView handleOauthSignIn(HttpServletRequest request, HttpServletRe String redirectUriWithParams = redirectUri + "?error=invalid_client&error_description=invalid client_id"; return new ModelAndView(new RedirectView(redirectUriWithParams)); } - // Validate client details - ClientDetailsEntity clientDetails = clientDetailsEntityCacheManager.retrieve(clientId); - try { - orcidOAuth2RequestValidator.validateClientIsEnabled(clientDetails); - } catch (LockedException e) { - String redirectUriWithParams = redirectUri + "?error=client_locked&error_description=" + e.getMessage(); - return new ModelAndView(new RedirectView(redirectUriWithParams)); - } catch (ClientDeactivatedException e) { - String redirectUriWithParams = redirectUri + "?error=client_deactivated&error_description=" + e.getMessage(); - return new ModelAndView(new RedirectView(redirectUriWithParams)); - } - - // validate client scopes - try { - authorizationEndpoint.validateScope(requestInfoForm.getScopesAsString(), clientDetails, requestInfoForm.getResponseType()); - } catch (InvalidScopeException e) { - String redirectUriWithParams = redirectUri + "?error=invalid_scope&error_description=" + e.getMessage(); - return new ModelAndView(new RedirectView(redirectUriWithParams)); - } // handle openID prompt and max_age behaviour // here we remove prompt=login if present From cb38c09caf89dfd769e48516ecde47ec4266d33d Mon Sep 17 00:00:00 2001 From: amontenegro Date: Mon, 23 Mar 2026 17:03:45 -0600 Subject: [PATCH 04/77] Removing code and refactoring the authentication objects, introducing OrcidBearerTokenAuthentication --- .../core/exception/InvalidTokenException.java | 9 + .../manager/v3/impl/SourceManagerImpl.java | 17 +- .../core/oauth/IETFTokenExchangeResponse.java | 108 ----- ...va => OrcidBearerTokenAuthentication.java} | 4 +- .../OrcidClientCredentialsTokenGranter.java | 37 -- .../core/oauth/OrcidImplicitTokenGranter.java | 57 --- ...rcidMultiSecretAuthenticationProvider.java | 53 --- .../core/oauth/OrcidOAuth2Authentication.java | 43 -- .../orcid/core/oauth/OrcidOauth2AuthInfo.java | 72 --- .../oauth/OrcidOboOAuth2Authentication.java | 41 -- .../oauth/OrcidRandomValueTokenServices.java | 34 -- .../core/oauth/OrcidRefreshTokenChecker.java | 106 ----- .../oauth/OrcidRefreshTokenTokenGranter.java | 36 -- .../orcid/core/oauth/OrcidTokenEnhancer.java | 101 ----- ...tion.java => OrcidUserAuthentication.java} | 4 +- .../oauth/openid/OpenIDConnectUserInfo.java | 67 --- .../security/OrcidOauthRedirectResolver.java | 96 ---- .../NamespacedRandomCodeGenerator.java | 53 --- .../OrcidAuthorizationCodeServiceImpl.java | 196 -------- .../OrcidRandomValueTokenServicesImpl.java | 428 +----------------- .../security/DefaultPermissionChecker.java | 365 --------------- .../core/security/PermissionChecker.java | 78 ---- .../OrcidApiAuthorizationSecurityAspect.java | 385 ---------------- .../visibility/filter/VisibilityFilter.java | 15 - .../filter/impl/VisibilityFilterImpl.java | 272 ----------- .../core/utils/SecurityContextTestUtils.java | 128 ------ .../OrcidRandomValueTokenServicesTest.java | 12 +- .../service/OrcidTokenStoreServiceTest.java | 6 +- .../DefaultOAuthClientVisibilityTest.java | 82 ---- .../DefaultPermissionCheckerTest.java | 170 ------- 30 files changed, 33 insertions(+), 3042 deletions(-) create mode 100644 orcid-core/src/main/java/org/orcid/core/exception/InvalidTokenException.java delete mode 100644 orcid-core/src/main/java/org/orcid/core/oauth/IETFTokenExchangeResponse.java rename orcid-core/src/main/java/org/orcid/core/oauth/{OrcidOauth2ClientAuthentication.java => OrcidBearerTokenAuthentication.java} (97%) delete mode 100644 orcid-core/src/main/java/org/orcid/core/oauth/OrcidClientCredentialsTokenGranter.java delete mode 100644 orcid-core/src/main/java/org/orcid/core/oauth/OrcidImplicitTokenGranter.java delete mode 100644 orcid-core/src/main/java/org/orcid/core/oauth/OrcidMultiSecretAuthenticationProvider.java delete mode 100644 orcid-core/src/main/java/org/orcid/core/oauth/OrcidOAuth2Authentication.java delete mode 100644 orcid-core/src/main/java/org/orcid/core/oauth/OrcidOauth2AuthInfo.java delete mode 100644 orcid-core/src/main/java/org/orcid/core/oauth/OrcidOboOAuth2Authentication.java delete mode 100644 orcid-core/src/main/java/org/orcid/core/oauth/OrcidRandomValueTokenServices.java delete mode 100644 orcid-core/src/main/java/org/orcid/core/oauth/OrcidRefreshTokenChecker.java delete mode 100644 orcid-core/src/main/java/org/orcid/core/oauth/OrcidRefreshTokenTokenGranter.java delete mode 100644 orcid-core/src/main/java/org/orcid/core/oauth/OrcidTokenEnhancer.java rename orcid-core/src/main/java/org/orcid/core/oauth/{OrcidOauth2UserAuthentication.java => OrcidUserAuthentication.java} (97%) delete mode 100644 orcid-core/src/main/java/org/orcid/core/oauth/openid/OpenIDConnectUserInfo.java delete mode 100644 orcid-core/src/main/java/org/orcid/core/oauth/security/OrcidOauthRedirectResolver.java delete mode 100644 orcid-core/src/main/java/org/orcid/core/oauth/service/NamespacedRandomCodeGenerator.java delete mode 100644 orcid-core/src/main/java/org/orcid/core/oauth/service/OrcidAuthorizationCodeServiceImpl.java delete mode 100644 orcid-core/src/main/java/org/orcid/core/security/DefaultPermissionChecker.java delete mode 100644 orcid-core/src/main/java/org/orcid/core/security/PermissionChecker.java delete mode 100644 orcid-core/src/main/java/org/orcid/core/security/visibility/aop/OrcidApiAuthorizationSecurityAspect.java delete mode 100644 orcid-core/src/main/java/org/orcid/core/security/visibility/filter/VisibilityFilter.java delete mode 100644 orcid-core/src/main/java/org/orcid/core/security/visibility/filter/impl/VisibilityFilterImpl.java delete mode 100644 orcid-core/src/main/java/org/orcid/core/utils/SecurityContextTestUtils.java delete mode 100644 orcid-core/src/test/java/org/orcid/core/security/DefaultOAuthClientVisibilityTest.java delete mode 100644 orcid-core/src/test/java/org/orcid/core/security/DefaultPermissionCheckerTest.java diff --git a/orcid-core/src/main/java/org/orcid/core/exception/InvalidTokenException.java b/orcid-core/src/main/java/org/orcid/core/exception/InvalidTokenException.java new file mode 100644 index 00000000000..796439f9cb6 --- /dev/null +++ b/orcid-core/src/main/java/org/orcid/core/exception/InvalidTokenException.java @@ -0,0 +1,9 @@ +package org.orcid.core.exception; + +public class InvalidTokenException extends ApplicationException { + private static final long serialVersionUID = 1L; + + public InvalidTokenException(String s) { + super(s); + } +} diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/SourceManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/SourceManagerImpl.java index aab12c28ebf..3fed5bbc201 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/SourceManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/SourceManagerImpl.java @@ -1,7 +1,5 @@ package org.orcid.core.manager.v3.impl; -import java.util.Collection; - import javax.annotation.Resource; import org.apache.commons.lang3.StringUtils; @@ -10,9 +8,8 @@ import org.orcid.core.manager.SourceNameCacheManager; import org.orcid.core.manager.v3.SourceManager; import org.orcid.core.oauth.OrcidOAuth2Authentication; -import org.orcid.core.oauth.OrcidOauth2UserAuthentication; +import org.orcid.core.oauth.OrcidUserAuthentication; import org.orcid.core.oauth.OrcidOboOAuth2Authentication; -import org.orcid.core.security.OrcidRoles; import org.orcid.core.togglz.Features; import org.orcid.jaxb.model.v3.release.common.Source; import org.orcid.jaxb.model.v3.release.common.SourceClientId; @@ -24,15 +21,11 @@ import org.orcid.persistence.jpa.entities.OrcidOauth2TokenDetail; import org.orcid.persistence.jpa.entities.ProfileEntity; import org.orcid.persistence.jpa.entities.SourceEntity; -import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.Authentication; -import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.oauth2.provider.OAuth2Authentication; import org.springframework.security.oauth2.provider.OAuth2Request; import org.springframework.security.oauth2.provider.authentication.OAuth2AuthenticationDetails; -import org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationToken; -import org.springframework.security.web.authentication.switchuser.SwitchUserGrantedAuthority; /** * @@ -90,8 +83,8 @@ public Source retrieveActiveSource() { source.setAssertionOriginClientId(new SourceClientId(oboClientDetails.getClientId())); source.setAssertionOriginName(new SourceName(oboClientDetails.getClientName())); } else { - if(clientDetails.isUserOBOEnabled() && authDetails.getUserAuthentication() != null && OrcidOauth2UserAuthentication.class.isAssignableFrom(authDetails.getUserAuthentication().getClass())) { - OrcidOauth2UserAuthentication userAuth = (OrcidOauth2UserAuthentication) authDetails.getUserAuthentication(); + if(clientDetails.isUserOBOEnabled() && authDetails.getUserAuthentication() != null && OrcidUserAuthentication.class.isAssignableFrom(authDetails.getUserAuthentication().getClass())) { + OrcidUserAuthentication userAuth = (OrcidUserAuthentication) authDetails.getUserAuthentication(); ProfileEntity profile = (ProfileEntity) userAuth.getPrincipal(); source.setAssertionOriginOrcid(new SourceOrcid(profile.getId())); source.setAssertionOriginName(new SourceName(sourceNameCacheManager.retrieve(profile.getId()))); @@ -99,8 +92,8 @@ public Source retrieveActiveSource() { } } else { OrcidOAuth2Authentication authDetails = (OrcidOAuth2Authentication) authentication; - if(clientDetails.isUserOBOEnabled() && authDetails.getUserAuthentication() != null && OrcidOauth2UserAuthentication.class.isAssignableFrom(authDetails.getUserAuthentication().getClass())) { - OrcidOauth2UserAuthentication userAuth = (OrcidOauth2UserAuthentication) authDetails.getUserAuthentication(); + if(clientDetails.isUserOBOEnabled() && authDetails.getUserAuthentication() != null && OrcidUserAuthentication.class.isAssignableFrom(authDetails.getUserAuthentication().getClass())) { + OrcidUserAuthentication userAuth = (OrcidUserAuthentication) authDetails.getUserAuthentication(); ProfileEntity profile = (ProfileEntity) userAuth.getPrincipal(); source.setAssertionOriginOrcid(new SourceOrcid(profile.getId())); source.setAssertionOriginName(new SourceName(sourceNameCacheManager.retrieve(profile.getId()))); diff --git a/orcid-core/src/main/java/org/orcid/core/oauth/IETFTokenExchangeResponse.java b/orcid-core/src/main/java/org/orcid/core/oauth/IETFTokenExchangeResponse.java deleted file mode 100644 index 9c81fe501f6..00000000000 --- a/orcid-core/src/main/java/org/orcid/core/oauth/IETFTokenExchangeResponse.java +++ /dev/null @@ -1,108 +0,0 @@ -package org.orcid.core.oauth; - -import java.text.ParseException; -import java.util.Date; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - -import org.orcid.core.constants.OrcidOauth2Constants; -import org.springframework.security.oauth2.common.OAuth2AccessToken; -import org.springframework.security.oauth2.common.OAuth2RefreshToken; - -import com.nimbusds.jwt.SignedJWT; - -import static org.orcid.core.constants.OrcidOauth2Constants.TOKEN_DISABLED; -import static org.orcid.core.constants.OrcidOauth2Constants.IS_OBO_TOKEN; - -public class IETFTokenExchangeResponse implements OAuth2AccessToken { - - private Map additionalInformation = new HashMap(); - private Set scope = new HashSet(); - private OAuth2RefreshToken refreshToken = null; - private String tokenType; - private Date expiration; - private String value; - private int expiresIn; - - public static IETFTokenExchangeResponse idToken(String idToken) throws ParseException { - IETFTokenExchangeResponse token = new IETFTokenExchangeResponse(); - token.additionalInformation.put("issued_token_type", OrcidOauth2Constants.IETF_EXCHANGE_ID_TOKEN ); - token.value = idToken; - token.tokenType = "N_A"; - SignedJWT claims = SignedJWT.parse(idToken); - token.expiration = claims.getJWTClaimsSet().getExpirationTime(); - return token; - } - - public static IETFTokenExchangeResponse accessToken(OAuth2AccessToken accessToken) { - IETFTokenExchangeResponse token = new IETFTokenExchangeResponse(); - token.additionalInformation.put("issued_token_type", OrcidOauth2Constants.IETF_EXCHANGE_ACCESS_TOKEN ); - token.value = accessToken.getValue(); - token.tokenType="bearer"; - token.expiration = accessToken.getExpiration(); - token.expiresIn = accessToken.getExpiresIn(); - token.scope = accessToken.getScope(); - if (accessToken.getAdditionalInformation().containsKey("orcid")) { - token.additionalInformation.put("orcid",accessToken.getAdditionalInformation().get("orcid")); - } - if (accessToken.getAdditionalInformation().containsKey("name")) { - token.additionalInformation.put("name",accessToken.getAdditionalInformation().get("name")); - } - if(accessToken.getAdditionalInformation().containsKey(TOKEN_DISABLED)) { - token.additionalInformation.put(TOKEN_DISABLED, "true"); - } - if(accessToken.getAdditionalInformation().containsKey(IS_OBO_TOKEN)) { - token.additionalInformation.put(IS_OBO_TOKEN, "true"); - } - - return token; - } - - private IETFTokenExchangeResponse() { - - } - - - @Override - public Map getAdditionalInformation() { - return additionalInformation; - } - - @Override - public Set getScope() { - return scope; - } - - @Override - public OAuth2RefreshToken getRefreshToken() { - return refreshToken; - } - - @Override - public String getTokenType() { - return tokenType; - } - - @Override - public boolean isExpired() { - return false; - } - - @Override - public Date getExpiration() { - return expiration; - } - - @Override - public int getExpiresIn() { - return expiresIn; - } - - @Override - public String getValue() { - return value; - } - -} diff --git a/orcid-core/src/main/java/org/orcid/core/oauth/OrcidOauth2ClientAuthentication.java b/orcid-core/src/main/java/org/orcid/core/oauth/OrcidBearerTokenAuthentication.java similarity index 97% rename from orcid-core/src/main/java/org/orcid/core/oauth/OrcidOauth2ClientAuthentication.java rename to orcid-core/src/main/java/org/orcid/core/oauth/OrcidBearerTokenAuthentication.java index 657b889f468..c8a034d599b 100644 --- a/orcid-core/src/main/java/org/orcid/core/oauth/OrcidOauth2ClientAuthentication.java +++ b/orcid-core/src/main/java/org/orcid/core/oauth/OrcidBearerTokenAuthentication.java @@ -9,7 +9,7 @@ /** * @author Declan Newman (declan) Date: 17/04/2012 */ -public class OrcidOauth2ClientAuthentication implements Authentication { +public class OrcidBearerTokenAuthentication implements Authentication { /** * @@ -18,7 +18,7 @@ public class OrcidOauth2ClientAuthentication implements Authentication { private ClientDetailsEntity clientDetails; private boolean authenticated = false; - public OrcidOauth2ClientAuthentication(ClientDetailsEntity clientDetails) { + public OrcidBearerTokenAuthentication(ClientDetailsEntity clientDetails) { this.clientDetails = clientDetails; } diff --git a/orcid-core/src/main/java/org/orcid/core/oauth/OrcidClientCredentialsTokenGranter.java b/orcid-core/src/main/java/org/orcid/core/oauth/OrcidClientCredentialsTokenGranter.java deleted file mode 100644 index 8b0460e8305..00000000000 --- a/orcid-core/src/main/java/org/orcid/core/oauth/OrcidClientCredentialsTokenGranter.java +++ /dev/null @@ -1,37 +0,0 @@ -package org.orcid.core.oauth; - -import org.springframework.security.oauth2.common.OAuth2AccessToken; -import org.springframework.security.oauth2.provider.OAuth2Authentication; -import org.springframework.security.oauth2.provider.OAuth2Request; -import org.springframework.security.oauth2.provider.TokenGranter; -import org.springframework.security.oauth2.provider.TokenRequest; -import org.springframework.security.oauth2.provider.token.AuthorizationServerTokenServices; - -/** - * @author Declan Newman (declan) Date: 10/05/2012 - */ -public class OrcidClientCredentialsTokenGranter implements TokenGranter { - - private static final String CLIENT_CREDENTIALS = "client_credentials"; - - private final OrcidClientCredentialsChecker clientCredentialsChecker; - - private final AuthorizationServerTokenServices tokenServices; - - public OrcidClientCredentialsTokenGranter(OrcidClientCredentialsChecker clientCredentialsChecker, AuthorizationServerTokenServices tokenServices) { - this.clientCredentialsChecker = clientCredentialsChecker; - this.tokenServices = tokenServices; - } - - @Override - public OAuth2AccessToken grant(String grantType, TokenRequest tokenRequest) { - if (!CLIENT_CREDENTIALS.equals(grantType)) { - return null; - } - - OAuth2Request authorizationRequest = clientCredentialsChecker.validateCredentials(grantType, tokenRequest); - - return tokenServices.createAccessToken(new OAuth2Authentication(authorizationRequest, null)); - } - -} diff --git a/orcid-core/src/main/java/org/orcid/core/oauth/OrcidImplicitTokenGranter.java b/orcid-core/src/main/java/org/orcid/core/oauth/OrcidImplicitTokenGranter.java deleted file mode 100644 index 00aedf8e939..00000000000 --- a/orcid-core/src/main/java/org/orcid/core/oauth/OrcidImplicitTokenGranter.java +++ /dev/null @@ -1,57 +0,0 @@ -package org.orcid.core.oauth; - -import java.util.List; - -import javax.annotation.Resource; - -import org.orcid.core.manager.ProfileEntityManager; -import org.orcid.persistence.dao.ProfileDao; -import org.orcid.persistence.jpa.entities.OrcidGrantedAuthority; -import org.orcid.persistence.jpa.entities.ProfileEntity; -import org.springframework.security.authentication.InsufficientAuthenticationException; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.oauth2.provider.ClientDetails; -import org.springframework.security.oauth2.provider.ClientDetailsService; -import org.springframework.security.oauth2.provider.OAuth2Authentication; -import org.springframework.security.oauth2.provider.OAuth2Request; -import org.springframework.security.oauth2.provider.OAuth2RequestFactory; -import org.springframework.security.oauth2.provider.TokenRequest; -import org.springframework.security.oauth2.provider.implicit.ImplicitTokenGranter; -import org.springframework.security.oauth2.provider.implicit.ImplicitTokenRequest; -import org.springframework.security.oauth2.provider.token.AuthorizationServerTokenServices; - -public class OrcidImplicitTokenGranter extends ImplicitTokenGranter { - @Resource - private ProfileEntityManager profileEntityManager; - @Resource - private ProfileDao profileDao; - - protected OrcidImplicitTokenGranter(AuthorizationServerTokenServices tokenServices, ClientDetailsService clientDetailsService, OAuth2RequestFactory requestFactory) { - super(tokenServices, clientDetailsService, requestFactory); - } - - /** - * Note, client must have implicit scope in client_authorized_grant_type - * table to get this far. Otherwise request will be rejected by - * OrcidClientCredentialsChecker - * - */ - @Override - protected OAuth2Authentication getOAuth2Authentication(ClientDetails client, TokenRequest clientToken) { - Authentication userAuthSpring = SecurityContextHolder.getContext().getAuthentication(); - if (userAuthSpring == null || !userAuthSpring.isAuthenticated()) { - throw new InsufficientAuthenticationException("There is no currently logged in user"); - } - OAuth2Request request = ((ImplicitTokenRequest) clientToken).getOAuth2Request(); - ProfileEntity profileEntity = profileEntityManager.findByOrcid(userAuthSpring.getName()); - List authorities = profileDao.getGrantedAuthoritiesForProfile(profileEntity.getId()); - profileEntity.setAuthorities(authorities); - - OrcidOauth2UserAuthentication userAuth = new OrcidOauth2UserAuthentication(profileEntity, - userAuthSpring.isAuthenticated()); - OAuth2Authentication result = new OAuth2Authentication(request, userAuth); - return result; - } - -} diff --git a/orcid-core/src/main/java/org/orcid/core/oauth/OrcidMultiSecretAuthenticationProvider.java b/orcid-core/src/main/java/org/orcid/core/oauth/OrcidMultiSecretAuthenticationProvider.java deleted file mode 100644 index 99da7f732de..00000000000 --- a/orcid-core/src/main/java/org/orcid/core/oauth/OrcidMultiSecretAuthenticationProvider.java +++ /dev/null @@ -1,53 +0,0 @@ -package org.orcid.core.oauth; - -import javax.annotation.Resource; - -import org.orcid.core.manager.ClientDetailsManager; -import org.orcid.core.manager.EncryptionManager; -import org.orcid.persistence.jpa.entities.ClientDetailsEntity; -import org.orcid.persistence.jpa.entities.ClientSecretEntity; -import org.springframework.security.authentication.BadCredentialsException; -import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; -import org.springframework.security.authentication.dao.DaoAuthenticationProvider; -import org.springframework.security.core.AuthenticationException; -import org.springframework.security.core.userdetails.UserDetails; -import org.springframework.security.crypto.password.NoOpPasswordEncoder; - -/** - * - * @author Will Simpson - * - */ -public class OrcidMultiSecretAuthenticationProvider extends DaoAuthenticationProvider { - - @Resource - private ClientDetailsManager clientDetailsManager; - - @Resource - private EncryptionManager encryptionManager; - - @SuppressWarnings("deprecation") - @Override - protected void additionalAuthenticationChecks(UserDetails userDetails, UsernamePasswordAuthenticationToken authentication) throws AuthenticationException { - - if (authentication.getCredentials() == null) { - logger.debug("Authentication failed: no credentials provided"); - throw new BadCredentialsException(messages.getMessage("AbstractUserDetailsAuthenticationProvider.badCredentials", "Bad credentials")); - } - - String presentedPassword = authentication.getCredentials().toString(); - - ClientDetailsEntity clientDetailsEntity = clientDetailsManager.findByClientId(userDetails.getUsername()); - for (ClientSecretEntity clientSecretEntity : clientDetailsEntity.getClientSecrets()) { - if(!presentedPassword.startsWith("{noop}")){ - presentedPassword = "{noop}" + presentedPassword; - } - if (getPasswordEncoder().matches(encryptionManager.decryptForInternalUse(clientSecretEntity.getClientSecret()), presentedPassword)) { - return; - } - } - logger.debug("Authentication failed: password does not match any value"); - throw new BadCredentialsException(messages.getMessage("AbstractUserDetailsAuthenticationProvider.badCredentials", "Bad credentials")); - } - -} diff --git a/orcid-core/src/main/java/org/orcid/core/oauth/OrcidOAuth2Authentication.java b/orcid-core/src/main/java/org/orcid/core/oauth/OrcidOAuth2Authentication.java deleted file mode 100644 index 4d65aced1f7..00000000000 --- a/orcid-core/src/main/java/org/orcid/core/oauth/OrcidOAuth2Authentication.java +++ /dev/null @@ -1,43 +0,0 @@ -package org.orcid.core.oauth; - -import org.springframework.security.core.Authentication; -import org.springframework.security.oauth2.provider.AuthorizationRequest; -import org.springframework.security.oauth2.provider.OAuth2Authentication; -import org.springframework.util.Assert; - -/** - * @author Declan Newman (declan) Date: 10/05/2012 - */ -public class OrcidOAuth2Authentication extends OAuth2Authentication { - - /** - * - */ - private static final long serialVersionUID = 1L; - private String activeToken; - - /** - * Construct an OAuth 2 authentication. Since some grant types don't require - * user authentication, the user authentication may be null. The active - * token cannot be null as this is needed for subsequent changes to the - * scopes when writing. - * - * @param authorizationRequest - * The authorization request (must not be null). - * @param userAuthentication - * The user authentication (possibly null). - * @param activeToken - * The token that has been used to authenticate the client - */ - - public OrcidOAuth2Authentication(AuthorizationRequest authorizationRequest, Authentication userAuthentication, String activeToken) { - super(authorizationRequest.createOAuth2Request(), userAuthentication); - Assert.hasText(activeToken, "The active token must have a value."); - this.activeToken = activeToken; - } - - public String getActiveToken() { - return activeToken; - } - -} diff --git a/orcid-core/src/main/java/org/orcid/core/oauth/OrcidOauth2AuthInfo.java b/orcid-core/src/main/java/org/orcid/core/oauth/OrcidOauth2AuthInfo.java deleted file mode 100644 index 9f617402109..00000000000 --- a/orcid-core/src/main/java/org/orcid/core/oauth/OrcidOauth2AuthInfo.java +++ /dev/null @@ -1,72 +0,0 @@ -package org.orcid.core.oauth; - -import java.util.Set; - -import org.orcid.persistence.jpa.entities.ProfileEntity; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.userdetails.UserDetails; -import org.springframework.security.oauth2.provider.OAuth2Authentication; -import org.springframework.security.oauth2.provider.OAuth2Request; - -public class OrcidOauth2AuthInfo { - - private String clientId; - - private Set scopes; - - private String userOrcid; - - public OrcidOauth2AuthInfo(String clientId, Set scopes, String userOrcid) { - this.clientId = clientId; - this.scopes = scopes; - this.userOrcid = userOrcid; - } - - public OrcidOauth2AuthInfo(OAuth2Authentication oauth2Authentication) { - if (oauth2Authentication != null) { - init(oauth2Authentication.getOAuth2Request(), oauth2Authentication.getUserAuthentication()); - } - } - - private void init(OAuth2Request authRequest, Authentication userAuthentication) { - if (authRequest != null) { - clientId = authRequest.getClientId(); - scopes = authRequest.getScope(); - if (userAuthentication != null) { - Object principal = userAuthentication.getPrincipal(); - if (principal != null) { - if (ProfileEntity.class.isAssignableFrom(principal.getClass())) { - userOrcid = ((ProfileEntity) principal).getId(); - } else if (UserDetails.class.isAssignableFrom(principal.getClass())) { - userOrcid = ((UserDetails) principal).getUsername(); - } - } - } - } - } - - public String getClientId() { - return clientId; - } - - public void setClientId(String clientId) { - this.clientId = clientId; - } - - public Set getScopes() { - return scopes; - } - - public void setScopes(Set scopes) { - this.scopes = scopes; - } - - public String getUserOrcid() { - return userOrcid; - } - - public void setUserOrcid(String userOrcid) { - this.userOrcid = userOrcid; - } - -} diff --git a/orcid-core/src/main/java/org/orcid/core/oauth/OrcidOboOAuth2Authentication.java b/orcid-core/src/main/java/org/orcid/core/oauth/OrcidOboOAuth2Authentication.java deleted file mode 100644 index 0ddd50b8c7f..00000000000 --- a/orcid-core/src/main/java/org/orcid/core/oauth/OrcidOboOAuth2Authentication.java +++ /dev/null @@ -1,41 +0,0 @@ -package org.orcid.core.oauth; - -import org.springframework.security.core.Authentication; -import org.springframework.security.oauth2.provider.AuthorizationRequest; -import org.springframework.security.oauth2.provider.OAuth2Authentication; -import org.springframework.util.Assert; - -/** - * @author Declan Newman (declan) Date: 10/05/2012 - */ -public class OrcidOboOAuth2Authentication extends OrcidOAuth2Authentication { - private static final long serialVersionUID = 4582917463028491537L; - private String oboClientId; - - /** - * Construct an OAuth 2 authentication. Since some grant types don't require - * user authentication, the user authentication may be null. The active - * token cannot be null as this is needed for subsequent changes to the - * scopes when writing. - * - * @param oboClientId - * The client id of the OBO client - * @param authorizationRequest - * The authorization request (must not be null). - * @param userAuthentication - * The user authentication (possibly null). - * @param activeToken - * The token that has been used to authenticate the client - */ - - public OrcidOboOAuth2Authentication(String oboClientId, AuthorizationRequest authorizationRequest, Authentication userAuthentication, String activeToken) { - super(authorizationRequest, userAuthentication, activeToken); - Assert.hasText(oboClientId, "The oboClientId must have a value."); - this.oboClientId = oboClientId; - } - - public String getOboClientId() { - return oboClientId; - } - -} diff --git a/orcid-core/src/main/java/org/orcid/core/oauth/OrcidRandomValueTokenServices.java b/orcid-core/src/main/java/org/orcid/core/oauth/OrcidRandomValueTokenServices.java deleted file mode 100644 index ff97d162734..00000000000 --- a/orcid-core/src/main/java/org/orcid/core/oauth/OrcidRandomValueTokenServices.java +++ /dev/null @@ -1,34 +0,0 @@ -package org.orcid.core.oauth; - -import java.util.Collection; - -import org.orcid.core.constants.RevokeReason; -import org.orcid.core.oauth.service.OrcidTokenStore; -import org.springframework.security.core.AuthenticationException; -import org.springframework.security.oauth2.common.OAuth2AccessToken; -import org.springframework.security.oauth2.provider.OAuth2Authentication; -import org.springframework.security.oauth2.provider.token.AuthorizationServerTokenServices; -import org.springframework.security.oauth2.provider.token.TokenEnhancer; - -/** - * @author Angel Montenegro - * */ -public interface OrcidRandomValueTokenServices extends AuthorizationServerTokenServices { - - OAuth2AccessToken createAccessToken(OAuth2Authentication authentication) throws AuthenticationException; - - OAuth2Authentication loadAuthentication(String accessTokenValue) throws AuthenticationException; - - int getWriteValiditySeconds(); - - int getReadValiditySeconds(); - - void setOrcidtokenStore(OrcidTokenStore orcidtokenStore); - - void setCustomTokenEnhancer(TokenEnhancer customTokenEnhancer); - - boolean longLifeTokenExist(String clientId, String userId, Collection scopes); - - OAuth2AccessToken createRevokedAccessToken(OAuth2Authentication authentication, RevokeReason revokeReason) throws AuthenticationException; - -} diff --git a/orcid-core/src/main/java/org/orcid/core/oauth/OrcidRefreshTokenChecker.java b/orcid-core/src/main/java/org/orcid/core/oauth/OrcidRefreshTokenChecker.java deleted file mode 100644 index bf845fd6a9a..00000000000 --- a/orcid-core/src/main/java/org/orcid/core/oauth/OrcidRefreshTokenChecker.java +++ /dev/null @@ -1,106 +0,0 @@ -package org.orcid.core.oauth; - -import java.util.Date; -import java.util.HashSet; -import java.util.Set; - -import javax.annotation.Resource; -import javax.persistence.NoResultException; - -import org.orcid.core.constants.OrcidOauth2Constants; -import org.orcid.core.manager.ClientDetailsEntityCacheManager; -import org.orcid.core.oauth.service.OrcidOAuth2RequestValidator; -import org.orcid.jaxb.model.message.ScopePathType; -import org.orcid.persistence.dao.OrcidOauth2TokenDetailDao; -import org.orcid.persistence.jpa.entities.ClientDetailsEntity; -import org.orcid.persistence.jpa.entities.OrcidOauth2TokenDetail; -import org.orcid.pojo.ajaxForm.PojoUtil; -import org.springframework.security.oauth2.common.exceptions.InvalidScopeException; -import org.springframework.security.oauth2.common.exceptions.InvalidTokenException; -import org.springframework.security.oauth2.common.util.OAuth2Utils; -import org.springframework.security.oauth2.provider.TokenRequest; - -/** - * @author Angel Montenegro - */ -public class OrcidRefreshTokenChecker { - @Resource - private ClientDetailsEntityCacheManager clientDetailsEntityCacheManager; - - @Resource - private OrcidOAuth2RequestValidator orcidOAuth2RequestValidator; - - @Resource - private OrcidOauth2TokenDetailDao orcidOauth2TokenDetailDao; - - public void validateRequest(String grantType, TokenRequest tokenRequest, Long requestTimeInMillis) { - String authorization = tokenRequest.getRequestParameters().get(OrcidOauth2Constants.AUTHORIZATION); - String clientId = tokenRequest.getClientId(); - String scopes = tokenRequest.getRequestParameters().get(OAuth2Utils.SCOPE); - Long expireIn = tokenRequest.getRequestParameters().containsKey(OrcidOauth2Constants.EXPIRES_IN) - ? Long.valueOf(tokenRequest.getRequestParameters().get(OrcidOauth2Constants.EXPIRES_IN)) : 0L; - String refreshToken = tokenRequest.getRequestParameters().get(OrcidOauth2Constants.REFRESH_TOKEN); - - OrcidOauth2TokenDetail token = null; - try { - token = orcidOauth2TokenDetailDao.findByRefreshTokenValue(refreshToken); - } catch (NoResultException e) { - throw new InvalidTokenException("Unable to find refresh token", e); - } - - // Verify the token belongs to this client - if (!clientId.equals(token.getClientDetailsId())) { - throw new IllegalArgumentException("This token does not belong to the given client"); - } - - // Verify client is enabled - ClientDetailsEntity clientDetails = clientDetailsEntityCacheManager.retrieve(clientId); - orcidOAuth2RequestValidator.validateClientIsEnabled(clientDetails); - - // Verify the token is not expired - if (token.getTokenExpiration() != null) { - if (token.getTokenExpiration().before(new Date())) { - throw new InvalidTokenException("Access token expired: " + authorization); - } - } - - // Verify access token and refresh token are linked - if (!refreshToken.equals(token.getRefreshTokenValue())) { - throw new InvalidTokenException("Token and refresh token does not match"); - } - - // Verify the token is not disabled - if (token.getTokenDisabled() != null && token.getTokenDisabled()) { - throw new InvalidTokenException("Parent token is disabled"); - } - - // Verify scopes are not wider than the token scopes - if (PojoUtil.isEmpty(scopes)) { - scopes = token.getScope(); - } else { - Set requiredScopes = ScopePathType.getScopesFromSpaceSeparatedString(scopes); - Set simpleTokenScopes = ScopePathType.getScopesFromSpaceSeparatedString(token.getScope()); - // This collection contains all tokens that should be allowed given - // the scopes that the parent token contains - Set combinedTokenScopes = new HashSet(); - for (ScopePathType scope : simpleTokenScopes) { - combinedTokenScopes.addAll(scope.combined()); - } - - // Check that all requiredScopes are included in the list of - // combinedTokenScopes - for (ScopePathType scope : requiredScopes) { - if (!combinedTokenScopes.contains(scope)) { - throw new InvalidScopeException("The given scope '" + scope.value() + "' is not allowed for the parent token"); - } - } - } - - // Validate the expiration for the new token is no later than the parent - // token expiration. - long parentTokenExpiration = token.getTokenExpiration() == null ? System.currentTimeMillis() : token.getTokenExpiration().getTime(); - if (expireIn > parentTokenExpiration) { - throw new IllegalArgumentException("Token expiration can't be after " + token.getTokenExpiration()); - } - } -} diff --git a/orcid-core/src/main/java/org/orcid/core/oauth/OrcidRefreshTokenTokenGranter.java b/orcid-core/src/main/java/org/orcid/core/oauth/OrcidRefreshTokenTokenGranter.java deleted file mode 100644 index 38c79595a67..00000000000 --- a/orcid-core/src/main/java/org/orcid/core/oauth/OrcidRefreshTokenTokenGranter.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.orcid.core.oauth; - -import org.orcid.core.constants.OrcidOauth2Constants; -import org.springframework.security.oauth2.common.OAuth2AccessToken; -import org.springframework.security.oauth2.provider.TokenGranter; -import org.springframework.security.oauth2.provider.TokenRequest; -import org.springframework.security.oauth2.provider.token.AuthorizationServerTokenServices; - -/** - * @author Angel Montenegro - */ -public class OrcidRefreshTokenTokenGranter implements TokenGranter { - private final OrcidRefreshTokenChecker orcidRefreshTokenChecker; - - private final AuthorizationServerTokenServices tokenServices; - - public OrcidRefreshTokenTokenGranter(OrcidRefreshTokenChecker orcidRefreshTokenChecker, AuthorizationServerTokenServices tokenServices) { - this.orcidRefreshTokenChecker = orcidRefreshTokenChecker; - this.tokenServices = tokenServices; - } - - @Override - public OAuth2AccessToken grant(String grantType, TokenRequest tokenRequest) { - if (!OrcidOauth2Constants.REFRESH_TOKEN.equals(grantType)) { - return null; - } - - Long requestTimeInMillis = System.currentTimeMillis(); - orcidRefreshTokenChecker.validateRequest(grantType, tokenRequest, requestTimeInMillis); - - //If no exception is thrown we are ready to create the new token - String refreshToken = tokenRequest.getRequestParameters().get(OrcidOauth2Constants.REFRESH_TOKEN); - - return tokenServices.refreshAccessToken(refreshToken, tokenRequest); - } -} diff --git a/orcid-core/src/main/java/org/orcid/core/oauth/OrcidTokenEnhancer.java b/orcid-core/src/main/java/org/orcid/core/oauth/OrcidTokenEnhancer.java deleted file mode 100644 index d725577f6b1..00000000000 --- a/orcid-core/src/main/java/org/orcid/core/oauth/OrcidTokenEnhancer.java +++ /dev/null @@ -1,101 +0,0 @@ -package org.orcid.core.oauth; - -import java.util.HashMap; -import java.util.Map; - -import javax.annotation.Resource; - -import org.orcid.core.constants.OrcidOauth2Constants; -import org.orcid.core.manager.ProfileEntityManager; -import org.orcid.persistence.dao.OrcidOauth2AuthoriziationCodeDetailDao; -import org.springframework.security.oauth2.common.DefaultOAuth2AccessToken; -import org.springframework.security.oauth2.common.OAuth2AccessToken; -import org.springframework.security.oauth2.provider.OAuth2Authentication; -import org.springframework.security.oauth2.provider.OAuth2Request; -import org.springframework.security.oauth2.provider.token.TokenEnhancer; - -public class OrcidTokenEnhancer implements TokenEnhancer { - @Resource - private ProfileEntityManager profileEntityManager; - - @Resource - private OrcidOauth2AuthoriziationCodeDetailDao orcidOauth2AuthoriziationCodeDetailDao; - - @Override - public OAuth2AccessToken enhance(OAuth2AccessToken accessToken, OAuth2Authentication authentication) { - if (!(accessToken instanceof DefaultOAuth2AccessToken)) - throw new UnsupportedOperationException("At this time we can handle only tokens of type DefaultOauth2AccessToken"); - DefaultOAuth2AccessToken result = (DefaultOAuth2AccessToken) accessToken; - OrcidOauth2AuthInfo authInfo = new OrcidOauth2AuthInfo(authentication); - String userOrcid = authInfo.getUserOrcid(); - - Map additionalInfo = new HashMap(); - if (result.getAdditionalInformation() != null && !result.getAdditionalInformation().isEmpty()) { - additionalInfo.putAll(result.getAdditionalInformation()); - } - - if (!OrcidOauth2Constants.IMPLICIT_GRANT_TYPE.equals(authentication.getOAuth2Request().getGrantType())){ - // If the additional info object already contains the orcid info, leave - // it - if (!additionalInfo.containsKey("orcid")) { - additionalInfo.put("orcid", userOrcid); - } - - // If the additional info object already contains the name info, leave - // it - if (!additionalInfo.containsKey("name")) { - if (userOrcid != null) { - String name = profileEntityManager.retrivePublicDisplayName(userOrcid); - additionalInfo.put("name", name); - } - } - } - - // Overwrite token version - additionalInfo.put(OrcidOauth2Constants.TOKEN_VERSION, OrcidOauth2Constants.PERSISTENT_TOKEN); - - // Overwrite persistent flag - if (isPersistentTokenEnabled(authentication.getOAuth2Request())) { - additionalInfo.put(OrcidOauth2Constants.PERSISTENT, true); - } else { - additionalInfo.put(OrcidOauth2Constants.PERSISTENT, false); - } - - // Put the updated additional info object in the result - result.setAdditionalInformation(additionalInfo); - - return result; - } - - /** - * Checks the authorization code to verify if the user enable the persistent - * token or not - * */ - private boolean isPersistentTokenEnabled(OAuth2Request authorizationRequest) { - if (authorizationRequest != null) { - Map params = authorizationRequest.getRequestParameters(); - if (params != null) { - if (params.containsKey(OrcidOauth2Constants.IS_PERSISTENT)) { - String isPersistent = params.get(OrcidOauth2Constants.IS_PERSISTENT); - if (Boolean.valueOf(isPersistent)) { - return true; - } - } else if (params.containsKey("code")) { - String code = params.get("code"); - if (orcidOauth2AuthoriziationCodeDetailDao.find(code) != null) { - if (orcidOauth2AuthoriziationCodeDetailDao.isPersistentToken(code)) { - return true; - } - } - } else if (params.get(OrcidOauth2Constants.RESPONSE_TYPE_PARAM) != null - && params.get(OrcidOauth2Constants.RESPONSE_TYPE_PARAM).contains(OrcidOauth2Constants.IMPLICIT_TOKEN_RESPONSE_TYPE) - && "true".equals(params.get(OrcidOauth2Constants.GRANT_PERSISTENT_TOKEN))){ - //for implicit generation, use the query string parameter. - return true; - } - } - } - - return false; - } -} diff --git a/orcid-core/src/main/java/org/orcid/core/oauth/OrcidOauth2UserAuthentication.java b/orcid-core/src/main/java/org/orcid/core/oauth/OrcidUserAuthentication.java similarity index 97% rename from orcid-core/src/main/java/org/orcid/core/oauth/OrcidOauth2UserAuthentication.java rename to orcid-core/src/main/java/org/orcid/core/oauth/OrcidUserAuthentication.java index 77d1fdd28b4..6fec889b48d 100644 --- a/orcid-core/src/main/java/org/orcid/core/oauth/OrcidOauth2UserAuthentication.java +++ b/orcid-core/src/main/java/org/orcid/core/oauth/OrcidUserAuthentication.java @@ -15,7 +15,7 @@ /** * @author Declan Newman (declan) Date: 17/04/2012 */ -public class OrcidOauth2UserAuthentication implements Authentication { +public class OrcidUserAuthentication implements Authentication { /** * @@ -27,7 +27,7 @@ public class OrcidOauth2UserAuthentication implements Authentication { @Resource(name = "recordNameManagerReadOnlyV3") private RecordNameManagerReadOnly recordNameManagerReadOnlyV3; - public OrcidOauth2UserAuthentication(ProfileEntity profileEntity, boolean authenticated) { + public OrcidUserAuthentication(ProfileEntity profileEntity, boolean authenticated) { Assert.notNull(profileEntity, "Cannot instantiate an OrcidOauth2UserAuthentication will a null profile"); this.profileEntity = profileEntity; this.authenticated = authenticated; diff --git a/orcid-core/src/main/java/org/orcid/core/oauth/openid/OpenIDConnectUserInfo.java b/orcid-core/src/main/java/org/orcid/core/oauth/openid/OpenIDConnectUserInfo.java deleted file mode 100644 index 6db95f308e5..00000000000 --- a/orcid-core/src/main/java/org/orcid/core/oauth/openid/OpenIDConnectUserInfo.java +++ /dev/null @@ -1,67 +0,0 @@ -package org.orcid.core.oauth.openid; - -import org.orcid.jaxb.model.v3.release.record.Person; -import org.orcid.jaxb.model.v3.release.record.PersonalDetails; - -public class OpenIDConnectUserInfo { - - private String id; - private String sub; - private String name; - private String family_name; - private String given_name; - - public OpenIDConnectUserInfo(){ - - } - - public OpenIDConnectUserInfo(String orcid, Person person, String path) { - this.id = path+"/"+orcid; - this.sub = orcid; - if (person.getName() != null){ - if (person.getName().getCreditName() != null){ - this.name = person.getName().getCreditName().getContent(); - } - if (person.getName().getFamilyName() != null){ - this.family_name = person.getName().getFamilyName().getContent(); - } - if (person.getName().getGivenNames() != null){ - this.given_name = person.getName().getGivenNames().getContent(); - } - } - } - public OpenIDConnectUserInfo(String orcid, PersonalDetails person, String path) { - this.id = path+"/"+orcid; - this.sub = orcid; - if (person.getName() != null){ - if (person.getName().getCreditName() != null){ - this.name = person.getName().getCreditName().getContent(); - } - if (person.getName().getFamilyName() != null){ - this.family_name = person.getName().getFamilyName().getContent(); - } - if (person.getName().getGivenNames() != null){ - this.given_name = person.getName().getGivenNames().getContent(); - } - } - } - public String getId() { - return id; - } - public void setId(String id) { - this.id = id; - } - public String getName() { - return name; - } - public String getSub() { - return sub; - } - public String getFamily_name() { - return family_name; - } - public String getGiven_name() { - return given_name; - } - -} diff --git a/orcid-core/src/main/java/org/orcid/core/oauth/security/OrcidOauthRedirectResolver.java b/orcid-core/src/main/java/org/orcid/core/oauth/security/OrcidOauthRedirectResolver.java deleted file mode 100644 index 4c790a3ad92..00000000000 --- a/orcid-core/src/main/java/org/orcid/core/oauth/security/OrcidOauthRedirectResolver.java +++ /dev/null @@ -1,96 +0,0 @@ -package org.orcid.core.oauth.security; - -import java.util.Arrays; -import java.util.Collection; -import java.util.HashSet; -import java.util.Objects; -import java.util.Set; - -import org.springframework.security.oauth2.common.exceptions.InvalidGrantException; -import org.springframework.security.oauth2.common.exceptions.InvalidRequestException; -import org.springframework.security.oauth2.common.exceptions.OAuth2Exception; -import org.springframework.security.oauth2.common.exceptions.RedirectMismatchException; -import org.springframework.security.oauth2.provider.ClientDetails; -import org.springframework.security.oauth2.provider.endpoint.DefaultRedirectResolver; -import org.springframework.util.StringUtils; -import org.springframework.web.util.UriComponents; -import org.springframework.web.util.UriComponentsBuilder; - -public class OrcidOauthRedirectResolver extends DefaultRedirectResolver { - - private Collection redirectGrantTypes = Arrays.asList("implicit", "authorization_code"); - - public OrcidOauthRedirectResolver() { - - } - - @Override - public void setRedirectGrantTypes(Collection redirectGrantTypes) { - this.redirectGrantTypes = new HashSet(redirectGrantTypes); - } - - @Override - public String resolveRedirect(String requestedRedirect, ClientDetails client) throws OAuth2Exception { - Set authorizedGrantTypes = client.getAuthorizedGrantTypes(); - if (authorizedGrantTypes.isEmpty()) { - throw new InvalidGrantException("A client must have at least one authorized grant type."); - } - if (!containsRedirectGrantType(authorizedGrantTypes)) { - throw new InvalidGrantException("A redirect_uri can only be used by implicit or authorization_code grant types."); - } - - Set registeredRedirectUris = client.getRegisteredRedirectUri(); - if (registeredRedirectUris == null || registeredRedirectUris.isEmpty()) { - throw new InvalidRequestException("At least one redirect_uri must be registered with the client."); - } - - // There must be at least one redirect uri that is the root of the requested redirect uri - for(String registeredRedirectUri : registeredRedirectUris) { - if(requestedRedirect != null && redirectMatches(requestedRedirect, registeredRedirectUri.trim())) { - return requestedRedirect; - } - } - throw new RedirectMismatchException("Unable to find a matching redirect_uri for the client."); - } - - /** - * @param grantTypes - * some grant types - * @return true if the supplied grant types includes one or more of the - * redirect types - */ - private boolean containsRedirectGrantType(Set grantTypes) { - for (String type : grantTypes) { - if (redirectGrantTypes.contains(type)) { - return true; - } - } - return false; - } - - @Override - protected boolean redirectMatches(String requestedRedirect, String redirectUri) { - UriComponents requestedRedirectUri = UriComponentsBuilder.fromUriString(requestedRedirect).build(); - UriComponents registeredRedirectUri = UriComponentsBuilder.fromUriString(redirectUri).build(); - - String requestedRedirectUriPath = (requestedRedirectUri.getPath() != null ? requestedRedirectUri.getPath() : ""); - String registeredRedirectUriPath = (registeredRedirectUri.getPath() != null ? registeredRedirectUri.getPath() : ""); - - boolean portMatch = registeredRedirectUri.getPort() == requestedRedirectUri.getPort(); - boolean hostMatch = hostMatches(registeredRedirectUri.getHost(), requestedRedirectUri.getHost()); - boolean schemeMatch = isEqual(registeredRedirectUri.getScheme(), requestedRedirectUri.getScheme()); - boolean userInfoMatch = isEqual(registeredRedirectUri.getUserInfo(), requestedRedirectUri.getUserInfo()); - boolean pathMatch = StringUtils.cleanPath(requestedRedirectUriPath).startsWith(StringUtils.cleanPath(registeredRedirectUriPath)); - - return schemeMatch && userInfoMatch && hostMatch && portMatch && pathMatch; - } - - private boolean isEqual(String str1, String str2) { - return Objects.equals(str1, str2); - } - - @Override - protected boolean hostMatches(String registered, String requested) { - return isEqual(registered, requested); - } -} diff --git a/orcid-core/src/main/java/org/orcid/core/oauth/service/NamespacedRandomCodeGenerator.java b/orcid-core/src/main/java/org/orcid/core/oauth/service/NamespacedRandomCodeGenerator.java deleted file mode 100644 index 75de0827790..00000000000 --- a/orcid-core/src/main/java/org/orcid/core/oauth/service/NamespacedRandomCodeGenerator.java +++ /dev/null @@ -1,53 +0,0 @@ -package org.orcid.core.oauth.service; - -import java.util.concurrent.ThreadLocalRandom; -import java.util.concurrent.TimeUnit; - -import org.springframework.security.oauth2.common.util.RandomValueStringGenerator; - -import com.google.common.cache.Cache; -import com.google.common.cache.CacheBuilder; - -public class NamespacedRandomCodeGenerator { - - private static final Cache codeCache = CacheBuilder.newBuilder().maximumSize(100000).expireAfterWrite(10, TimeUnit.MINUTES).build(); - private RandomValueStringGenerator generator = new RandomValueStringGenerator(5); - private static final String base62 = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; - - private int start; - private int end; - - /** Each node needs a local cache of authentication codes. - * When creating a new code the cache is checked to ensure it's not already been issued. - * If it has, regenerate until unique code is used. - * - * Each node requires its own code namespace in order to prevent clashes across nodes. - * This will be the first character of the authorisation code. - * Note this must be a range of prefixes, not a single char. - * Using a single char would reduce the amount of randomness drastically. - * - * Split the base62 namespace into 3 chunks, last chuck may be bigger than the others. - * Use a namespaced random char + 5 random chars to create code. - */ - public NamespacedRandomCodeGenerator(int node, int numberOfNodes){ - int range = 62 / numberOfNodes; - start = (node - 1) * range; - end = start + range - 1; - if (node == numberOfNodes) - end = 61; - } - - /** - * @return a 6 char base62 code specific to this node. - */ - public synchronized String nextRandomCode(){ - String suffix = generator.generate(); - String code; - do { - int position = ThreadLocalRandom.current().nextInt(end - start + 1);//excludes last number - code = base62.charAt(position + start) + suffix; - } while (codeCache.getIfPresent(code) != null); - codeCache.put(code, code); - return code; - }; -} diff --git a/orcid-core/src/main/java/org/orcid/core/oauth/service/OrcidAuthorizationCodeServiceImpl.java b/orcid-core/src/main/java/org/orcid/core/oauth/service/OrcidAuthorizationCodeServiceImpl.java deleted file mode 100644 index 4e29910b401..00000000000 --- a/orcid-core/src/main/java/org/orcid/core/oauth/service/OrcidAuthorizationCodeServiceImpl.java +++ /dev/null @@ -1,196 +0,0 @@ -package org.orcid.core.oauth.service; - -import java.io.Serializable; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import javax.annotation.Resource; -import javax.persistence.NoResultException; - -import org.apache.commons.lang.StringUtils; -import org.orcid.core.constants.OrcidOauth2Constants; -import org.orcid.core.manager.ClientDetailsEntityCacheManager; -import org.orcid.core.manager.ProfileEntityCacheManager; -import org.orcid.core.oauth.OrcidOauth2AuthInfo; -import org.orcid.core.oauth.OrcidOauth2UserAuthentication; -import org.orcid.persistence.dao.OrcidOauth2AuthoriziationCodeDetailDao; -import org.orcid.persistence.jpa.entities.ClientDetailsEntity; -import org.orcid.persistence.jpa.entities.OrcidOauth2AuthoriziationCodeDetail; -import org.orcid.persistence.jpa.entities.ProfileEntity; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.core.userdetails.UserDetails; -import org.springframework.security.oauth2.common.util.OAuth2Utils; -import org.springframework.security.oauth2.provider.OAuth2Authentication; -import org.springframework.security.oauth2.provider.OAuth2Request; -import org.springframework.security.oauth2.provider.code.RandomValueAuthorizationCodeServices; -import org.springframework.security.web.authentication.WebAuthenticationDetails; -import org.springframework.stereotype.Service; - -/** - * @author Declan Newman (declan) Date: 23/04/2012 - */ -@Service("orcidAuthorizationCodeService") -public class OrcidAuthorizationCodeServiceImpl extends RandomValueAuthorizationCodeServices { - - private static final String CLIENT_ID = "client_id"; - - private static final String STATE = "state"; - - private static final String SCOPE = "scope"; - - private static final String REDIRECT_URI = "redirect_uri"; - - private static final String RESPONSE_TYPE = "response_type"; - - @Resource(name = "orcidOauth2AuthoriziationCodeDetailDao") - private OrcidOauth2AuthoriziationCodeDetailDao orcidOauth2AuthoriziationCodeDetailDao; - - @Resource(name = "profileEntityCacheManager") - private ProfileEntityCacheManager profileEntityCacheManager; - - @Resource - private ClientDetailsEntityCacheManager clientDetailsEntityCacheManager; - - private static final Logger LOGGER = LoggerFactory.getLogger(OrcidAuthorizationCodeServiceImpl.class); - - @Resource - private NamespacedRandomCodeGenerator generator; - - @Override - public String createAuthorizationCode(OAuth2Authentication authentication) { - String code = generator.nextRandomCode(); - store(code, authentication); - return code; - } - - @Override - protected void store(String code, OAuth2Authentication authentication) { - OrcidOauth2AuthoriziationCodeDetail detail = getDetailFromAuthorization(code, authentication); - if (detail == null) { - throw new IllegalArgumentException("Cannot persist the authorisation code as the user and/or client " + "cannot be found"); - } - orcidOauth2AuthoriziationCodeDetailDao.persist(detail); - OrcidOauth2AuthInfo authInfo = new OrcidOauth2AuthInfo(authentication); - LOGGER.info("Storing authorization code: code={}, clientId={}, scopes={}, userOrcid={}", new Object[] { code, authInfo.getClientId(), authInfo.getScopes(), - authInfo.getUserOrcid() }); - } - - @Override - protected OAuth2Authentication remove(String code) { - OrcidOauth2AuthoriziationCodeDetail detail = orcidOauth2AuthoriziationCodeDetailDao.removeAndReturn(code); - if (detail == null) { - LOGGER.info("No such authorization code to remove: code={}", - new Object[] { code }); - return null; - } - - //////// - // TODO: The name should change to `scopes` once the authorization server generates all authorization codes - //////// - Set newScopes = StringUtils.isNotBlank(detail.getNewScopes()) ? Stream.of(detail.getNewScopes().split(",")).map(String::trim).collect(Collectors.toSet()) : Set.of(); - Set scopes = detail.getScopes(); - scopes.addAll(newScopes); - String clientId = detail.getClientDetailsEntity().getId(); - - LOGGER.info("Removed authorization code: code={}, clientId={}, scopes={}, userOrcid={}", new Object[] { code, clientId, scopes, - detail.getOrcid() }); - - - OAuth2Request oAuth2Request = new OAuth2Request(Collections. emptyMap(), clientId, Collections. emptyList(), true, scopes, detail.getResourceIds(), detail.getRedirectUri(), new HashSet(Arrays.asList(detail.getResponseType())), Collections. emptyMap()); - Authentication userAuth = getUserAuthentication(detail); - return new OAuth2Authentication(oAuth2Request, userAuth); - } - - private OrcidOauth2UserAuthentication getUserAuthentication(OrcidOauth2AuthoriziationCodeDetail detail) { - ProfileEntity profile = profileEntityCacheManager.retrieve(detail.getOrcid()); - return new OrcidOauth2UserAuthentication(profile, detail.getAuthenticated()); - } - - private OrcidOauth2AuthoriziationCodeDetail getDetailFromAuthorization(String code, OAuth2Authentication authentication) { - OAuth2Request oAuth2Request = authentication.getOAuth2Request(); - OrcidOauth2AuthoriziationCodeDetail detail = new OrcidOauth2AuthoriziationCodeDetail(); - Map requestParameters = oAuth2Request.getRequestParameters(); - if (requestParameters != null && !requestParameters.isEmpty()) { - String clientId = (String) requestParameters.get(CLIENT_ID); - ClientDetailsEntity clientDetails = getClientDetails(clientId); - - if (clientDetails == null) { - return null; - } - - detail.setScopes(OAuth2Utils.parseParameterList((String)requestParameters.get(SCOPE))); - detail.setState((String)requestParameters.get(STATE)); - detail.setRedirectUri((String)requestParameters.get(REDIRECT_URI)); - detail.setResponseType((String)requestParameters.get(RESPONSE_TYPE)); - detail.setClientDetailsEntity(clientDetails); - - //persist the openID params if present - if (requestParameters.get(OrcidOauth2Constants.NONCE) != null) - detail.setNonce((String)requestParameters.get(OrcidOauth2Constants.NONCE)); - } - - detail.setId(code); - detail.setApproved(authentication.getOAuth2Request().isApproved()); - Authentication userAuthentication = authentication.getUserAuthentication(); - Object principal = userAuthentication.getDetails(); - - String orcid = userAuthentication.getName(); - - if (orcid == null) { - return null; - } - - detail.setOrcid(orcid); - detail.setAuthenticated(userAuthentication.isAuthenticated()); - Set authorities = getStringSetFromGrantedAuthorities(authentication.getAuthorities()); - detail.setAuthorities(authorities); - Object authenticationDetails = userAuthentication.getDetails(); - if (authenticationDetails instanceof WebAuthenticationDetails) { - detail.setSessionId(((WebAuthenticationDetails) authenticationDetails).getSessionId()); - } - - boolean isPersistentTokenEnabledByUser = false; - //Set token version to persistent token - //TODO: As of Jan 2015 all tokens will be new tokens, so, we will have to remove the token version code and - //treat all tokens as new tokens - detail.setVersion(Long.valueOf(OrcidOauth2Constants.PERSISTENT_TOKEN)); - if(requestParameters.containsKey(OrcidOauth2Constants.GRANT_PERSISTENT_TOKEN)) { - String grantPersitentToken = (String)requestParameters.get(OrcidOauth2Constants.GRANT_PERSISTENT_TOKEN); - if(Boolean.parseBoolean(grantPersitentToken)) { - isPersistentTokenEnabledByUser = true; - } - } - - detail.setPersistent(isPersistentTokenEnabledByUser); - - return detail; - } - - private ClientDetailsEntity getClientDetails(String clientId) { - try { - return clientDetailsEntityCacheManager.retrieve(clientId); - } catch (NoResultException e) { - return null; - } - } - - private Set getStringSetFromGrantedAuthorities(Collection authorities) { - Set stringSet = new HashSet(); - if (authorities != null && !authorities.isEmpty()) { - for (GrantedAuthority authority : authorities) { - stringSet.add(authority.getAuthority()); - } - } - return stringSet; - } - -} diff --git a/orcid-core/src/main/java/org/orcid/core/oauth/service/OrcidRandomValueTokenServicesImpl.java b/orcid-core/src/main/java/org/orcid/core/oauth/service/OrcidRandomValueTokenServicesImpl.java index dd1755d9001..6fee9a4f801 100644 --- a/orcid-core/src/main/java/org/orcid/core/oauth/service/OrcidRandomValueTokenServicesImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/oauth/service/OrcidRandomValueTokenServicesImpl.java @@ -39,13 +39,16 @@ import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; +import org.orcid.core.exception.InvalidTokenException import com.google.common.collect.Sets; /** * @author Declan Newman (declan) Date: 11/05/2012 */ -public class OrcidRandomValueTokenServicesImpl extends DefaultTokenServices implements OrcidRandomValueTokenServices { +@Deprecated +//TODO: This have to be removed!!!! +public class OrcidRandomValueTokenServicesImpl { private static final Logger LOGGER = LoggerFactory.getLogger(OrcidRandomValueTokenServicesImpl.class); @Value("${org.orcid.core.token.write_validity_seconds:3600}") @@ -57,207 +60,11 @@ public class OrcidRandomValueTokenServicesImpl extends DefaultTokenServices impl @Value("${org.orcid.core.token.write_validity_seconds:3600}") private int ietfTokenExchangeValiditySeconds; - private OrcidTokenStore orcidTokenStore; - - private TokenEnhancer customTokenEnhancer; - - @Resource(name="orcidOauth2AuthoriziationCodeDetailDaoReadOnly") - private OrcidOauth2AuthoriziationCodeDetailDao orcidOauth2AuthoriziationCodeDetailDaoReadOnly; - - @Resource - private OrcidOAuth2RequestValidator orcidOAuth2RequestValidator; - @Resource - private ClientDetailsEntityCacheManager clientDetailsEntityCacheManager; - - private boolean customSupportRefreshToken; - - @Resource(name="orcidOauth2TokenDetailDao") - private OrcidOauth2TokenDetailDao orcidOauth2TokenDetailDao; - - @Resource - private ProfileEntityManager profileEntityManager; - - @Resource - private AuthenticationKeyGenerator authenticationKeyGenerator; - - @Resource - private RedisClient redisClient; - - @Value("${org.orcid.core.utils.cache.redis.enabled:true}") - private boolean isTokenCacheEnabled; - @Resource private AuthorizationServerUtil authorizationServerUtil; - public void setCustomSupportRefreshToken(boolean customSupportRefreshToken) { - this.customSupportRefreshToken = customSupportRefreshToken; - } - - @Override - public OAuth2AccessToken createAccessToken(OAuth2Authentication authentication) throws AuthenticationException { - - //Do we have an implicit request with update permissions? - if (OrcidOauth2Constants.IMPLICIT_GRANT_TYPE.equals(authentication.getOAuth2Request().getGrantType())) { - // authentication.getOAuth2Request().getResponseTypes().contains("token")) { - Collection combinedStrings = ScopePathType.getCombinedScopesFromStringsAsStrings(authentication.getOAuth2Request().getScope()); - Set requestedScopes = ScopePathType.getScopesFromStrings(combinedStrings); - Set allowedScopes = Sets.newHashSet(); - for (ScopePathType s: requestedScopes) { - if (ScopePathType.AUTHENTICATE.equals(s) || ScopePathType.READ_PUBLIC.equals(s) || ScopePathType.OPENID.equals(s)) { - allowedScopes.add(s.value()); - } - } - //If so, create a long life update token in the background - if (requestedScopes.size() != allowedScopes.size()) { - //create token behind the scenes. - DefaultOAuth2AccessToken accessToken = new DefaultOAuth2AccessToken(UUID.randomUUID().toString()); - accessToken.setExpiration(new Date(System.currentTimeMillis() + (readValiditySeconds * 1000L))); - accessToken.setScope(authentication.getOAuth2Request().getScope()); - accessToken = new DefaultOAuth2AccessToken(customTokenEnhancer.enhance(accessToken, authentication)); - //accessToken.setAdditionalInformation(Maps.newHashMap()); - orcidTokenStore.storeAccessToken(accessToken, authentication); - - //create a read only token request - OAuth2Request r = authentication.getOAuth2Request().narrowScope(allowedScopes); - authentication = new OAuth2Authentication(r, authentication.getUserAuthentication()); - } - } - - //create the regular token - DefaultOAuth2AccessToken accessToken = generateAccessToken(authentication); - try { - orcidTokenStore.storeAccessToken(accessToken, authentication); - } catch(PersistenceException e) { - // In the unlikely case that there is a constraint violation, lets try to generate the token one more time - if(e.getCause() instanceof ConstraintViolationException) { - accessToken = generateAccessToken(authentication); - try { - orcidTokenStore.storeAccessToken(accessToken, authentication); - return accessToken; - } catch(Exception e2) { - // Just throw the first exception - } - - } - OrcidOauth2AuthInfo authInfo = new OrcidOauth2AuthInfo(authentication); - LOGGER.error("Exception creating access token for client {}, scopes {} and user {}", new Object[] {authInfo.getClientId(), authInfo.getScopes(), authInfo.getUserOrcid()}); - LOGGER.error("Error info", e); - throw e; - } - return accessToken; - } - - private DefaultOAuth2AccessToken generateAccessToken(OAuth2Authentication authentication) { - DefaultOAuth2AccessToken accessToken = new DefaultOAuth2AccessToken(UUID.randomUUID().toString()); - int validitySeconds = getAccessTokenValiditySeconds(authentication.getOAuth2Request()); - if (validitySeconds > 0) { - accessToken.setExpiration(new Date(System.currentTimeMillis() + (validitySeconds * 1000L))); - } - accessToken.setScope(authentication.getOAuth2Request().getScope()); - - if(customTokenEnhancer != null) { - accessToken = new DefaultOAuth2AccessToken(customTokenEnhancer.enhance(accessToken, authentication)); - } - - if(!OrcidOauth2Constants.IETF_EXCHANGE_GRANT_TYPE.equals(authentication.getOAuth2Request().getGrantType()) - && this.isSupportRefreshToken(authentication.getOAuth2Request())) { - OAuth2RefreshToken refreshToken = new DefaultOAuth2RefreshToken(UUID.randomUUID().toString()); - accessToken.setRefreshToken(refreshToken); - } - return accessToken; - } - - /** - * The access token validity period in seconds - * - * @param authorizationRequest - * the current authorization request - * @return the access token validity period in seconds - */ @Override - protected int getAccessTokenValiditySeconds(OAuth2Request authorizationRequest) { - Set requestedScopes = ScopePathType.getScopesFromStrings(authorizationRequest.getScope()); - if (isClientCredentialsGrantType(authorizationRequest)) { - boolean allAreClientCredentialsScopes = true; - - if (requestedScopes.size() == 1) { - if (requestedScopes.stream().findFirst().get().isInternalScope()) { - return readValiditySeconds; - } - } - - for (ScopePathType scope : requestedScopes) { - if (!scope.isClientCreditalScope()) { - allAreClientCredentialsScopes = false; - break; - } - } - - if (allAreClientCredentialsScopes) { - return readValiditySeconds; - } - } else if(OrcidOauth2Constants.IMPLICIT_GRANT_TYPE.equals(authorizationRequest.getGrantType())){ - return implicitValiditySeconds; - } else if(OrcidOauth2Constants.IETF_EXCHANGE_GRANT_TYPE.equals(authorizationRequest.getGrantType())) { - return ietfTokenExchangeValiditySeconds; - } else if (isPersistentTokenEnabled(authorizationRequest)) { - return readValiditySeconds; - } - - return writeValiditySeconds; - } - - public int getWriteValiditySeconds() { - return writeValiditySeconds; - } - - public int getReadValiditySeconds() { - return readValiditySeconds; - } - - /** - * Checks the authorization code to verify if the user enable the persistent - * token or not - * */ - private boolean isPersistentTokenEnabled(OAuth2Request authorizationRequest) { - if (authorizationRequest != null) { - Map params = authorizationRequest.getRequestParameters(); - if (params != null) { - if (params.containsKey(OrcidOauth2Constants.IS_PERSISTENT)) { - String isPersistent = params.get(OrcidOauth2Constants.IS_PERSISTENT); - if (Boolean.valueOf(isPersistent)) { - return true; - } - } else if (params.containsKey("code")) { - String code = params.get("code"); - if (orcidOauth2AuthoriziationCodeDetailDaoReadOnly.find(code) != null) { - if (orcidOauth2AuthoriziationCodeDetailDaoReadOnly.isPersistentToken(code)) { - return true; - } - } - } - } - } - - return false; - } - - /** - * Checks if the authorization request grant type is client_credentials - * */ - private boolean isClientCredentialsGrantType(OAuth2Request authorizationRequest) { - Map params = authorizationRequest.getRequestParameters(); - if (params != null) { - if (params.containsKey(OrcidOauth2Constants.GRANT_TYPE)) { - String grantType = params.get(OrcidOauth2Constants.GRANT_TYPE); - if (OrcidOauth2Constants.GRANT_TYPE_CLIENT_CREDENTIALS.equals(grantType)) - return true; - } - } - return false; - } - - private OAuth2Authentication loadAuthenticationFromAuthorizationServer(String accessTokenValue) { + public OAuth2Authentication loadAuthentication(String accessTokenValue) throws AuthenticationException { try { JSONObject tokenInfo = authorizationServerUtil.tokenIntrospection(accessTokenValue); if(tokenInfo == null) { @@ -288,7 +95,7 @@ private OAuth2Authentication loadAuthenticationFromAuthorizationServer(String ac } } - private OrcidOAuth2Authentication buildAuthentication(String accessTokenValue, JSONObject tokenInfo) throws JSONException { + private OrcidBearerTokenAuthentication buildAuthentication(String accessTokenValue, JSONObject tokenInfo) throws JSONException { // What will we get when the token does not exists? String clientId = tokenInfo.getString("client_id"); Authentication authentication = null; @@ -316,227 +123,4 @@ private OrcidOAuth2Authentication buildAuthentication(String accessTokenValue, J return new OrcidOAuth2Authentication(request, authentication, accessTokenValue); } - - @Override - public OAuth2Authentication loadAuthentication(String accessTokenValue) throws AuthenticationException { - if(Features.OAUTH_TOKEN_VALIDATION.isActive()) { - if(LOGGER.isTraceEnabled()) { - LOGGER.trace("Using the auth server to validate token"); - } - return loadAuthenticationFromAuthorizationServer(accessTokenValue); - } else { - ServletRequestAttributes attr = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); - // Feature flag: If the request is to delete an element, allow - if (RequestMethod.DELETE.name().equals(attr.getRequest().getMethod())) { - OrcidOauth2TokenDetail orcidAccessToken = orcidTokenStore.readOrcidOauth2TokenDetail(accessTokenValue); - if (orcidAccessToken == null) { - // Access token not found - throw new InvalidTokenException("Invalid access token: " + accessTokenValue); - } - String revokeReason = orcidAccessToken.getRevokeReason(); - if (PojoUtil.isEmpty(revokeReason) || RevokeReason.USER_REVOKED.equals(RevokeReason.valueOf(revokeReason))) { - OAuth2AccessToken accessToken = orcidTokenStore.readEvenDisabledAccessToken(accessTokenValue); - validateTokenExpirationAndClientStatus(accessToken, accessTokenValue); - return orcidTokenStore.readAuthenticationEvenOnDisabledTokens(accessTokenValue); - } else { - throw new InvalidTokenException("Invalid access token: " + accessTokenValue + ", revoke reason: " + revokeReason); - } - } else { - // Get the token from the cache - Map cachedAccessToken = getTokenFromCache(accessTokenValue); - if (cachedAccessToken != null) { - return orcidTokenStore.readAuthenticationFromCachedToken(cachedAccessToken); - } else { - // Fallback to database if it is not in the cache - OAuth2AccessToken accessToken = orcidTokenStore.readAccessToken(accessTokenValue); - validateTokenExpirationAndClientStatus(accessToken, accessTokenValue); - return orcidTokenStore.readAuthentication(accessTokenValue); - } - } - } - } - - private Map getTokenFromCache(String accessTokenValue) { - if(isTokenCacheEnabled) { - String tokenJsonInfo = redisClient.get(accessTokenValue); - if(StringUtils.isNotBlank(tokenJsonInfo)) { - return JsonUtils.readObjectFromJsonString(tokenJsonInfo, HashMap.class); - } - } - return null; - } - - private void validateTokenExpirationAndClientStatus(OAuth2AccessToken accessToken, String tokenValue) { - // Throw an exception if access token is not found - if (accessToken != null) { - // Throw an exception if the token is expired - if (accessToken.isExpired()) { - orcidTokenStore.removeAccessToken(accessToken); - throw new InvalidTokenException("Access token expired: " + tokenValue); - } - Map additionalInfo = accessToken.getAdditionalInformation(); - if (additionalInfo != null) { - String clientId = (String) additionalInfo.get(OrcidOauth2Constants.CLIENT_ID); - orcidTokenStore.isClientEnabled(clientId); - } - } else { - // Access token not found - throw new InvalidTokenException("Invalid access token: " + tokenValue); - } - } - - public void setOrcidtokenStore(OrcidTokenStore orcidTokenStore) { - super.setTokenStore(orcidTokenStore); - this.orcidTokenStore = orcidTokenStore; - } - - public void setCustomTokenEnhancer(TokenEnhancer customTokenEnhancer) { - super.setTokenEnhancer(customTokenEnhancer); - this.customTokenEnhancer = customTokenEnhancer; - } - - public boolean longLifeTokenExist(String clientId, String userId, Collection scopes) { - Collection existingTokens = orcidTokenStore.findTokensByClientIdAndUserName(clientId, userId); - - if(existingTokens == null || existingTokens.isEmpty()) { - return false; - } - - for(OAuth2AccessToken token : existingTokens) { - if (token.getAdditionalInformation().get(OrcidOauth2Constants.PERSISTENT) != null && Boolean.valueOf((token.getAdditionalInformation().get("persistent").toString()))){ - if(token.getScope().containsAll(scopes) && scopes.containsAll(token.getScope())) { - return true; - } - } - } - - return false; - } - - //see https://github.com/spring-projects/spring-security-oauth/pull/957#issuecomment-304729865 - @Override - @Transactional - public OAuth2AccessToken refreshAccessToken(String refreshTokenValue, TokenRequest tokenRequest) throws AuthenticationException { - String parentTokenValue = tokenRequest.getRequestParameters().get(OrcidOauth2Constants.AUTHORIZATION); - String clientId = tokenRequest.getClientId(); - String scopes = tokenRequest.getRequestParameters().get(OAuth2Utils.SCOPE); - Long expiresIn = tokenRequest.getRequestParameters().containsKey(OrcidOauth2Constants.EXPIRES_IN) - ? Long.valueOf(tokenRequest.getRequestParameters().get(OrcidOauth2Constants.EXPIRES_IN)) : 0L; - Boolean revokeOld = tokenRequest.getRequestParameters().containsKey(OrcidOauth2Constants.REVOKE_OLD) ? Boolean.valueOf(tokenRequest.getRequestParameters().get(OrcidOauth2Constants.REVOKE_OLD)) : true; - - // Check if the refresh token is enabled - if (!customSupportRefreshToken) { - throw new InvalidGrantException("Invalid refresh token: " + refreshTokenValue); - } - // Check if the client support refresh token - ClientDetailsEntity clientDetails = clientDetailsEntityCacheManager.retrieve(clientId); - if (!clientDetails.getAuthorizedGrantTypes().contains(OrcidOauth2Constants.REFRESH_TOKEN)) { - throw new InvalidGrantException("Client " + clientId + " doesnt have refresh token enabled"); - } - - OrcidOauth2TokenDetail parentToken = orcidOauth2TokenDetailDao.findByRefreshTokenValue(refreshTokenValue); - - ProfileEntity profileEntity = new ProfileEntity(parentToken.getOrcid()); - OrcidOauth2TokenDetail newToken = new OrcidOauth2TokenDetail(); - - newToken.setApproved(true); - newToken.setClientDetailsId(clientId); - newToken.setPersistent(parentToken.isPersistent()); - newToken.setOrcid(parentToken.getOrcid()); - newToken.setRedirectUri(parentToken.getRedirectUri()); - newToken.setRefreshTokenValue(UUID.randomUUID().toString()); - newToken.setResourceId(parentToken.getResourceId()); - newToken.setResponseType(parentToken.getResponseType()); - newToken.setState(parentToken.getState()); - newToken.setTokenDisabled(false); - if(expiresIn <= 0) { - //If expiresIn is 0 or less, set the parent token - newToken.setTokenExpiration(parentToken.getTokenExpiration()); - } else { - //Assumes expireIn already contains the real expired time expressed in millis - newToken.setTokenExpiration(new Date(expiresIn)); - } - newToken.setTokenType(parentToken.getTokenType()); - newToken.setTokenValue(UUID.randomUUID().toString()); - newToken.setVersion(parentToken.getVersion()); - - if (PojoUtil.isEmpty(scopes)) { - newToken.setScope(parentToken.getScope()); - } else { - newToken.setScope(scopes); - } - - //Generate an authentication object to be able to generate the authentication key - Set scopesSet = OAuth2Utils.parseParameterList(newToken.getScope()); - AuthorizationRequest request = new AuthorizationRequest(clientId, scopesSet); - request.setApproved(true); - Authentication authentication = new OrcidOauth2UserAuthentication(profileEntity, true); - OrcidOAuth2Authentication orcidAuthentication = new OrcidOAuth2Authentication(request, authentication, newToken.getTokenValue()); - newToken.setAuthenticationKey(authenticationKeyGenerator.extractKey(orcidAuthentication)); - - // Store the new token and return it - orcidOauth2TokenDetailDao.persist(newToken); - - // Revoke the old token when required - if (revokeOld) { - orcidOauth2TokenDetailDao.disableAccessToken(parentTokenValue); - } - - // Save the changes - orcidOauth2TokenDetailDao.flush(); - - // Transform the OrcidOauth2TokenDetail into a OAuth2AccessToken - // and return it - return toOAuth2AccessToken(newToken); - } - - private OAuth2AccessToken toOAuth2AccessToken(OrcidOauth2TokenDetail token) { - DefaultOAuth2AccessToken result = new DefaultOAuth2AccessToken(token.getTokenValue()); - result.setExpiration(token.getTokenExpiration()); - result.setRefreshToken(new DefaultOAuth2RefreshToken(token.getRefreshTokenValue())); - result.setScope(OAuth2Utils.parseParameterList(token.getScope())); - result.setTokenType(token.getTokenType()); - result.setValue(token.getTokenValue()); - - Map additionalInfo = new HashMap(); - if(token.getOrcid() != null) { - additionalInfo.put(OrcidOauth2Constants.ORCID, token.getOrcid()); - additionalInfo.put(OrcidOauth2Constants.NAME, profileEntityManager.retrivePublicDisplayName(token.getOrcid())); - } - - result.setAdditionalInformation(additionalInfo); - return result; - } - - @Override - public OAuth2AccessToken createRevokedAccessToken(OAuth2Authentication authentication, RevokeReason revokeReason) throws AuthenticationException { - // create the regular token - DefaultOAuth2AccessToken accessToken = generateAccessToken(authentication); - try { - if(accessToken.getAdditionalInformation() == null) { - accessToken.setAdditionalInformation(Collections.emptyMap()); - } - accessToken.getAdditionalInformation().put(OrcidOauth2Constants.TOKEN_DISABLED, true); - orcidTokenStore.storeRevokedAccessToken(accessToken, authentication, revokeReason); - } catch (PersistenceException e) { - // In the unlikely case that there is a constraint violation, lets - // try to generate the token one more time - if (e.getCause() instanceof ConstraintViolationException) { - accessToken = generateAccessToken(authentication); - try { - orcidTokenStore.storeRevokedAccessToken(accessToken, authentication, revokeReason); - return accessToken; - } catch (Exception e2) { - // Just throw the first exception - } - - } - OrcidOauth2AuthInfo authInfo = new OrcidOauth2AuthInfo(authentication); - LOGGER.error("Exception creating revoked access token for client {}, scopes {} and user {}", - new Object[] { authInfo.getClientId(), authInfo.getScopes(), authInfo.getUserOrcid() }); - LOGGER.error("Error info", e); - throw e; - } - return accessToken; - } } diff --git a/orcid-core/src/main/java/org/orcid/core/security/DefaultPermissionChecker.java b/orcid-core/src/main/java/org/orcid/core/security/DefaultPermissionChecker.java deleted file mode 100644 index a338652ad67..00000000000 --- a/orcid-core/src/main/java/org/orcid/core/security/DefaultPermissionChecker.java +++ /dev/null @@ -1,365 +0,0 @@ -package org.orcid.core.security; - -import java.security.AccessControlException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Date; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import javax.annotation.Resource; -import javax.xml.datatype.XMLGregorianCalendar; - -import org.apache.commons.lang.StringUtils; -import org.orcid.core.exception.OrcidDeprecatedException; -import org.orcid.core.manager.ProfileEntityCacheManager; -import org.orcid.core.manager.ProfileEntityManager; -import org.orcid.core.oauth.OrcidOAuth2Authentication; -import org.orcid.core.oauth.OrcidOauth2TokenDetailService; -import org.orcid.utils.DateUtils; -import org.orcid.jaxb.model.message.OrcidIdentifier; -import org.orcid.jaxb.model.message.OrcidMessage; -import org.orcid.jaxb.model.message.ScopePathType; -import org.orcid.jaxb.model.message.Visibility; -import org.orcid.persistence.dao.ProfileDao; -import org.orcid.persistence.jpa.entities.OrcidOauth2TokenDetail; -import org.orcid.persistence.jpa.entities.ProfileEntity; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.oauth2.common.util.OAuth2Utils; -import org.springframework.security.oauth2.provider.OAuth2Authentication; -import org.springframework.security.oauth2.provider.OAuth2Request; -import org.springframework.stereotype.Component; - -/** - * @author Declan Newman (declan) Date: 27/04/2012 - */ -@Component("defaultPermissionChecker") -public class DefaultPermissionChecker implements PermissionChecker { - - private static final Logger LOGGER = LoggerFactory.getLogger(DefaultPermissionChecker.class); - - @Value("${org.orcid.core.token.write_validity_seconds:3600}") - private int writeValiditySeconds; - - @Resource(name = "profileEntityManager") - private ProfileEntityManager profileEntityManager; - - @Resource - private ProfileDao profileDao; - - @Value("${org.orcid.core.baseUri}") - private String baseUrl; - - @Resource - private OrcidOauth2TokenDetailService orcidOauthTokenDetailService; - - @Resource(name = "profileEntityCacheManager") - ProfileEntityCacheManager profileEntityCacheManager; - - /** - * Check the permissions for the given - * {@link org.springframework.security.core.Authentication} object and the - * scopes defined in the required scopes - * - * @param authentication - * The authentication object associated with this session - * @param requiredScope - * the scopes required to perform the requested operation - * @param orcid - * the orcid passed into the request. This is for requests, such - * as a GET /1234-1234-1234-1234/orcid-bio - * @param orcidMessage - * the {@link org.orcid.jaxb.model.message.OrcidMessage} that has - * been sent as part of this request. This will only apply to - * PUTs and POSTs - */ - @Override - public void checkPermissions(Authentication authentication, ScopePathType requiredScope, String orcid, OrcidMessage orcidMessage) { - if (StringUtils.isNotBlank(orcid) && orcidMessage != null && orcidMessage.getOrcidProfile() != null - && (orcidMessage.getOrcidProfile().getOrcidIdentifier() == null || StringUtils.isBlank(orcidMessage.getOrcidProfile().getOrcidIdentifier().getPath()))) { - orcidMessage.getOrcidProfile().setOrcidIdentifier(orcid); - } - performPermissionChecks(authentication, requiredScope, orcid, orcidMessage); - } - - /** - * Check the permissions for the given - * {@link org.springframework.security.core.Authentication} object and the - * scopes defined in the required scopes - * - * @param authentication - * The authentication object associated with this session - * @param requiredScope - * the scopes required to perform the requested operation - * @param orcidMessage - * the {@link org.orcid.jaxb.model.message.OrcidMessage} that has - * been sent as part of this request. This will only apply to - * PUTs and POSTs - */ - @Override - public void checkPermissions(Authentication authentication, ScopePathType requiredScope, OrcidMessage orcidMessage) { - performPermissionChecks(authentication, requiredScope, null, orcidMessage); - } - - /** - * Check the permissions for the given - * {@link org.springframework.security.core.Authentication} object and the - * scopes defined in the required scopes - * - * @param authentication - * The authentication object associated with this session - * @param requiredScope - * the scopes required to perform the requested operation - * @param orcid - * the orcid passed into the request. This is for requests, such - * as a GET /1234-1234-1234-1234/orcid-bio - */ - @Override - public void checkPermissions(Authentication authentication, ScopePathType requiredScope, String orcid) { - LOGGER.debug("Checking permissions on token"); - performPermissionChecks(authentication, requiredScope, orcid, null); - } - - /** - * Obtain the current users' permission and return the - * {@link org.orcid.jaxb.model.message.Visibility} array containing those - * - * @param authentication - * the object containing the user's security information - * @return the {@alink Visibility} array of the current user - */ - @Override - public Set obtainVisibilitiesForAuthentication(Authentication authentication, ScopePathType requiredScope, OrcidMessage orcidMessage) { - Collection authorities = authentication.getAuthorities(); - if (authoritiesHasRole(authorities, "ROLE_SYSTEM")) { - return new HashSet(Arrays.asList(Visibility.SYSTEM)); - } else if (OrcidOAuth2Authentication.class.isAssignableFrom(authentication.getClass())) { - OrcidOAuth2Authentication auth2Authentication = (OrcidOAuth2Authentication) authentication; - Set visibilities = getVisibilitiesForOauth2Authentication(auth2Authentication, orcidMessage, requiredScope); - return visibilities; - } else { - throw new IllegalArgumentException("Cannot obtain authentication details from " + authentication); - } - } - - private Set getVisibilitiesForOauth2Authentication(OAuth2Authentication oAuth2Authentication, OrcidMessage orcidMessage, ScopePathType requiredScope) { - - Set visibilities = new HashSet(); - visibilities.add(Visibility.PUBLIC); - - String orcid = orcidMessage.getOrcidProfile().getOrcidIdentifier().getPath(); - - // Check the scopes and it will throw an an AccessControlException if - // the correct scope is not found. This - // effectively means that the user can only see the public data - try { - checkScopes(oAuth2Authentication, requiredScope); - } catch (AccessControlException e) { - return visibilities; - } - // If the user has granted permission to the client and the orcid that - // has been requested is that of the user - // we can allow for access of protected data - if (!oAuth2Authentication.isClientOnly() && oAuth2Authentication.getPrincipal() != null - && ProfileEntity.class.isAssignableFrom(oAuth2Authentication.getPrincipal().getClass())) { - ProfileEntity principal = (ProfileEntity) oAuth2Authentication.getPrincipal(); - visibilities.add(Visibility.REGISTERED_ONLY); - if (principal != null && principal.getId().equals(orcid)) { - Set requestedScopes = oAuth2Authentication.getOAuth2Request().getScope(); - for (String scope : requestedScopes) { - if (ScopePathType.hasStringScope(scope, requiredScope)) { - visibilities.add(Visibility.LIMITED); - break; - } - } - } - // This is a client credential authenticated client. If the profile - // was created using this client and it - // hasn't been claimed, it's theirs to read - } else if (oAuth2Authentication.isClientOnly()) { - OAuth2Request authorizationRequest = oAuth2Authentication.getOAuth2Request(); - String clientId = authorizationRequest.getClientId(); - String sponsorOrcid = getSponsorOrcid(orcidMessage); - if (StringUtils.isNotBlank(sponsorOrcid) && clientId.equals(sponsorOrcid) && !orcidMessage.getOrcidProfile().getOrcidHistory().isClaimed()) { - visibilities.add(Visibility.LIMITED); - visibilities.add(Visibility.PRIVATE); - } - } - - return visibilities; - } - - private String getSponsorOrcid(OrcidMessage orcidMessage) { - if (orcidMessage != null && orcidMessage.getOrcidProfile() != null && orcidMessage.getOrcidProfile().getOrcidHistory() != null - && orcidMessage.getOrcidProfile().getOrcidHistory().getSource() != null) { - return orcidMessage.getOrcidProfile().getOrcidHistory().getSource().retrieveSourcePath(); - } else { - return null; - } - } - - private void performPermissionChecks(Authentication authentication, ScopePathType requiredScope, String orcid, OrcidMessage orcidMessage) { - // We can trust that this will return a not-null Authentication object - Collection authorities = authentication.getAuthorities(); - if (authoritiesHasRole(authorities, "ROLE_SYSTEM")) { - return; - } else if (OAuth2Authentication.class.isAssignableFrom(authentication.getClass())) { - OAuth2Authentication oAuth2Authentication = (OAuth2Authentication) authentication; - checkScopes(oAuth2Authentication, requiredScope); - performSecurityChecks(oAuth2Authentication, requiredScope, orcidMessage, orcid); - } else { - throw new AccessControlException("Cannot access method with authentication type " + authentication != null ? authentication.toString() : ", as it's null!"); - } - } - - private void checkScopes(OAuth2Authentication oAuth2Authentication, ScopePathType requiredScope) { - OAuth2Request authorizationRequest = oAuth2Authentication.getOAuth2Request(); - Set requestedScopes = authorizationRequest.getScope(); - if (requiredScope.isUserGrantWriteScope()) { - OrcidOAuth2Authentication orcidOauth2Authentication = (OrcidOAuth2Authentication) oAuth2Authentication; - String activeToken = orcidOauth2Authentication.getActiveToken(); - if (activeToken != null) { - OrcidOauth2TokenDetail tokenDetail = orcidOauthTokenDetailService.findNonDisabledByTokenValue(activeToken); - if (removeUserGrantWriteScopePastValitity(tokenDetail)) { - throw new AccessControlException("Write scopes for this token have expired "); - } - } - } - if (!hasRequiredScope(requestedScopes, requiredScope)) { - throw new AccessControlException("Insufficient or wrong scope " + requestedScopes); - } - } - - /* - * Remove UserGrantWriteScope past the specified validity, returns true if - * modified false otherwise - */ - public boolean removeUserGrantWriteScopePastValitity(OrcidOauth2TokenDetail tokenDetail) { - boolean scopeRemoved = false; - if (tokenDetail != null && tokenDetail.getScope() != null) { - // Clean the scope if it is not a persistent token - if (!tokenDetail.isPersistent()) { - Set scopes = OAuth2Utils.parseParameterList(tokenDetail.getScope()); - List removeScopes = new ArrayList(); - for (String scope : scopes) { - if (scope != null && !scope.isEmpty()) { - ScopePathType scopePathType = ScopePathType.fromValue(scope); - if (scopePathType.isUserGrantWriteScope()) { - Date now = new Date(); - if (now.getTime() > tokenDetail.getDateCreated().getTime() + (writeValiditySeconds * 1000)) { - removeScopes.add(scope); - scopeRemoved = true; - } - } - } - } - if (scopeRemoved) { - for (String scope : removeScopes) - scopes.remove(scope); - orcidOauthTokenDetailService.updateScopes(tokenDetail.getTokenValue(), scopes); - return true; - } - } - } - return false; - } - - private void performSecurityChecks(OAuth2Authentication oAuth2Authentication, ScopePathType requiredScope, OrcidMessage orcidMessage, String orcid) { - if (oAuth2Authentication.isClientOnly()) { - performClientChecks(oAuth2Authentication, requiredScope, orcidMessage, orcid); - } else { - performUserChecks(oAuth2Authentication, requiredScope, orcidMessage, orcid); - } - } - - private void performUserChecks(OAuth2Authentication oAuth2Authentication, ScopePathType requiredScope, OrcidMessage orcidMessage, String orcid) { - ProfileEntity principal = (ProfileEntity) oAuth2Authentication.getPrincipal(); - String userOrcid = principal.getId(); - if (orcidMessage != null && orcidMessage.getOrcidProfile() != null && orcidMessage.getOrcidProfile().getOrcidIdentifier() != null - && StringUtils.isNotBlank(orcid)) { - String messageOrcid = orcidMessage.getOrcidProfile().getOrcidIdentifier().getPath(); - // First check that this is a valid call. If these don't match then - // the request is invalid - if (!messageOrcid.equals(orcid)) { - throw new IllegalArgumentException("The ORCID in the body and the URI do not match. Body ORCID: " + messageOrcid + " URI ORCID: " + orcid - + " do NOT match."); - } - } - // Is this the owner making the call? If it is, then let 'em on - // through - if (userOrcid.equals(orcid)) { - return; - } else { - if(profileDao.isProfileDeprecated(orcid)) { - ProfileEntity entity = profileEntityCacheManager.retrieve(orcid); - Map params = new HashMap(); - StringBuffer primary = new StringBuffer(baseUrl).append("/").append(entity.getPrimaryRecord().getId()); - params.put(OrcidDeprecatedException.ORCID, primary.toString()); - if(entity.getDeprecatedDate() != null) { - XMLGregorianCalendar calendar = DateUtils.convertToXMLGregorianCalendar(entity.getDeprecatedDate()); - params.put(OrcidDeprecatedException.DEPRECATED_DATE, calendar.toString()); - } - throw new OrcidDeprecatedException(params); - } - } - throw new AccessControlException("You do not have the required permissions."); - } - - private void performClientChecks(OAuth2Authentication oAuth2Authentication, ScopePathType requiredScope, OrcidMessage orcidMessage, String orcid) { - OAuth2Request authorizationRequest = oAuth2Authentication.getOAuth2Request(); - // If we have an ORCID in the request, we assume that this is intended - // as an update - if (orcidMessage != null && orcidMessage.getOrcidProfile() != null && StringUtils.isNotBlank(orcid)) { - - OrcidIdentifier orcidOb = orcidMessage.getOrcidProfile().getOrcidIdentifier(); - String messageOrcid = orcidOb != null ? orcidOb.getPath() : orcid; - if (StringUtils.isNotBlank(messageOrcid) && !orcid.equals(messageOrcid)) { - throw new IllegalArgumentException("The ORCID in the body and the URI do NOT match. Body ORCID: " + messageOrcid + " URI ORCID: " + orcid - + " do NOT match."); - } - - profileEntityCacheManager.retrieve(messageOrcid); - if (!profileEntityManager.existsAndNotClaimedAndBelongsTo(messageOrcid, authorizationRequest.getClientId())) { - throw new AccessControlException("You cannot update this profile as it has been claimed, or you are not the owner."); - } - } - } - - private boolean authoritiesHasRole(Collection authorities, String role) { - for (GrantedAuthority authority : authorities) { - if (authority.getAuthority().equalsIgnoreCase(role)) { - return true; - } - } - return false; - } - - private boolean hasRequiredScope(Set requestedScopes, ScopePathType requiredScope) { - for (String requestedScope : requestedScopes) { - if (ScopePathType.hasStringScope(requestedScope, requiredScope)) { - return true; - } - if (requiredScope.isReadOnlyScope()) { - // If read only (limited or otherwise) then let it through it - // the user has /read-public, and let the visibility filter take - // care of it. - if (ScopePathType.hasStringScope(requestedScope, ScopePathType.READ_PUBLIC)) { - return true; - } - } - } - return false; - } - - public void setOrcidOauthTokenDetailService(OrcidOauth2TokenDetailService orcidOauthTokenDetailService) { - this.orcidOauthTokenDetailService = orcidOauthTokenDetailService; - } -} diff --git a/orcid-core/src/main/java/org/orcid/core/security/PermissionChecker.java b/orcid-core/src/main/java/org/orcid/core/security/PermissionChecker.java deleted file mode 100644 index ec9a9763d4d..00000000000 --- a/orcid-core/src/main/java/org/orcid/core/security/PermissionChecker.java +++ /dev/null @@ -1,78 +0,0 @@ -package org.orcid.core.security; - -import org.orcid.jaxb.model.message.OrcidMessage; -import org.orcid.jaxb.model.message.ScopePathType; -import org.orcid.jaxb.model.message.Visibility; -import org.springframework.security.core.Authentication; - -import java.util.Set; - -/** - *

- * Checks permissions for the user current registered as the - * {@link java.security.Principal} in this session. - *

- * This was designed to be used in conjunction with AOP giving access to the - * {@link org.orcid.core.security .visibility.aop.AccessControl#requiredScopes()} - * properties. However, to make this more versitile it takes the array of - * {@link ScopePathType} available when using the annotation. - * - * @author Declan Newman (declan) Date: 27/04/2012 - */ -public interface PermissionChecker { - - /** - * Check the permissions for the given {@link Authentication} object and the - * scopes defined in the required scopes - * - * @param authentication - * The authentication object associated with this session - * @param requiredScope - * the scope required to perform the requested operation - * @param orcid - * the orcid passed into the request. This is for requests, such - * as a GET /1234-1234-1234-1234/orcid-bio - * @param orcidMessage - * the {@link OrcidMessage} that has been sent as part of this - * request. This will only apply to PUTs and POSTs - */ - void checkPermissions(Authentication authentication, ScopePathType requiredScope, String orcid, OrcidMessage orcidMessage); - - /** - * Check the permissions for the given {@link Authentication} object and the - * scopes defined in the required scopes - * - * @param authentication - * The authentication object associated with this session - * @param requiredScope - * the scope required to perform the requested operation - * @param orcidMessage - * the {@link OrcidMessage} that has been sent as part of this - * request. This will only apply to PUTs and POSTs - */ - void checkPermissions(Authentication authentication, ScopePathType requiredScope, OrcidMessage orcidMessage); - - /** - * Check the permissions for the given {@link Authentication} object and the - * scopes defined in the required scopes - * - * @param authentication - * The authentication object associated with this session - * @param requiredScope - * the scope required to perform the requested operation - * @param orcid - * the orcid passed into the request. This is for requests, such - * as a GET /1234-1234-1234-1234/orcid-bio - */ - void checkPermissions(Authentication authentication, ScopePathType requiredScope, String orcid); - - /** - * Obtain the current users' permission and return the {@link Visibility} - * array containing those - * - * @param authentication - * the object containing the user's security information - * @return the {@alink Visibility} array of the current user - */ - Set obtainVisibilitiesForAuthentication(Authentication authentication, ScopePathType requiredScope, OrcidMessage orcidMessage); -} diff --git a/orcid-core/src/main/java/org/orcid/core/security/visibility/aop/OrcidApiAuthorizationSecurityAspect.java b/orcid-core/src/main/java/org/orcid/core/security/visibility/aop/OrcidApiAuthorizationSecurityAspect.java deleted file mode 100644 index c7f7f65d43f..00000000000 --- a/orcid-core/src/main/java/org/orcid/core/security/visibility/aop/OrcidApiAuthorizationSecurityAspect.java +++ /dev/null @@ -1,385 +0,0 @@ -package org.orcid.core.security.visibility.aop; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import javax.annotation.Resource; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.UriInfo; - -import org.apache.commons.lang.StringUtils; -import org.aspectj.lang.annotation.AfterReturning; -import org.aspectj.lang.annotation.Aspect; -import org.aspectj.lang.annotation.Before; -import org.orcid.core.oauth.OrcidOAuth2Authentication; -import org.orcid.core.security.PermissionChecker; -import org.orcid.core.security.visibility.filter.VisibilityFilter; -import org.orcid.jaxb.model.message.ExternalIdentifiers; -import org.orcid.jaxb.model.message.GivenNames; -import org.orcid.jaxb.model.message.Keywords; -import org.orcid.jaxb.model.message.OrcidBio; -import org.orcid.jaxb.model.message.OrcidMessage; -import org.orcid.jaxb.model.message.OrcidProfile; -import org.orcid.jaxb.model.message.OtherNames; -import org.orcid.jaxb.model.message.PersonalDetails; -import org.orcid.jaxb.model.message.ResearcherUrls; -import org.orcid.jaxb.model.message.ScopePathType; -import org.orcid.jaxb.model.message.Visibility; -import org.orcid.jaxb.model.message.VisibilityType; -import org.orcid.jaxb.model.notification_v2.Notification; -import org.orcid.jaxb.model.record_v2.Activity; -import org.orcid.persistence.dao.OrcidOauth2TokenDetailDao; -import org.orcid.pojo.ajaxForm.PojoUtil; -import org.springframework.core.annotation.Order; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.core.context.SecurityContext; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.oauth2.provider.OAuth2Request; -import org.springframework.stereotype.Component; - -/** - * @author Declan Newman (declan) Date: 16/03/2012 - */ -@Deprecated -@Aspect -@Component -@Order(100) -public class OrcidApiAuthorizationSecurityAspect { - - public static final String CLIENT_ID = "client_id"; - - @Resource - private OrcidOauth2TokenDetailDao orcidOauth2TokenDetailDao; - - @Resource(name = "visibilityFilter") - private VisibilityFilter visibilityFilter; - - @Resource(name = "defaultPermissionChecker") - private PermissionChecker permissionChecker; - - public void setOrcidOauth2TokenDetailDao(OrcidOauth2TokenDetailDao orcidOauth2TokenDetailDao) { - this.orcidOauth2TokenDetailDao = orcidOauth2TokenDetailDao; - } - - @Before("@annotation(accessControl) && (args(uriInfo ,orcid, orcidMessage))") - public void checkPermissionsWithAll(AccessControl accessControl, UriInfo uriInfo, String orcid, OrcidMessage orcidMessage) { - permissionChecker.checkPermissions(getAuthentication(), accessControl.requiredScope(), orcid, orcidMessage); - } - - @Before("@annotation(accessControl) && (args(uriInfo, orcidMessage))") - public void checkPermissionsWithOrcidMessage(AccessControl accessControl, UriInfo uriInfo, OrcidMessage orcidMessage) { - permissionChecker.checkPermissions(getAuthentication(), accessControl.requiredScope(), orcidMessage); - - } - - @Before("@annotation(accessControl) && args(orcid)") - public void checkPermissionsWithOrcid(AccessControl accessControl, String orcid) { - Authentication auth = getAuthentication(); - boolean allowAnonymousCall = allowAnonymousAccess(auth, accessControl); - if(!allowAnonymousCall) { - permissionChecker.checkPermissions(auth, accessControl.requiredScope(), orcid); - } - - } - - @Before("@annotation(accessControl) && args(orcid, id)") - public void checkPermissionsWithLongId(AccessControl accessControl, String orcid, Long id) { - Authentication auth = getAuthentication(); - boolean allowAnonymousCall = allowAnonymousAccess(auth, accessControl); - if(!allowAnonymousCall) { - permissionChecker.checkPermissions(auth, accessControl.requiredScope(), orcid); - } - } - - @Before("@annotation(accessControl) && args(orcid, id)") - public void checkPermissionsWithId(AccessControl accessControl, String orcid, String id) { - Authentication auth = getAuthentication(); - boolean allowAnonymousCall = allowAnonymousAccess(auth, accessControl); - if(!allowAnonymousCall) { - permissionChecker.checkPermissions(getAuthentication(), accessControl.requiredScope(), orcid); - } - } - - @Before("@annotation(accessControl) && args(uriInfo, orcid, notification)") - public void checkPermissionsWithNotification(AccessControl accessControl, UriInfo uriInfo, String orcid, Notification notification) { - permissionChecker.checkPermissions(getAuthentication(), accessControl.requiredScope(), orcid); - } - - @Before("@annotation(accessControl) && args(orcid, activity)") - public void checkPermissionsWithWork(AccessControl accessControl, String orcid, Activity activity) { - permissionChecker.checkPermissions(getAuthentication(), accessControl.requiredScope(), orcid); - } - - @Before("@annotation(accessControl) && args(orcid, putCode, activity)") - public void checkPermissionsWithWork(AccessControl accessControl, String orcid, String putCode, Activity activity) { - permissionChecker.checkPermissions(getAuthentication(), accessControl.requiredScope(), orcid); - } - - @Before("@annotation(accessControl) && args(uriInfo, orcid, webhookUri)") - public void checkPermissionsWithOrcidAndWebhookUri(AccessControl accessControl, UriInfo uriInfo, String orcid, String webhookUri) { - permissionChecker.checkPermissions(getAuthentication(), accessControl.requiredScope(), orcid); - } - - @AfterReturning(pointcut = "@annotation(accessControl)", returning = "response") - public void visibilityResponseFilter(Response response, AccessControl accessControl) { - if(accessControl.requestComesFromInternalApi()) { - return; - } - Object entity = response.getEntity(); - if (entity != null && OrcidMessage.class.isAssignableFrom(entity.getClass())) { - OrcidMessage orcidMessage = (OrcidMessage) entity; - - //If it is search results, don't filter them, just return them - if(orcidMessage.getOrcidSearchResults() != null) { - return; - } - - // get the client id - Object authentication = getAuthentication(); - - Set visibilities = new HashSet(); - - if(allowAnonymousAccess((Authentication)authentication, accessControl)) { - visibilities.add(Visibility.PUBLIC); - } else { - visibilities = permissionChecker.obtainVisibilitiesForAuthentication(getAuthentication(), accessControl.requiredScope(), orcidMessage); - } - //If the message contains a bio, and the given name is filtered, restore it as an empty space - boolean setEmptyGivenNameIfFiltered = false; - if(orcidMessage.getOrcidProfile() != null) { - if(orcidMessage.getOrcidProfile() != null && orcidMessage.getOrcidProfile().getOrcidBio() != null) { - setEmptyGivenNameIfFiltered = true; - } - } - - ScopePathType requiredScope = accessControl.requiredScope(); - // If the required scope is */read-limited or */update - if (isUpdateOrReadScope(requiredScope)) { - // If the authentication contains a client_id, use it to check - // if it should be able to - if (OrcidOAuth2Authentication.class.isAssignableFrom(authentication.getClass())){ - OrcidOAuth2Authentication orcidAuth = (OrcidOAuth2Authentication) getAuthentication(); - - OAuth2Request authorization = orcidAuth.getOAuth2Request(); - String clientId = authorization.getClientId(); - - // #1: Get the user orcid - String userOrcid = getUserOrcidFromOrcidMessage(orcidMessage); - // #2: Evaluate the scope to know which field to filter - boolean allowWorks = false; - boolean allowFunding = false; - boolean allowAffiliations = false; - - // Get the update equivalent scope, if it is reading, but, - // doesnt have the read permissions, check if it have the - // update permissions - ScopePathType equivalentUpdateScope = getEquivalentUpdateScope(requiredScope); - if (requiredScope.equals(ScopePathType.READ_LIMITED)) { - if (hasScopeEnabled(clientId, userOrcid, ScopePathType.ORCID_WORKS_READ_LIMITED.getContent(), ScopePathType.ORCID_WORKS_UPDATE.getContent())) - allowWorks = true; - if (hasScopeEnabled(clientId, userOrcid, ScopePathType.FUNDING_READ_LIMITED.getContent(), ScopePathType.FUNDING_UPDATE.getContent())) - allowFunding = true; - if (hasScopeEnabled(clientId, userOrcid, ScopePathType.AFFILIATIONS_READ_LIMITED.getContent(), ScopePathType.AFFILIATIONS_UPDATE.getContent())) - allowAffiliations = true; - } else if (requiredScope.equals(ScopePathType.ORCID_WORKS_UPDATE) || requiredScope.equals(ScopePathType.ORCID_WORKS_READ_LIMITED)) { - // Check if the member have the update or read scope on - // works - if (hasScopeEnabled(clientId, userOrcid, requiredScope.getContent(), equivalentUpdateScope == null ? null : equivalentUpdateScope.getContent())) - // If so, allow him to see private works - allowWorks = true; - } else if (requiredScope.equals(ScopePathType.FUNDING_UPDATE) || requiredScope.equals(ScopePathType.FUNDING_READ_LIMITED)) { - // Check if the member have the update or read scope on - // funding - if (hasScopeEnabled(clientId, userOrcid, requiredScope.getContent(), equivalentUpdateScope == null ? null : equivalentUpdateScope.getContent())) - // If so, allow him to see private funding - allowFunding = true; - } else if (requiredScope.equals(ScopePathType.AFFILIATIONS_UPDATE) || requiredScope.equals(ScopePathType.AFFILIATIONS_READ_LIMITED)) { - // Check if the member have the update or read scope on - // affiliations - if (hasScopeEnabled(clientId, userOrcid, requiredScope.getContent(), equivalentUpdateScope == null ? null : equivalentUpdateScope.getContent())) - // If so, allow him to see private affiliations - allowAffiliations = true; - } - - visibilityFilter.filter(orcidMessage, clientId, allowWorks, allowFunding, allowAffiliations, - visibilities.toArray(new Visibility[visibilities.size()])); - } else { - visibilityFilter.filter(orcidMessage, null, false, false, false, visibilities.toArray(new Visibility[visibilities.size()])); - } - - } else { - visibilityFilter.filter(orcidMessage, null, false, false, false, visibilities.toArray(new Visibility[visibilities.size()])); - } - - //This applies for given names that were filtered because of the new visibility field applied on them - //If the given name was set at the beginning and now is filtered, it means we should restore it as an empty field - if(setEmptyGivenNameIfFiltered) { - if(orcidMessage.getOrcidProfile() != null) { - if(orcidMessage.getOrcidProfile().getOrcidBio() == null) { - orcidMessage.getOrcidProfile().setOrcidBio(new OrcidBio()); - } - - if(orcidMessage.getOrcidProfile().getOrcidBio().getPersonalDetails() == null) { - orcidMessage.getOrcidProfile().getOrcidBio().setPersonalDetails(new PersonalDetails()); - } - } - } - - //Filter given or family names visibility - if(orcidMessage.getOrcidProfile() != null) { - if(orcidMessage.getOrcidProfile().getOrcidBio() != null) { - if(orcidMessage.getOrcidProfile().getOrcidBio().getPersonalDetails() != null) { - if(orcidMessage.getOrcidProfile().getOrcidBio().getPersonalDetails().getGivenNames() != null) { - orcidMessage.getOrcidProfile().getOrcidBio().getPersonalDetails().getGivenNames().setVisibility(null); - } else { - //Null given names could break client integrations, so, lets return an empty string - GivenNames empty = new GivenNames(); - empty.setContent(StringUtils.EMPTY); - orcidMessage.getOrcidProfile().getOrcidBio().getPersonalDetails().setGivenNames(empty); - } - - if(orcidMessage.getOrcidProfile().getOrcidBio().getPersonalDetails().getFamilyName() != null) { - orcidMessage.getOrcidProfile().getOrcidBio().getPersonalDetails().getFamilyName().setVisibility(null); - } - } - } - } - - //replace section visibilities now we may have filtered items - if(orcidMessage.getOrcidProfile() != null) { - if(orcidMessage.getOrcidProfile().getOrcidBio() != null) { - if(orcidMessage.getOrcidProfile().getOrcidBio().getPersonalDetails() != null) { - OtherNames n = orcidMessage.getOrcidProfile().getOrcidBio().getPersonalDetails().getOtherNames(); - if(n != null) { - n.setVisibility(getMostFromCollection(n.getOtherName())); - } - } - ExternalIdentifiers ids = orcidMessage.getOrcidProfile().getOrcidBio().getExternalIdentifiers(); - if (ids != null){ - ids.setVisibility(getMostFromCollection(ids.getExternalIdentifier())); - } - Keywords kws = orcidMessage.getOrcidProfile().getOrcidBio().getKeywords(); - if (kws != null){ - kws.setVisibility(getMostFromCollection(kws.getKeyword())); - } - ResearcherUrls urls = orcidMessage.getOrcidProfile().getOrcidBio().getResearcherUrls(); - if (urls != null){ - urls.setVisibility(getMostFromCollection(urls.getResearcherUrl())); - } - } - } - } - } - - private Visibility getMostFromCollection(List c){ - Visibility most = Visibility.PUBLIC; - for (VisibilityType x : c){ - if (x.getVisibility().isMoreRestrictiveThan(most)) - most = x.getVisibility(); - } - return most; - } - private String getUserOrcidFromOrcidMessage(OrcidMessage message) { - OrcidProfile profile = message.getOrcidProfile(); - return profile.getOrcidIdentifier().getPath(); - } - - private boolean isUpdateOrReadScope(ScopePathType requiredScope) { - switch (requiredScope) { - case AFFILIATIONS_READ_LIMITED: - case AFFILIATIONS_UPDATE: - case FUNDING_READ_LIMITED: - case FUNDING_UPDATE: - case ORCID_BIO_READ_LIMITED: - case ORCID_BIO_UPDATE: - case ORCID_PATENTS_READ_LIMITED: - case ORCID_PATENTS_UPDATE: - case ORCID_PROFILE_READ_LIMITED: - case READ_LIMITED: - case ORCID_WORKS_READ_LIMITED: - case ORCID_WORKS_UPDATE: - return true; - default: - return false; - } - } - - @Deprecated - public boolean hasScopeEnabled(String clientId, String userName, String scope, String equivalentScope) { - List scopes = new ArrayList(); - scopes.add(scope); - if (equivalentScope != null) - scopes.add(equivalentScope); - return checkIfScopeIsAvailableForMember(clientId, userName, scopes); - } - - private Authentication getAuthentication() { - SecurityContext context = SecurityContextHolder.getContext(); - if (context != null && context.getAuthentication() != null) { - return context.getAuthentication(); - } else { - throw new IllegalStateException("No security context found. This is bad!"); - } - } - - private ScopePathType getEquivalentUpdateScope(ScopePathType readScope) { - if (readScope != null) - switch (readScope) { - case AFFILIATIONS_READ_LIMITED: - return ScopePathType.AFFILIATIONS_UPDATE; - case FUNDING_READ_LIMITED: - return ScopePathType.FUNDING_UPDATE; - case ORCID_WORKS_READ_LIMITED: - return ScopePathType.ORCID_WORKS_UPDATE; - default: - return null; - } - return null; - } - - private boolean allowAnonymousAccess(Authentication auth, AccessControl accessControl) { - boolean allowAnonymousAccess = false; - if(auth != null) { - for(GrantedAuthority grantedAuth : auth.getAuthorities()) { - if("ROLE_ANONYMOUS".equals(grantedAuth.getAuthority())) { - if(!accessControl.enableAnonymousAccess()) { - break; - } - allowAnonymousAccess = true; - break; - } - } - } - return allowAnonymousAccess; - } - - /** - * Check if a member have a specific scope over a client - * - * @param clientId - * @param userName - * @param scopes - * @return true if the member have access to any of the specified scope on the specified user - * */ - @Deprecated - private boolean checkIfScopeIsAvailableForMember(String clientId, String userName, List requiredScopes) { - List availableScopes = orcidOauth2TokenDetailDao.findAvailableScopesByUserAndClientId(clientId, userName); - for(String availableScope : availableScopes) { - String [] simpleScopes = availableScope.split(" "); - for(String simpleScope : simpleScopes) { - if(!PojoUtil.isEmpty(simpleScope)) { - ScopePathType scopePathType = ScopePathType.fromValue(simpleScope); - for(String requiredScope: requiredScopes) { - if(scopePathType.hasScope(requiredScope)) - return true; - } - } - } - } - return false; - } - -} diff --git a/orcid-core/src/main/java/org/orcid/core/security/visibility/filter/VisibilityFilter.java b/orcid-core/src/main/java/org/orcid/core/security/visibility/filter/VisibilityFilter.java deleted file mode 100644 index b480ea778a1..00000000000 --- a/orcid-core/src/main/java/org/orcid/core/security/visibility/filter/VisibilityFilter.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.orcid.core.security.visibility.filter; - -import org.orcid.jaxb.model.message.OrcidMessage; -import org.orcid.jaxb.model.message.Visibility; - -/** - * @author Declan Newman (declan) Date: 16/03/2012 - */ -public interface VisibilityFilter { - - OrcidMessage filter(OrcidMessage messageToBeFiltered, Visibility... visibilities); - - OrcidMessage filter(OrcidMessage messageToBeFiltered, String sourceId, boolean allowPrivateWorks, boolean allowPrivateFunding, boolean allowPrivateAffiliations, Visibility... visibilities); - -} diff --git a/orcid-core/src/main/java/org/orcid/core/security/visibility/filter/impl/VisibilityFilterImpl.java b/orcid-core/src/main/java/org/orcid/core/security/visibility/filter/impl/VisibilityFilterImpl.java deleted file mode 100644 index b242c52ccfb..00000000000 --- a/orcid-core/src/main/java/org/orcid/core/security/visibility/filter/impl/VisibilityFilterImpl.java +++ /dev/null @@ -1,272 +0,0 @@ -package org.orcid.core.security.visibility.filter.impl; - -import java.security.AccessControlException; -import java.util.Arrays; -import java.util.HashSet; -import java.util.Set; - -import javax.annotation.Resource; - -import org.orcid.core.security.PermissionChecker; -import org.orcid.core.security.visibility.filter.VisibilityFilter; -import org.orcid.core.tree.TreeCleaner; -import org.orcid.core.tree.TreeCleaningDecision; -import org.orcid.core.tree.TreeCleaningStrategy; -import org.orcid.jaxb.model.message.Address; -import org.orcid.jaxb.model.message.Affiliation; -import org.orcid.jaxb.model.message.Country; -import org.orcid.jaxb.model.message.Email; -import org.orcid.jaxb.model.message.Funding; -import org.orcid.jaxb.model.message.Orcid; -import org.orcid.jaxb.model.message.OrcidIdentifier; -import org.orcid.jaxb.model.message.OrcidMessage; -import org.orcid.jaxb.model.message.OrcidProfile; -import org.orcid.jaxb.model.message.OrcidSearchResults; -import org.orcid.jaxb.model.message.OrcidWork; -import org.orcid.jaxb.model.message.PrivateVisibleToSource; -import org.orcid.jaxb.model.message.ScopePathType; -import org.orcid.jaxb.model.message.Source; -import org.orcid.jaxb.model.message.Visibility; -import org.orcid.jaxb.model.message.VisibilityType; -import org.orcid.jaxb.model.message.WorkContributors; -import org.orcid.pojo.ajaxForm.PojoUtil; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.context.SecurityContext; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.stereotype.Component; - -/** - * I would imagine the first time you see this class, it may be a bit confusing. - *

- * The goal of this class is to insure that no elements that are marked with a - * {@link org.orcid.jaxb.model.message .Visibility} are displayed to the caller - * unless they have sufficient permissions. - *

- * In addition, we need to make sure that the actual visibility attributes are - * removed (if requested with the removeAttribute argument) are nulled in order - * for callers to be unaware of elements that have been requested to be made - * unavailable. - *

- * This is a very important step in the security model and thus, reflection was - * chosen to scan the JaxB objects and locate any classes implementing the - * {@link org.orcid.jaxb.model.message.VisibilityType} interface and check on - * the visibility level requested. - *

- * - * @author Declan Newman (declan) Date: 16/03/2012 - */ -@Component("visibilityFilter") -public class VisibilityFilterImpl implements VisibilityFilter { - - private final static Logger LOGGER = LoggerFactory.getLogger(VisibilityFilterImpl.class); - - @Resource - private PermissionChecker permissionChecker; - - /** - * Remove the elements that are not present in the list of set of - * {@link org.orcid.jaxb.model.message .Visibility}s present in the array - * passed in By default the remaining visibility elements will not be - * removed from the object. - * - * @param messageToBeFiltered - * the {@link org.orcid.jaxb.model.message.OrcidMessage} that - * will be traversed looking for - * {@link org .orcid.jaxb.model.message.VisibilityType} - * @param visibilities - * What {@link org.orcid.jaxb.model.message.Visibility} elements - * should be allowed. - * @return the cleansed {@link org.orcid.jaxb.model.message.OrcidMessage} - */ - @Override - public OrcidMessage filter(OrcidMessage messageToBeFiltered, Visibility... visibilities) { - return filter(messageToBeFiltered, null, false, false, false, visibilities); - } - - /** - * Remove the elements that are not present in the list of set of - * {@link org.orcid.jaxb.model.message .Visibility}s present in the array - * passed in. - * - * @param messageToBeFiltered - * the {@link org.orcid.jaxb.model.message.OrcidMessage} that - * will be traversed looking for - * {@link org .orcid.jaxb.model.message.VisibilityType} elements. - * @param source - * The orcid source that is executing the request - * @param removeAttribute - * should all {@link org.orcid.jaxb.model.message.Visibility} - * elements be removed from the object graph. This has the effect - * that they will not be present in the resulting JAXB - * serialisation. - * @param visibilities - * What {@link org.orcid.jaxb.model.message.Visibility} elements - * should be allowed. - * @return the cleansed {@link org.orcid.jaxb.model.message.OrcidMessage} - */ - @Override - public OrcidMessage filter(OrcidMessage messageToBeFiltered, final String sourceId, final boolean allowPrivateWorks, final boolean allowPrivateFunding, - final boolean allowPrivateAffiliations, Visibility... visibilities) { - if (messageToBeFiltered == null || visibilities == null || visibilities.length == 0) { - return null; - } - String messageIdForLog = getMessageIdForLog(messageToBeFiltered); - LOGGER.debug("About to filter message: " + messageIdForLog); - final Set visibilitySet = new HashSet(Arrays.asList(visibilities)); - if (visibilitySet.contains(Visibility.SYSTEM)) { - return messageToBeFiltered; - } else { - TreeCleaner treeCleaner = new TreeCleaner(); - treeCleaner.clean(messageToBeFiltered, new TreeCleaningStrategy() { - public TreeCleaningDecision needsStripping(Object obj) { - TreeCleaningDecision decision = TreeCleaningDecision.DEFAULT; - if (obj != null) { - Class clazz = obj.getClass(); - - if (!PojoUtil.isEmpty(sourceId)) { - if (allowPrivateAffiliations && Affiliation.class.isAssignableFrom(clazz)) { - Affiliation affiliation = (Affiliation) obj; - Source source = affiliation.getSource(); - if (source != null) { - String sourcePath = source.retrieveSourcePath(); - if (sourcePath != null) { - if (sourceId.equals(sourcePath)) { - decision = TreeCleaningDecision.IGNORE; - } - } - } - } else if (allowPrivateFunding && Funding.class.isAssignableFrom(clazz)) { - Funding funding = (Funding) obj; - Source source = funding.getSource(); - if (source != null) { - String sourcePath = source.retrieveSourcePath(); - if (sourcePath != null) { - if (sourceId.equals(sourcePath)) { - decision = TreeCleaningDecision.IGNORE; - } - } - } - } else if (allowPrivateWorks && OrcidWork.class.isAssignableFrom(clazz)) { - OrcidWork work = (OrcidWork) obj; - Source source = work.getSource(); - if (source != null) { - if (sourceId.equals(source.retrieveSourcePath())) { - decision = TreeCleaningDecision.IGNORE; - } - } - } - } - - // If it is the address field, the visibility and source - // fields are inside the country element - if (Address.class.isAssignableFrom(clazz)) { - Address address = (Address) obj; - // Remove empty addresses - if (address.getCountry() == null) { - decision = TreeCleaningDecision.CLEANING_REQUIRED; - } else { - Country country = address.getCountry(); - // Allow public addresses - if (Visibility.PUBLIC.equals(country.getVisibility())) { - decision = TreeCleaningDecision.IGNORE; - } else if (visibilitySet.contains(Visibility.LIMITED)) { - // Allow limited visibility when possible - if (Visibility.LIMITED.equals(country.getVisibility())) { - decision = TreeCleaningDecision.IGNORE; - } else { - // As last resource, check the source - Source source = country.getSource(); - if (source != null && sourceId != null && sourceId.equals(source.retrieveSourcePath())) { - decision = TreeCleaningDecision.IGNORE; - } else { - decision = TreeCleaningDecision.CLEANING_REQUIRED; - } - } - } - } - } - - if (Email.class.isAssignableFrom(clazz)) { - // check for /email/read-private permissions, - // include all emails if present - try { - Authentication authentication = getAuthentication(); - if (authentication != null && messageToBeFiltered.getOrcidProfile() != null) { - permissionChecker.checkPermissions(getAuthentication(), ScopePathType.EMAIL_READ_PRIVATE, messageToBeFiltered.getOrcidProfile() - .retrieveOrcidPath()); - decision = TreeCleaningDecision.IGNORE; - } - } catch (AccessControlException e) { - // private email can't be read, do nothing here - } - } - - // if we have a source, and that source can read - // limited, also return the private things they own - // Applies to ExternalIdentifier, Keyword, - // ResearcherUrl, OtherName and anything in the future - // that implements PrivateVisibleToSource - if (sourceId != null) - if (PrivateVisibleToSource.class.isAssignableFrom(clazz) && visibilitySet.contains(Visibility.LIMITED)) { - Source source = ((PrivateVisibleToSource) obj).getSource(); - if (source != null) { - if (sourceId.equals(source.retrieveSourcePath())) { - decision = TreeCleaningDecision.IGNORE; - } - } - } - - if (TreeCleaningDecision.DEFAULT.equals(decision)) { - if (WorkContributors.class.isAssignableFrom(clazz)) { - decision = TreeCleaningDecision.IGNORE; - } else if (VisibilityType.class.isAssignableFrom(clazz)) { - VisibilityType visibilityType = (VisibilityType) obj; - if ((visibilityType.getVisibility() == null || !visibilitySet.contains(visibilityType.getVisibility()))) { - decision = TreeCleaningDecision.CLEANING_REQUIRED; - } - } - } - - } - return decision; - } - }); - OrcidProfile orcidProfile = messageToBeFiltered.getOrcidProfile(); - if (orcidProfile != null) { - orcidProfile.setOrcidInternal(null); - } - LOGGER.debug("Finished filtering message: " + messageIdForLog); - return messageToBeFiltered; - } - } - - private Authentication getAuthentication() { - SecurityContext context = SecurityContextHolder.getContext(); - if (context != null && context.getAuthentication() != null) { - return context.getAuthentication(); - } - return null; - } - - private String getMessageIdForLog(OrcidMessage messageToBeFiltered) { - String messageIdForLog = "unknown"; - OrcidSearchResults orcidSearchResults = messageToBeFiltered.getOrcidSearchResults(); - OrcidProfile orcidProfile = messageToBeFiltered.getOrcidProfile(); - if (orcidSearchResults != null) { - messageIdForLog = "orcid-search-results"; - } else if (orcidProfile != null) { - OrcidIdentifier orcidIdentifier = orcidProfile.getOrcidIdentifier(); - if (orcidIdentifier != null) { - messageIdForLog = orcidIdentifier.getPath(); - } - Orcid orcid = orcidProfile.getOrcid(); - if (orcid != null) { - messageIdForLog = orcid.getValue(); - } - } - return messageIdForLog; - } - -} diff --git a/orcid-core/src/main/java/org/orcid/core/utils/SecurityContextTestUtils.java b/orcid-core/src/main/java/org/orcid/core/utils/SecurityContextTestUtils.java deleted file mode 100644 index 8a6510a3387..00000000000 --- a/orcid-core/src/main/java/org/orcid/core/utils/SecurityContextTestUtils.java +++ /dev/null @@ -1,128 +0,0 @@ -package org.orcid.core.utils; - -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -import java.io.Serializable; -import java.util.*; - -import org.orcid.core.oauth.OrcidOAuth2Authentication; -import org.orcid.jaxb.model.message.ScopePathType; -import org.orcid.persistence.jpa.entities.ProfileEntity; -import org.springframework.security.authentication.AnonymousAuthenticationToken; -import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.core.authority.SimpleGrantedAuthority; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.core.context.SecurityContextImpl; -import org.springframework.security.core.userdetails.User; -import org.springframework.security.core.userdetails.UserDetails; - -public class SecurityContextTestUtils { - - public final static String DEFAULT_CLIENT_ID = "APP-5555555555555555"; - - static public void setUpSecurityContext() { - setUpSecurityContext(ScopePathType.ORCID_WORKS_CREATE); - } - - static public void setUpSecurityContext(ScopePathType... scopePathTypes) { - setUpSecurityContext("4444-4444-4444-4441", scopePathTypes); - } - - static public void setUpSecurityContext(String userOrcid, ScopePathType... scopePathTypes) { - setUpSecurityContext(userOrcid, DEFAULT_CLIENT_ID, scopePathTypes); - } - - static public void setUpSecurityContext(String userOrcid, String clientId, ScopePathType... scopePathTypes) { - SecurityContextImpl securityContext = new SecurityContextImpl(); - OrcidOAuth2Authentication mockedAuthentication = mock(OrcidOAuth2Authentication.class); - securityContext.setAuthentication(mockedAuthentication); - SecurityContextHolder.setContext(securityContext); - ProfileEntity userProfileEntity = new ProfileEntity(userOrcid); - when(mockedAuthentication.getPrincipal()).thenReturn(userProfileEntity); - Authentication userAuthentication = mock(Authentication.class); - when(userAuthentication.getPrincipal()).thenReturn(userProfileEntity); - when(mockedAuthentication.getUserAuthentication()).thenReturn(userAuthentication); - Set scopes = new HashSet(); - if (scopePathTypes != null) { - for (ScopePathType scopePathType : scopePathTypes) { - scopes.add(scopePathType.value()); - } - } - OAuth2Request authorizationRequest = new OAuth2Request(Collections. emptyMap(), clientId, - Collections. emptyList(), true, scopes, Collections. emptySet(), null, Collections. emptySet(), - Collections. emptyMap()); - when(mockedAuthentication.getOAuth2Request()).thenReturn(authorizationRequest); - when(mockedAuthentication.isAuthenticated()).thenReturn(true); - //for obo - OAuth2AuthenticationDetails authDetails = mock(OAuth2AuthenticationDetails.class); - //to use, set token in detail to be a token with OBO. -> when(authDetails.getTokenValue()).thenReturn("xxx"); - when(mockedAuthentication.getDetails()).thenReturn(authDetails); - } - - static public void setUpSecurityContextForClientOnly() { - setUpSecurityContextForClientOnly("APP-5555555555555555"); - } - - static public void setUpSecurityContextForGroupIdClientOnly() { - Set scopes = new HashSet(); - scopes.add(ScopePathType.GROUP_ID_RECORD_READ.value()); - scopes.add(ScopePathType.GROUP_ID_RECORD_UPDATE.value()); - setUpSecurityContextForClientOnly("APP-5555555555555555", scopes); - } - - static public void setUpSecurityContextForClientOnly(String clientId) { - Set scopes = new HashSet(); - scopes.add(ScopePathType.ORCID_PROFILE_CREATE.value()); - setUpSecurityContextForClientOnly(clientId, scopes); - } - - static public void setUpSecurityContextForClientOnly(String clientId, ScopePathType... scopePathTypes) { - Set scopes = new HashSet(); - for (ScopePathType scope : scopePathTypes) { - scopes.add(scope.value()); - } - setUpSecurityContextForClientOnly(clientId, scopes); - } - - static public void setUpSecurityContextForClientOnly(String clientId, Set scopes) { - SecurityContextImpl securityContext = new SecurityContextImpl(); - OrcidOAuth2Authentication mockedAuthentication = mock(OrcidOAuth2Authentication.class); - securityContext.setAuthentication(mockedAuthentication); - SecurityContextHolder.setContext(securityContext); - when(mockedAuthentication.getPrincipal()).thenReturn(new ProfileEntity(clientId)); - when(mockedAuthentication.isClientOnly()).thenReturn(true); - OAuth2Request authorizationRequest = new OAuth2Request(Collections. emptyMap(), clientId, Collections. emptyList(), true, - scopes, Collections. emptySet(), null, Collections. emptySet(), Collections. emptyMap()); - when(mockedAuthentication.getOAuth2Request()).thenReturn(authorizationRequest); - when(mockedAuthentication.isAuthenticated()).thenReturn(true); - when(mockedAuthentication.getName()).thenReturn(clientId); - OAuth2AuthenticationDetails authDetails = mock(OAuth2AuthenticationDetails.class); - when(mockedAuthentication.getDetails()).thenReturn(authDetails); - } - - static public void setUpSecurityContextForAnonymous() { - SecurityContextImpl securityContext = new SecurityContextImpl(); - ArrayList authorities = new ArrayList<>(); - authorities.add(new SimpleGrantedAuthority("ROLE_ANONYMOUS")); - AnonymousAuthenticationToken anonToken = new AnonymousAuthenticationToken("testKey", "testToken", authorities); - securityContext.setAuthentication(anonToken); - SecurityContextHolder.setContext(securityContext); - } - - static public void clearSecurityContext() { - SecurityContextHolder.setContext(new SecurityContextImpl()); - } - - static public void setupSecurityContextForWebUser(String userId, String email) { - UserDetails details = new User(userId, email, List.of()); - UsernamePasswordAuthenticationToken auth = new UsernamePasswordAuthenticationToken(userId, "password"); - auth.setDetails(details); - SecurityContextImpl securityContext = new SecurityContextImpl(); - securityContext.setAuthentication(auth); - SecurityContextHolder.setContext(securityContext); - } - -} diff --git a/orcid-core/src/test/java/org/orcid/core/oauth/service/OrcidRandomValueTokenServicesTest.java b/orcid-core/src/test/java/org/orcid/core/oauth/service/OrcidRandomValueTokenServicesTest.java index e88c5709da3..faf48138bf0 100644 --- a/orcid-core/src/test/java/org/orcid/core/oauth/service/OrcidRandomValueTokenServicesTest.java +++ b/orcid-core/src/test/java/org/orcid/core/oauth/service/OrcidRandomValueTokenServicesTest.java @@ -25,7 +25,7 @@ import org.orcid.core.constants.OrcidOauth2Constants; import org.orcid.core.constants.RevokeReason; import org.orcid.core.manager.ClientDetailsManager; -import org.orcid.core.oauth.OrcidOauth2ClientAuthentication; +import org.orcid.core.oauth.OrcidBearerTokenAuthentication; import org.orcid.core.oauth.OrcidOauth2TokenDetailService; import org.orcid.core.oauth.OrcidRandomValueTokenServices; import org.orcid.core.togglz.Features; @@ -90,7 +90,7 @@ public void testCreateReadLimitedAccessToken() { OAuth2Request request = new OAuth2Request(Collections. emptyMap(), clientId, Collections. emptyList(), true, new HashSet(Arrays.asList("/orcid-profile/read-limited")), Collections. emptySet(), null, Collections. emptySet(), Collections. emptyMap()); ClientDetailsEntity clientDetails = clientDetailsManager.findByClientId(clientId); - Authentication userAuthentication = new OrcidOauth2ClientAuthentication(clientDetails); + Authentication userAuthentication = new OrcidBearerTokenAuthentication(clientDetails); OAuth2Authentication authentication = new OAuth2Authentication(request, userAuthentication); OAuth2AccessToken oauth2AccessToken = tokenServices.createAccessToken(authentication); @@ -111,7 +111,7 @@ public void testCreateAddWorkAccessToken() { authorizationParameters.put(OAuth2Utils.SCOPE, "/orcid-works/create"); OAuth2Request request = new OAuth2Request(Collections. emptyMap(), clientId, Collections. emptyList(), true, new HashSet(Arrays.asList("/orcid-profile/read-limited")), Collections. emptySet(), null, Collections. emptySet(), Collections. emptyMap()); ClientDetailsEntity clientDetails = clientDetailsManager.findByClientId(clientId); - Authentication userAuthentication = new OrcidOauth2ClientAuthentication(clientDetails); + Authentication userAuthentication = new OrcidBearerTokenAuthentication(clientDetails); OAuth2Authentication authentication = new OAuth2Authentication(request, userAuthentication); OAuth2AccessToken oauth2AccessToken = tokenServices.createAccessToken(authentication); @@ -132,7 +132,7 @@ public void testReissuedAccessTokenHasUpdatedExpiration() throws InterruptedExce authorizationParameters.put(OAuth2Utils.SCOPE, "/orcid-works/create"); OAuth2Request request = new OAuth2Request(Collections. emptyMap(), clientId, Collections. emptyList(), true, new HashSet(Arrays.asList("/orcid-profile/read-limited")), Collections. emptySet(), null, Collections. emptySet(), Collections. emptyMap()); ClientDetailsEntity clientDetails = clientDetailsManager.findByClientId(clientId); - Authentication userAuthentication = new OrcidOauth2ClientAuthentication(clientDetails); + Authentication userAuthentication = new OrcidBearerTokenAuthentication(clientDetails); OAuth2Authentication authentication = new OAuth2Authentication(request, userAuthentication); OAuth2AccessToken oauth2AccessToken = tokenServices.createAccessToken(authentication); @@ -203,7 +203,7 @@ public void tokenExpireInAnHourTest() throws InterruptedException { OAuth2Request request = new OAuth2Request(Collections. emptyMap(), clientId, Collections. emptyList(), true, new HashSet(Arrays.asList("/orcid-profile/read-limited")), Collections. emptySet(), null, Collections. emptySet(), Collections. emptyMap()); ClientDetailsEntity clientDetails = clientDetailsManager.findByClientId(clientId); - Authentication userAuthentication = new OrcidOauth2ClientAuthentication(clientDetails); + Authentication userAuthentication = new OrcidBearerTokenAuthentication(clientDetails); OAuth2Authentication authentication = new OAuth2Authentication(request, userAuthentication); OAuth2AccessToken oauth2AccessToken = tokenServices.createAccessToken(authentication); @@ -232,7 +232,7 @@ public void tokenExpireIn20YearsTest() throws InterruptedException { OAuth2Request request = new OAuth2Request(requestParameters, clientId, Collections. emptyList(), true, new HashSet(Arrays.asList("/orcid-profile/read-limited")), Collections. emptySet(), null, Collections. emptySet(), Collections. emptyMap()); ClientDetailsEntity clientDetails = clientDetailsManager.findByClientId(clientId); - Authentication userAuthentication = new OrcidOauth2ClientAuthentication(clientDetails); + Authentication userAuthentication = new OrcidBearerTokenAuthentication(clientDetails); OAuth2Authentication authentication = new OAuth2Authentication(request, userAuthentication); OAuth2AccessToken oauth2AccessToken = tokenServices.createAccessToken(authentication); diff --git a/orcid-core/src/test/java/org/orcid/core/oauth/service/OrcidTokenStoreServiceTest.java b/orcid-core/src/test/java/org/orcid/core/oauth/service/OrcidTokenStoreServiceTest.java index 46a9bc9af7a..5c882cc40ab 100644 --- a/orcid-core/src/test/java/org/orcid/core/oauth/service/OrcidTokenStoreServiceTest.java +++ b/orcid-core/src/test/java/org/orcid/core/oauth/service/OrcidTokenStoreServiceTest.java @@ -33,7 +33,7 @@ import org.orcid.core.manager.ProfileEntityManager; import org.orcid.core.manager.SourceNameCacheManager; import org.orcid.core.manager.v3.read_only.RecordNameManagerReadOnly; -import org.orcid.core.oauth.OrcidOauth2UserAuthentication; +import org.orcid.core.oauth.OrcidUserAuthentication; import org.orcid.persistence.dao.OrcidOauth2TokenDetailDao; import org.orcid.persistence.dao.RecordNameDao; import org.orcid.persistence.jpa.entities.OrcidOauth2TokenDetail; @@ -134,7 +134,7 @@ public void testStoreAccessToken() throws Exception { OAuth2Request request = new OAuth2Request(Collections. emptyMap(), clientId, Collections. emptyList(), true, new HashSet(Arrays.asList("/orcid-profile/read-limited")), Collections. emptySet(), null, Collections. emptySet(), Collections. emptyMap()); ProfileEntity profileEntity = profileEntityManager.findByOrcid("4444-4444-4444-4444"); - OrcidOauth2UserAuthentication userAuthentication = new OrcidOauth2UserAuthentication(profileEntity, true); + OrcidUserAuthentication userAuthentication = new OrcidUserAuthentication(profileEntity, true); OAuth2Authentication authentication = new OAuth2Authentication(request, userAuthentication); @@ -199,7 +199,7 @@ public void testGetAccessToken() throws Exception { new OAuth2Request(Collections. emptyMap(), clientId, Collections. emptyList(), true, new HashSet(Arrays.asList(scope)), Collections. emptySet(), null, Collections. emptySet(), Collections. emptyMap()); ProfileEntity profileEntity = profileEntityManager.findByOrcid(orcid); - OrcidOauth2UserAuthentication userAuthentication = new OrcidOauth2UserAuthentication(profileEntity, true); + OrcidUserAuthentication userAuthentication = new OrcidUserAuthentication(profileEntity, true); OAuth2Authentication authentication = new OAuth2Authentication(request, userAuthentication); diff --git a/orcid-core/src/test/java/org/orcid/core/security/DefaultOAuthClientVisibilityTest.java b/orcid-core/src/test/java/org/orcid/core/security/DefaultOAuthClientVisibilityTest.java deleted file mode 100644 index 950d416295d..00000000000 --- a/orcid-core/src/test/java/org/orcid/core/security/DefaultOAuthClientVisibilityTest.java +++ /dev/null @@ -1,82 +0,0 @@ -package org.orcid.core.security; - -import static org.junit.Assert.assertTrue; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.when; - -import java.util.Date; -import java.util.Arrays; -import java.util.HashSet; -import java.util.Set; - -import javax.annotation.Resource; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; - -import org.junit.Before; -import org.junit.Test; -import org.mockito.Mock; -import org.orcid.core.BaseTest; -import org.orcid.core.oauth.OrcidOAuth2Authentication; -import org.orcid.core.oauth.OrcidOauth2TokenDetailService; -import org.orcid.core.oauth.OrcidOauth2UserAuthentication; -import org.orcid.jaxb.model.message.OrcidMessage; -import org.orcid.jaxb.model.message.ScopePathType; -import org.orcid.jaxb.model.message.Visibility; -import org.orcid.persistence.jpa.entities.OrcidOauth2TokenDetail; -import org.orcid.persistence.jpa.entities.ProfileEntity; -import org.orcid.core.utils.DateFieldsOnBaseEntityUtils; -import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.core.authority.SimpleGrantedAuthority; -import org.springframework.security.oauth2.provider.AuthorizationRequest; -import org.springframework.test.annotation.Rollback; -import org.springframework.transaction.annotation.Transactional; - -public class DefaultOAuthClientVisibilityTest extends BaseTest { - - @Resource(name = "defaultPermissionChecker") - private PermissionChecker permissionChecker; - - @Mock - private OrcidOauth2TokenDetailService orcidOauth2TokenDetailService; - - @Before - public void mockDependencies() throws Exception { - DefaultPermissionChecker defaultPermissionChecker = (DefaultPermissionChecker) permissionChecker; - defaultPermissionChecker.setOrcidOauthTokenDetailService(orcidOauth2TokenDetailService); - } - - @Test - @Transactional - @Rollback - public void testCheckClientPermissionsAllowOnlyPublicAndLimitedVisibility() throws Exception { - Set resourceIds = new HashSet(Arrays.asList("orcid")); - HashSet grantedAuthorities = new HashSet(Arrays.asList(new SimpleGrantedAuthority("ROLE_CLIENT"))); - AuthorizationRequest request = new AuthorizationRequest("4444-4444-4444-4446", Arrays.asList("/orcid-bio/external-identifiers/create")); - request.setAuthorities(grantedAuthorities); - request.setResourceIds(resourceIds); - ProfileEntity entity = new ProfileEntity("4444-4444-4444-4446"); - OrcidOauth2UserAuthentication oauth2UserAuthentication = new OrcidOauth2UserAuthentication(entity, true); - // we care only that an OAuth client request results in the correct - // visibilities - OrcidOAuth2Authentication oAuth2Authentication = new OrcidOAuth2Authentication(request, oauth2UserAuthentication, "made-up-token"); - - OrcidOauth2TokenDetail tokenDetail = new OrcidOauth2TokenDetail(); - tokenDetail.setScope("/orcid-bio/external-identifiers/create"); - DateFieldsOnBaseEntityUtils.setDateFields(tokenDetail, new Date()); - when(orcidOauth2TokenDetailService.findNonDisabledByTokenValue(any(String.class))).thenReturn(tokenDetail); - ScopePathType scopePathType = ScopePathType.ORCID_BIO_EXTERNAL_IDENTIFIERS_CREATE; - Set visibilitiesForClient = permissionChecker.obtainVisibilitiesForAuthentication(oAuth2Authentication, scopePathType, getOrcidMessage()); - assertTrue(visibilitiesForClient.size() == 3); - assertTrue(visibilitiesForClient.contains(Visibility.LIMITED)); - assertTrue(visibilitiesForClient.contains(Visibility.REGISTERED_ONLY)); - assertTrue(visibilitiesForClient.contains(Visibility.PUBLIC)); - } - - private OrcidMessage getOrcidMessage() throws JAXBException { - JAXBContext context = JAXBContext.newInstance(OrcidMessage.class); - Unmarshaller unmarshaller = context.createUnmarshaller(); - return (OrcidMessage) unmarshaller.unmarshal(DefaultPermissionCheckerTest.class.getResourceAsStream("/orcid-full-message-no-visibility-latest.xml")); - } -} diff --git a/orcid-core/src/test/java/org/orcid/core/security/DefaultPermissionCheckerTest.java b/orcid-core/src/test/java/org/orcid/core/security/DefaultPermissionCheckerTest.java deleted file mode 100644 index fd3c4f47c1f..00000000000 --- a/orcid-core/src/test/java/org/orcid/core/security/DefaultPermissionCheckerTest.java +++ /dev/null @@ -1,170 +0,0 @@ -package org.orcid.core.security; - -import static org.junit.Assert.fail; - -import java.security.AccessControlException; -import java.util.Arrays; -import java.util.HashSet; -import java.util.Set; - -import javax.annotation.Resource; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; - -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.orcid.core.manager.ProfileEntityCacheManager; -import org.orcid.core.manager.ProfileEntityManager; -import org.orcid.core.oauth.OrcidOAuth2Authentication; -import org.orcid.core.oauth.OrcidOauth2TokenDetailService; -import org.orcid.core.oauth.OrcidOauth2UserAuthentication; -import org.orcid.jaxb.model.message.OrcidMessage; -import org.orcid.jaxb.model.message.ScopePathType; -import org.orcid.persistence.jpa.entities.OrcidOauth2TokenDetail; -import org.orcid.persistence.jpa.entities.ProfileEntity; -import org.orcid.test.DBUnitTest; -import org.orcid.test.OrcidJUnit4ClassRunner; -import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.core.authority.SimpleGrantedAuthority; -import org.springframework.security.oauth2.provider.AuthorizationRequest; -import org.springframework.security.oauth2.provider.OAuth2Authentication; -import org.springframework.test.annotation.Rollback; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.transaction.annotation.Transactional; - -/** - * @author Declan Newman (declan) Date: 27/04/2012 - */ -@RunWith(OrcidJUnit4ClassRunner.class) -@ContextConfiguration(locations = { "classpath:test-orcid-core-context.xml" }) -public class DefaultPermissionCheckerTest extends DBUnitTest { - - @Resource(name = "defaultPermissionChecker") - private PermissionChecker defaultPermissionChecker; - - @Resource(name = "profileEntityManager") - private ProfileEntityManager profileEntityManager; - - @Resource - private OrcidOauth2TokenDetailService tokenDetailService; - - @Resource(name = "profileEntityCacheManager") - ProfileEntityCacheManager profileEntityCacheManager; - - @BeforeClass - public static void initDBUnitData() throws Exception { - initDBUnitData(Arrays.asList("/data/SourceClientDetailsEntityData.xml","/data/ProfileEntityData.xml", "/data/ClientDetailsEntityData.xml", "/data/Oauth2TokenDetailsData.xml")); - } - - @AfterClass - public static void removeDBUnitData() throws Exception { - removeDBUnitData(Arrays.asList("/data/Oauth2TokenDetailsData.xml", "/data/ClientDetailsEntityData.xml", "/data/ProfileEntityData.xml")); - } - - @Test - @Rollback - @Transactional - public void testCheckUserPermissionsAuthenticationScopesOrcidAndOrcidMessage() throws Exception { - Set resourceIds = new HashSet(Arrays.asList("orcid")); - HashSet grantedAuthorities = new HashSet(Arrays.asList(new SimpleGrantedAuthority("ROLE_CLIENT"))); - AuthorizationRequest request = new AuthorizationRequest("4444-4444-4444-4441", Arrays.asList("/orcid-bio/external-identifiers/create")); - request.setAuthorities(grantedAuthorities); - request.setResourceIds(resourceIds); - ProfileEntity entity = profileEntityManager.findByOrcid("4444-4444-4444-4446"); - OrcidOauth2UserAuthentication oauth2UserAuthentication = new OrcidOauth2UserAuthentication(entity, true); - OAuth2Authentication oAuth2Authentication = new OrcidOAuth2Authentication(request, oauth2UserAuthentication, "made-up-token"); - ScopePathType requiredScope = ScopePathType.ORCID_BIO_EXTERNAL_IDENTIFIERS_CREATE; - OrcidMessage orcidMessage = getOrcidMessage(); - String messageOrcid = orcidMessage.getOrcidProfile().getOrcidIdentifier().getPath(); - defaultPermissionChecker.checkPermissions(oAuth2Authentication, requiredScope, messageOrcid, orcidMessage); - } - - @Test(expected = AccessControlException.class) - @Transactional - @Rollback - public void testCheckUserPermissionsAuthenticationScopesOrcidAndOrcidMessageWhenWrongUser() throws Exception { - Set resourceIds = new HashSet(Arrays.asList("orcid")); - HashSet grantedAuthorities = new HashSet(Arrays.asList(new SimpleGrantedAuthority("ROLE_CLIENT"))); - AuthorizationRequest request = new AuthorizationRequest("4444-4444-4444-4441", Arrays.asList("/orcid-bio/external-identifiers/create")); - request.setAuthorities(grantedAuthorities); - request.setResourceIds(resourceIds); - ProfileEntity entity = profileEntityManager.findByOrcid("4444-4444-4444-4445"); - OrcidOauth2UserAuthentication oauth2UserAuthentication = new OrcidOauth2UserAuthentication(entity, true); - OAuth2Authentication oAuth2Authentication = new OrcidOAuth2Authentication(request, oauth2UserAuthentication, "made-up-token"); - ScopePathType requiredScope = ScopePathType.ORCID_BIO_EXTERNAL_IDENTIFIERS_CREATE; - OrcidMessage orcidMessage = getOrcidMessage(); - String messageOrcid = orcidMessage.getOrcidProfile().getOrcidIdentifier().getPath(); - defaultPermissionChecker.checkPermissions(oAuth2Authentication, requiredScope, messageOrcid, orcidMessage); - } - - @Test - @Transactional - @Rollback - public void testCheckClientPermissionsAuthenticationScopesOrcidAndOrcidMessage() throws Exception { - Set resourceIds = new HashSet(Arrays.asList("orcid")); - HashSet grantedAuthorities = new HashSet(Arrays.asList(new SimpleGrantedAuthority("ROLE_CLIENT"))); - AuthorizationRequest request = new AuthorizationRequest("APP-5555555555555555", Arrays.asList("/orcid-bio/external-identifiers/create")); - request.setAuthorities(grantedAuthorities); - request.setResourceIds(resourceIds); - OAuth2Authentication oAuth2Authentication = new OrcidOAuth2Authentication(request, null, "made-up-token"); - ScopePathType requiredScope = ScopePathType.ORCID_BIO_EXTERNAL_IDENTIFIERS_CREATE; - OrcidMessage orcidMessage = getOrcidMessage(); - orcidMessage.getOrcidProfile().getOrcidIdentifier().setPath("4444-4444-4444-4447"); - String messageOrcid = orcidMessage.getOrcidProfile().getOrcidIdentifier().getPath(); - defaultPermissionChecker.checkPermissions(oAuth2Authentication, requiredScope, messageOrcid, orcidMessage); - } - - @Test - public void testCheckPermissionsAuthenticationScopesAndOrcidMessage() throws Exception { - Set resourceIds = new HashSet(Arrays.asList("orcid")); - HashSet grantedAuthorities = new HashSet(Arrays.asList(new SimpleGrantedAuthority("ROLE_CLIENT"))); - AuthorizationRequest request = new AuthorizationRequest("4444-4444-4444-4441", Arrays.asList(ScopePathType.ORCID_WORKS_CREATE.value())); - request.setAuthorities(grantedAuthorities); - request.setResourceIds(resourceIds); - OAuth2Authentication oAuth2Authentication = new OrcidOAuth2Authentication(request, null, "made-up-token"); - ScopePathType requiredScope = ScopePathType.ORCID_WORKS_CREATE; - OrcidMessage orcidMessage = getOrcidMessage(); - defaultPermissionChecker.checkPermissions(oAuth2Authentication, requiredScope, orcidMessage); - } - - @Test - public void testCheckPermissionsAuthenticationScopePathTypesAndOrcid() throws Exception { - Set resourceIds = new HashSet(Arrays.asList("orcid")); - HashSet grantedAuthorities = new HashSet(Arrays.asList(new SimpleGrantedAuthority("ROLE_CLIENT"))); - AuthorizationRequest request = new AuthorizationRequest("4444-4444-4444-4441", Arrays.asList(ScopePathType.ORCID_BIO_READ_LIMITED.value())); - request.setAuthorities(grantedAuthorities); - request.setResourceIds(resourceIds); - OAuth2Authentication oAuth2Authentication = new OrcidOAuth2Authentication(request, null, "made-up-token"); - ScopePathType requiredScope = ScopePathType.ORCID_BIO_READ_LIMITED; - defaultPermissionChecker.checkPermissions(oAuth2Authentication, requiredScope, "4444-4444-4444-4447"); - } - - @Test - @Transactional - @Rollback - public void checkRemoveUserGrantWriteScopePastValitityForNonPersistentTokens() { - OrcidOauth2TokenDetail token = tokenDetailService.findIgnoringDisabledByTokenValue("00000001-d80f-4afc-8f95-9b48d28aaadb"); - DefaultPermissionChecker customPermissionChecker = (DefaultPermissionChecker) defaultPermissionChecker; - if(!customPermissionChecker.removeUserGrantWriteScopePastValitity(token)) - fail(); - } - - @Test - @Transactional - @Rollback - public void checkRemoveUserGrantWriteScopePastValitityForPersistentTokens() { - OrcidOauth2TokenDetail token = tokenDetailService.findIgnoringDisabledByTokenValue("00000002-d80f-4afc-8f95-9b48d28aaadb"); - DefaultPermissionChecker customPermissionChecker = (DefaultPermissionChecker) defaultPermissionChecker; - if(customPermissionChecker.removeUserGrantWriteScopePastValitity(token)) - fail(); - } - - private OrcidMessage getOrcidMessage() throws JAXBException { - JAXBContext context = JAXBContext.newInstance(OrcidMessage.class); - Unmarshaller unmarshaller = context.createUnmarshaller(); - return (OrcidMessage) unmarshaller.unmarshal(DefaultPermissionCheckerTest.class.getResourceAsStream("/orcid-full-message-no-visibility-latest.xml")); - } -} From b8bb156f8089c0b9255faea12aefc84fc68d2e22 Mon Sep 17 00:00:00 2001 From: amontenegro Date: Mon, 23 Mar 2026 17:04:08 -0600 Subject: [PATCH 05/77] Removing code and refactoring the authentication objects, introducing OrcidBearerTokenAuthentication --- .../core/oauth/service/OrcidRandomValueTokenServicesImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/orcid-core/src/main/java/org/orcid/core/oauth/service/OrcidRandomValueTokenServicesImpl.java b/orcid-core/src/main/java/org/orcid/core/oauth/service/OrcidRandomValueTokenServicesImpl.java index 6fee9a4f801..a2fabce1f5f 100644 --- a/orcid-core/src/main/java/org/orcid/core/oauth/service/OrcidRandomValueTokenServicesImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/oauth/service/OrcidRandomValueTokenServicesImpl.java @@ -64,7 +64,7 @@ public class OrcidRandomValueTokenServicesImpl { private AuthorizationServerUtil authorizationServerUtil; @Override - public OAuth2Authentication loadAuthentication(String accessTokenValue) throws AuthenticationException { + public OrcidBearerTokenAuthentication loadAuthentication(String accessTokenValue) throws AuthenticationException { try { JSONObject tokenInfo = authorizationServerUtil.tokenIntrospection(accessTokenValue); if(tokenInfo == null) { From ed844a95450ad5eb19ef109fcec31d4f5887e616 Mon Sep 17 00:00:00 2001 From: amontenegro Date: Wed, 25 Mar 2026 15:09:41 -0600 Subject: [PATCH 06/77] More refactoring, security mananger and source managers --- .../core/common/util/AuthenticationUtils.java | 21 +- .../core/manager/OrcidSecurityManager.java | 1 - .../impl/OrcidSecurityManagerImpl.java | 148 ++---- .../core/manager/impl/SourceManagerImpl.java | 42 +- .../core/manager/v3/OrcidSecurityManager.java | 2 - .../v3/impl/OrcidSecurityManagerImpl.java | 157 ++---- .../manager/v3/impl/SourceManagerImpl.java | 125 ++--- .../oauth/OrcidBearerTokenAuthentication.java | 94 +++- .../AuthorizationServerUtil.java | 1 - .../OrcidRandomValueTokenServicesImpl.java | 34 +- .../oauth/IETFExchangeTokenGranterTest.java | 440 ----------------- .../OrcidRandomValueTokenServicesTest.java | 464 ------------------ 12 files changed, 256 insertions(+), 1273 deletions(-) delete mode 100644 orcid-core/src/test/java/org/orcid/core/oauth/IETFExchangeTokenGranterTest.java delete mode 100644 orcid-core/src/test/java/org/orcid/core/oauth/service/OrcidRandomValueTokenServicesTest.java diff --git a/orcid-core/src/main/java/org/orcid/core/common/util/AuthenticationUtils.java b/orcid-core/src/main/java/org/orcid/core/common/util/AuthenticationUtils.java index 7732dfe426a..36e61614d35 100644 --- a/orcid-core/src/main/java/org/orcid/core/common/util/AuthenticationUtils.java +++ b/orcid-core/src/main/java/org/orcid/core/common/util/AuthenticationUtils.java @@ -1,6 +1,7 @@ package org.orcid.core.common.util; import org.apache.commons.lang3.StringUtils; +import org.orcid.core.oauth.OrcidBearerTokenAuthentication; import org.orcid.core.security.OrcidRoles; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -11,8 +12,6 @@ import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.userdetails.User; import org.springframework.security.core.userdetails.UserDetails; -import org.springframework.security.oauth2.provider.OAuth2Authentication; -import org.springframework.security.oauth2.provider.OAuth2Request; import org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationToken; import org.springframework.security.web.authentication.switchuser.SwitchUserGrantedAuthority; @@ -43,10 +42,10 @@ public static String retrieveActiveSourceId() { } else if (UsernamePasswordAuthenticationToken.class.isAssignableFrom(authentication.getClass())) { // Token endpoint return ((UsernamePasswordAuthenticationToken) authentication).getName(); - } else if (OAuth2Authentication.class.isAssignableFrom(authentication.getClass())) { + } else if (OrcidBearerTokenAuthentication.class.isAssignableFrom(authentication.getClass())) { // API - OAuth2Request authorizationRequest = ((OAuth2Authentication) authentication).getOAuth2Request(); - return authorizationRequest.getClientId(); + OrcidBearerTokenAuthentication authDetails = (OrcidBearerTokenAuthentication) authentication; + return authDetails.getClientId(); } else { // Normal web user return AuthenticationUtils.retrieveEffectiveOrcid(); @@ -66,10 +65,10 @@ public static String retrieveRealUserOrcid() { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); if (authentication == null) { return null; - } else if (OAuth2Authentication.class.isAssignableFrom(authentication.getClass())) { + } else if (OrcidBearerTokenAuthentication.class.isAssignableFrom(authentication.getClass())) { // API - OAuth2Request authorizationRequest = ((OAuth2Authentication) authentication).getOAuth2Request(); - return authorizationRequest.getClientId(); + OrcidBearerTokenAuthentication authDetails = (OrcidBearerTokenAuthentication) authentication; + return authDetails.getClientId(); } // Delegation mode String realUserIfInDelegationMode = getRealUserIfInDelegationMode(authentication); @@ -90,12 +89,6 @@ public static boolean isDelegatedByAnAdmin() { SwitchUserGrantedAuthority suga = (SwitchUserGrantedAuthority) authority; Authentication sourceAuthentication = suga.getSource(); - LOGGER.trace("isDelegatedByAnAdmin"); - LOGGER.trace("Authentication: {}", sourceAuthentication); - LOGGER.trace("Authentication type: {}", sourceAuthentication.getClass().getName()); - LOGGER.trace("User Details type: {}", sourceAuthentication.getDetails().getClass()); - LOGGER.trace("Source authorities: {}", sourceAuthentication.getAuthorities()); - if (sourceAuthentication instanceof UsernamePasswordAuthenticationToken) { if(sourceAuthentication.getAuthorities() != null) { return sourceAuthentication.getAuthorities().contains(adminAuthority); diff --git a/orcid-core/src/main/java/org/orcid/core/manager/OrcidSecurityManager.java b/orcid-core/src/main/java/org/orcid/core/manager/OrcidSecurityManager.java index 39b4372dd79..9528669359d 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/OrcidSecurityManager.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/OrcidSecurityManager.java @@ -56,5 +56,4 @@ public interface OrcidSecurityManager { void checkAndFilter(String orcid, Record record); - String getOrcidFromToken(); } diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/OrcidSecurityManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/OrcidSecurityManagerImpl.java index 225e4b148e2..f62ab3d6403 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/OrcidSecurityManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/OrcidSecurityManagerImpl.java @@ -1,6 +1,5 @@ package org.orcid.core.manager.impl; -import java.security.AccessControlException; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; @@ -26,8 +25,7 @@ import org.orcid.core.manager.OrcidSecurityManager; import org.orcid.core.manager.ProfileEntityCacheManager; import org.orcid.core.manager.SourceManager; -import org.orcid.core.oauth.OrcidOauth2TokenDetailService; -import org.orcid.core.security.OrcidRoles; +import org.orcid.core.oauth.OrcidBearerTokenAuthentication; import org.orcid.core.security.OrcidUserDetailsService; import org.orcid.core.utils.SourceEntityUtils; import org.orcid.jaxb.model.clientgroup.ClientType; @@ -62,8 +60,6 @@ import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.context.SecurityContext; import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.oauth2.provider.OAuth2Authentication; -import org.springframework.security.oauth2.provider.OAuth2Request; import org.orcid.core.exception.OrcidUnauthorizedException; /** @@ -82,9 +78,6 @@ public class OrcidSecurityManagerImpl implements OrcidSecurityManager { @Resource private SourceManager sourceManager; - @Resource - private OrcidOauth2TokenDetailService orcidOauthTokenDetailService; - @Resource private ProfileEntityCacheManager profileEntityCacheManager; @@ -115,10 +108,9 @@ public boolean isAdmin() { public String getClientIdFromAPIRequest() { SecurityContext context = SecurityContextHolder.getContext(); Authentication authentication = context.getAuthentication(); - if (authentication != null && OAuth2Authentication.class.isAssignableFrom(authentication.getClass())) { - OAuth2Authentication oAuth2Authentication = (OAuth2Authentication) authentication; - OAuth2Request request = oAuth2Authentication.getOAuth2Request(); - return request.getClientId(); + if (authentication != null && OrcidBearerTokenAuthentication.class.isAssignableFrom(authentication.getClass())) { + OrcidBearerTokenAuthentication authDetails = (OrcidBearerTokenAuthentication) authentication; + return authDetails.getClientId(); } return null; } @@ -224,13 +216,15 @@ public void checkScopes(ScopePathType... requiredScopes) { //Verify the client is not a public client checkClientType(); - OAuth2Authentication oAuth2Authentication = getOAuth2Authentication(); - OAuth2Request authorizationRequest = oAuth2Authentication.getOAuth2Request(); - Set requestedScopes = ScopePathType.getScopesFromStrings(authorizationRequest.getScope()); - for (ScopePathType scope : requestedScopes) { - for (ScopePathType requiredScope : requiredScopes) { - if (scope.hasScope(requiredScope)) { - return; + Authentication authentication = getAuthentication(); + if(OrcidBearerTokenAuthentication.class.isAssignableFrom(authentication.getClass())) { + Set allowedScopes = ((OrcidBearerTokenAuthentication) authentication).getScopes(); + for (String scope : allowedScopes) { + ScopePathType allowed = ScopePathType.fromValue(scope); + for (ScopePathType requiredScope : requiredScopes) { + if (allowed.hasScope(requiredScope)) { + return; + } } } } @@ -450,10 +444,10 @@ public void checkAndFilter(String orcid, WorkBulk workBulk, ScopePathType scopeP String clientId = null; - OAuth2Authentication oAuth2Authentication = getOAuth2Authentication(); - if(oAuth2Authentication != null) { - OAuth2Request authorizationRequest = oAuth2Authentication.getOAuth2Request(); - clientId = authorizationRequest.getClientId(); + Authentication authentication = getAuthentication(); + if(authentication != null) { + OrcidBearerTokenAuthentication authDetails = (OrcidBearerTokenAuthentication) authentication; + clientId = authDetails.getClientId(); } List filteredElements = new ArrayList<>(); @@ -621,10 +615,10 @@ private void checkAndFilter(String orcid, VisibilityType element, ScopePathType // Check if the client is the source of the element if (element instanceof Filterable) { Filterable filterable = (Filterable) element; - OAuth2Authentication oAuth2Authentication = getOAuth2Authentication(); - if (oAuth2Authentication != null) { - OAuth2Request authorizationRequest = oAuth2Authentication.getOAuth2Request(); - String clientId = authorizationRequest.getClientId(); + Authentication authentication = getAuthentication(); + if (authentication != null) { + OrcidBearerTokenAuthentication authDetails = (OrcidBearerTokenAuthentication) authentication; + String clientId = authDetails.getClientId(); if (clientId.equals(filterable.retrieveSourcePath())) { // The client doing the request is the source of the element return; @@ -696,105 +690,47 @@ private void checkVisibility(VisibilityType element, ScopePathType requiredScope throw new IllegalArgumentException("Only 'read-only' scopes are allowed"); } } - - private boolean isNonClientCredentialScope(OAuth2Authentication oAuth2Authentication) { - OAuth2Request authorizationRequest = oAuth2Authentication.getOAuth2Request(); - Set requestedScopes = ScopePathType.getCombinedScopesFromStringsAsStrings(authorizationRequest.getScope()); - for (String scopeName : requestedScopes) { - ScopePathType scopePathType = ScopePathType.fromValue(scopeName); - if (!scopePathType.isClientCreditalScope()) { - return true; - } - } - return false; - } - - private boolean clientIsProfileSource(String clientId, ProfileEntity profile) { - Boolean claimed = profile.getClaimed(); - SourceEntity source = profile.getSource(); - return source != null && (claimed == null || !claimed) && clientId.equals(SourceEntityUtils.getSourceId(source)); - } - - private OAuth2Authentication getOAuth2Authentication() { - SecurityContext context = SecurityContextHolder.getContext(); - if (context != null && context.getAuthentication() != null) { - Authentication authentication = context.getAuthentication(); - if (OAuth2Authentication.class.isAssignableFrom(authentication.getClass())) { - OAuth2Authentication oAuth2Authentication = (OAuth2Authentication) authentication; - return oAuth2Authentication; - } else { - for (GrantedAuthority grantedAuth : authentication.getAuthorities()) { - if ("ROLE_ANONYMOUS".equals(grantedAuth.getAuthority())) { - // Assume that anonymous authority is like not having - // authority at all - return null; - } - } - - throw new AccessControlException( - "Cannot access method with authentication type " + authentication != null ? authentication.toString() : ", as it's null!"); - } - } else { - throw new IllegalStateException("No security context found. This is bad!"); - } - } private void isMyToken(String orcid) { - OAuth2Authentication oAuth2Authentication = getOAuth2Authentication(); - if (oAuth2Authentication == null) { + Authentication authentication = getAuthentication(); + if (authentication == null) { throw new OrcidUnauthorizedException("No OAuth2 authentication found"); } //Verify the client is not a public client checkClientType(); - - String clientId = sourceManager.retrieveSourceOrcid(); - ProfileEntity profile = profileEntityCacheManager.retrieve(orcid); - Authentication userAuthentication = oAuth2Authentication.getUserAuthentication(); - if (userAuthentication != null) { - Object principal = userAuthentication.getPrincipal(); - if (principal instanceof ProfileEntity) { - ProfileEntity profileEntity = (ProfileEntity) principal; - if (!orcid.equals(profileEntity.getId())) { - throw new OrcidUnauthorizedException("Access token is for a different record"); - } - } else { - throw new OrcidUnauthorizedException("Missing user authentication"); + + if(OrcidBearerTokenAuthentication.class.isAssignableFrom(authentication.getClass())) { + OrcidBearerTokenAuthentication authDetails = (OrcidBearerTokenAuthentication) authentication; + if (orcid.equals(authDetails.getUserOrcid())) { + return; } - } else if (isNonClientCredentialScope(oAuth2Authentication) && !clientIsProfileSource(clientId, profile)) { - throw new IllegalStateException("Non client credential scope found in client request"); } + throw new OrcidUnauthorizedException("Access token is for a different record"); } private void checkClientType() { String clientId = sourceManager.retrieveSourceOrcid(); - ClientDetailsEntity client = clientDetailsEntityCacheManager.retrieve(clientId); if(client.getClientType() == null || ClientType.PUBLIC_CLIENT.name().equals(client.getClientType())) { throw new OrcidUnauthorizedException("The client application is forbidden to perform the action."); } } - - @Override - public String getOrcidFromToken(){ - OAuth2Authentication oAuth2Authentication = getOAuth2Authentication(); - if (oAuth2Authentication == null) { - throw new OrcidUnauthorizedException("No OAuth2 authentication found"); - } - - checkScopes(ScopePathType.AUTHENTICATE); - - Authentication userAuthentication = oAuth2Authentication.getUserAuthentication(); - if (userAuthentication != null) { - Object principal = userAuthentication.getPrincipal(); - if (principal instanceof ProfileEntity) { - ProfileEntity profileEntity = (ProfileEntity) principal; - return profileEntity.getId(); - } else { - throw new OrcidUnauthorizedException("Missing user authentication"); + + private Authentication getAuthentication() { + SecurityContext context = SecurityContextHolder.getContext(); + if (context != null && context.getAuthentication() != null) { + Authentication authentication = context.getAuthentication(); + for (GrantedAuthority grantedAuth : authentication.getAuthorities()) { + if ("ROLE_ANONYMOUS".equals(grantedAuth.getAuthority())) { + // Assume that anonymous authority is like not having + // authority at all + return null; + } } + return authentication; } else { - throw new IllegalStateException("Non client credential scope found in client request"); + throw new IllegalStateException("No security context found. This is bad!"); } } } diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/SourceManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/SourceManagerImpl.java index b4f7453cb33..509d17d147b 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/SourceManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/SourceManagerImpl.java @@ -9,18 +9,13 @@ import org.orcid.core.manager.SourceManager; import org.orcid.core.manager.SourceNameCacheManager; import org.orcid.core.manager.read_only.impl.ManagerReadOnlyBaseImpl; +import org.orcid.core.oauth.OrcidBearerTokenAuthentication; import org.orcid.persistence.dao.ProfileDao; import org.orcid.persistence.jpa.entities.ClientDetailsEntity; import org.orcid.persistence.jpa.entities.ProfileEntity; import org.orcid.persistence.jpa.entities.SourceEntity; -import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.Authentication; -import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.oauth2.provider.OAuth2Authentication; -import org.springframework.security.oauth2.provider.OAuth2Request; -import org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationToken; -import org.springframework.security.web.authentication.switchuser.SwitchUserGrantedAuthority; /** * @@ -49,29 +44,26 @@ public SourceEntity retrieveSourceEntity() { if (authentication == null) { return null; } - - // API - if (OAuth2Authentication.class.isAssignableFrom(authentication.getClass())) { - OAuth2Request authorizationRequest = ((OAuth2Authentication) authentication).getOAuth2Request(); - String clientId = authorizationRequest.getClientId(); + + SourceEntity sourceEntity = new SourceEntity(); + // API authentication + if (OrcidBearerTokenAuthentication.class.isAssignableFrom(authentication.getClass())) { + OrcidBearerTokenAuthentication authDetails = (OrcidBearerTokenAuthentication) authentication; + String clientId = authDetails.getClientId(); ClientDetailsEntity clientDetails = clientDetailsManager.findByClientId(clientId); - SourceEntity sourceEntity = new SourceEntity(); - ClientDetailsEntity sourceClient = new ClientDetailsEntity(clientId, clientDetails.getClientName()); sourceClient.setUserOBOEnabled(clientDetails.isUserOBOEnabled()); - sourceEntity.setSourceClient(sourceClient); - - return sourceEntity; + sourceEntity.setSourceClient(sourceClient); + } else { + // User authentication + String userOrcid = AuthenticationUtils.retrieveEffectiveOrcid(); + if (userOrcid == null) { + // Must be system role + return null; + } + sourceEntity.setSourceProfile(new ProfileEntity(userOrcid)); + sourceEntity.setCachedSourceName(sourceNameCacheManager.retrieve(userOrcid)); } - String userOrcid = AuthenticationUtils.retrieveEffectiveOrcid(); - if(userOrcid == null){ - // Must be system role - return null; - } - // Normal web user - SourceEntity sourceEntity = new SourceEntity(); - sourceEntity.setSourceProfile(new ProfileEntity(userOrcid)); - sourceEntity.setCachedSourceName(sourceNameCacheManager.retrieve(userOrcid)); return sourceEntity; } diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/OrcidSecurityManager.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/OrcidSecurityManager.java index ca2426afc3f..d5d8f510c2c 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/OrcidSecurityManager.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/OrcidSecurityManager.java @@ -57,6 +57,4 @@ public interface OrcidSecurityManager { void checkAndFilter(String orcid, Person person); void checkAndFilter(String orcid, Record record); - - String getOrcidFromToken(); } diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/OrcidSecurityManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/OrcidSecurityManagerImpl.java index 894e448237f..bfd0e746e89 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/OrcidSecurityManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/OrcidSecurityManagerImpl.java @@ -1,6 +1,5 @@ package org.orcid.core.manager.v3.impl; -import java.security.AccessControlException; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; @@ -28,8 +27,7 @@ import org.orcid.core.manager.ProfileEntityCacheManager; import org.orcid.core.manager.v3.OrcidSecurityManager; import org.orcid.core.manager.v3.SourceManager; -import org.orcid.core.oauth.OrcidOauth2TokenDetailService; -import org.orcid.core.security.OrcidRoles; +import org.orcid.core.oauth.OrcidBearerTokenAuthentication; import org.orcid.core.security.OrcidUserDetailsService; import org.orcid.core.utils.SourceEntityUtils; import org.orcid.jaxb.model.clientgroup.ClientType; @@ -67,12 +65,8 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.security.core.Authentication; import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.context.SecurityContext; import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.core.userdetails.UserDetails; -import org.springframework.security.oauth2.provider.OAuth2Authentication; -import org.springframework.security.oauth2.provider.OAuth2Request; /** * @@ -90,9 +84,6 @@ public class OrcidSecurityManagerImpl implements OrcidSecurityManager { @Resource(name = "sourceManagerV3") private SourceManager sourceManager; - @Resource - private OrcidOauth2TokenDetailService orcidOauthTokenDetailService; - @Resource private ProfileEntityCacheManager profileEntityCacheManager; @@ -128,10 +119,9 @@ public boolean isPasswordConfirmationRequired() { public String getClientIdFromAPIRequest() { SecurityContext context = SecurityContextHolder.getContext(); Authentication authentication = context.getAuthentication(); - if (authentication != null && OAuth2Authentication.class.isAssignableFrom(authentication.getClass())) { - OAuth2Authentication oAuth2Authentication = (OAuth2Authentication) authentication; - OAuth2Request request = oAuth2Authentication.getOAuth2Request(); - return request.getClientId(); + if (authentication != null && OrcidBearerTokenAuthentication.class.isAssignableFrom(authentication.getClass())) { + OrcidBearerTokenAuthentication authDetails = (OrcidBearerTokenAuthentication) authentication; + return authDetails.getClientId(); } return null; } @@ -246,15 +236,19 @@ private void checkScopes(boolean tokenAlreadyChecked, ScopePathType... requiredS checkClientType(); } - OAuth2Authentication oAuth2Authentication = getOAuth2Authentication(); - OAuth2Request authorizationRequest = oAuth2Authentication.getOAuth2Request(); - Set requestedScopes = ScopePathType.getScopesFromStrings(authorizationRequest.getScope()); - for (ScopePathType scope : requestedScopes) { - for (ScopePathType requiredScope : requiredScopes) - if (scope.hasScope(requiredScope)) { - return; + Authentication authentication = getAuthentication(); + if (authentication != null) { + Set allowedScopes = ((OrcidBearerTokenAuthentication) authentication).getScopes(); + for (String scope : allowedScopes) { + ScopePathType allowed = ScopePathType.fromValue(scope); + for (ScopePathType requiredScope : requiredScopes) { + if (allowed.hasScope(requiredScope)) { + return; + } } + } } + throw new OrcidAccessControlException(); } @@ -541,10 +535,9 @@ public void checkAndFilter(String orcid, WorkBulk workBulk, ScopePathType scopeP } String clientId = null; - OAuth2Authentication oAuth2Authentication = getOAuth2Authentication(); - if (oAuth2Authentication != null) { - OAuth2Request authorizationRequest = oAuth2Authentication.getOAuth2Request(); - clientId = authorizationRequest.getClientId(); + Authentication authentication = getAuthentication(); + if (authentication != null) { + clientId = ((OrcidBearerTokenAuthentication) authentication).getClientId(); } List filteredElements = new ArrayList<>(); @@ -725,13 +718,14 @@ private void checkAndFilter(String orcid, VisibilityType element, ScopePathType // Check if the client is the source of the element if (element instanceof Filterable) { Filterable filterable = (Filterable) element; - OAuth2Authentication oAuth2Authentication = getOAuth2Authentication(); - if (oAuth2Authentication != null) { - OAuth2Request authorizationRequest = oAuth2Authentication.getOAuth2Request(); - String clientId = authorizationRequest.getClientId(); - if (clientId.equals(filterable.retrieveSourcePath())) { - // The client doing the request is the source of the element - return; + Authentication authentication = getAuthentication(); + if (authentication != null) { + if(OrcidBearerTokenAuthentication.class.isAssignableFrom(authentication.getClass())) { + String clientId = ((OrcidBearerTokenAuthentication) authentication).getClientId(); + if (clientId.equals(filterable.retrieveSourcePath())) { + // The client doing the request is the source of the element + return; + } } } } @@ -783,75 +777,22 @@ private void checkVisibility(VisibilityType element, ScopePathType requiredScope } } - private boolean isNonClientCredentialScope(OAuth2Authentication oAuth2Authentication) { - OAuth2Request authorizationRequest = oAuth2Authentication.getOAuth2Request(); - Set requestedScopes = ScopePathType.getCombinedScopesFromStringsAsStrings(authorizationRequest.getScope()); - for (String scopeName : requestedScopes) { - ScopePathType scopePathType = ScopePathType.fromValue(scopeName); - if (!scopePathType.isClientCreditalScope()) { - return true; - } - } - return false; - } - - private boolean clientIsProfileSource(String clientId, ProfileEntity profile) { - Boolean claimed = profile.getClaimed(); - SourceEntity source = profile.getSource(); - return source != null && (claimed == null || !claimed) && clientId.equals(SourceEntityUtils.getSourceId(source)); - } - - private OAuth2Authentication getOAuth2Authentication() { - SecurityContext context = SecurityContextHolder.getContext(); - if (context != null && context.getAuthentication() != null) { - Authentication authentication = context.getAuthentication(); - if (OAuth2Authentication.class.isAssignableFrom(authentication.getClass())) { - OAuth2Authentication oAuth2Authentication = (OAuth2Authentication) authentication; - return oAuth2Authentication; - } else { - for (GrantedAuthority grantedAuth : authentication.getAuthorities()) { - if ("ROLE_ANONYMOUS".equals(grantedAuth.getAuthority())) { - // Assume that anonymous authority is like not having - // authority at all - return null; - } - } - - throw new AccessControlException( - "Cannot access method with authentication type " + authentication != null ? authentication.toString() : ", as it's null!"); - } - } else { - throw new IllegalStateException("No security context found. This is bad!"); - } - } - private void isMyToken(String orcid) { - OAuth2Authentication oAuth2Authentication = getOAuth2Authentication(); - if (oAuth2Authentication == null) { + Authentication authentication = getAuthentication(); + if (authentication == null) { throw new OrcidUnauthorizedException("No OAuth2 authentication found"); } - // Verify the client is not a public client + //Verify the client is not a public client checkClientType(); - String clientId = sourceManager.retrieveActiveSourceId(); - Authentication userAuthentication = oAuth2Authentication.getUserAuthentication(); - if (userAuthentication != null) { - Object principal = userAuthentication.getPrincipal(); - if (principal instanceof ProfileEntity) { - ProfileEntity profileEntity = (ProfileEntity) principal; - if (!orcid.equals(profileEntity.getId())) { - throw new OrcidUnauthorizedException("Access token is for a different record"); - } - } else { - throw new OrcidUnauthorizedException("Missing user authentication"); - } - } else if (isNonClientCredentialScope(oAuth2Authentication)) { - ProfileEntity profile = profileEntityCacheManager.retrieve(orcid); - if(!clientIsProfileSource(clientId, profile)) { - throw new IllegalStateException("Non client credential scope found in client request"); + if(OrcidBearerTokenAuthentication.class.isAssignableFrom(authentication.getClass())) { + OrcidBearerTokenAuthentication authDetails = (OrcidBearerTokenAuthentication) authentication; + if (orcid.equals(authDetails.getUserOrcid())) { + return; } } + throw new OrcidUnauthorizedException("Access token is for a different record"); } private void checkClientType() { @@ -862,26 +803,20 @@ private void checkClientType() { } } - @Override - public String getOrcidFromToken() { - OAuth2Authentication oAuth2Authentication = getOAuth2Authentication(); - if (oAuth2Authentication == null) { - throw new OrcidUnauthorizedException("No OAuth2 authentication found"); - } - - checkScopes(false, ScopePathType.AUTHENTICATE); - - Authentication userAuthentication = oAuth2Authentication.getUserAuthentication(); - if (userAuthentication != null) { - Object principal = userAuthentication.getPrincipal(); - if (principal instanceof ProfileEntity) { - ProfileEntity profileEntity = (ProfileEntity) principal; - return profileEntity.getId(); - } else { - throw new OrcidUnauthorizedException("Missing user authentication"); + private Authentication getAuthentication() { + SecurityContext context = SecurityContextHolder.getContext(); + if (context != null && context.getAuthentication() != null) { + Authentication authentication = context.getAuthentication(); + for (GrantedAuthority grantedAuth : authentication.getAuthorities()) { + if ("ROLE_ANONYMOUS".equals(grantedAuth.getAuthority())) { + // Assume that anonymous authority is like not having + // authority at all + return null; + } } + return authentication; } else { - throw new IllegalStateException("Non client credential scope found in client request"); + throw new IllegalStateException("No security context found. This is bad!"); } } } diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/SourceManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/SourceManagerImpl.java index 3fed5bbc201..c60d63f5fac 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/SourceManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/SourceManagerImpl.java @@ -7,10 +7,7 @@ import org.orcid.core.manager.ClientDetailsManager; import org.orcid.core.manager.SourceNameCacheManager; import org.orcid.core.manager.v3.SourceManager; -import org.orcid.core.oauth.OrcidOAuth2Authentication; -import org.orcid.core.oauth.OrcidUserAuthentication; -import org.orcid.core.oauth.OrcidOboOAuth2Authentication; -import org.orcid.core.togglz.Features; +import org.orcid.core.oauth.OrcidBearerTokenAuthentication; import org.orcid.jaxb.model.v3.release.common.Source; import org.orcid.jaxb.model.v3.release.common.SourceClientId; import org.orcid.jaxb.model.v3.release.common.SourceName; @@ -18,14 +15,10 @@ import org.orcid.persistence.dao.OrcidOauth2TokenDetailDao; import org.orcid.persistence.dao.ProfileDao; import org.orcid.persistence.jpa.entities.ClientDetailsEntity; -import org.orcid.persistence.jpa.entities.OrcidOauth2TokenDetail; import org.orcid.persistence.jpa.entities.ProfileEntity; import org.orcid.persistence.jpa.entities.SourceEntity; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.oauth2.provider.OAuth2Authentication; -import org.springframework.security.oauth2.provider.OAuth2Request; -import org.springframework.security.oauth2.provider.authentication.OAuth2AuthenticationDetails; /** * @@ -64,66 +57,39 @@ public Source retrieveActiveSource() { if (authentication == null) { return null; } - - // API - if (OAuth2Authentication.class.isAssignableFrom(authentication.getClass())) { - OAuth2Request authorizationRequest = ((OAuth2Authentication) authentication).getOAuth2Request(); - String clientId = authorizationRequest.getClientId(); + Source source = new Source(); + + // API authentication + if (OrcidBearerTokenAuthentication.class.isAssignableFrom(authentication.getClass())) { + OrcidBearerTokenAuthentication authDetails = (OrcidBearerTokenAuthentication) authentication; + String clientId = authDetails.getClientId(); ClientDetailsEntity clientDetails = clientDetailsManager.findByClientId(clientId); - Source source = new Source(); + source.setSourceClientId(new SourceClientId(clientId)); source.setSourceName(new SourceName(clientDetails.getClientName())); - - //OBO if needed - if(Features.OAUTH_TOKEN_VALIDATION.isActive()) { - if(OrcidOboOAuth2Authentication.class.isAssignableFrom(authentication.getClass())) { - OrcidOboOAuth2Authentication authDetails = (OrcidOboOAuth2Authentication) authentication; - if (StringUtils.isNotBlank(authDetails.getOboClientId())) { - ClientDetailsEntity oboClientDetails = clientDetailsManager.findByClientId(authDetails.getOboClientId()); - source.setAssertionOriginClientId(new SourceClientId(oboClientDetails.getClientId())); - source.setAssertionOriginName(new SourceName(oboClientDetails.getClientName())); - } else { - if(clientDetails.isUserOBOEnabled() && authDetails.getUserAuthentication() != null && OrcidUserAuthentication.class.isAssignableFrom(authDetails.getUserAuthentication().getClass())) { - OrcidUserAuthentication userAuth = (OrcidUserAuthentication) authDetails.getUserAuthentication(); - ProfileEntity profile = (ProfileEntity) userAuth.getPrincipal(); - source.setAssertionOriginOrcid(new SourceOrcid(profile.getId())); - source.setAssertionOriginName(new SourceName(sourceNameCacheManager.retrieve(profile.getId()))); - } - } - } else { - OrcidOAuth2Authentication authDetails = (OrcidOAuth2Authentication) authentication; - if(clientDetails.isUserOBOEnabled() && authDetails.getUserAuthentication() != null && OrcidUserAuthentication.class.isAssignableFrom(authDetails.getUserAuthentication().getClass())) { - OrcidUserAuthentication userAuth = (OrcidUserAuthentication) authDetails.getUserAuthentication(); - ProfileEntity profile = (ProfileEntity) userAuth.getPrincipal(); - source.setAssertionOriginOrcid(new SourceOrcid(profile.getId())); - source.setAssertionOriginName(new SourceName(sourceNameCacheManager.retrieve(profile.getId()))); - } - } - } else { - OAuth2AuthenticationDetails authDetails = (OAuth2AuthenticationDetails) ((OAuth2Authentication) authentication).getDetails(); - if (authDetails != null && authDetails.getTokenValue() != null) { //check here because mock tests can't cope otherwise. - // TODO: Use the authorization server to build this list of tokens - OrcidOauth2TokenDetail tokenDetail = orcidOauth2TokenDetailDao.findByTokenValue(authDetails.getTokenValue()); - if (!StringUtils.isEmpty(tokenDetail.getOboClientDetailsId())) { - ClientDetailsEntity oboClientDetails = clientDetailsManager.findByClientId(tokenDetail.getOboClientDetailsId()); - source.setAssertionOriginClientId(new SourceClientId(oboClientDetails.getClientId())); - source.setAssertionOriginName(new SourceName(oboClientDetails.getClientName())); - } else if (tokenDetail.getOrcid() != null && clientDetails.isUserOBOEnabled()) { - source.setAssertionOriginOrcid(new SourceOrcid(tokenDetail.getOrcid())); - source.setAssertionOriginName(new SourceName(sourceNameCacheManager.retrieve(tokenDetail.getOrcid()))); - } - } + + // Check member OBO + if(StringUtils.isNotBlank(authDetails.getOboClientId())) { + String oboClientId = authDetails.getOboClientId(); + ClientDetailsEntity oboClientDetails = clientDetailsManager.findByClientId(oboClientId); + source.setAssertionOriginClientId(new SourceClientId(oboClientId)); + source.setAssertionOriginName(new SourceName(oboClientDetails.getClientName())); + } else if(clientDetails.isUserOBOEnabled()){ + // Check user OBO + source.setAssertionOriginOrcid(new SourceOrcid(authDetails.getUserOrcid())); + source.setAssertionOriginName(new SourceName(sourceNameCacheManager.retrieve(authDetails.getUserOrcid()))); } - return source; - } - String userOrcid = AuthenticationUtils.retrieveEffectiveOrcid(); - if(userOrcid == null){ - // Must be system role - return null; + } else { + // User authentication + String userOrcid = AuthenticationUtils.retrieveEffectiveOrcid(); + if(userOrcid == null){ + // Must be system role + return null; + } + // Normal web user + source.setSourceOrcid(new SourceOrcid(userOrcid)); } - // Normal web user - Source source = new Source(); - source.setSourceOrcid(new SourceOrcid(userOrcid)); + return source; } @@ -137,25 +103,24 @@ public SourceEntity retrieveActiveSourceEntity() { if (authentication == null) { return null; } - - // API - if (OAuth2Authentication.class.isAssignableFrom(authentication.getClass())) { - OAuth2Request authorizationRequest = ((OAuth2Authentication) authentication).getOAuth2Request(); - String clientId = authorizationRequest.getClientId(); + + SourceEntity sourceEntity = new SourceEntity(); + // API authentication + if (OrcidBearerTokenAuthentication.class.isAssignableFrom(authentication.getClass())) { + OrcidBearerTokenAuthentication authDetails = (OrcidBearerTokenAuthentication) authentication; + String clientId = authDetails.getClientId(); ClientDetailsEntity clientDetails = clientDetailsManager.findByClientId(clientId); - SourceEntity sourceEntity = new SourceEntity(); - sourceEntity.setSourceClient(new ClientDetailsEntity(clientId, clientDetails.getClientName())); - return sourceEntity; - } - String userOrcid = AuthenticationUtils.retrieveEffectiveOrcid(); - if(userOrcid == null){ - // Must be system role - return null; + sourceEntity.setSourceClient(new ClientDetailsEntity(clientId, clientDetails.getClientName())); + } else { + // User authentication + String userOrcid = AuthenticationUtils.retrieveEffectiveOrcid(); + if (userOrcid == null) { + // Must be system role + return null; + } + sourceEntity.setSourceProfile(new ProfileEntity(userOrcid)); + sourceEntity.setCachedSourceName(sourceNameCacheManager.retrieve(userOrcid)); } - // Normal web user - SourceEntity sourceEntity = new SourceEntity(); - sourceEntity.setSourceProfile(new ProfileEntity(userOrcid)); - sourceEntity.setCachedSourceName(sourceNameCacheManager.retrieve(userOrcid)); return sourceEntity; } diff --git a/orcid-core/src/main/java/org/orcid/core/oauth/OrcidBearerTokenAuthentication.java b/orcid-core/src/main/java/org/orcid/core/oauth/OrcidBearerTokenAuthentication.java index c8a034d599b..aa7ccb9c396 100644 --- a/orcid-core/src/main/java/org/orcid/core/oauth/OrcidBearerTokenAuthentication.java +++ b/orcid-core/src/main/java/org/orcid/core/oauth/OrcidBearerTokenAuthentication.java @@ -5,6 +5,7 @@ import org.springframework.security.core.GrantedAuthority; import java.util.Collection; +import java.util.Set; /** * @author Declan Newman (declan) Date: 17/04/2012 @@ -15,11 +16,26 @@ public class OrcidBearerTokenAuthentication implements Authentication { * */ private static final long serialVersionUID = 1L; - private ClientDetailsEntity clientDetails; + private String clientId; + private String userOrcid; + private String token; + private Set scopes; + private Set authorities; private boolean authenticated = false; + private String oboClientId; - public OrcidBearerTokenAuthentication(ClientDetailsEntity clientDetails) { - this.clientDetails = clientDetails; + private OrcidBearerTokenAuthentication() { + + } + + private OrcidBearerTokenAuthentication(Builder builder) { + this.clientId = builder.clientId; + this.userOrcid = builder.userOrcid; + this.token = builder.token; + this.scopes = builder.scopes; + this.authorities = builder.authorities; + this.authenticated = builder.authenticated; + this.oboClientId = builder.oboClientId; } /** @@ -38,7 +54,7 @@ public OrcidBearerTokenAuthentication(ClientDetailsEntity clientDetails) { */ @Override public Collection getAuthorities() { - return clientDetails.getAuthorities(); + return this.getAuthorities(); } /** @@ -52,7 +68,7 @@ public Collection getAuthorities() { */ @Override public Object getCredentials() { - return clientDetails.getClientSecret(); + return this.token; } /** @@ -64,7 +80,7 @@ public Object getCredentials() { */ @Override public Object getDetails() { - return clientDetails.getAuthorizedGrantTypes(); + return null; } /** @@ -83,7 +99,7 @@ public Object getDetails() { */ @Override public Object getPrincipal() { - return clientDetails; + return clientId; } /** @@ -123,7 +139,7 @@ public boolean isAuthenticated() { * parameter (which would indicate the authentication token is trusted - a * potential security risk) the implementation should throw an * {@link IllegalArgumentException}. - * + * * @param isAuthenticated * true if the token should be trusted (which may * result in an exception) or false if the token @@ -141,6 +157,66 @@ public void setAuthenticated(boolean isAuthenticated) throws IllegalArgumentExce @Override public String getName() { - return clientDetails.getClientName(); + return this.clientId; + } + + public String getClientId() { + return clientId; + } + + public String getUserOrcid() { + return userOrcid; + } + + public Set getScopes() { + return scopes; + } + + public String getOboClientId() { + return this.oboClientId; + } + + public static Builder builder(String clientId, String userOrcid, String token) { + return new Builder(clientId, userOrcid, token); + } + + public static class Builder { + private final String clientId; + private final String userOrcid; + private final String token; + private Set scopes; + private Set authorities; + private boolean authenticated = false; + private String oboClientId; + + private Builder(String clientId, String userOrcid, String token) { + this.clientId = clientId; + this.userOrcid = userOrcid; + this.token = token; + } + + public Builder scopes(Set scopes) { + this.scopes = scopes; + return this; + } + + public Builder authorities(Set authorities) { + this.authorities = authorities; + return this; + } + + public Builder authenticated(boolean authenticated) { + this.authenticated = authenticated; + return this; + } + + public Builder oboClientId(String oboClientId) { + this.oboClientId = oboClientId; + return this; + } + + public OrcidBearerTokenAuthentication build() { + return new OrcidBearerTokenAuthentication(this); + } } } diff --git a/orcid-core/src/main/java/org/orcid/core/oauth/authorizationServer/AuthorizationServerUtil.java b/orcid-core/src/main/java/org/orcid/core/oauth/authorizationServer/AuthorizationServerUtil.java index 3015f6a4555..c0fc48d13bc 100644 --- a/orcid-core/src/main/java/org/orcid/core/oauth/authorizationServer/AuthorizationServerUtil.java +++ b/orcid-core/src/main/java/org/orcid/core/oauth/authorizationServer/AuthorizationServerUtil.java @@ -9,7 +9,6 @@ import org.orcid.core.togglz.Features; import org.orcid.core.utils.http.HttpRequestUtils; import org.springframework.beans.factory.annotation.Value; -import org.springframework.security.oauth2.common.exceptions.InvalidTokenException; import org.springframework.stereotype.Component; import javax.annotation.Resource; diff --git a/orcid-core/src/main/java/org/orcid/core/oauth/service/OrcidRandomValueTokenServicesImpl.java b/orcid-core/src/main/java/org/orcid/core/oauth/service/OrcidRandomValueTokenServicesImpl.java index a2fabce1f5f..65389872441 100644 --- a/orcid-core/src/main/java/org/orcid/core/oauth/service/OrcidRandomValueTokenServicesImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/oauth/service/OrcidRandomValueTokenServicesImpl.java @@ -1,6 +1,7 @@ package org.orcid.core.oauth.service; import java.util.*; +import java.util.stream.Collectors; import javax.annotation.Resource; import javax.persistence.PersistenceException; @@ -13,6 +14,7 @@ import org.orcid.core.constants.OrcidOauth2Constants; import org.orcid.core.constants.RevokeReason; import org.orcid.core.exception.ClientDeactivatedException; +import org.orcid.core.exception.InvalidTokenException; import org.orcid.core.exception.LockedException; import org.orcid.core.manager.ClientDetailsEntityCacheManager; import org.orcid.core.manager.ProfileEntityManager; @@ -39,15 +41,14 @@ import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; -import org.orcid.core.exception.InvalidTokenException - +import org.orcid.core.exception.OrcidInvalidScopeException; import com.google.common.collect.Sets; /** * @author Declan Newman (declan) Date: 11/05/2012 */ @Deprecated -//TODO: This have to be removed!!!! +//TODO: This have to be removed, just a placeholder to remember where we validate the tokens!!!! public class OrcidRandomValueTokenServicesImpl { private static final Logger LOGGER = LoggerFactory.getLogger(OrcidRandomValueTokenServicesImpl.class); @@ -63,7 +64,6 @@ public class OrcidRandomValueTokenServicesImpl { @Resource private AuthorizationServerUtil authorizationServerUtil; - @Override public OrcidBearerTokenAuthentication loadAuthentication(String accessTokenValue) throws AuthenticationException { try { JSONObject tokenInfo = authorizationServerUtil.tokenIntrospection(accessTokenValue); @@ -96,31 +96,25 @@ public OrcidBearerTokenAuthentication loadAuthentication(String accessTokenValue } private OrcidBearerTokenAuthentication buildAuthentication(String accessTokenValue, JSONObject tokenInfo) throws JSONException { - // What will we get when the token does not exists? String clientId = tokenInfo.getString("client_id"); - Authentication authentication = null; - Set scopes = OAuth2Utils.parseParameterList(tokenInfo.getString("scope")); - AuthorizationRequest request = new AuthorizationRequest(clientId, scopes); - request.setApproved(true); - if(tokenInfo.has("username")) { - String orcid = tokenInfo.getString("username"); - ProfileEntity profile = new ProfileEntity(orcid); - authentication = new OrcidOauth2UserAuthentication(profile, true); - } - // `orcid` is the only resource id and it is applied to all clients - request.setResourceIds(Set.of("orcid")); + String userOrcid = tokenInfo.getString("username"); + + OrcidBearerTokenAuthentication.Builder builder = OrcidBearerTokenAuthentication.builder(clientId, userOrcid, accessTokenValue); + + Set scopes = Arrays.stream(tokenInfo.getString("scope").split("[\\s,]+")) + .collect(Collectors.toSet()); + builder.scopes(scopes); // Set granted authorities if(tokenInfo.has("clientGrantedAuthority")) { - GrantedAuthority ga = new SimpleGrantedAuthority(tokenInfo.getString("clientGrantedAuthority")); - request.setAuthorities(List.of(ga)); + builder.authorities(Sets.newHashSet(new SimpleGrantedAuthority(tokenInfo.getString("clientGrantedAuthority")))); } if(tokenInfo.has("OBO_CLIENT_ID")) { String oboClientId = tokenInfo.getString("OBO_CLIENT_ID"); - return new OrcidOboOAuth2Authentication(oboClientId, request, authentication, accessTokenValue); + builder.oboClientId(oboClientId); } - return new OrcidOAuth2Authentication(request, authentication, accessTokenValue); + return builder.build(); } } diff --git a/orcid-core/src/test/java/org/orcid/core/oauth/IETFExchangeTokenGranterTest.java b/orcid-core/src/test/java/org/orcid/core/oauth/IETFExchangeTokenGranterTest.java deleted file mode 100644 index 11293d1b3b3..00000000000 --- a/orcid-core/src/test/java/org/orcid/core/oauth/IETFExchangeTokenGranterTest.java +++ /dev/null @@ -1,440 +0,0 @@ -package org.orcid.core.oauth; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.fail; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.doThrow; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -import java.io.IOException; -import java.net.URISyntaxException; -import java.security.NoSuchAlgorithmException; -import java.text.ParseException; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.junit.Before; -import org.junit.Test; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.orcid.core.constants.OrcidOauth2Constants; -import org.orcid.core.constants.RevokeReason; -import org.orcid.core.exception.ClientDeactivatedException; -import org.orcid.core.exception.LockedException; -import org.orcid.core.exception.OrcidInvalidScopeException; -import org.orcid.core.manager.ClientDetailsEntityCacheManager; -import org.orcid.core.manager.ProfileEntityManager; -import org.orcid.core.oauth.openid.OpenIDConnectKeyService; -import org.orcid.core.oauth.service.OrcidOAuth2RequestValidator; -import org.orcid.persistence.dao.MemberOBOWhitelistedClientDao; -import org.orcid.persistence.dao.ProfileDao; -import org.orcid.persistence.jpa.entities.ClientDetailsEntity; -import org.orcid.persistence.jpa.entities.MemberOBOWhitelistedClientEntity; -import org.orcid.persistence.jpa.entities.OrcidGrantedAuthority; -import org.orcid.persistence.jpa.entities.OrcidOauth2TokenDetail; -import org.orcid.persistence.jpa.entities.ProfileEntity; -import org.orcid.test.TargetProxyHelper; -import org.springframework.security.oauth2.common.DefaultOAuth2AccessToken; -import org.springframework.security.oauth2.provider.TokenRequest; - -import com.nimbusds.jose.JOSEException; -import com.nimbusds.jwt.JWTClaimsSet; -import com.nimbusds.jwt.JWTClaimsSet.Builder; - -public class IETFExchangeTokenGranterTest { - - private static final String GRANT_TYPE = OrcidOauth2Constants.IETF_EXCHANGE_GRANT_TYPE; - - private static final String ORCID = "0000-0000-0000-0000"; - - private static final String AUDIENCE_CLIENT_ID = "AUD_CLIENT"; - - private static final String ACTIVE_CLIENT_ID = "ACTIVE"; - - @Mock - private OrcidRandomValueTokenServices tokenServicesMock; - - @Mock - private ClientDetailsEntityCacheManager clientDetailsEntityCacheManagerMock; - - @Mock - private OrcidOAuth2RequestValidator orcidOAuth2RequestValidatorMock; - - @Mock - private OpenIDConnectKeyService openIDConnectKeyServiceMock; - - @Mock - private ClientDetailsEntity activeClientMock; - - @Mock - private MemberOBOWhitelistedClientDao memberOBOWhitelistedClientDaoMock; - - @Mock - private OrcidOauth2TokenDetailService orcidOauthTokenDetailServiceMock; - - @Mock - private ProfileEntityManager profileEntityManagerMock; - - @Mock - private ProfileDao profileDaoMock; - - private IETFExchangeTokenGranter tokenGranter; - - @Before - public void before() { - MockitoAnnotations.initMocks(this); - - ClientDetailsEntity lockedClient = new ClientDetailsEntity("LOCKED"); - ClientDetailsEntity deactivatedClient = new ClientDetailsEntity("DEACTIVATED"); - - when(activeClientMock.getId()).thenReturn(ACTIVE_CLIENT_ID); - when(activeClientMock.getClientId()).thenReturn(ACTIVE_CLIENT_ID); - when(activeClientMock.getAuthorizedGrantTypes()).thenReturn(Set.of(OrcidOauth2Constants.IETF_EXCHANGE_GRANT_TYPE)); - - // For sake of testing, ACTIVE and AUD_CLIENT could be the same mock - when(clientDetailsEntityCacheManagerMock.retrieve(ACTIVE_CLIENT_ID)).thenReturn(activeClientMock); - when(clientDetailsEntityCacheManagerMock.retrieve(AUDIENCE_CLIENT_ID)).thenReturn(activeClientMock); - - when(clientDetailsEntityCacheManagerMock.retrieve("LOCKED")).thenReturn(lockedClient); - when(clientDetailsEntityCacheManagerMock.retrieve("DEACTIVATED")).thenReturn(deactivatedClient); - - doThrow(LockedException.class).when(orcidOAuth2RequestValidatorMock).validateClientIsEnabled(eq(lockedClient)); - doThrow(ClientDeactivatedException.class).when(orcidOAuth2RequestValidatorMock).validateClientIsEnabled(eq(deactivatedClient)); - - when(openIDConnectKeyServiceMock.verify(any())).thenReturn(true); - - ClientDetailsEntity oboClient = new ClientDetailsEntity(AUDIENCE_CLIENT_ID); - MemberOBOWhitelistedClientEntity e = new MemberOBOWhitelistedClientEntity(); - e.setWhitelistedClientDetailsEntity(oboClient); - - List oboClients = List.of(e); - - when(memberOBOWhitelistedClientDaoMock.getWhitelistForClient(ACTIVE_CLIENT_ID)).thenReturn(oboClients); - - OrcidOauth2TokenDetail token1 = getOrcidOauth2TokenDetail(true, "/read-limited", System.currentTimeMillis() + 60000, false); - - when(orcidOauthTokenDetailServiceMock.findByClientIdAndUserName(any(), any())).thenReturn(List.of(token1)); - - ProfileEntity profile = new ProfileEntity(ORCID); - when(profileEntityManagerMock.findByOrcid(eq(ORCID))).thenReturn(profile); - - OrcidGrantedAuthority oga = new OrcidGrantedAuthority(); - oga.setAuthority("ROLE_USER"); - oga.setOrcid(ORCID); - when(profileDaoMock.getGrantedAuthoritiesForProfile(eq(ORCID))).thenReturn(List.of(oga)); - - // Active token - DefaultOAuth2AccessToken token = new DefaultOAuth2AccessToken(""); - token.setAdditionalInformation(new HashMap()); - token.setExpiration(new Date(System.currentTimeMillis() + 60000)); - token.setScope(Set.of()); - token.setTokenType(""); - token.setValue(""); - - when(tokenServicesMock.createAccessToken(any())).thenReturn(token); - - // Disabled token - DefaultOAuth2AccessToken disabledToken = new DefaultOAuth2AccessToken(""); - disabledToken.setAdditionalInformation(new HashMap()); - disabledToken.setExpiration(new Date(System.currentTimeMillis() + 60000)); - disabledToken.setScope(Set.of()); - disabledToken.setTokenType(""); - disabledToken.setValue(""); - - when(tokenServicesMock.createRevokedAccessToken(any(), any())).thenReturn(disabledToken); - - tokenGranter = new IETFExchangeTokenGranter(tokenServicesMock); - - TargetProxyHelper.injectIntoProxy(tokenGranter, "clientDetailsEntityCacheManager", clientDetailsEntityCacheManagerMock); - TargetProxyHelper.injectIntoProxy(tokenGranter, "orcidOAuth2RequestValidator", orcidOAuth2RequestValidatorMock); - TargetProxyHelper.injectIntoProxy(tokenGranter, "openIDConnectKeyService", openIDConnectKeyServiceMock); - TargetProxyHelper.injectIntoProxy(tokenGranter, "memberOBOWhitelistedClientDao", memberOBOWhitelistedClientDaoMock); - TargetProxyHelper.injectIntoProxy(tokenGranter, "orcidOauthTokenDetailService", orcidOauthTokenDetailServiceMock); - TargetProxyHelper.injectIntoProxy(tokenGranter, "profileEntityManager", profileEntityManagerMock); - TargetProxyHelper.injectIntoProxy(tokenGranter, "profileDao", profileDaoMock); - } - - @Test(expected = ClientDeactivatedException.class) - public void grantDeactivatedClientTest() throws NoSuchAlgorithmException, IOException, ParseException, URISyntaxException, JOSEException { - tokenGranter.grant(GRANT_TYPE, getTokenRequest("DEACTIVATED", List.of("/read-limited"))); - } - - @Test(expected = LockedException.class) - public void grantLockedClientTest() throws NoSuchAlgorithmException, IOException, ParseException, URISyntaxException, JOSEException { - tokenGranter.grant(GRANT_TYPE, getTokenRequest("LOCKED", List.of("/read-limited"))); - } - - @Test - public void grantMissingRequestParamsTest() { - String clientId = ACTIVE_CLIENT_ID; - List scope = List.of("/read-limited"); - - try { - // Missing token - Map requestParameters = new HashMap(); - requestParameters.put(OrcidOauth2Constants.IETF_EXCHANGE_SUBJECT_TOKEN_TYPE, "urn:ietf:params:oauth:token-type:id_token"); - requestParameters.put(OrcidOauth2Constants.IETF_EXCHANGE_REQUESTED_TOKEN_TYPE, "urn:ietf:params:oauth:token-type:access_token"); - TokenRequest t1 = new TokenRequest(requestParameters, clientId, scope, GRANT_TYPE); - tokenGranter.grant(GRANT_TYPE, t1); - fail(); - } catch (IllegalArgumentException iae) { - assertEquals("Missing IETF Token exchange request parameter(s). Required: subject_token subject_token_type requested_token_type", iae.getMessage()); - } catch (Exception e) { - fail(); - } - - try { - // Missing subject token type - Map requestParameters = new HashMap(); - requestParameters.put(OrcidOauth2Constants.IETF_EXCHANGE_SUBJECT_TOKEN, buildJWTToken(false)); - requestParameters.put(OrcidOauth2Constants.IETF_EXCHANGE_REQUESTED_TOKEN_TYPE, "urn:ietf:params:oauth:token-type:access_token"); - TokenRequest t2 = new TokenRequest(requestParameters, clientId, scope, GRANT_TYPE); - tokenGranter.grant(GRANT_TYPE, t2); - fail(); - } catch (IllegalArgumentException iae) { - assertEquals("Missing IETF Token exchange request parameter(s). Required: subject_token subject_token_type requested_token_type", iae.getMessage()); - } catch (Exception e) { - fail(); - } - - try { - // Missing requested token type - Map requestParameters = new HashMap(); - requestParameters.put(OrcidOauth2Constants.IETF_EXCHANGE_SUBJECT_TOKEN, buildJWTToken(false)); - requestParameters.put(OrcidOauth2Constants.IETF_EXCHANGE_SUBJECT_TOKEN_TYPE, "urn:ietf:params:oauth:token-type:id_token"); - TokenRequest t3 = new TokenRequest(requestParameters, clientId, scope, GRANT_TYPE); - tokenGranter.grant(GRANT_TYPE, t3); - fail(); - } catch (IllegalArgumentException iae) { - assertEquals("Missing IETF Token exchange request parameter(s). Required: subject_token subject_token_type requested_token_type", iae.getMessage()); - } catch (Exception e) { - fail(); - } - } - - @Test - public void grantClientDoesntHaveRequiredGrantTest() { - // Remove the required grant type - when(activeClientMock.getAuthorizedGrantTypes()).thenReturn(Set.of(OrcidOauth2Constants.GRANT_TYPE_CLIENT_CREDENTIALS)); - try { - tokenGranter.grant(GRANT_TYPE, getTokenRequest(ACTIVE_CLIENT_ID, List.of("/read-limited"))); - fail(); - } catch (IllegalArgumentException iae) { - assertEquals("Client does not have urn:ietf:params:oauth:grant-type:token-exchange enabled", iae.getMessage()); - } catch (Exception e) { - fail(); - } - } - - @Test - public void grantClientNotOboWhitelistedTest() { - try { - ClientDetailsEntity oboClient = new ClientDetailsEntity("OTHER_CLIENT"); - MemberOBOWhitelistedClientEntity e = new MemberOBOWhitelistedClientEntity(); - e.setWhitelistedClientDetailsEntity(oboClient); - when(memberOBOWhitelistedClientDaoMock.getWhitelistForClient(AUDIENCE_CLIENT_ID)).thenReturn(List.of(e)); - tokenGranter.grant(GRANT_TYPE, getTokenRequest(ACTIVE_CLIENT_ID, List.of("/read-limited"))); - fail(); - } catch (IllegalArgumentException iae) { - assertEquals("Client ACTIVE cannot act on behalf of client AUD_CLIENT", iae.getMessage()); - } catch (Exception e) { - fail(); - } - } - - @Test - public void grantRequestingAndOBOClientMustNotBeTheSameClientTest() throws JOSEException, NoSuchAlgorithmException, IOException, ParseException, URISyntaxException { - Builder claims = new JWTClaimsSet.Builder(); - claims.claim("aud", AUDIENCE_CLIENT_ID); - claims.claim("sub", ORCID); - claims.expirationTime(new Date(System.currentTimeMillis() + 60000)); - - OpenIDConnectKeyService.OpenIDConnectKeyServiceConfig config = new OpenIDConnectKeyService.OpenIDConnectKeyServiceConfig(); - config.setKeyName("OpenIDTestKey1"); - config.setJsonKey( - "{\"keys\":[{\"kty\":\"RSA\",\"d\":\"i6C2Vdr7HDMj9wOBx28epQ7KPpzU_RDfGmQF8c81MoQU2KkpuNcFD49Rixzp3nQa58vtCOzAKeHwglpqm4elcai-uTW0bcdW1DOqYbwzQEk7pVQF-mMEUC-Rvd3Y5SIhCrHQYHGq9Q58uyuolG-Exq4h1AgyhUBX3CETCqzhPshOmB_Y4OuasdhyuVNySBbo-ZOYSd-HMrsrv1lt5WckWz22wmsREjO5AoRPpF17UVp3nMRCTy2v1acUrNtG64MdaFUpmLt9a-RqseFErE2Tm-kEUSBjYucswQ0_ZIs_VUdPWet4twqulB2bJi2ET6pP25DufOtR0x3ijvEPAfvhwQ\",\"e\":\"AQAB\",\"use\":\"sig\",\"kid\":\"OpenIDTestKey1\",\"alg\":\"RS256\",\"n\":\"qCtxWP2HppC8PBEXUh6b5RPECAzQS01khDwbxCSndO-YtS1MYpNlmtUgdtoAEoIP9TFMqXOsltKmGFioy0CeWLi53M-iX-Ygjd3zSQAbr0BU0-86somdbIlFxuvGA8v6AC7MNlICTwbGExCufL_hivrzF1XVqi5zIovM1LA8k2bP4BKMEjNwhGBGJ0E9KcQYv65foZr9K0C6YYJDFE6YqsHP_czvbI1ij7MfDvN5cwmHRGMGOyzDCmT_SmjoZAZ4vSXbl2wI5txIj70RLLSK4oahktb-09c0lDVYpCno7LqsLR8E3DuTUniYwYMHlXeBor_G7sJw2alF568m1iZ_zQ\"}]}"); - OpenIDConnectKeyService service = new OpenIDConnectKeyService(config); - - String token = service.sign(claims.build()).serialize(); - - Map requestParameters = new HashMap(); - requestParameters.put(OrcidOauth2Constants.IETF_EXCHANGE_SUBJECT_TOKEN, token); - requestParameters.put(OrcidOauth2Constants.IETF_EXCHANGE_SUBJECT_TOKEN_TYPE, "urn:ietf:params:oauth:token-type:id_token"); - requestParameters.put(OrcidOauth2Constants.IETF_EXCHANGE_REQUESTED_TOKEN_TYPE, "urn:ietf:params:oauth:token-type:access_token"); - TokenRequest tokenRequest = new TokenRequest(requestParameters, AUDIENCE_CLIENT_ID, List.of("/read-limited"), GRANT_TYPE); - try { - tokenGranter.grant(GRANT_TYPE, tokenRequest); - fail(); - } catch (IllegalArgumentException iae) { - assertEquals("Attempt to exchange own id_token, use refresh token instead", iae.getMessage()); - } catch (Exception e) { - fail(); - } - } - - @Test - public void grantDisabledTokenDoesntWorkTest() throws NoSuchAlgorithmException, IOException, ParseException, URISyntaxException, JOSEException { - try { - OrcidOauth2TokenDetail token1 = getOrcidOauth2TokenDetail(true, "/read-limited", System.currentTimeMillis() + 60000, true); - token1.setRevokeReason(RevokeReason.USER_REVOKED.name()); - - when(orcidOauthTokenDetailServiceMock.findByClientIdAndUserName(any(), any())).thenReturn(List.of(token1)); - tokenGranter.grant(GRANT_TYPE, getTokenRequest(ACTIVE_CLIENT_ID, List.of("/read-limited"))); - fail(); - } catch (OrcidInvalidScopeException oise) { - assertEquals("The id_token is not associated with a valid scope", oise.getMessage()); - } catch (Exception e) { - fail(); - } - } - - @Test - public void grantUserDisabledTokenWithActivitiesReadLimitedGenerateDeactivatedTokenTest() - throws NoSuchAlgorithmException, IOException, ParseException, URISyntaxException, JOSEException { - OrcidOauth2TokenDetail token1 = getOrcidOauth2TokenDetail(true, "/activities/update", System.currentTimeMillis() + 60000, true); - token1.setRevokeReason(RevokeReason.USER_REVOKED.name()); - - when(orcidOauthTokenDetailServiceMock.findByClientIdAndUserName(any(), any())).thenReturn(List.of(token1)); - tokenGranter.grant(GRANT_TYPE, getTokenRequest(ACTIVE_CLIENT_ID, List.of("/activities/update"))); - // Verify revoke token was created - verify(tokenServicesMock, times(1)).createRevokedAccessToken(any(), eq(RevokeReason.USER_REVOKED)); - // Verify regular token was never created - verify(tokenServicesMock, never()).createAccessToken(any()); - } - - @Test - public void grantClientDisabledTokenWithActivitiesReadLimitedThrowExceptionTest() - throws NoSuchAlgorithmException, IOException, ParseException, URISyntaxException, JOSEException { - OrcidOauth2TokenDetail token1 = getOrcidOauth2TokenDetail(true, "/activities/update", System.currentTimeMillis() + 60000, true); - token1.setRevokeReason(RevokeReason.CLIENT_REVOKED.name()); - - when(orcidOauthTokenDetailServiceMock.findByClientIdAndUserName(any(), any())).thenReturn(List.of(token1)); - try { - tokenGranter.grant(GRANT_TYPE, getTokenRequest(ACTIVE_CLIENT_ID, List.of("/activities/update"))); - } catch(OrcidInvalidScopeException e) { - assertEquals("There are no active tokens with valid scopes for this account", e.getMessage()); - } catch(Exception e) { - fail("Unhandled exception:" + e.getMessage()); - } - } - - @Test - public void grantStaffDisabledTokenWithActivitiesReadLimitedThrowExceptionTest() - throws NoSuchAlgorithmException, IOException, ParseException, URISyntaxException, JOSEException { - OrcidOauth2TokenDetail token1 = getOrcidOauth2TokenDetail(true, "/activities/update", System.currentTimeMillis() + 60000, true); - token1.setRevokeReason(RevokeReason.STAFF_REVOKED.name()); - - when(orcidOauthTokenDetailServiceMock.findByClientIdAndUserName(any(), any())).thenReturn(List.of(token1)); - try { - tokenGranter.grant(GRANT_TYPE, getTokenRequest(ACTIVE_CLIENT_ID, List.of("/activities/update"))); - } catch(OrcidInvalidScopeException e) { - assertEquals("There are no active tokens with valid scopes for this account", e.getMessage()); - } catch(Exception e) { - fail("Unhandled exception:" + e.getMessage()); - } - } - - @Test - public void grantTokenWhenAMemberRevokedTokenIsPresentTest() - throws NoSuchAlgorithmException, IOException, ParseException, URISyntaxException, JOSEException { - OrcidOauth2TokenDetail token1 = getOrcidOauth2TokenDetail(true, "/activities/update", System.currentTimeMillis() + 60000, true); - OrcidOauth2TokenDetail token2 = getOrcidOauth2TokenDetail(true, "/activities/update", System.currentTimeMillis() + 60000, false); - token1.setRevokeReason(RevokeReason.STAFF_REVOKED.name()); - - when(orcidOauthTokenDetailServiceMock.findByClientIdAndUserName(any(), any())).thenReturn(List.of(token1, token2)); - tokenGranter.grant(GRANT_TYPE, getTokenRequest(ACTIVE_CLIENT_ID, List.of("/activities/update"))); - // Verify revoke token was never created - verify(tokenServicesMock, never()).createRevokedAccessToken(any(), any()); - // Verify regular token was created - verify(tokenServicesMock, times(1)).createAccessToken(any()); - } - - @Test - public void grantDisabledTokenWithActivitiesUpdateAndOtherActiveTokenWithOtherScopesGenerateDeactivatedTokenTest() - throws NoSuchAlgorithmException, IOException, ParseException, URISyntaxException, JOSEException { - // Deactivated token - OrcidOauth2TokenDetail token1 = getOrcidOauth2TokenDetail(true, "/activities/update", System.currentTimeMillis() + 60000, true); - token1.setRevokeReason(RevokeReason.USER_REVOKED.name()); - - // Active token with other scope - OrcidOauth2TokenDetail token2 = getOrcidOauth2TokenDetail(true, "/activities/read-limited /read-limited /read-public", System.currentTimeMillis() + 60000, false); - token2.setApproved(true); - token2.setScope("/activities/read-limited /read-limited /read-public"); - token2.setTokenExpiration(new Date(System.currentTimeMillis() + 60000)); - token2.setTokenDisabled(false); - - // Revoke token should be generated - when(orcidOauthTokenDetailServiceMock.findByClientIdAndUserName(any(), any())).thenReturn(List.of(token1, token2)); - tokenGranter.grant(GRANT_TYPE, getTokenRequest(ACTIVE_CLIENT_ID, List.of("/activities/update"))); - // Verify revoke token was created - verify(tokenServicesMock, times(1)).createRevokedAccessToken(any(), eq(RevokeReason.USER_REVOKED)); - // Verify regular token was never created - verify(tokenServicesMock, never()).createAccessToken(any()); - } - - @Test - public void grantDisabledTokenWithActivitiesUpdateAndOtherActiveTokenWithActivitiesUpdateScopesGenerateActiveTokenTest() - throws NoSuchAlgorithmException, IOException, ParseException, URISyntaxException, JOSEException { - // Deactivated token - OrcidOauth2TokenDetail token1 = getOrcidOauth2TokenDetail(true, "/activities/update", System.currentTimeMillis() + 60000, true); - token1.setRevokeReason(RevokeReason.USER_REVOKED.name()); - - // Active token with other scope - OrcidOauth2TokenDetail token2 = getOrcidOauth2TokenDetail(true, "/activities/read-limited /read-limited /activities/update /read-public", System.currentTimeMillis() + 60000, true); - token2.setTokenDisabled(false); - - // Revoke token should be generated - when(orcidOauthTokenDetailServiceMock.findByClientIdAndUserName(any(), any())).thenReturn(List.of(token1, token2)); - tokenGranter.grant(GRANT_TYPE, getTokenRequest(ACTIVE_CLIENT_ID, List.of("/activities/update"))); - // Verify revoke token was never created - verify(tokenServicesMock, never()).createRevokedAccessToken(any(), any()); - // Verify regular token was created - verify(tokenServicesMock, times(1)).createAccessToken(any()); - } - - @Test - public void grantTest() throws NoSuchAlgorithmException, IOException, ParseException, URISyntaxException, JOSEException { - tokenGranter.grant(GRANT_TYPE, getTokenRequest(ACTIVE_CLIENT_ID, List.of("/read-limited"))); - verify(tokenServicesMock, times(1)).createAccessToken(any()); - } - - private TokenRequest getTokenRequest(String clientId, List scope) - throws NoSuchAlgorithmException, IOException, ParseException, URISyntaxException, JOSEException { - Map requestParameters = new HashMap(); - requestParameters.put(OrcidOauth2Constants.IETF_EXCHANGE_SUBJECT_TOKEN, buildJWTToken(false)); - requestParameters.put(OrcidOauth2Constants.IETF_EXCHANGE_SUBJECT_TOKEN_TYPE, "urn:ietf:params:oauth:token-type:id_token"); - requestParameters.put(OrcidOauth2Constants.IETF_EXCHANGE_REQUESTED_TOKEN_TYPE, "urn:ietf:params:oauth:token-type:access_token"); - return new TokenRequest(requestParameters, clientId, scope, GRANT_TYPE); - } - - private String buildJWTToken(boolean expired) throws NoSuchAlgorithmException, IOException, ParseException, URISyntaxException, JOSEException { - Builder claims = new JWTClaimsSet.Builder(); - claims.claim("aud", AUDIENCE_CLIENT_ID); - claims.claim("sub", ORCID); - claims.expirationTime(expired ? new Date(0) : new Date(System.currentTimeMillis() + 60000)); - - OpenIDConnectKeyService.OpenIDConnectKeyServiceConfig config = new OpenIDConnectKeyService.OpenIDConnectKeyServiceConfig(); - config.setKeyName("OpenIDTestKey1"); - config.setJsonKey( - "{\"keys\":[{\"kty\":\"RSA\",\"d\":\"i6C2Vdr7HDMj9wOBx28epQ7KPpzU_RDfGmQF8c81MoQU2KkpuNcFD49Rixzp3nQa58vtCOzAKeHwglpqm4elcai-uTW0bcdW1DOqYbwzQEk7pVQF-mMEUC-Rvd3Y5SIhCrHQYHGq9Q58uyuolG-Exq4h1AgyhUBX3CETCqzhPshOmB_Y4OuasdhyuVNySBbo-ZOYSd-HMrsrv1lt5WckWz22wmsREjO5AoRPpF17UVp3nMRCTy2v1acUrNtG64MdaFUpmLt9a-RqseFErE2Tm-kEUSBjYucswQ0_ZIs_VUdPWet4twqulB2bJi2ET6pP25DufOtR0x3ijvEPAfvhwQ\",\"e\":\"AQAB\",\"use\":\"sig\",\"kid\":\"OpenIDTestKey1\",\"alg\":\"RS256\",\"n\":\"qCtxWP2HppC8PBEXUh6b5RPECAzQS01khDwbxCSndO-YtS1MYpNlmtUgdtoAEoIP9TFMqXOsltKmGFioy0CeWLi53M-iX-Ygjd3zSQAbr0BU0-86somdbIlFxuvGA8v6AC7MNlICTwbGExCufL_hivrzF1XVqi5zIovM1LA8k2bP4BKMEjNwhGBGJ0E9KcQYv65foZr9K0C6YYJDFE6YqsHP_czvbI1ij7MfDvN5cwmHRGMGOyzDCmT_SmjoZAZ4vSXbl2wI5txIj70RLLSK4oahktb-09c0lDVYpCno7LqsLR8E3DuTUniYwYMHlXeBor_G7sJw2alF568m1iZ_zQ\"}]}"); - OpenIDConnectKeyService service = new OpenIDConnectKeyService(config); - - return service.sign(claims.build()).serialize(); - } - - private OrcidOauth2TokenDetail getOrcidOauth2TokenDetail(Boolean approved, String scope, long expiration, Boolean disabled) { - OrcidOauth2TokenDetail token = new OrcidOauth2TokenDetail(); - token.setApproved(approved); - token.setScope(scope); - token.setTokenExpiration(new Date(expiration)); - token.setTokenDisabled(disabled); - return token; - } -} diff --git a/orcid-core/src/test/java/org/orcid/core/oauth/service/OrcidRandomValueTokenServicesTest.java b/orcid-core/src/test/java/org/orcid/core/oauth/service/OrcidRandomValueTokenServicesTest.java deleted file mode 100644 index faf48138bf0..00000000000 --- a/orcid-core/src/test/java/org/orcid/core/oauth/service/OrcidRandomValueTokenServicesTest.java +++ /dev/null @@ -1,464 +0,0 @@ -package org.orcid.core.oauth.service; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.fail; - -import java.io.Serializable; -import java.util.Arrays; -import java.util.Calendar; -import java.util.Collections; -import java.util.Date; -import java.util.GregorianCalendar; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; - -import javax.annotation.Resource; - -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.Rule; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.orcid.core.constants.OrcidOauth2Constants; -import org.orcid.core.constants.RevokeReason; -import org.orcid.core.manager.ClientDetailsManager; -import org.orcid.core.oauth.OrcidBearerTokenAuthentication; -import org.orcid.core.oauth.OrcidOauth2TokenDetailService; -import org.orcid.core.oauth.OrcidRandomValueTokenServices; -import org.orcid.core.togglz.Features; -import org.orcid.persistence.jpa.entities.ClientDetailsEntity; -import org.orcid.persistence.jpa.entities.OrcidOauth2TokenDetail; -import org.orcid.test.DBUnitTest; -import org.orcid.test.OrcidJUnit4ClassRunner; -import org.springframework.mock.web.MockHttpServletRequest; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.oauth2.common.OAuth2AccessToken; -import org.springframework.security.oauth2.common.exceptions.InvalidTokenException; -import org.springframework.security.oauth2.common.util.OAuth2Utils; -import org.springframework.security.oauth2.provider.OAuth2Authentication; -import org.springframework.security.oauth2.provider.OAuth2Request; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.context.request.RequestAttributes; -import org.springframework.web.context.request.RequestContextHolder; -import org.springframework.web.context.request.ServletRequestAttributes; -import org.togglz.junit.TogglzRule; - -/** - * - * @author Will Simpson - */ -@RunWith(OrcidJUnit4ClassRunner.class) -@ContextConfiguration(locations = { "classpath:test-orcid-core-context.xml" }) -public class OrcidRandomValueTokenServicesTest extends DBUnitTest { - - @Resource - private OrcidRandomValueTokenServices tokenServices; - - @Resource - private OrcidOauth2TokenDetailService orcidOauthTokenDetailService; - - @Resource - private ClientDetailsManager clientDetailsManager; - - @Rule - public TogglzRule togglzRule = TogglzRule.allDisabled(Features.class); - - @BeforeClass - public static void initDBUnitData() throws Exception { - initDBUnitData(Arrays.asList("/data/SubjectEntityData.xml", "/data/SourceClientDetailsEntityData.xml", - "/data/ProfileEntityData.xml", "/data/ClientDetailsEntityData.xml", "/data/OrcidOauth2AuthorisationDetailsData.xml")); - } - - @AfterClass - public static void removeDBUnitData() throws Exception { - removeDBUnitData(Arrays.asList("/data/OrcidOauth2AuthorisationDetailsData.xml", "/data/ClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", - "/data/SubjectEntityData.xml")); - } - - @Test - public void testCreateReadLimitedAccessToken() { - Date earliestExpiry = oneHoursTime(); - Map authorizationParameters = new HashMap<>(); - String clientId = "4444-4444-4444-4441"; - authorizationParameters.put(OAuth2Utils.CLIENT_ID, clientId); - authorizationParameters.put(OAuth2Utils.SCOPE, "/orcid-profile/read-limited"); - OAuth2Request request = new OAuth2Request(Collections. emptyMap(), clientId, Collections. emptyList(), true, new HashSet(Arrays.asList("/orcid-profile/read-limited")), Collections. emptySet(), null, Collections. emptySet(), Collections. emptyMap()); - - ClientDetailsEntity clientDetails = clientDetailsManager.findByClientId(clientId); - Authentication userAuthentication = new OrcidBearerTokenAuthentication(clientDetails); - OAuth2Authentication authentication = new OAuth2Authentication(request, userAuthentication); - OAuth2AccessToken oauth2AccessToken = tokenServices.createAccessToken(authentication); - - Date latestExpiry = oneHoursTime(); - - assertNotNull(oauth2AccessToken); - assertFalse(oauth2AccessToken.getExpiration().before(earliestExpiry)); - assertFalse(oauth2AccessToken.getExpiration().after(latestExpiry)); - } - - @Test - public void testCreateAddWorkAccessToken() { - Date earliestExpiry = oneHoursTime(); - - Map authorizationParameters = new HashMap<>(); - String clientId = "4444-4444-4444-4441"; - authorizationParameters.put(OAuth2Utils.CLIENT_ID, clientId); - authorizationParameters.put(OAuth2Utils.SCOPE, "/orcid-works/create"); - OAuth2Request request = new OAuth2Request(Collections. emptyMap(), clientId, Collections. emptyList(), true, new HashSet(Arrays.asList("/orcid-profile/read-limited")), Collections. emptySet(), null, Collections. emptySet(), Collections. emptyMap()); - ClientDetailsEntity clientDetails = clientDetailsManager.findByClientId(clientId); - Authentication userAuthentication = new OrcidBearerTokenAuthentication(clientDetails); - OAuth2Authentication authentication = new OAuth2Authentication(request, userAuthentication); - OAuth2AccessToken oauth2AccessToken = tokenServices.createAccessToken(authentication); - - Date latestExpiry = oneHoursTime(); - - assertNotNull(oauth2AccessToken); - assertFalse(oauth2AccessToken.getExpiration().before(earliestExpiry)); - assertFalse(oauth2AccessToken.getExpiration().after(latestExpiry)); - } - - @Test - public void testReissuedAccessTokenHasUpdatedExpiration() throws InterruptedException { - Date earliestExpiry = oneHoursTime(); - - Map authorizationParameters = new HashMap<>(); - String clientId = "4444-4444-4444-4441"; - authorizationParameters.put(OAuth2Utils.CLIENT_ID, clientId); - authorizationParameters.put(OAuth2Utils.SCOPE, "/orcid-works/create"); - OAuth2Request request = new OAuth2Request(Collections. emptyMap(), clientId, Collections. emptyList(), true, new HashSet(Arrays.asList("/orcid-profile/read-limited")), Collections. emptySet(), null, Collections. emptySet(), Collections. emptyMap()); - ClientDetailsEntity clientDetails = clientDetailsManager.findByClientId(clientId); - Authentication userAuthentication = new OrcidBearerTokenAuthentication(clientDetails); - OAuth2Authentication authentication = new OAuth2Authentication(request, userAuthentication); - OAuth2AccessToken oauth2AccessToken = tokenServices.createAccessToken(authentication); - - Date latestExpiry = oneHoursTime(); - - assertNotNull(oauth2AccessToken); - assertFalse(oauth2AccessToken.getExpiration().before(earliestExpiry)); - assertFalse(oauth2AccessToken.getExpiration().after(latestExpiry)); - - Thread.sleep(1000); - earliestExpiry = oneHoursTime(); - - OAuth2AccessToken reissuedOauth2AccessToken = tokenServices.createAccessToken(authentication); - - latestExpiry = oneHoursTime(); - - assertNotNull(reissuedOauth2AccessToken); - - assertFalse(reissuedOauth2AccessToken.getExpiration().before(earliestExpiry)); - assertFalse(reissuedOauth2AccessToken.getExpiration().after(latestExpiry)); - } - - private Date twentyYearsTime() { - Calendar earliestExpiry = new GregorianCalendar(); - // This is roughly 2 years in seconds - used in the implementation, but - // not sure how was calculated now. - earliestExpiry.add(Calendar.SECOND, 631138519); - return earliestExpiry.getTime(); - } - - private Date oneHoursTime() { - Calendar earliestExpiry = new GregorianCalendar(); - earliestExpiry.add(Calendar.HOUR, 1); - return earliestExpiry.getTime(); - } - - @Test - public void invalidTokenThrowsInvalidTokenExceptionTest() { - // Mock request attributes - MockHttpServletRequest mockHttpServletRequest = new MockHttpServletRequest(); - RequestAttributes attrs = new ServletRequestAttributes(mockHttpServletRequest); - RequestContextHolder.setRequestAttributes(attrs); - String invalidTokenValue = "invalid"; - - mockHttpServletRequest.setMethod(RequestMethod.GET.name()); - catchInvalidTokenExceptionOnLoadAuthentication(invalidTokenValue, "Invalid access token: invalid"); - - mockHttpServletRequest.setMethod(RequestMethod.POST.name()); - catchInvalidTokenExceptionOnLoadAuthentication(invalidTokenValue, "Invalid access token: invalid"); - - mockHttpServletRequest.setMethod(RequestMethod.PUT.name()); - catchInvalidTokenExceptionOnLoadAuthentication(invalidTokenValue, "Invalid access token: invalid"); - - mockHttpServletRequest.setMethod(RequestMethod.DELETE.name()); - catchInvalidTokenExceptionOnLoadAuthentication(invalidTokenValue, "Invalid access token: invalid"); - } - - /** - * Check that the token created with a non persistent code will expire within an hour - * */ - @Test - public void tokenExpireInAnHourTest() throws InterruptedException { - Map authorizationParameters = new HashMap<>(); - String clientId = "4444-4444-4444-4441"; - authorizationParameters.put(OAuth2Utils.CLIENT_ID, clientId); - authorizationParameters.put(OAuth2Utils.SCOPE, "/orcid-works/create"); - authorizationParameters.put("code", "code2"); - - OAuth2Request request = new OAuth2Request(Collections. emptyMap(), clientId, Collections. emptyList(), true, new HashSet(Arrays.asList("/orcid-profile/read-limited")), Collections. emptySet(), null, Collections. emptySet(), Collections. emptyMap()); - ClientDetailsEntity clientDetails = clientDetailsManager.findByClientId(clientId); - Authentication userAuthentication = new OrcidBearerTokenAuthentication(clientDetails); - OAuth2Authentication authentication = new OAuth2Authentication(request, userAuthentication); - OAuth2AccessToken oauth2AccessToken = tokenServices.createAccessToken(authentication); - - Date tokenExpiration = oauth2AccessToken.getExpiration(); - Thread.sleep(2000); - - //The token expires in less than one hour - assertFalse(tokenExpiration.after(oneHoursTime())); - } - - /** - * Check that the token created with a persistent code will expire within 20 years - * */ - @Test - public void tokenExpireIn20YearsTest() throws InterruptedException { - Date in20years = twentyYearsTime(); - - Thread.sleep(2000); - - Map requestParameters = new HashMap<>(); - String clientId = "4444-4444-4444-4441"; - requestParameters.put(OAuth2Utils.CLIENT_ID, clientId); - requestParameters.put(OAuth2Utils.SCOPE, "/orcid-works/create"); - requestParameters.put("code", "code1"); - requestParameters.put(OrcidOauth2Constants.IS_PERSISTENT, "true"); - - OAuth2Request request = new OAuth2Request(requestParameters, clientId, Collections. emptyList(), true, new HashSet(Arrays.asList("/orcid-profile/read-limited")), Collections. emptySet(), null, Collections. emptySet(), Collections. emptyMap()); - ClientDetailsEntity clientDetails = clientDetailsManager.findByClientId(clientId); - Authentication userAuthentication = new OrcidBearerTokenAuthentication(clientDetails); - OAuth2Authentication authentication = new OAuth2Authentication(request, userAuthentication); - OAuth2AccessToken oauth2AccessToken = tokenServices.createAccessToken(authentication); - - - Date tokenExpiration = oauth2AccessToken.getExpiration(); - - //The token expires in 20 years - assertFalse(in20years.after(tokenExpiration)); - - in20years = twentyYearsTime(); - - //Confirm the token expires in 20 years - assertFalse(tokenExpiration.after(in20years)); - } - - @Test - public void expiredTokenDoesntWorkOnGetPostPutWithTogglzOnTest() { - // Mock request attributes - MockHttpServletRequest mockHttpServletRequest = new MockHttpServletRequest(); - RequestAttributes attrs = new ServletRequestAttributes(mockHttpServletRequest); - RequestContextHolder.setRequestAttributes(attrs); - - // Check GET requests fail - checkAuthenticationFailsOnExpiredTokenWithRequestMethod(mockHttpServletRequest, RequestMethod.GET); - // Check POST requests fail - checkAuthenticationFailsOnExpiredTokenWithRequestMethod(mockHttpServletRequest, RequestMethod.POST); - // Check PUT requests fail - checkAuthenticationFailsOnExpiredTokenWithRequestMethod(mockHttpServletRequest, RequestMethod.PUT); - } - - private void checkAuthenticationFailsOnExpiredTokenWithRequestMethod(MockHttpServletRequest mockHttpServletRequest, RequestMethod rm) { - mockHttpServletRequest.setMethod(rm.name()); - - OrcidOauth2TokenDetail expiredToken = buildExpiredToken("token-value-" + rm.name()); - expiredToken = buildExpiredToken("token-value-2-" + rm.name()); - orcidOauthTokenDetailService.createNew(expiredToken); - - // The first time we try to use it, we get a InvalidTokenException with message Access token expired: token-value - catchInvalidTokenExceptionOnLoadAuthentication("token-value-2-" + rm.name(), "Access token expired: token-value-2-" + rm.name()); - - // Second time we try to use it, we get a InvalidTokenException with message Invalid access token: token-value - catchInvalidTokenExceptionOnLoadAuthentication("token-value-2-" + rm.name(), "Invalid access token: token-value-2-" + rm.name()); - } - - @Test - public void disabedTokenDoesntWorkOnGetPostPutTest() { - // Mock request attributes - MockHttpServletRequest mockHttpServletRequest = new MockHttpServletRequest(); - RequestAttributes attrs = new ServletRequestAttributes(mockHttpServletRequest); - RequestContextHolder.setRequestAttributes(attrs); - - // All GET requests should fail, regardless of the RevokeReason - checkAuthenticationFailsOnDisabledTokenWithRequestMethod(mockHttpServletRequest, RequestMethod.GET, RevokeReason.AUTH_CODE_REUSED); - checkAuthenticationFailsOnDisabledTokenWithRequestMethod(mockHttpServletRequest, RequestMethod.GET, RevokeReason.CLIENT_REVOKED); - checkAuthenticationFailsOnDisabledTokenWithRequestMethod(mockHttpServletRequest, RequestMethod.GET, RevokeReason.RECORD_DEACTIVATED); - checkAuthenticationFailsOnDisabledTokenWithRequestMethod(mockHttpServletRequest, RequestMethod.GET, RevokeReason.STAFF_REVOKED); - checkAuthenticationFailsOnDisabledTokenWithRequestMethod(mockHttpServletRequest, RequestMethod.GET, RevokeReason.USER_REVOKED); - - // All POST requests should fail, regardless of the RevokeReason - checkAuthenticationFailsOnDisabledTokenWithRequestMethod(mockHttpServletRequest, RequestMethod.POST, RevokeReason.AUTH_CODE_REUSED); - checkAuthenticationFailsOnDisabledTokenWithRequestMethod(mockHttpServletRequest, RequestMethod.POST, RevokeReason.CLIENT_REVOKED); - checkAuthenticationFailsOnDisabledTokenWithRequestMethod(mockHttpServletRequest, RequestMethod.POST, RevokeReason.RECORD_DEACTIVATED); - checkAuthenticationFailsOnDisabledTokenWithRequestMethod(mockHttpServletRequest, RequestMethod.POST, RevokeReason.STAFF_REVOKED); - checkAuthenticationFailsOnDisabledTokenWithRequestMethod(mockHttpServletRequest, RequestMethod.POST, RevokeReason.USER_REVOKED); - - // All PUT requests should fail, regardless of the RevokeReason - checkAuthenticationFailsOnDisabledTokenWithRequestMethod(mockHttpServletRequest, RequestMethod.PUT, RevokeReason.AUTH_CODE_REUSED); - checkAuthenticationFailsOnDisabledTokenWithRequestMethod(mockHttpServletRequest, RequestMethod.PUT, RevokeReason.CLIENT_REVOKED); - checkAuthenticationFailsOnDisabledTokenWithRequestMethod(mockHttpServletRequest, RequestMethod.PUT, RevokeReason.RECORD_DEACTIVATED); - checkAuthenticationFailsOnDisabledTokenWithRequestMethod(mockHttpServletRequest, RequestMethod.PUT, RevokeReason.STAFF_REVOKED); - checkAuthenticationFailsOnDisabledTokenWithRequestMethod(mockHttpServletRequest, RequestMethod.PUT, RevokeReason.USER_REVOKED); - } - - private void checkAuthenticationFailsOnDisabledTokenWithRequestMethod(MockHttpServletRequest mockHttpServletRequest, RequestMethod rm, RevokeReason revokeReason) { - mockHttpServletRequest.setMethod(rm.name()); - - OrcidOauth2TokenDetail disabledToken = buildDisabledToken("token-value-" + rm.name() + revokeReason.name(), revokeReason); - disabledToken = buildDisabledToken("token-value-2-" + rm.name() + revokeReason.name(), revokeReason); - orcidOauthTokenDetailService.createNew(disabledToken); - - catchInvalidTokenExceptionOnLoadAuthentication("token-value-2-" + rm.name(), "Invalid access token: token-value-2-" + rm.name()); - } - - @Test - public void disabledTokenOnDeleteWithTogglzOnTest() { - // Mock request attributes - MockHttpServletRequest mockHttpServletRequest = new MockHttpServletRequest(); - RequestAttributes attrs = new ServletRequestAttributes(mockHttpServletRequest); - RequestContextHolder.setRequestAttributes(attrs); - mockHttpServletRequest.setMethod(RequestMethod.DELETE.name()); - - /////////////////////////////// - // Active tokens should work // - /////////////////////////////// - String activeTokenValue = "active-token-" + Math.random(); - OrcidOauth2TokenDetail activeToken = buildToken(activeTokenValue, "/activites-update"); - orcidOauthTokenDetailService.createNew(activeToken); - try { - tokenServices.loadAuthentication(activeTokenValue); - } catch(Exception e) { - fail(e.getMessage()); - } - - ////////////////////////////// - // USER_REVOKED should work // - ////////////////////////////// - String tokenValue = "token-value-" + RequestMethod.DELETE + RevokeReason.USER_REVOKED; - OrcidOauth2TokenDetail userRevokedDisabledToken = buildDisabledToken(tokenValue, RevokeReason.USER_REVOKED); - orcidOauthTokenDetailService.createNew(userRevokedDisabledToken); - - try { - tokenServices.loadAuthentication(tokenValue); - } catch(Exception e) { - fail(e.getMessage()); - } - - /////////////////////////// - // All other should fail // - /////////////////////////// - disabledTokensOnDeleteShouldAllwaysFailIfTheRevokeReasonIsNotUserRevoked(); - } - - private void disabledTokensOnDeleteShouldAllwaysFailIfTheRevokeReasonIsNotUserRevoked() { - // AUTH_CODE_REUSED should fail - String tokenValue = "token-value-" + Math.random() + "-" + RequestMethod.DELETE + RevokeReason.AUTH_CODE_REUSED; - OrcidOauth2TokenDetail disabledToken = buildDisabledToken(tokenValue, RevokeReason.AUTH_CODE_REUSED); - orcidOauthTokenDetailService.createNew(disabledToken); - - try { - tokenServices.loadAuthentication(tokenValue); - fail(); - } catch(InvalidTokenException e) { - assertEquals("Invalid access token: " + tokenValue + ", revoke reason: AUTH_CODE_REUSED", e.getMessage()); - } - - // CLIENT_REVOKED should fail - tokenValue = "token-value-" + Math.random() + "-" + RequestMethod.DELETE + RevokeReason.CLIENT_REVOKED; - disabledToken = buildDisabledToken(tokenValue, RevokeReason.CLIENT_REVOKED); - orcidOauthTokenDetailService.createNew(disabledToken); - - try { - tokenServices.loadAuthentication(tokenValue); - fail(); - } catch(InvalidTokenException e) { - assertEquals("Invalid access token: " + tokenValue + ", revoke reason: CLIENT_REVOKED", e.getMessage()); - } - - // RECORD_DEACTIVATED should fail - tokenValue = "token-value-" + Math.random() + "-" + RequestMethod.DELETE + RevokeReason.RECORD_DEACTIVATED; - disabledToken = buildDisabledToken(tokenValue, RevokeReason.RECORD_DEACTIVATED); - orcidOauthTokenDetailService.createNew(disabledToken); - - try { - tokenServices.loadAuthentication(tokenValue); - fail(); - } catch(InvalidTokenException e) { - assertEquals("Invalid access token: " + tokenValue + ", revoke reason: RECORD_DEACTIVATED", e.getMessage()); - } - - // STAFF_REVOKED should fail - tokenValue = "token-value-" + Math.random() + "-" + RequestMethod.DELETE + RevokeReason.STAFF_REVOKED; - disabledToken = buildDisabledToken(tokenValue, RevokeReason.STAFF_REVOKED); - orcidOauthTokenDetailService.createNew(disabledToken); - - try { - tokenServices.loadAuthentication(tokenValue); - fail(); - } catch(InvalidTokenException e) { - assertEquals("Invalid access token: " + tokenValue + ", revoke reason: STAFF_REVOKED", e.getMessage()); - } - } - - /** - * Load authentication using a persistent token - * */ - @Test - public void loadAuthenticationWithPersistentTokenTest() { - try { - OAuth2Authentication result = tokenServices.loadAuthentication("persistent-token-2"); - assertNotNull(result); - } catch(Exception e) { - fail(); - } - } - - private void catchInvalidTokenExceptionOnLoadAuthentication(String invalidTokenValue, String expectedMessage) { - try { - tokenServices.loadAuthentication(invalidTokenValue); - fail("Invalid access token must fail"); - } catch (InvalidTokenException i) { - assertEquals(expectedMessage, i.getMessage()); - } catch (Exception e) { - fail("Invalid exception found: " + e.getCause()); - } - } - - private OrcidOauth2TokenDetail buildExpiredToken(String tokenValue) { - return buildExpiredOrDisabledToken(tokenValue, true, null); - } - - private OrcidOauth2TokenDetail buildDisabledToken(String tokenValue, RevokeReason revokeReason) { - return buildExpiredOrDisabledToken(tokenValue, false, revokeReason); - } - - private OrcidOauth2TokenDetail buildExpiredOrDisabledToken(String tokenValue, Boolean buildExpired, RevokeReason revokeReason) { - OrcidOauth2TokenDetail token = buildToken(tokenValue, "/read-limited"); - if(buildExpired) { - token.setTokenExpiration(new Date(System.currentTimeMillis() - 60000)); - } else { - token.setTokenExpiration(new Date(System.currentTimeMillis() + 60000)); - token.setTokenDisabled(true); - token.setRevokeReason(revokeReason.name()); - token.setRevocationDate(new Date()); - } - return token; - } - - private OrcidOauth2TokenDetail buildToken(String tokenValue, String scope) { - OrcidOauth2TokenDetail token = new OrcidOauth2TokenDetail(); - token.setApproved(true); - token.setAuthenticationKey("authentication-key"); - token.setClientDetailsId("4444-4444-4444-4441"); - token.setOrcid("4444-4444-4444-4442"); - token.setResourceId("orcid"); - token.setScope(scope); - token.setTokenValue(tokenValue); - return token; - } -} From 383680cfb9d6ad0674148e6a519297767ca72bbf Mon Sep 17 00:00:00 2001 From: amontenegro Date: Wed, 25 Mar 2026 15:33:18 -0600 Subject: [PATCH 07/77] Notification managers fixe --- .../manager/impl/NotificationManagerImpl.java | 12 +++--- .../v3/impl/NotificationManagerImpl.java | 10 ++--- .../ClientDetailsManagerReadOnly.java | 1 + .../ClientDetailsManagerReadOnlyImpl.java | 41 +++++++++++++++---- .../impl/WorkManagerReadOnlyImpl.java | 3 -- 5 files changed, 45 insertions(+), 22 deletions(-) diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/NotificationManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/NotificationManagerImpl.java index cb03186855a..7c61b3aace1 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/NotificationManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/NotificationManagerImpl.java @@ -30,8 +30,8 @@ import org.orcid.core.manager.SourceManager; import org.orcid.core.manager.read_only.EmailManagerReadOnly; import org.orcid.core.manager.read_only.impl.ManagerReadOnlyBaseImpl; +import org.orcid.core.manager.v3.read_only.ClientDetailsManagerReadOnly; import org.orcid.core.manager.v3.read_only.GivenPermissionToManagerReadOnly; -import org.orcid.core.oauth.OrcidOauth2TokenDetailService; import org.orcid.core.togglz.Features; import org.orcid.core.utils.SourceEntityUtils; import org.orcid.jaxb.model.clientgroup.RedirectUriType; @@ -46,7 +46,6 @@ import org.orcid.jaxb.model.notification_v2.Notification; import org.orcid.jaxb.model.notification_v2.NotificationType; import org.orcid.model.notification.institutional_sign_in_v2.NotificationInstitutionalConnection; -import org.orcid.persistence.dao.GenericDao; import org.orcid.persistence.dao.NotificationDao; import org.orcid.persistence.dao.ProfileDao; import org.orcid.persistence.dao.ProfileEventDao; @@ -56,7 +55,6 @@ import org.orcid.persistence.jpa.entities.NotificationEntity; import org.orcid.persistence.jpa.entities.NotificationInstitutionalConnectionEntity; import org.orcid.persistence.jpa.entities.ProfileEntity; -import org.orcid.persistence.jpa.entities.ProfileEventEntity; import org.orcid.persistence.jpa.entities.SourceEntity; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -101,9 +99,6 @@ public class NotificationManagerImpl extends ManagerReadOnlyBaseImpl implements @Resource private SourceManager sourceManager; - @Resource - private OrcidOauth2TokenDetailService orcidOauth2TokenDetailService; - @Resource private ClientDetailsEntityCacheManager clientDetailsEntityCacheManager; @@ -121,6 +116,9 @@ public class NotificationManagerImpl extends ManagerReadOnlyBaseImpl implements @Resource private SourceEntityUtils sourceEntityUtils; + + @Resource(name = "clientDetailsManagerReadOnlyV3") + private ClientDetailsManagerReadOnly clientDetailsManagerReadOnly; private static final Logger LOGGER = LoggerFactory.getLogger(NotificationManagerImpl.class); @@ -273,7 +271,7 @@ public List filterActionedNotificationAlerts(Collection { // Filter only INSTITUTIONAL_CONNECTION notifications if (NotificationType.INSTITUTIONAL_CONNECTION.equals(n.getNotificationType())) { - boolean alreadyConnected = orcidOauth2TokenDetailService.doesClientKnowUser(n.getSource().retrieveSourcePath(), userOrcid); + boolean alreadyConnected = clientDetailsManagerReadOnly.doesClientKnowUser(n.getSource().retrieveSourcePath(), userOrcid); if (alreadyConnected) { flagAsArchived(userOrcid, n.getPutCode(), false); } diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/NotificationManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/NotificationManagerImpl.java index f8c5c2e98ec..f469065dd23 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/NotificationManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/NotificationManagerImpl.java @@ -16,9 +16,9 @@ import org.orcid.core.manager.v3.NotificationManager; import org.orcid.core.manager.v3.RecordNameManager; import org.orcid.core.manager.v3.SourceManager; +import org.orcid.core.manager.v3.read_only.ClientDetailsManagerReadOnly; import org.orcid.core.manager.v3.read_only.EmailManagerReadOnly; import org.orcid.core.manager.v3.read_only.impl.ManagerReadOnlyBaseImpl; -import org.orcid.core.oauth.OrcidOauth2TokenDetailService; import org.orcid.core.togglz.Features; import org.orcid.core.utils.ReleaseNameUtils; import org.orcid.core.utils.SourceEntityUtils; @@ -102,9 +102,6 @@ public class NotificationManagerImpl extends ManagerReadOnlyBaseImpl implements @Resource(name = "sourceManagerV3") private SourceManager sourceManager; - @Resource - private OrcidOauth2TokenDetailService orcidOauth2TokenDetailService; - @Resource private ClientDetailsEntityCacheManager clientDetailsEntityCacheManager; @@ -129,6 +126,9 @@ public class NotificationManagerImpl extends ManagerReadOnlyBaseImpl implements @Resource(name = "recordNameManagerV3") private RecordNameManager recordNameManagerV3; + @Resource(name = "clientDetailsManagerReadOnlyV3") + private ClientDetailsManagerReadOnly clientDetailsManagerReadOnly; + @Value("${org.orcid.notifications.auto.archive.days:181}") private Integer autoArchiveDays; @@ -543,7 +543,7 @@ public List filterActionedNotificationAlerts(Collection { // Filter only INSTITUTIONAL_CONNECTION notifications if (NotificationType.INSTITUTIONAL_CONNECTION.equals(n.getNotificationType())) { - boolean alreadyConnected = orcidOauth2TokenDetailService.doesClientKnowUser(n.getSource().retrieveSourcePath(), userOrcid); + boolean alreadyConnected = clientDetailsManagerReadOnly.doesClientKnowUser(n.getSource().retrieveSourcePath(), userOrcid); if (alreadyConnected) { flagAsArchived(userOrcid, n.getPutCode(), false); } diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/ClientDetailsManagerReadOnly.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/ClientDetailsManagerReadOnly.java index ba6ded14b2d..59efcea9ec9 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/ClientDetailsManagerReadOnly.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/ClientDetailsManagerReadOnly.java @@ -43,4 +43,5 @@ public interface ClientDetailsManagerReadOnly { ClientSummary getClientSummary(String clientId); + boolean doesClientKnowUser(String clientId, String userOrcid); } diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ClientDetailsManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ClientDetailsManagerReadOnlyImpl.java index 2a03d5d22da..ee5a83f73c5 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ClientDetailsManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ClientDetailsManagerReadOnlyImpl.java @@ -1,9 +1,6 @@ package org.orcid.core.manager.v3.read_only.impl; -import java.util.Date; -import java.util.HashSet; -import java.util.List; -import java.util.Set; +import java.util.*; import javax.annotation.Resource; import javax.persistence.NoResultException; @@ -11,23 +8,32 @@ import org.orcid.core.adapter.v3.JpaJaxbClientAdapter; import org.orcid.core.manager.EncryptionManager; import org.orcid.core.manager.v3.read_only.ClientDetailsManagerReadOnly; +import org.orcid.jaxb.model.message.ScopePathType; import org.orcid.jaxb.model.v3.release.client.ClientSummary; import org.orcid.persistence.dao.ClientDetailsDao; import org.orcid.persistence.dao.ClientRedirectDao; import org.orcid.persistence.dao.ClientSecretDao; +import org.orcid.persistence.dao.OrcidOauth2TokenDetailDao; import org.orcid.persistence.jpa.entities.ClientDetailsEntity; +import org.orcid.persistence.jpa.entities.OrcidOauth2TokenDetail; +import org.orcid.pojo.ajaxForm.PojoUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class ClientDetailsManagerReadOnlyImpl implements ClientDetailsManagerReadOnly { - private static final Logger LOGGER = LoggerFactory.getLogger(ClientDetailsManagerReadOnlyImpl.class); - + private static final Logger LOGGER = LoggerFactory.getLogger(ClientDetailsManagerReadOnlyImpl.class); + + private final List CLIENT_KNOW_USER_SCOPES = Arrays.asList(ScopePathType.ACTIVITIES_UPDATE.value(), ScopePathType.AFFILIATIONS_CREATE.value(), ScopePathType.AFFILIATIONS_UPDATE.value()); + @Resource(name = "jpaJaxbClientAdapterV3") protected JpaJaxbClientAdapter jpaJaxbClientAdapter; @Resource - protected EncryptionManager encryptionManager; + protected EncryptionManager encryptionManager; + + @Resource(name="orcidOauth2TokenDetailDaoReadOnly") + private OrcidOauth2TokenDetailDao orcidOauth2TokenDetailDaoReadOnly; private ClientDetailsDao clientDetailsDao; @@ -174,4 +180,25 @@ public ClientSummary getClientSummary(String clientId) { return jpaJaxbClientAdapter.toClientSummary(clientDetailsEntity); } + @Override + public boolean doesClientKnowUser(String clientId, String userOrcid) { + List existingTokens = orcidOauth2TokenDetailDaoReadOnly.findByClientIdAndUserName(clientId, userOrcid); + if (existingTokens == null || existingTokens.isEmpty()) { + return false; + } + Date now = new Date(); + for (OrcidOauth2TokenDetail token : existingTokens) { + if (token.getTokenExpiration() != null && token.getTokenExpiration().after(now) && (token.getTokenDisabled() == null || !token.getTokenDisabled())) { + // Verify the token have at least one of the required scopes + if(!PojoUtil.isEmpty(token.getScope())) { + for(String scope : token.getScope().split(" ")) { + if(CLIENT_KNOW_USER_SCOPES.contains(scope.trim())) { + return true; + } + } + } + } + } + return false; + } } diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/WorkManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/WorkManagerReadOnlyImpl.java index 1e8e27389b3..dec2ec560a5 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/WorkManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/WorkManagerReadOnlyImpl.java @@ -101,9 +101,6 @@ public class WorkManagerReadOnlyImpl extends ManagerReadOnlyBaseImpl implements @Resource private JSONWorkExternalIdentifiersConverterV3 jsonWorkExternalIdentifiersConverterV3; - @Resource(name = "clientDetailsManagerReadOnlyV3") - private ClientDetailsManagerReadOnly clientDetailsManagerReadOnly; - @Resource protected ClientDetailsEntityCacheManager clientDetailsEntityCacheManager; From 0927a0aaf06525db6de11e7cd5e8998f57b32bd5 Mon Sep 17 00:00:00 2001 From: amontenegro Date: Wed, 25 Mar 2026 15:45:25 -0600 Subject: [PATCH 08/77] Registration manager fixed --- .../manager/impl/RegistrationManagerImpl.java | 13 +++---- .../aop/OrcidApiVisibilitySecurityAspect.java | 39 ------------------- 2 files changed, 6 insertions(+), 46 deletions(-) delete mode 100644 orcid-core/src/main/java/org/orcid/core/security/visibility/aop/OrcidApiVisibilitySecurityAspect.java diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/RegistrationManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/RegistrationManagerImpl.java index 3759cb92210..af8aeb5cf9b 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/RegistrationManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/RegistrationManagerImpl.java @@ -47,7 +47,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Required; -import org.springframework.security.oauth2.common.exceptions.InvalidRequestException; import org.springframework.transaction.TransactionStatus; import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.support.TransactionCallback; @@ -166,7 +165,7 @@ public String doInTransaction(TransactionStatus status) { if(PojoUtil.isEmpty(duplicateAdditionalAddress)){ duplicateAdditionalAddress = emailAddressAdditional; } else { - throw new InvalidRequestException("More than 2 duplicate emails"); + throw new IllegalArgumentException("More than 2 duplicate emails"); } } } @@ -220,7 +219,7 @@ public String doInTransaction(TransactionStatus status) { }); return orcidId; } catch (Exception e) { - throw new InvalidRequestException("Unable to register user due: " + e.getMessage(), e.getCause()); + throw new IllegalArgumentException("Unable to register user due: " + e.getMessage(), e.getCause()); } } @@ -336,7 +335,7 @@ private String createMinimalProfile(Registration registration, boolean usedCaptc * @param emailAddress * The email we want to check */ - private void checkAutoDeprecateIsEnabledForEmail(String emailAddress) throws InvalidRequestException { + private void checkAutoDeprecateIsEnabledForEmail(String emailAddress) { // If the email doesn't exists, just return if (!emailManager.emailExists(emailAddress)) { return; @@ -344,12 +343,12 @@ private void checkAutoDeprecateIsEnabledForEmail(String emailAddress) throws Inv // Check the record is not claimed if (profileEntityManager.isProfileClaimedByEmail(emailAddress)) { - throw new InvalidRequestException("Email " + emailAddress + " already exists and is claimed, so, it can't be used again"); + throw new IllegalArgumentException("Email " + emailAddress + " already exists and is claimed, so, it can't be used again"); } // Check the auto deprecate is enabled for this email address if (!emailManager.isAutoDeprecateEnableForEmail(emailAddress)) { - throw new InvalidRequestException("Autodeprecate is not enabled for " + emailAddress); + throw new IllegalArgumentException("Autodeprecate is not enabled for " + emailAddress); } } @@ -363,7 +362,7 @@ private String getOrcidIdFromEmail(String emailAddress) { Map emailMap = emailManager.findOricdIdsByCommaSeparatedEmails(emailAddress); String unclaimedOrcid = emailMap == null ? null : emailMap.get(emailAddress); if (PojoUtil.isEmpty(unclaimedOrcid)) { - throw new InvalidRequestException("Unable to find orcid id for " + emailAddress); + throw new IllegalArgumentException("Unable to find orcid id for " + emailAddress); } return unclaimedOrcid; } diff --git a/orcid-core/src/main/java/org/orcid/core/security/visibility/aop/OrcidApiVisibilitySecurityAspect.java b/orcid-core/src/main/java/org/orcid/core/security/visibility/aop/OrcidApiVisibilitySecurityAspect.java deleted file mode 100644 index 60b306e2925..00000000000 --- a/orcid-core/src/main/java/org/orcid/core/security/visibility/aop/OrcidApiVisibilitySecurityAspect.java +++ /dev/null @@ -1,39 +0,0 @@ -package org.orcid.core.security.visibility.aop; - -import org.aspectj.lang.annotation.AfterReturning; -import org.aspectj.lang.annotation.Aspect; -import org.orcid.core.security.visibility.filter.VisibilityFilter; -import org.orcid.jaxb.model.message.OrcidMessage; -import org.orcid.jaxb.model.message.OrcidProfile; -import org.springframework.stereotype.Component; - -import javax.annotation.Resource; -import javax.ws.rs.core.Response; - -/** - * @author Declan Newman (declan) Date: 16/03/2012 - */ -@Aspect -@Component -public class OrcidApiVisibilitySecurityAspect { - - @Resource(name = "visibilityFilter") - private VisibilityFilter visibilityFilter; - - @AfterReturning(pointcut = "@annotation(visibilityAnnotation)", returning = "response") - public void simpleVisibilityResponseFilter(Response response, VisibilityControl visibilityAnnotation) { - Object entity = response != null ? response.getEntity() : null; - if (entity != null && OrcidMessage.class.isAssignableFrom(entity.getClass())) { - visibilityFilter.filter((OrcidMessage) entity, visibilityAnnotation.visibilities()); - } - } - - @AfterReturning(pointcut = "@annotation(visibilityAnnotation)", returning = "profile") - public void simpleVisibilityProfileFilter(OrcidProfile profile, VisibilityControl visibilityAnnotation) { - if (profile != null) { - OrcidMessage message = new OrcidMessage(profile); - visibilityFilter.filter(message, visibilityAnnotation.visibilities()); - } - } - -} From d91efa6011234bdb4046d7caabe6d73a63bb33fa Mon Sep 17 00:00:00 2001 From: amontenegro Date: Thu, 26 Mar 2026 10:23:06 -0600 Subject: [PATCH 09/77] More cleanup --- .../OrcidOAuth2AuthenticationEntryPoint.java | 86 ------------------ .../oauth/OrcidAPIAccessDeniedHandler.java | 34 ++++++++ .../oauth/OrcidOauth2TokenEndPointFilter.java | 87 ------------------- .../OrcidT1Oauth2TokenEndPointFilter.java | 71 --------------- .../OrcidWebOauth2TokenEndPointFilter.java | 78 ----------------- .../orcid-oauth2-api-common-config.xml | 2 + .../resources/orcid-api-security-context.xml | 56 ++---------- .../impl/InstitutionalSignInManagerImpl.java | 8 +- .../v3/impl/FindMyStuffManagerImpl.java | 10 +-- .../v3/impl/ProfileEntityManagerImpl.java | 39 +++++---- 10 files changed, 72 insertions(+), 399 deletions(-) delete mode 100644 orcid-api-common/src/main/java/org/orcid/api/common/exception/OrcidOAuth2AuthenticationEntryPoint.java create mode 100644 orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidAPIAccessDeniedHandler.java delete mode 100644 orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidOauth2TokenEndPointFilter.java delete mode 100644 orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidT1Oauth2TokenEndPointFilter.java delete mode 100644 orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidWebOauth2TokenEndPointFilter.java diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/exception/OrcidOAuth2AuthenticationEntryPoint.java b/orcid-api-common/src/main/java/org/orcid/api/common/exception/OrcidOAuth2AuthenticationEntryPoint.java deleted file mode 100644 index 0fbf390a4da..00000000000 --- a/orcid-api-common/src/main/java/org/orcid/api/common/exception/OrcidOAuth2AuthenticationEntryPoint.java +++ /dev/null @@ -1,86 +0,0 @@ -package org.orcid.api.common.exception; - -import java.io.IOException; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.orcid.jaxb.model.error_v2.OrcidError; -import org.springframework.http.ResponseEntity; -import org.springframework.security.access.AccessDeniedException; -import org.springframework.security.core.AuthenticationException; -import org.springframework.security.oauth2.common.exceptions.OAuth2Exception; -import org.springframework.security.oauth2.provider.error.DefaultOAuth2ExceptionRenderer; -import org.springframework.security.oauth2.provider.error.DefaultWebResponseExceptionTranslator; -import org.springframework.security.oauth2.provider.error.OAuth2AuthenticationEntryPoint; -import org.springframework.security.oauth2.provider.error.OAuth2ExceptionRenderer; -import org.springframework.security.oauth2.provider.error.WebResponseExceptionTranslator; -import org.springframework.security.web.AuthenticationEntryPoint; -import org.springframework.security.web.access.AccessDeniedHandler; -import org.springframework.web.context.request.ServletWebRequest; -import org.springframework.web.servlet.HandlerExceptionResolver; -import org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver; - -/** - * - * @author Will Simpson - * - */ -public class OrcidOAuth2AuthenticationEntryPoint extends OAuth2AuthenticationEntryPoint implements AccessDeniedHandler, AuthenticationEntryPoint { - - private WebResponseExceptionTranslator exceptionTranslator = new DefaultWebResponseExceptionTranslator(); - - private OAuth2ExceptionRenderer exceptionRenderer = new DefaultOAuth2ExceptionRenderer(); - - // This is from Spring MVC. - private HandlerExceptionResolver handlerExceptionResolver = new DefaultHandlerExceptionResolver(); - - public void setExceptionTranslator(WebResponseExceptionTranslator exceptionTranslator) { - this.exceptionTranslator = exceptionTranslator; - } - - public void setExceptionRenderer(OAuth2ExceptionRenderer exceptionRenderer) { - this.exceptionRenderer = exceptionRenderer; - } - - @Override - public void handle(HttpServletRequest request, HttpServletResponse response, AccessDeniedException accessDeniedException) throws IOException, ServletException { - handleAsOrcidError(request, response, accessDeniedException); - - } - - public void handleAsOrcidError(HttpServletRequest request, HttpServletResponse response, Exception authException) throws IOException, ServletException { - try { - ResponseEntity result = exceptionTranslator.translate(authException); - result = (ResponseEntity) enhanceResponse(result, authException); - OrcidError orcidError = new OrcidError(); - orcidError.setResponseCode(result.getStatusCode().value()); - orcidError.setDeveloperMessage(result.getBody().getLocalizedMessage()); - ResponseEntity errorResponseEntity = new ResponseEntity<>(orcidError, result.getHeaders(), result.getStatusCode()); - exceptionRenderer.handleHttpEntityResponse(errorResponseEntity, new ServletWebRequest(request, response)); - response.flushBuffer(); - } catch (ServletException e) { - // Re-use some of the default Spring dispatcher behaviour - the - // exception came from the filter chain and - // not from an MVC handler so it won't be caught by the dispatcher - // (even if there is one) - if (handlerExceptionResolver.resolveException(request, response, this, e) == null) { - throw e; - } - } catch (IOException e) { - throw e; - } catch (RuntimeException e) { - throw e; - } catch (Exception e) { - // Wrap other Exceptions. These are not expected to happen - throw new RuntimeException(e); - } - } - - @Override - public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException, ServletException { - handleAsOrcidError(request, response, authException); - } - -} \ No newline at end of file diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidAPIAccessDeniedHandler.java b/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidAPIAccessDeniedHandler.java new file mode 100644 index 00000000000..fd73e4d0157 --- /dev/null +++ b/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidAPIAccessDeniedHandler.java @@ -0,0 +1,34 @@ +package org.orcid.api.common.security.oauth; + +import org.orcid.jaxb.model.v3.release.error.OrcidError; +import org.springframework.http.HttpStatus; +import org.springframework.security.access.AccessDeniedException; +import org.springframework.security.web.access.AccessDeniedHandler; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +public class OrcidAPIAccessDeniedHandler implements AccessDeniedHandler { + @Override + public void handle(HttpServletRequest request, HttpServletResponse response, AccessDeniedException accessDeniedException) throws IOException, ServletException { + try { + //TODO: This is NOT ready, exceptions should be handled and the proper error message returned + OrcidError orcidError = new OrcidError(); + orcidError.setResponseCode(response.getStatus()); + orcidError.setDeveloperMessage("GENERIC ERROR MESSAGE"); + + response.setStatus(HttpStatus.FORBIDDEN.value()); + response.getWriter().write(orcidError.toString()); + response.flushBuffer(); + } catch (IOException e) { + throw e; + } catch (RuntimeException e) { + throw e; + } catch (Exception e) { + // Wrap other Exceptions. These are not expected to happen + throw new RuntimeException(e); + } + } +} diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidOauth2TokenEndPointFilter.java b/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidOauth2TokenEndPointFilter.java deleted file mode 100644 index 96be30f8bd8..00000000000 --- a/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidOauth2TokenEndPointFilter.java +++ /dev/null @@ -1,87 +0,0 @@ -package org.orcid.api.common.security.oauth; - -import java.io.IOException; - -import javax.annotation.Resource; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.orcid.core.locale.LocaleManager; -import org.orcid.core.security.MethodNotAllowedException; -import org.springframework.security.authentication.BadCredentialsException; -import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.AuthenticationException; -import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.oauth2.common.exceptions.InvalidRequestException; -import org.springframework.security.oauth2.provider.client.ClientCredentialsTokenEndpointFilter; -import org.springframework.web.bind.annotation.RequestMethod; - -/** - + - + - + This filter should be removed once the authorization server is inplace - + - + - + */ -@Deprecated(forRemoval = true) -public class OrcidOauth2TokenEndPointFilter extends ClientCredentialsTokenEndpointFilter { - - private final static String PUBLIC_ROLE = "ROLE_PUBLIC"; - - @Resource - private LocaleManager localeManager; - - private OrcidOauth2TokenEndPointFilter() { - super(); - } - - private OrcidOauth2TokenEndPointFilter(String path) { - super(path); - } - - @Override - public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException, IOException, ServletException { - if (request.getMethod().equals(RequestMethod.GET.name())) { - InvalidRequestException ire = new InvalidRequestException(localeManager.resolveMessage("apiError.token_request_callmethod.exception")); - throw new MethodNotAllowedException(localeManager.resolveMessage("apiError.token_request_callmethod.exception"), ire); - } - - String clientId = request.getParameter("client_id"); - String clientSecret = request.getParameter("client_secret"); - - // If the request is already authenticated we can assume that this - // filter is not needed - Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); - if (authentication != null && authentication.isAuthenticated()) { - return authentication; - } - - if (clientId == null) { - throw new BadCredentialsException(localeManager.resolveMessage("apiError.client_credentials.exception")); - } - - if (clientSecret == null) { - clientSecret = ""; - } - - clientId = clientId.trim(); - UsernamePasswordAuthenticationToken authRequest = new UsernamePasswordAuthenticationToken(clientId, "{noop}"+clientSecret); - - authentication = this.getAuthenticationManager().authenticate(authRequest); - - if (authentication != null) { - for (GrantedAuthority auth : authentication.getAuthorities()) { - if (PUBLIC_ROLE.equals(auth.getAuthority())) { - InvalidRequestException ire = new InvalidRequestException(localeManager.resolveMessage("apiError.memberapi_access.exception")); - throw new MethodNotAllowedException(localeManager.resolveMessage("apiError.memberapi_access.exception"), ire); - } - } - } - - return authentication; - } - -} diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidT1Oauth2TokenEndPointFilter.java b/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidT1Oauth2TokenEndPointFilter.java deleted file mode 100644 index 8af19c8a7de..00000000000 --- a/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidT1Oauth2TokenEndPointFilter.java +++ /dev/null @@ -1,71 +0,0 @@ -package org.orcid.api.common.security.oauth; - -import java.io.IOException; - -import javax.annotation.Resource; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.orcid.core.locale.LocaleManager; -import org.orcid.core.security.MethodNotAllowedException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.security.authentication.BadCredentialsException; -import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.AuthenticationException; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.oauth2.common.exceptions.InvalidRequestException; -import org.springframework.security.oauth2.provider.client.ClientCredentialsTokenEndpointFilter; -import org.springframework.web.bind.annotation.RequestMethod; - -/** - * @author Angel Montenegro (amontenegro) Date: 27/03/2014 - */ -public class OrcidT1Oauth2TokenEndPointFilter extends ClientCredentialsTokenEndpointFilter { - - @Resource - private LocaleManager localeManager; - - private static final Logger LOGGER = LoggerFactory.getLogger(OrcidT1Oauth2TokenEndPointFilter.class); - - @Override - public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException, IOException, ServletException { - if (request.getMethod().equals(RequestMethod.GET.name())) { - InvalidRequestException ire = new InvalidRequestException(localeManager.resolveMessage("apiError.token_request_callmethod.exception")); - throw new MethodNotAllowedException(localeManager.resolveMessage("apiError.token_request_callmethod.exception"), ire); - } - - String clientId = request.getParameter("client_id"); - String clientSecret = request.getParameter("client_secret"); - - LOGGER.info("About to attempt authentication: clientId={}", clientId); - - // If the request is already authenticated we can assume that this - // filter is not needed - Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); - if (authentication != null && authentication.isAuthenticated()) { - LOGGER.info("Already got authentication in security context holder: principal={}, name={}", authentication.getPrincipal(), authentication.getName()); - return authentication; - } - - if (clientId == null) { - throw new BadCredentialsException(localeManager.resolveMessage("apiError.client_credentials.exception")); - } - - if (clientSecret == null) { - clientSecret = ""; - } - - clientId = clientId.trim(); - UsernamePasswordAuthenticationToken authRequest = new UsernamePasswordAuthenticationToken(clientId, "{noop}"+clientSecret); - - Authentication authenticationResult = this.getAuthenticationManager().authenticate(authRequest); - if (authenticationResult != null) { - LOGGER.info("Got authentication result: principal={}, name={}", authenticationResult.getPrincipal(), authenticationResult.getName()); - } - return authenticationResult; - } - -} \ No newline at end of file diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidWebOauth2TokenEndPointFilter.java b/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidWebOauth2TokenEndPointFilter.java deleted file mode 100644 index feb2ec39ffd..00000000000 --- a/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidWebOauth2TokenEndPointFilter.java +++ /dev/null @@ -1,78 +0,0 @@ -package org.orcid.api.common.security.oauth; - -import java.io.IOException; - -import javax.annotation.Resource; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.orcid.core.locale.LocaleManager; -import org.orcid.core.security.MethodNotAllowedException; -import org.orcid.core.togglz.Features; -import org.springframework.security.authentication.AnonymousAuthenticationToken; -import org.springframework.security.authentication.BadCredentialsException; -import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.AuthenticationException; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.oauth2.common.exceptions.InvalidRequestException; -import org.springframework.security.oauth2.provider.client.ClientCredentialsTokenEndpointFilter; -import org.springframework.web.bind.annotation.RequestMethod; - -/** - * @author Shobhit Tyagi - */ -@Deprecated(forRemoval = true) -public class OrcidWebOauth2TokenEndPointFilter extends ClientCredentialsTokenEndpointFilter { - - @Resource - private LocaleManager localeManager; - - private OrcidWebOauth2TokenEndPointFilter() { - super(); - } - - private OrcidWebOauth2TokenEndPointFilter(String path) { - super(path); - } - - @Override - public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException, IOException, ServletException { - /** - * - * - * This filter should be removed once the authorization server is inplace - * - * - * */ - if (request.getMethod().equals(RequestMethod.GET.name())) { - InvalidRequestException ire = new InvalidRequestException(localeManager.resolveMessage("apiError.token_request_callmethod.exception")); - throw new MethodNotAllowedException(localeManager.resolveMessage("apiError.token_request_callmethod.exception"), ire); - } - - String clientId = request.getParameter("client_id"); - String clientSecret = request.getParameter("client_secret"); - - // If the request is already authenticated we can assume that this - // filter is not needed - Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); - if (authentication != null && authentication.isAuthenticated()) { - return authentication; - } - - if (clientId == null) { - throw new BadCredentialsException(localeManager.resolveMessage("apiError.client_credentials.exception")); - } - - if (clientSecret == null) { - clientSecret = ""; - } - - clientId = clientId.trim(); - UsernamePasswordAuthenticationToken authRequest = new UsernamePasswordAuthenticationToken(clientId, "{noop}"+clientSecret); - authentication = this.getAuthenticationManager().authenticate(authRequest); - return authentication; - } - -} diff --git a/orcid-api-common/src/main/resources/orcid-oauth2-api-common-config.xml b/orcid-api-common/src/main/resources/orcid-oauth2-api-common-config.xml index 75d7bacafd6..83f001f8a76 100644 --- a/orcid-api-common/src/main/resources/orcid-oauth2-api-common-config.xml +++ b/orcid-api-common/src/main/resources/orcid-oauth2-api-common-config.xml @@ -55,4 +55,6 @@ + + \ No newline at end of file diff --git a/orcid-api-web/src/main/resources/orcid-api-security-context.xml b/orcid-api-web/src/main/resources/orcid-api-security-context.xml index 501ce70e75c..118e07a14ff 100644 --- a/orcid-api-web/src/main/resources/orcid-api-security-context.xml +++ b/orcid-api-web/src/main/resources/orcid-api-security-context.xml @@ -2,10 +2,8 @@ + http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-5.6.xsd"> @@ -29,14 +27,11 @@ - + - - - - - + + @@ -85,22 +80,6 @@ - - - - - - - - - - - - - - - - @@ -108,32 +87,7 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - + diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/InstitutionalSignInManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/InstitutionalSignInManagerImpl.java index eedd84844d3..935ffeedbd7 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/InstitutionalSignInManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/InstitutionalSignInManagerImpl.java @@ -18,7 +18,7 @@ import org.orcid.core.manager.ClientDetailsEntityCacheManager; import org.orcid.core.manager.InstitutionalSignInManager; import org.orcid.core.manager.NotificationManager; -import org.orcid.core.oauth.OrcidOauth2TokenDetailService; +import org.orcid.core.manager.v3.read_only.ClientDetailsManagerReadOnly; import org.orcid.core.utils.JsonUtils; import org.orcid.persistence.dao.UserConnectionDao; import org.orcid.persistence.jpa.entities.ClientDetailsEntity; @@ -51,8 +51,8 @@ public class InstitutionalSignInManagerImpl implements InstitutionalSignInManage @Resource protected ClientDetailsEntityCacheManager clientDetailsEntityCacheManager; - @Resource - protected OrcidOauth2TokenDetailService orcidOauth2TokenDetailService; + @Resource(name = "clientDetailsManagerReadOnlyV3") + private ClientDetailsManagerReadOnly clientDetailsManagerReadOnly; @Resource protected NotificationManager notificationManager; @@ -90,7 +90,7 @@ public void createUserConnectionAndNotify(String idType, String remoteUserId, St public void sendNotification(String userOrcid, String providerId) throws UnsupportedEncodingException { try { ClientDetailsEntity clientDetails = clientDetailsEntityCacheManager.retrieveByIdP(providerId); - boolean clientKnowsUser = orcidOauth2TokenDetailService.doesClientKnowUser(clientDetails.getClientId(), userOrcid); + boolean clientKnowsUser = clientDetailsManagerReadOnly.doesClientKnowUser(clientDetails.getClientId(), userOrcid); // If the client doesn't know about the user yet, send a // notification if (!clientKnowsUser) { diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/FindMyStuffManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/FindMyStuffManagerImpl.java index b377a551d1b..7dabe885e65 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/FindMyStuffManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/FindMyStuffManagerImpl.java @@ -17,8 +17,8 @@ import org.orcid.core.manager.impl.OrcidUrlManager; import org.orcid.core.manager.v3.FindMyStuffManager; import org.orcid.core.manager.v3.NotificationManager; +import org.orcid.core.manager.v3.read_only.ClientDetailsManagerReadOnly; import org.orcid.core.manager.v3.read_only.WorkManagerReadOnly; -import org.orcid.core.oauth.OrcidOauth2TokenDetailService; import org.orcid.core.utils.v3.identifiers.finders.Finder; import org.orcid.jaxb.model.clientgroup.RedirectUriType; import org.orcid.jaxb.model.v3.release.notification.Notification; @@ -50,15 +50,15 @@ public class FindMyStuffManagerImpl implements FindMyStuffManager { @Resource private ClientDetailsEntityCacheManager clientDetailsEntityCacheManager; - @Resource - private OrcidOauth2TokenDetailService orcidOauth2TokenDetailService; - @Resource(name = "jpaJaxbNotificationAdapterV3") private JpaJaxbNotificationAdapter notificationAdapter; @Resource private FindMyStuffHistoryDao findMyStuffHistoryDao; + @Resource(name = "clientDetailsManagerReadOnlyV3") + private ClientDetailsManagerReadOnly clientDetailsManagerReadOnly; + @Resource List finders = new ArrayList(); @@ -111,7 +111,7 @@ public List findIfAppropriate(String orcid) { } // check for existing permissions for (Finder f : finders) { - if (f.isEnabled() && orcidOauth2TokenDetailService.doesClientKnowUser(f.getRelatedClientId(), orcid)) + if (f.isEnabled() && clientDetailsManagerReadOnly.doesClientKnowUser(f.getRelatedClientId(), orcid)) skipServices.add(f.getFinderName()); } diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/ProfileEntityManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/ProfileEntityManagerImpl.java index 1ed149a59c8..ef7abcf029d 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/ProfileEntityManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/ProfileEntityManagerImpl.java @@ -22,8 +22,8 @@ import org.orcid.core.manager.v3.*; import org.orcid.core.manager.v3.read_only.RecordNameManagerReadOnly; import org.orcid.core.manager.v3.read_only.impl.ProfileEntityManagerReadOnlyImpl; -import org.orcid.core.oauth.OrcidOauth2TokenDetailService; import org.orcid.core.profile.history.ProfileHistoryEventType; +import org.orcid.core.utils.cache.redis.RedisClient; import org.orcid.jaxb.model.clientgroup.MemberType; import org.orcid.jaxb.model.common.AvailableLocales; import org.orcid.jaxb.model.message.ScopePathType; @@ -66,9 +66,6 @@ public class ProfileEntityManagerImpl extends ProfileEntityManagerReadOnlyImpl i @Resource(name = "peerReviewManagerV3") private PeerReviewManager peerReviewManager; - @Resource - private ProfileEntityCacheManager profileEntityCacheManager; - @Resource(name = "workManagerV3") private WorkManager workManager; @@ -105,15 +102,9 @@ public class ProfileEntityManagerImpl extends ProfileEntityManagerReadOnlyImpl i @Resource(name = "notificationManagerV3") private NotificationManager notificationManager; - @Resource - private OrcidOauth2TokenDetailService orcidOauth2TokenService; - @Resource private ClientDetailsEntityCacheManager clientDetailsEntityCacheManager; - @Resource - private OrcidUrlManager orcidUrlManager; - @Resource private LocaleManager localeManager; @@ -126,9 +117,6 @@ public class ProfileEntityManagerImpl extends ProfileEntityManagerReadOnlyImpl i @Resource private TransactionTemplate transactionTemplate; - @Resource - private OrcidOauth2TokenDetailService orcidOauth2TokenDetailService; - @Resource(name = "profileHistoryEventManagerV3") private ProfileHistoryEventManager profileHistoryEventManager; @@ -147,6 +135,15 @@ public class ProfileEntityManagerImpl extends ProfileEntityManagerReadOnlyImpl i @Resource private ProfileEmailDomainManager profileEmailDomainManager; + @Resource(name="orcidOauth2TokenDetailDaoReadOnly") + private OrcidOauth2TokenDetailDao orcidOauth2TokenDetailDaoReadOnly; + + @Resource(name="orcidOauth2TokenDetailDao") + private OrcidOauth2TokenDetailDao orcidOauth2TokenDetailDao; + + @Resource + private RedisClient redisClient; + @Override public boolean orcidExists(String orcid) { return profileDao.orcidExists(orcid); @@ -292,13 +289,21 @@ public boolean unreviewProfile(String orcid) { @Override public void disableClientAccess(String clientDetailsId, String userOrcid) { - orcidOauth2TokenService.disableClientAccess(clientDetailsId, userOrcid); + List userTokens = orcidOauth2TokenDetailDaoReadOnly.findByUserName(userOrcid); + if(userTokens != null && !userTokens.isEmpty()) { + for(OrcidOauth2TokenDetail token : userTokens) { + if(clientDetailsId.equals(token.getClientDetailsId())) { + redisClient.remove(token.getTokenValue()); + } + } + } + // And then disable all user tokens + orcidOauth2TokenDetailDao.disableClientAccessTokensByUserOrcid(userOrcid, clientDetailsId); } @Override public List getApplications(String orcid) { - // TODO: Use the authorization server to build this list of tokens - List tokenDetails = orcidOauth2TokenService.findByUserName(orcid); + List tokenDetails = orcidOauth2TokenDetailDaoReadOnly.findByUserName(orcid); Map distinctApplications = new HashMap<>(); for (OrcidOauth2TokenDetail token : tokenDetails) { if ((token.getTokenDisabled() == null || !token.getTokenDisabled()) && token.getOboClientDetailsId() == null) { @@ -649,7 +654,7 @@ private void clearRecord(String orcid, Boolean disableTokens) { if (disableTokens) { // Disable any token that belongs to this record - orcidOauth2TokenDetailService.disableAccessTokenByUserOrcid(orcid, RevokeReason.RECORD_DEACTIVATED); + orcidOauth2TokenDetailDao.disableAccessTokenByUserOrcid(orcid, RevokeReason.RECORD_DEACTIVATED.name()); } // Change default visibility to private From f0d354da0619f85ff9e0be8ed49983be4a31a294 Mon Sep 17 00:00:00 2001 From: amontenegro Date: Thu, 26 Mar 2026 17:00:10 -0600 Subject: [PATCH 10/77] More code refactoring and removing old dependencies --- orcid-api-common/pom.xml | 64 +- .../api/common/OrcidApiCommonEndpoints.java | 134 +- .../filter/OboApiVersionCheckFilter.java | 54 +- .../api/common/filter/TokenTargetFilter.java | 59 +- .../oauth/APIAuthenticationEntryPoint.java | 16 + .../orcid/api/common/writer/rdf/Geonames.java | 1529 +++++++++++++++++ .../org/orcid/api/common/writer/rdf/PAV.java | 273 +++ .../org/orcid/api/common/writer/rdf/PROV.java | 503 ++++++ .../orcid-oauth2-api-common-config.xml | 1 + .../NotificationsApiServiceDelegatorImpl.java | 9 +- .../NotificationsApiServiceDelegatorImpl.java | 9 +- .../resources/orcid-api-security-context.xml | 37 +- .../main/resources/orcid-api-web-context.xml | 1 - .../v3/impl/ProfileEntityManagerImpl.java | 1 + .../ProfileEntityManagerReadOnly.java | 2 + .../ProfileEntityManagerReadOnlyImpl.java | 15 +- .../oauth/OrcidBearerTokenAuthentication.java | 4 - ...rcidMultiSecretAuthenticationProvider.java | 51 + .../openid/OpenIDConnectDiscoveryService.java | 125 ++ .../oauth/openid/OpenIDConnectKeyService.java | 128 ++ .../oauth/openid/OpenIDConnectUserInfo.java | 67 + .../InstitutionalSignInManagerTest.java | 15 - .../core/manager/NotificationManagerTest.java | 9 - .../impl/ProfileEntityManagerImplTest.java | 4 - .../impl/RegistrationManagerImplTest.java | 27 +- .../manager/v3/FindMyStuffManagerTest.java | 12 - .../manager/v3/NotificationManagerTest.java | 6 - .../v3/impl/ProfileEntityManagerImplTest.java | 4 - .../orcid/core/oauth/OAuthErrorUtilsTest.java | 5 +- .../OrcidClientCredentialsCheckerTest.java | 115 -- .../OrcidRefreshTokenTokenGranterTest.java | 441 ----- .../OrcidOauthRedirectResolverTest.java | 245 --- .../OrcidAuthorizationCodeServiceTest.java | 127 -- .../OrcidOauth2TokenDetailServiceTest.java | 353 ---- .../service/OrcidTokenStoreServiceTest.java | 279 --- ...cidApiAuthorizationSecurityAspectTest.java | 129 -- .../core/utils/SecurityContextTestUtils.java | 89 + ...ClientCredentialEndPointDelegatorImpl.java | 78 - .../orcid-internal-api-security-context.xml | 18 +- .../orcid/api/filters/ApiRateLimitFilter.java | 17 +- .../util/AuthorizationRequestLocalCache.java | 59 - ...riginalAuthorizationRequestLocalCache.java | 59 - .../util/RequestInfoFormLocalCache.java | 58 - .../controllers/BaseWorkspaceController.java | 4 - .../controllers/FindMyStuffController.java | 4 - .../web/controllers/LoginController.java | 294 +--- .../controllers/OauthAuthorizeController.java | 337 ---- .../web/controllers/OauthControllerBase.java | 168 -- .../OauthGenericCallsController.java | 174 +- .../web/controllers/OauthLoginController.java | 216 --- .../OauthRegistrationController.java | 224 --- .../web/controllers/OpenIDController.java | 47 +- .../controllers/PublicProfileController.java | 8 +- .../controllers/RegistrationController.java | 20 - .../web/controllers/helper/OauthHelper.java | 263 --- .../OauthInvalidRequestException.java | 17 - .../OAuthAuthorizeNotSignedInFilter.java | 87 - .../web/util/ThirdPartyLinkManager.java | 10 +- .../resources/orcid-frontend-security.xml | 46 +- .../PublicProfileControllerTest.java | 23 +- .../OAuthAuthorizeNotSignedInFilterTest.java | 185 -- 61 files changed, 2998 insertions(+), 4360 deletions(-) create mode 100644 orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/APIAuthenticationEntryPoint.java create mode 100644 orcid-api-common/src/main/java/org/orcid/api/common/writer/rdf/Geonames.java create mode 100644 orcid-api-common/src/main/java/org/orcid/api/common/writer/rdf/PAV.java create mode 100644 orcid-api-common/src/main/java/org/orcid/api/common/writer/rdf/PROV.java create mode 100644 orcid-core/src/main/java/org/orcid/core/oauth/OrcidMultiSecretAuthenticationProvider.java create mode 100644 orcid-core/src/main/java/org/orcid/core/oauth/openid/OpenIDConnectDiscoveryService.java create mode 100644 orcid-core/src/main/java/org/orcid/core/oauth/openid/OpenIDConnectKeyService.java create mode 100644 orcid-core/src/main/java/org/orcid/core/oauth/openid/OpenIDConnectUserInfo.java delete mode 100644 orcid-core/src/test/java/org/orcid/core/oauth/OrcidClientCredentialsCheckerTest.java delete mode 100644 orcid-core/src/test/java/org/orcid/core/oauth/OrcidRefreshTokenTokenGranterTest.java delete mode 100644 orcid-core/src/test/java/org/orcid/core/oauth/security/OrcidOauthRedirectResolverTest.java delete mode 100644 orcid-core/src/test/java/org/orcid/core/oauth/service/OrcidAuthorizationCodeServiceTest.java delete mode 100644 orcid-core/src/test/java/org/orcid/core/oauth/service/OrcidOauth2TokenDetailServiceTest.java delete mode 100644 orcid-core/src/test/java/org/orcid/core/oauth/service/OrcidTokenStoreServiceTest.java delete mode 100644 orcid-core/src/test/java/org/orcid/core/security/visibility/aop/OrcidApiAuthorizationSecurityAspectTest.java create mode 100644 orcid-core/src/test/java/org/orcid/core/utils/SecurityContextTestUtils.java delete mode 100644 orcid-internal-api/src/main/java/org/orcid/internal/server/delegator/impl/InternalClientCredentialEndPointDelegatorImpl.java delete mode 100644 orcid-web/src/main/java/org/orcid/frontend/util/AuthorizationRequestLocalCache.java delete mode 100644 orcid-web/src/main/java/org/orcid/frontend/util/OriginalAuthorizationRequestLocalCache.java delete mode 100644 orcid-web/src/main/java/org/orcid/frontend/util/RequestInfoFormLocalCache.java delete mode 100644 orcid-web/src/main/java/org/orcid/frontend/web/controllers/OauthAuthorizeController.java delete mode 100644 orcid-web/src/main/java/org/orcid/frontend/web/controllers/OauthControllerBase.java delete mode 100644 orcid-web/src/main/java/org/orcid/frontend/web/controllers/OauthLoginController.java delete mode 100644 orcid-web/src/main/java/org/orcid/frontend/web/controllers/OauthRegistrationController.java delete mode 100644 orcid-web/src/main/java/org/orcid/frontend/web/controllers/helper/OauthHelper.java delete mode 100644 orcid-web/src/main/java/org/orcid/frontend/web/exception/OauthInvalidRequestException.java delete mode 100644 orcid-web/src/main/java/org/orcid/frontend/web/filter/OAuthAuthorizeNotSignedInFilter.java delete mode 100644 orcid-web/src/test/java/org/orcid/frontend/web/filter/OAuthAuthorizeNotSignedInFilterTest.java diff --git a/orcid-api-common/pom.xml b/orcid-api-common/pom.xml index 5c1aee9582c..01c4a1504be 100644 --- a/orcid-api-common/pom.xml +++ b/orcid-api-common/pom.xml @@ -161,69 +161,7 @@ 11 - - - - org.codehaus.mojo - exec-maven-plugin - 3.1.0 - - - geonames - generate-sources - - java - - - jena.schemagen - - --inference \ - -i ${project.basedir}/src/main/vocabs/geonames_v3.1.rdf \ - -e RDF \ - --package org.orcid.api.common.writer.rdf.vocabs \ - -o ${jena.dir} \ - -n Geonames - - - - - pav - generate-sources - - java - - - jena.schemagen - - --inference \ - -i ${project.basedir}/src/main/vocabs/pav.rdf \ - -e RDF \ - --package org.orcid.api.common.writer.rdf.vocabs \ - -o ${jena.dir} \ - -n PAV - - - - - prov-o - generate-sources - - java - - - jena.schemagen - - --inference \ - -i ${project.basedir}/src/main/vocabs/prov-o.rdf \ - -e RDF \ - --package org.orcid.api.common.writer.rdf.vocabs \ - -o ${jena.dir} \ - -n PROV - - - - - + org.codehaus.mojo build-helper-maven-plugin diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/OrcidApiCommonEndpoints.java b/orcid-api-common/src/main/java/org/orcid/api/common/OrcidApiCommonEndpoints.java index f6285a38fdd..f2b59e60c7b 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/OrcidApiCommonEndpoints.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/OrcidApiCommonEndpoints.java @@ -13,19 +13,13 @@ import javax.ws.rs.Produces; import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedHashMap; -import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.core.Response; import javax.ws.rs.core.UriInfo; - import org.apache.commons.lang.StringUtils; import org.orcid.core.oauth.authorizationServer.AuthorizationServerUtil; -import org.orcid.api.common.oauth.OrcidClientCredentialEndPointDelegator; import org.orcid.core.constants.OrcidOauth2Constants; import org.orcid.core.togglz.Features; -import org.springframework.security.oauth2.common.exceptions.UnsupportedGrantTypeException; import org.springframework.stereotype.Component; - import java.io.IOException; import java.net.URISyntaxException; @@ -35,9 +29,6 @@ public class OrcidApiCommonEndpoints { @Context private UriInfo uriInfo; - @Resource - private OrcidClientCredentialEndPointDelegator orcidClientCredentialEndPointDelegator; - @Resource private AuthorizationServerUtil authorizationServerUtil; @@ -55,98 +46,49 @@ public Response obtainOauth2TokenPost(@HeaderParam("Authorization") @DefaultValu // Token delegation is not implemented in the authorization server if(grantType == null) { - throw new UnsupportedGrantTypeException("grant_type is missing"); + throw new IllegalArgumentException("grant_type is missing"); } - if(Features.OAUTH_AUTHORIZATION_CODE_EXCHANGE.isActive()) { - Response response = null; - if(StringUtils.isNotBlank(authorization)) { - switch (grantType) { - case OrcidOauth2Constants.GRANT_TYPE_AUTHORIZATION_CODE: - response = authorizationServerUtil.forwardAuthorizationCodeExchangeRequest(authorization, redirectUri, code); - break; - case OrcidOauth2Constants.GRANT_TYPE_REFRESH_TOKEN: - response = authorizationServerUtil.forwardRefreshTokenRequest(authorization, refreshToken, scopeList); - break; - case OrcidOauth2Constants.GRANT_TYPE_CLIENT_CREDENTIALS: - response = authorizationServerUtil.forwardClientCredentialsRequest(authorization, scopeList); - break; - case IETF_EXCHANGE_GRANT_TYPE: - response = authorizationServerUtil.forwardTokenExchangeRequest(authorization, subjectToken, subjectTokenType, requestedTokenType, scopeList); - break; - default: - response = authorizationServerUtil.forwardOtherTokenExchangeRequest(authorization, grantType, code, scopeList); - break; - } - } else { - switch (grantType) { - case OrcidOauth2Constants.GRANT_TYPE_AUTHORIZATION_CODE: - response = authorizationServerUtil.forwardAuthorizationCodeExchangeRequest(clientId, clientSecret, redirectUri, code); - break; - case OrcidOauth2Constants.GRANT_TYPE_REFRESH_TOKEN: - response = authorizationServerUtil.forwardRefreshTokenRequest(clientId, clientSecret, refreshToken, scopeList); - break; - case OrcidOauth2Constants.GRANT_TYPE_CLIENT_CREDENTIALS: - response = authorizationServerUtil.forwardClientCredentialsRequest(clientId, clientSecret, scopeList); - break; - case IETF_EXCHANGE_GRANT_TYPE: - response = authorizationServerUtil.forwardTokenExchangeRequest(clientId, clientSecret, subjectToken, subjectTokenType, requestedTokenType, scopeList); - break; - default: - response = authorizationServerUtil.forwardOtherTokenExchangeRequest(clientId, clientSecret, grantType, code, scopeList); - break; - } + Response response = null; + if(StringUtils.isNotBlank(authorization)) { + switch (grantType) { + case OrcidOauth2Constants.GRANT_TYPE_AUTHORIZATION_CODE: + response = authorizationServerUtil.forwardAuthorizationCodeExchangeRequest(authorization, redirectUri, code); + break; + case OrcidOauth2Constants.GRANT_TYPE_REFRESH_TOKEN: + response = authorizationServerUtil.forwardRefreshTokenRequest(authorization, refreshToken, scopeList); + break; + case OrcidOauth2Constants.GRANT_TYPE_CLIENT_CREDENTIALS: + response = authorizationServerUtil.forwardClientCredentialsRequest(authorization, scopeList); + break; + case IETF_EXCHANGE_GRANT_TYPE: + response = authorizationServerUtil.forwardTokenExchangeRequest(authorization, subjectToken, subjectTokenType, requestedTokenType, scopeList); + break; + default: + response = authorizationServerUtil.forwardOtherTokenExchangeRequest(authorization, grantType, code, scopeList); + break; } - Object entity = response.getEntity(); - int statusCode = response.getStatus(); - return Response.status(statusCode).entity(entity).header(Features.OAUTH_AUTHORIZATION_CODE_EXCHANGE.name(),"ON").build(); } else { - MultivaluedMap formParams = new MultivaluedHashMap(); - if (clientId != null) { - formParams.add(OrcidOauth2Constants.CLIENT_ID_PARAM, clientId); - } - if (scopeList != null) { - formParams.add(OrcidOauth2Constants.SCOPE_PARAM, scopeList); - } - if (grantType != null) { - formParams.add(OrcidOauth2Constants.GRANT_TYPE, grantType); - } - - if (code != null) { - formParams.add("code", code); - } - - if (state != null) { - formParams.add(OrcidOauth2Constants.STATE_PARAM, state); - } - - if (redirectUri != null) { - formParams.add(OrcidOauth2Constants.REDIRECT_URI_PARAM, redirectUri); - } - - if (redirectUri != null) { - formParams.add(OrcidOauth2Constants.REDIRECT_URI_PARAM, redirectUri); + switch (grantType) { + case OrcidOauth2Constants.GRANT_TYPE_AUTHORIZATION_CODE: + response = authorizationServerUtil.forwardAuthorizationCodeExchangeRequest(clientId, clientSecret, redirectUri, code); + break; + case OrcidOauth2Constants.GRANT_TYPE_REFRESH_TOKEN: + response = authorizationServerUtil.forwardRefreshTokenRequest(clientId, clientSecret, refreshToken, scopeList); + break; + case OrcidOauth2Constants.GRANT_TYPE_CLIENT_CREDENTIALS: + response = authorizationServerUtil.forwardClientCredentialsRequest(clientId, clientSecret, scopeList); + break; + case IETF_EXCHANGE_GRANT_TYPE: + response = authorizationServerUtil.forwardTokenExchangeRequest(clientId, clientSecret, subjectToken, subjectTokenType, requestedTokenType, scopeList); + break; + default: + response = authorizationServerUtil.forwardOtherTokenExchangeRequest(clientId, clientSecret, grantType, code, scopeList); + break; } - - if (refreshToken != null) { - formParams.add(OrcidOauth2Constants.REFRESH_TOKEN, refreshToken); - } - - if (revokeOld != null) { - formParams.add(OrcidOauth2Constants.REVOKE_OLD, revokeOld); - } - // IETF Token exchange - if (subjectToken != null) { - formParams.add(OrcidOauth2Constants.IETF_EXCHANGE_SUBJECT_TOKEN, subjectToken); - } - if (subjectTokenType != null) { - formParams.add(OrcidOauth2Constants.IETF_EXCHANGE_SUBJECT_TOKEN_TYPE, subjectTokenType); - } - if (requestedTokenType != null) { - formParams.add(OrcidOauth2Constants.IETF_EXCHANGE_REQUESTED_TOKEN_TYPE, requestedTokenType); - } - - return orcidClientCredentialEndPointDelegator.obtainOauth2Token(authorization, formParams); } + Object entity = response.getEntity(); + int statusCode = response.getStatus(); + return Response.status(statusCode).entity(entity).header(Features.OAUTH_AUTHORIZATION_CODE_EXCHANGE.name(),"ON").build(); } } diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/filter/OboApiVersionCheckFilter.java b/orcid-api-common/src/main/java/org/orcid/api/common/filter/OboApiVersionCheckFilter.java index faabc261264..51154f91cf6 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/filter/OboApiVersionCheckFilter.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/filter/OboApiVersionCheckFilter.java @@ -1,7 +1,5 @@ package org.orcid.api.common.filter; -import java.util.HashMap; -import java.util.Map; import java.util.regex.Matcher; import javax.ws.rs.container.ContainerRequestContext; @@ -9,31 +7,20 @@ import javax.ws.rs.ext.Provider; import org.apache.commons.lang3.StringUtils; -import org.orcid.core.constants.OrcidOauth2Constants; import org.orcid.core.exception.OboNotValidForApiVersionException; -import org.orcid.core.oauth.OrcidOauth2TokenDetailService; -import org.orcid.core.oauth.OrcidOboOAuth2Authentication; -import org.orcid.core.togglz.Features; -import org.orcid.core.utils.JsonUtils; +import org.orcid.core.oauth.OrcidBearerTokenAuthentication; import org.orcid.core.utils.cache.redis.RedisClient; -import org.orcid.persistence.jpa.entities.OrcidOauth2TokenDetail; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContext; import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.oauth2.provider.OAuth2Authentication; -import org.springframework.security.oauth2.provider.authentication.OAuth2AuthenticationDetails; import org.springframework.stereotype.Component; - @Component @Provider public class OboApiVersionCheckFilter implements ContainerRequestFilter { - @Autowired - private OrcidOauth2TokenDetailService orcidOauth2TokenService; - @Autowired private RedisClient redisClient; @@ -45,7 +32,7 @@ public void filter(ContainerRequestContext request) { String version = getApiVersion(request); boolean oboRequest = isOboRequest(); - if ((oboRequest && version.startsWith("2.")) || (oboRequest && version.startsWith("3.0_rc1"))) { + if (oboRequest && (version.startsWith("2.") || version.startsWith("3.0_rc1"))) { // OBO tokens can't be used pre v3.0_rc2 throw new OboNotValidForApiVersionException(); } @@ -57,29 +44,10 @@ private boolean isOboRequest() { SecurityContext context = SecurityContextHolder.getContext(); if (context != null && context.getAuthentication() != null) { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); - // If the auth server token validation is on, then, the authentication type for OBO requests will be OrcidOboOAuth2Authentication - if(Features.OAUTH_TOKEN_VALIDATION.isActive()) { - if(OrcidOboOAuth2Authentication.class.isAssignableFrom(authentication.getClass())) { - OrcidOboOAuth2Authentication authDetails = (OrcidOboOAuth2Authentication) authentication; - if (StringUtils.isNotBlank(authDetails.getOboClientId())) { - return true; - } - } - } else if (OAuth2Authentication.class.isAssignableFrom(authentication.getClass())) { - OAuth2AuthenticationDetails authDetails = (OAuth2AuthenticationDetails) ((OAuth2Authentication) authentication).getDetails(); - if (authDetails != null && authDetails.getTokenValue() != null) { - Map cachedAccessToken = getTokenFromCache(authDetails.getTokenValue()); - if(cachedAccessToken != null) { - if(cachedAccessToken.containsKey(OrcidOauth2Constants.IS_OBO_TOKEN)) { - return true; - } - } else { - // Fallback to database if it is not in the cache - OrcidOauth2TokenDetail tokenDetail = orcidOauth2TokenService.findIgnoringDisabledByTokenValue(authDetails.getTokenValue()); - if(tokenDetail != null) { - return tokenDetail.getOboClientDetailsId() != null; - } - } + if(OrcidBearerTokenAuthentication.class.isAssignableFrom(authentication.getClass())) { + OrcidBearerTokenAuthentication authDetails = (OrcidBearerTokenAuthentication) authentication; + if (StringUtils.isNotBlank(authDetails.getOboClientId())) { + return true; } } } @@ -95,14 +63,4 @@ private String getApiVersion(ContainerRequestContext request) { return null; } - private Map getTokenFromCache(String accessTokenValue) { - if(isTokenCacheEnabled) { - String tokenJsonInfo = redisClient.get(accessTokenValue); - if(StringUtils.isNotBlank(tokenJsonInfo)) { - return JsonUtils.readObjectFromJsonString(tokenJsonInfo, HashMap.class); - } - } - return null; - } - } diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/filter/TokenTargetFilter.java b/orcid-api-common/src/main/java/org/orcid/api/common/filter/TokenTargetFilter.java index dd367992c82..4954b775468 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/filter/TokenTargetFilter.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/filter/TokenTargetFilter.java @@ -3,30 +3,23 @@ import java.security.AccessControlException; import java.util.regex.Matcher; -import javax.annotation.Resource; import javax.ws.rs.container.ContainerRequestContext; import javax.ws.rs.container.ContainerRequestFilter; import javax.ws.rs.ext.Provider; import org.orcid.core.exception.OrcidUnauthorizedException; -import org.orcid.core.oauth.OrcidOauth2TokenDetailService; -import org.orcid.persistence.jpa.entities.ProfileEntity; +import org.orcid.core.oauth.OrcidBearerTokenAuthentication; import org.orcid.utils.OrcidStringUtils; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContext; import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.oauth2.provider.OAuth2Authentication; import org.springframework.web.context.request.RequestAttributes; import org.springframework.web.context.request.RequestContextHolder; -import org.glassfish.jersey.server.ContainerRequest; - +@Deprecated @Provider public class TokenTargetFilter implements ContainerRequestFilter { - @Resource - private OrcidOauth2TokenDetailService orcidOauth2TokenService; - @Override public void filter(ContainerRequestContext request) { Matcher m = OrcidStringUtils.orcidPattern.matcher(request.getUriInfo().getPath()); @@ -38,19 +31,47 @@ public void filter(ContainerRequestContext request) { private void validateTargetRecord(String targetOrcid, ContainerRequestContext request) { // Verify if it is the owner of the token + + //TODO: CAN WE DELETE THIS FILTER???? + + System.out.println("------------------------------------------------------------"); + System.out.println("------------------------------------------------------------"); + System.out.println("------------------------------------------------------------"); + System.out.println("------------------------------------------------------------"); + System.out.println("------------------------------------------------------------"); + System.out.println("------------------------------------------------------------"); + System.out.println("------------------------------------------------------------"); + System.out.println("------------------------------------------------------------"); + System.out.println("------------------------------------------------------------"); + System.out.println("------------------------------------------------------------"); + System.out.println("------------------------------------------------------------"); + System.out.println("------------------------------------------------------------"); + System.out.println("------------------------------------------------------------"); + + System.out.println("TokenTargetFilter"); + + System.out.println("------------------------------------------------------------"); + System.out.println("------------------------------------------------------------"); + System.out.println("------------------------------------------------------------"); + System.out.println("------------------------------------------------------------"); + System.out.println("------------------------------------------------------------"); + System.out.println("------------------------------------------------------------"); + System.out.println("------------------------------------------------------------"); + System.out.println("------------------------------------------------------------"); + System.out.println("------------------------------------------------------------"); + System.out.println("------------------------------------------------------------"); + System.out.println("------------------------------------------------------------"); + System.out.println("------------------------------------------------------------"); + System.out.println("------------------------------------------------------------"); + SecurityContext context = SecurityContextHolder.getContext(); if (context != null && context.getAuthentication() != null) { Authentication authentication = context.getAuthentication(); - if (OAuth2Authentication.class.isAssignableFrom(authentication.getClass())) { - OAuth2Authentication oauth2Auth = (OAuth2Authentication) authentication; - Authentication userAuthentication = oauth2Auth.getUserAuthentication(); - if (userAuthentication != null) { - Object principal = userAuthentication.getPrincipal(); - if (principal instanceof ProfileEntity) { - ProfileEntity tokenOwner = (ProfileEntity) principal; - if (!targetOrcid.equals(tokenOwner.getId())) { - throwException(); - } + if (OrcidBearerTokenAuthentication.class.isAssignableFrom(authentication.getClass())) { + OrcidBearerTokenAuthentication authDetails = (OrcidBearerTokenAuthentication) authentication; + if (authDetails != null) { + if (!targetOrcid.equals(authDetails.getUserOrcid())) { + throwException(); } } } diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/APIAuthenticationEntryPoint.java b/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/APIAuthenticationEntryPoint.java new file mode 100644 index 00000000000..49516adba88 --- /dev/null +++ b/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/APIAuthenticationEntryPoint.java @@ -0,0 +1,16 @@ +package org.orcid.api.common.security.oauth; + +import org.springframework.security.core.AuthenticationException; +import org.springframework.security.web.AuthenticationEntryPoint; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +public class APIAuthenticationEntryPoint implements AuthenticationEntryPoint { + @Override + public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException, ServletException { + + } +} diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/writer/rdf/Geonames.java b/orcid-api-common/src/main/java/org/orcid/api/common/writer/rdf/Geonames.java new file mode 100644 index 00000000000..02206d456e3 --- /dev/null +++ b/orcid-api-common/src/main/java/org/orcid/api/common/writer/rdf/Geonames.java @@ -0,0 +1,1529 @@ +/* CVS $Id: $ */ +package org.orcid.api.common.writer.rdf.vocabs; +import org.apache.jena.rdf.model.*; + +/** + * Vocabulary definitions from C:\Users\angel\Documents\ORCID\development\tmp\deleteme\ORCID-Source\orcid-api-common/src/main/vocabs/geonames_v3.1.rdf + * @author Auto-generated by schemagen on 26 Mar 2026 15:47 + */ +public class Geonames { + /**

The RDF model that holds the vocabulary terms

*/ + private static final Model M_MODEL = ModelFactory.createDefaultModel(); + + /**

The namespace of the vocabulary as a string

*/ + public static final String NS = "http://www.geonames.org/ontology#"; + + /**

The namespace of the vocabulary as a string

+ * @return namespace as String + * @see #NS */ + public static String getURI() {return NS;} + + /**

The namespace of the vocabulary as a resource

*/ + public static final Resource NAMESPACE = M_MODEL.createResource( NS ); + + /**

The ontology's owl:versionInfo as a string

*/ + public static final String VERSION_INFO = "Version 3.1 - 2012-10-29"; + + public static final Property alternateName = M_MODEL.createProperty( "http://www.geonames.org/ontology#alternateName" ); + + /**

Links to an RDF document containing the descriptions of children features

*/ + public static final Property childrenFeatures = M_MODEL.createProperty( "http://www.geonames.org/ontology#childrenFeatures" ); + + public static final Property colloquialName = M_MODEL.createProperty( "http://www.geonames.org/ontology#colloquialName" ); + + /**

A two letters country code in the ISO 3166 listThe countryCode value for a + * Geoname Feature is equal to the countryCode value of the parentCountry value.

+ */ + public static final Property countryCode = M_MODEL.createProperty( "http://www.geonames.org/ontology#countryCode" ); + + /**

The main category of the feature, as defined in geonames taxonomy.

*/ + public static final Property featureClass = M_MODEL.createProperty( "http://www.geonames.org/ontology#featureClass" ); + + /**

Type of the feature, as defined in geonames taxonomy.

*/ + public static final Property featureCode = M_MODEL.createProperty( "http://www.geonames.org/ontology#featureCode" ); + + public static final Property geonamesID = M_MODEL.createProperty( "http://www.geonames.org/ontology#geonamesID" ); + + public static final Property historicalName = M_MODEL.createProperty( "http://www.geonames.org/ontology#historicalName" ); + + /**

Indicates that the subject resource is located in the object feature

*/ + public static final Property locatedIn = M_MODEL.createProperty( "http://www.geonames.org/ontology#locatedIn" ); + + /**

A geonames map centered on the feature.

*/ + public static final Property locationMap = M_MODEL.createProperty( "http://www.geonames.org/ontology#locationMap" ); + + /**

The main international name of a feature. The value has no xml:lang tag.

*/ + public static final Property name = M_MODEL.createProperty( "http://www.geonames.org/ontology#name" ); + + /**

A feature close to the reference feature

*/ + public static final Property nearby = M_MODEL.createProperty( "http://www.geonames.org/ontology#nearby" ); + + /**

Links to an RDF document containing the descriptions of nearby features

*/ + public static final Property nearbyFeatures = M_MODEL.createProperty( "http://www.geonames.org/ontology#nearbyFeatures" ); + + /**

A feature sharing a common boarder with the reference feature

*/ + public static final Property neighbour = M_MODEL.createProperty( "http://www.geonames.org/ontology#neighbour" ); + + /**

Links to an RDF document containing the descriptions of neighbouring features. + * Applies when the feature has definite boarders.

+ */ + public static final Property neighbouringFeatures = M_MODEL.createProperty( "http://www.geonames.org/ontology#neighbouringFeatures" ); + + /**

A name in an official local language

*/ + public static final Property officialName = M_MODEL.createProperty( "http://www.geonames.org/ontology#officialName" ); + + public static final Property parentADM1 = M_MODEL.createProperty( "http://www.geonames.org/ontology#parentADM1" ); + + public static final Property parentADM2 = M_MODEL.createProperty( "http://www.geonames.org/ontology#parentADM2" ); + + public static final Property parentADM3 = M_MODEL.createProperty( "http://www.geonames.org/ontology#parentADM3" ); + + public static final Property parentADM4 = M_MODEL.createProperty( "http://www.geonames.org/ontology#parentADM4" ); + + public static final Property parentCountry = M_MODEL.createProperty( "http://www.geonames.org/ontology#parentCountry" ); + + /**

A feature parent of the current one, in either administrative or physical + * subdivision.

+ */ + public static final Property parentFeature = M_MODEL.createProperty( "http://www.geonames.org/ontology#parentFeature" ); + + public static final Property population = M_MODEL.createProperty( "http://www.geonames.org/ontology#population" ); + + public static final Property postalCode = M_MODEL.createProperty( "http://www.geonames.org/ontology#postalCode" ); + + public static final Property shortName = M_MODEL.createProperty( "http://www.geonames.org/ontology#shortName" ); + + /**

A Wikipedia article of which subject is the resource.

*/ + public static final Property wikipediaArticle = M_MODEL.createProperty( "http://www.geonames.org/ontology#wikipediaArticle" ); + + /**

A class of features.

*/ + public static final Resource Class = M_MODEL.createResource( "http://www.geonames.org/ontology#Class" ); + + /**

A feature code.

*/ + public static final Resource Code = M_MODEL.createResource( "http://www.geonames.org/ontology#Code" ); + + /**

A geographical feature

*/ + public static final Resource Feature = M_MODEL.createResource( "http://www.geonames.org/ontology#Feature" ); + + /**

A feature described in geonames database, uniquely defined by its geonames + * identifier

+ */ + public static final Resource GeonamesFeature = M_MODEL.createResource( "http://www.geonames.org/ontology#GeonamesFeature" ); + + /**

A Web page displaying a map

*/ + public static final Resource Map = M_MODEL.createResource( "http://www.geonames.org/ontology#Map" ); + + /**

A Document containing RDF description of one or several features.

*/ + public static final Resource RDFData = M_MODEL.createResource( "http://www.geonames.org/ontology#RDFData" ); + + /**

A Wikipedia article

*/ + public static final Resource WikipediaArticle = M_MODEL.createResource( "http://www.geonames.org/ontology#WikipediaArticle" ); + + /**

country, state, region ...

*/ + public static final Resource A = M_MODEL.createResource( "http://www.geonames.org/ontology#A" ); + + public static final Resource A_ADM1 = M_MODEL.createResource( "http://www.geonames.org/ontology#A.ADM1" ); + + public static final Resource A_ADM1H = M_MODEL.createResource( "http://www.geonames.org/ontology#A.ADM1H" ); + + public static final Resource A_ADM2 = M_MODEL.createResource( "http://www.geonames.org/ontology#A.ADM2" ); + + public static final Resource A_ADM2H = M_MODEL.createResource( "http://www.geonames.org/ontology#A.ADM2H" ); + + public static final Resource A_ADM3 = M_MODEL.createResource( "http://www.geonames.org/ontology#A.ADM3" ); + + public static final Resource A_ADM3H = M_MODEL.createResource( "http://www.geonames.org/ontology#A.ADM3H" ); + + public static final Resource A_ADM4 = M_MODEL.createResource( "http://www.geonames.org/ontology#A.ADM4" ); + + public static final Resource A_ADM4H = M_MODEL.createResource( "http://www.geonames.org/ontology#A.ADM4H" ); + + public static final Resource A_ADM5 = M_MODEL.createResource( "http://www.geonames.org/ontology#A.ADM5" ); + + public static final Resource A_ADMD = M_MODEL.createResource( "http://www.geonames.org/ontology#A.ADMD" ); + + public static final Resource A_ADMH = M_MODEL.createResource( "http://www.geonames.org/ontology#A.ADMH" ); + + public static final Resource A_LTER = M_MODEL.createResource( "http://www.geonames.org/ontology#A.LTER" ); + + public static final Resource A_PCL = M_MODEL.createResource( "http://www.geonames.org/ontology#A.PCL" ); + + public static final Resource A_PCLD = M_MODEL.createResource( "http://www.geonames.org/ontology#A.PCLD" ); + + public static final Resource A_PCLF = M_MODEL.createResource( "http://www.geonames.org/ontology#A.PCLF" ); + + public static final Resource A_PCLH = M_MODEL.createResource( "http://www.geonames.org/ontology#A.PCLH" ); + + public static final Resource A_PCLI = M_MODEL.createResource( "http://www.geonames.org/ontology#A.PCLI" ); + + public static final Resource A_PCLIX = M_MODEL.createResource( "http://www.geonames.org/ontology#A.PCLIX" ); + + public static final Resource A_PCLS = M_MODEL.createResource( "http://www.geonames.org/ontology#A.PCLS" ); + + public static final Resource A_PPCLH = M_MODEL.createResource( "http://www.geonames.org/ontology#A.PPCLH" ); + + public static final Resource A_PPLH = M_MODEL.createResource( "http://www.geonames.org/ontology#A.PPLH" ); + + public static final Resource A_PRSH = M_MODEL.createResource( "http://www.geonames.org/ontology#A.PRSH" ); + + public static final Resource A_TERR = M_MODEL.createResource( "http://www.geonames.org/ontology#A.TERR" ); + + public static final Resource A_ZN = M_MODEL.createResource( "http://www.geonames.org/ontology#A.ZN" ); + + public static final Resource A_ZNB = M_MODEL.createResource( "http://www.geonames.org/ontology#A.ZNB" ); + + /**

stream, lake, ...

*/ + public static final Resource H = M_MODEL.createResource( "http://www.geonames.org/ontology#H" ); + + public static final Resource H_AIRS = M_MODEL.createResource( "http://www.geonames.org/ontology#H.AIRS" ); + + public static final Resource H_ANCH = M_MODEL.createResource( "http://www.geonames.org/ontology#H.ANCH" ); + + public static final Resource H_BAY = M_MODEL.createResource( "http://www.geonames.org/ontology#H.BAY" ); + + public static final Resource H_BAYS = M_MODEL.createResource( "http://www.geonames.org/ontology#H.BAYS" ); + + public static final Resource H_BGHT = M_MODEL.createResource( "http://www.geonames.org/ontology#H.BGHT" ); + + public static final Resource H_BNK = M_MODEL.createResource( "http://www.geonames.org/ontology#H.BNK" ); + + public static final Resource H_BNKR = M_MODEL.createResource( "http://www.geonames.org/ontology#H.BNKR" ); + + public static final Resource H_BNKX = M_MODEL.createResource( "http://www.geonames.org/ontology#H.BNKX" ); + + public static final Resource H_BOG = M_MODEL.createResource( "http://www.geonames.org/ontology#H.BOG" ); + + public static final Resource H_CAPG = M_MODEL.createResource( "http://www.geonames.org/ontology#H.CAPG" ); + + public static final Resource H_CHN = M_MODEL.createResource( "http://www.geonames.org/ontology#H.CHN" ); + + public static final Resource H_CHNL = M_MODEL.createResource( "http://www.geonames.org/ontology#H.CHNL" ); + + public static final Resource H_CHNM = M_MODEL.createResource( "http://www.geonames.org/ontology#H.CHNM" ); + + public static final Resource H_CHNN = M_MODEL.createResource( "http://www.geonames.org/ontology#H.CHNN" ); + + public static final Resource H_CNFL = M_MODEL.createResource( "http://www.geonames.org/ontology#H.CNFL" ); + + public static final Resource H_CNL = M_MODEL.createResource( "http://www.geonames.org/ontology#H.CNL" ); + + public static final Resource H_CNLA = M_MODEL.createResource( "http://www.geonames.org/ontology#H.CNLA" ); + + public static final Resource H_CNLB = M_MODEL.createResource( "http://www.geonames.org/ontology#H.CNLB" ); + + public static final Resource H_CNLD = M_MODEL.createResource( "http://www.geonames.org/ontology#H.CNLD" ); + + public static final Resource H_CNLI = M_MODEL.createResource( "http://www.geonames.org/ontology#H.CNLI" ); + + public static final Resource H_CNLN = M_MODEL.createResource( "http://www.geonames.org/ontology#H.CNLN" ); + + public static final Resource H_CNLQ = M_MODEL.createResource( "http://www.geonames.org/ontology#H.CNLQ" ); + + public static final Resource H_CNLSB = M_MODEL.createResource( "http://www.geonames.org/ontology#H.CNLSB" ); + + public static final Resource H_CNLX = M_MODEL.createResource( "http://www.geonames.org/ontology#H.CNLX" ); + + public static final Resource H_COVE = M_MODEL.createResource( "http://www.geonames.org/ontology#H.COVE" ); + + public static final Resource H_CRKT = M_MODEL.createResource( "http://www.geonames.org/ontology#H.CRKT" ); + + public static final Resource H_CRNT = M_MODEL.createResource( "http://www.geonames.org/ontology#H.CRNT" ); + + public static final Resource H_CUTF = M_MODEL.createResource( "http://www.geonames.org/ontology#H.CUTF" ); + + public static final Resource H_DCK = M_MODEL.createResource( "http://www.geonames.org/ontology#H.DCK" ); + + public static final Resource H_DCKB = M_MODEL.createResource( "http://www.geonames.org/ontology#H.DCKB" ); + + public static final Resource H_DOMG = M_MODEL.createResource( "http://www.geonames.org/ontology#H.DOMG" ); + + public static final Resource H_DPRG = M_MODEL.createResource( "http://www.geonames.org/ontology#H.DPRG" ); + + public static final Resource H_DTCH = M_MODEL.createResource( "http://www.geonames.org/ontology#H.DTCH" ); + + public static final Resource H_DTCHD = M_MODEL.createResource( "http://www.geonames.org/ontology#H.DTCHD" ); + + public static final Resource H_DTCHI = M_MODEL.createResource( "http://www.geonames.org/ontology#H.DTCHI" ); + + public static final Resource H_DTCHM = M_MODEL.createResource( "http://www.geonames.org/ontology#H.DTCHM" ); + + public static final Resource H_ESTY = M_MODEL.createResource( "http://www.geonames.org/ontology#H.ESTY" ); + + public static final Resource H_FISH = M_MODEL.createResource( "http://www.geonames.org/ontology#H.FISH" ); + + public static final Resource H_FJD = M_MODEL.createResource( "http://www.geonames.org/ontology#H.FJD" ); + + public static final Resource H_FJDS = M_MODEL.createResource( "http://www.geonames.org/ontology#H.FJDS" ); + + public static final Resource H_FLLS = M_MODEL.createResource( "http://www.geonames.org/ontology#H.FLLS" ); + + public static final Resource H_FLLSX = M_MODEL.createResource( "http://www.geonames.org/ontology#H.FLLSX" ); + + public static final Resource H_FLTM = M_MODEL.createResource( "http://www.geonames.org/ontology#H.FLTM" ); + + public static final Resource H_FLTT = M_MODEL.createResource( "http://www.geonames.org/ontology#H.FLTT" ); + + public static final Resource H_GLCR = M_MODEL.createResource( "http://www.geonames.org/ontology#H.GLCR" ); + + public static final Resource H_GULF = M_MODEL.createResource( "http://www.geonames.org/ontology#H.GULF" ); + + public static final Resource H_GYSR = M_MODEL.createResource( "http://www.geonames.org/ontology#H.GYSR" ); + + public static final Resource H_HBR = M_MODEL.createResource( "http://www.geonames.org/ontology#H.HBR" ); + + public static final Resource H_HBRX = M_MODEL.createResource( "http://www.geonames.org/ontology#H.HBRX" ); + + public static final Resource H_INLT = M_MODEL.createResource( "http://www.geonames.org/ontology#H.INLT" ); + + public static final Resource H_INLTQ = M_MODEL.createResource( "http://www.geonames.org/ontology#H.INLTQ" ); + + public static final Resource H_LBED = M_MODEL.createResource( "http://www.geonames.org/ontology#H.LBED" ); + + public static final Resource H_LGN = M_MODEL.createResource( "http://www.geonames.org/ontology#H.LGN" ); + + public static final Resource H_LGNS = M_MODEL.createResource( "http://www.geonames.org/ontology#H.LGNS" ); + + public static final Resource H_LGNX = M_MODEL.createResource( "http://www.geonames.org/ontology#H.LGNX" ); + + public static final Resource H_LK = M_MODEL.createResource( "http://www.geonames.org/ontology#H.LK" ); + + public static final Resource H_LKC = M_MODEL.createResource( "http://www.geonames.org/ontology#H.LKC" ); + + public static final Resource H_LKI = M_MODEL.createResource( "http://www.geonames.org/ontology#H.LKI" ); + + public static final Resource H_LKN = M_MODEL.createResource( "http://www.geonames.org/ontology#H.LKN" ); + + public static final Resource H_LKNI = M_MODEL.createResource( "http://www.geonames.org/ontology#H.LKNI" ); + + public static final Resource H_LKO = M_MODEL.createResource( "http://www.geonames.org/ontology#H.LKO" ); + + public static final Resource H_LKOI = M_MODEL.createResource( "http://www.geonames.org/ontology#H.LKOI" ); + + public static final Resource H_LKS = M_MODEL.createResource( "http://www.geonames.org/ontology#H.LKS" ); + + public static final Resource H_LKSB = M_MODEL.createResource( "http://www.geonames.org/ontology#H.LKSB" ); + + public static final Resource H_LKSC = M_MODEL.createResource( "http://www.geonames.org/ontology#H.LKSC" ); + + public static final Resource H_LKSI = M_MODEL.createResource( "http://www.geonames.org/ontology#H.LKSI" ); + + public static final Resource H_LKSN = M_MODEL.createResource( "http://www.geonames.org/ontology#H.LKSN" ); + + public static final Resource H_LKSNI = M_MODEL.createResource( "http://www.geonames.org/ontology#H.LKSNI" ); + + public static final Resource H_LKX = M_MODEL.createResource( "http://www.geonames.org/ontology#H.LKX" ); + + public static final Resource H_MFGN = M_MODEL.createResource( "http://www.geonames.org/ontology#H.MFGN" ); + + public static final Resource H_MGV = M_MODEL.createResource( "http://www.geonames.org/ontology#H.MGV" ); + + public static final Resource H_MOOR = M_MODEL.createResource( "http://www.geonames.org/ontology#H.MOOR" ); + + public static final Resource H_MRSH = M_MODEL.createResource( "http://www.geonames.org/ontology#H.MRSH" ); + + public static final Resource H_MRSHN = M_MODEL.createResource( "http://www.geonames.org/ontology#H.MRSHN" ); + + public static final Resource H_NRWS = M_MODEL.createResource( "http://www.geonames.org/ontology#H.NRWS" ); + + public static final Resource H_OCN = M_MODEL.createResource( "http://www.geonames.org/ontology#H.OCN" ); + + public static final Resource H_OVF = M_MODEL.createResource( "http://www.geonames.org/ontology#H.OVF" ); + + public static final Resource H_PND = M_MODEL.createResource( "http://www.geonames.org/ontology#H.PND" ); + + public static final Resource H_PNDI = M_MODEL.createResource( "http://www.geonames.org/ontology#H.PNDI" ); + + public static final Resource H_PNDN = M_MODEL.createResource( "http://www.geonames.org/ontology#H.PNDN" ); + + public static final Resource H_PNDNI = M_MODEL.createResource( "http://www.geonames.org/ontology#H.PNDNI" ); + + public static final Resource H_PNDS = M_MODEL.createResource( "http://www.geonames.org/ontology#H.PNDS" ); + + public static final Resource H_PNDSF = M_MODEL.createResource( "http://www.geonames.org/ontology#H.PNDSF" ); + + public static final Resource H_PNDSI = M_MODEL.createResource( "http://www.geonames.org/ontology#H.PNDSI" ); + + public static final Resource H_PNDSN = M_MODEL.createResource( "http://www.geonames.org/ontology#H.PNDSN" ); + + public static final Resource H_POOL = M_MODEL.createResource( "http://www.geonames.org/ontology#H.POOL" ); + + public static final Resource H_POOLI = M_MODEL.createResource( "http://www.geonames.org/ontology#H.POOLI" ); + + public static final Resource H_RCH = M_MODEL.createResource( "http://www.geonames.org/ontology#H.RCH" ); + + public static final Resource H_RDGG = M_MODEL.createResource( "http://www.geonames.org/ontology#H.RDGG" ); + + public static final Resource H_RDST = M_MODEL.createResource( "http://www.geonames.org/ontology#H.RDST" ); + + public static final Resource H_RF = M_MODEL.createResource( "http://www.geonames.org/ontology#H.RF" ); + + public static final Resource H_RFC = M_MODEL.createResource( "http://www.geonames.org/ontology#H.RFC" ); + + public static final Resource H_RFX = M_MODEL.createResource( "http://www.geonames.org/ontology#H.RFX" ); + + public static final Resource H_RPDS = M_MODEL.createResource( "http://www.geonames.org/ontology#H.RPDS" ); + + public static final Resource H_RSV = M_MODEL.createResource( "http://www.geonames.org/ontology#H.RSV" ); + + public static final Resource H_RSVI = M_MODEL.createResource( "http://www.geonames.org/ontology#H.RSVI" ); + + public static final Resource H_RSVT = M_MODEL.createResource( "http://www.geonames.org/ontology#H.RSVT" ); + + public static final Resource H_RVN = M_MODEL.createResource( "http://www.geonames.org/ontology#H.RVN" ); + + public static final Resource H_SBKH = M_MODEL.createResource( "http://www.geonames.org/ontology#H.SBKH" ); + + public static final Resource H_SD = M_MODEL.createResource( "http://www.geonames.org/ontology#H.SD" ); + + public static final Resource H_SEA = M_MODEL.createResource( "http://www.geonames.org/ontology#H.SEA" ); + + public static final Resource H_SHOL = M_MODEL.createResource( "http://www.geonames.org/ontology#H.SHOL" ); + + public static final Resource H_SILL = M_MODEL.createResource( "http://www.geonames.org/ontology#H.SILL" ); + + public static final Resource H_SPNG = M_MODEL.createResource( "http://www.geonames.org/ontology#H.SPNG" ); + + public static final Resource H_SPNS = M_MODEL.createResource( "http://www.geonames.org/ontology#H.SPNS" ); + + public static final Resource H_SPNT = M_MODEL.createResource( "http://www.geonames.org/ontology#H.SPNT" ); + + public static final Resource H_STM = M_MODEL.createResource( "http://www.geonames.org/ontology#H.STM" ); + + public static final Resource H_STMA = M_MODEL.createResource( "http://www.geonames.org/ontology#H.STMA" ); + + public static final Resource H_STMB = M_MODEL.createResource( "http://www.geonames.org/ontology#H.STMB" ); + + public static final Resource H_STMC = M_MODEL.createResource( "http://www.geonames.org/ontology#H.STMC" ); + + public static final Resource H_STMD = M_MODEL.createResource( "http://www.geonames.org/ontology#H.STMD" ); + + public static final Resource H_STMH = M_MODEL.createResource( "http://www.geonames.org/ontology#H.STMH" ); + + public static final Resource H_STMI = M_MODEL.createResource( "http://www.geonames.org/ontology#H.STMI" ); + + public static final Resource H_STMIX = M_MODEL.createResource( "http://www.geonames.org/ontology#H.STMIX" ); + + public static final Resource H_STMM = M_MODEL.createResource( "http://www.geonames.org/ontology#H.STMM" ); + + public static final Resource H_STMQ = M_MODEL.createResource( "http://www.geonames.org/ontology#H.STMQ" ); + + public static final Resource H_STMS = M_MODEL.createResource( "http://www.geonames.org/ontology#H.STMS" ); + + public static final Resource H_STMSB = M_MODEL.createResource( "http://www.geonames.org/ontology#H.STMSB" ); + + public static final Resource H_STMX = M_MODEL.createResource( "http://www.geonames.org/ontology#H.STMX" ); + + public static final Resource H_STRT = M_MODEL.createResource( "http://www.geonames.org/ontology#H.STRT" ); + + public static final Resource H_SWMP = M_MODEL.createResource( "http://www.geonames.org/ontology#H.SWMP" ); + + public static final Resource H_SYSI = M_MODEL.createResource( "http://www.geonames.org/ontology#H.SYSI" ); + + public static final Resource H_TNLC = M_MODEL.createResource( "http://www.geonames.org/ontology#H.TNLC" ); + + public static final Resource H_WAD = M_MODEL.createResource( "http://www.geonames.org/ontology#H.WAD" ); + + public static final Resource H_WADB = M_MODEL.createResource( "http://www.geonames.org/ontology#H.WADB" ); + + public static final Resource H_WADJ = M_MODEL.createResource( "http://www.geonames.org/ontology#H.WADJ" ); + + public static final Resource H_WADM = M_MODEL.createResource( "http://www.geonames.org/ontology#H.WADM" ); + + public static final Resource H_WADS = M_MODEL.createResource( "http://www.geonames.org/ontology#H.WADS" ); + + public static final Resource H_WADX = M_MODEL.createResource( "http://www.geonames.org/ontology#H.WADX" ); + + public static final Resource H_WHRL = M_MODEL.createResource( "http://www.geonames.org/ontology#H.WHRL" ); + + public static final Resource H_WLL = M_MODEL.createResource( "http://www.geonames.org/ontology#H.WLL" ); + + public static final Resource H_WLLQ = M_MODEL.createResource( "http://www.geonames.org/ontology#H.WLLQ" ); + + public static final Resource H_WLLS = M_MODEL.createResource( "http://www.geonames.org/ontology#H.WLLS" ); + + public static final Resource H_WTLD = M_MODEL.createResource( "http://www.geonames.org/ontology#H.WTLD" ); + + public static final Resource H_WTLDI = M_MODEL.createResource( "http://www.geonames.org/ontology#H.WTLDI" ); + + public static final Resource H_WTRC = M_MODEL.createResource( "http://www.geonames.org/ontology#H.WTRC" ); + + public static final Resource H_WTRH = M_MODEL.createResource( "http://www.geonames.org/ontology#H.WTRH" ); + + /**

parks,area, ...

*/ + public static final Resource L = M_MODEL.createResource( "http://www.geonames.org/ontology#L" ); + + public static final Resource L_AGRC = M_MODEL.createResource( "http://www.geonames.org/ontology#L.AGRC" ); + + public static final Resource L_AMUS = M_MODEL.createResource( "http://www.geonames.org/ontology#L.AMUS" ); + + public static final Resource L_AREA = M_MODEL.createResource( "http://www.geonames.org/ontology#L.AREA" ); + + public static final Resource L_BSND = M_MODEL.createResource( "http://www.geonames.org/ontology#L.BSND" ); + + public static final Resource L_BSNP = M_MODEL.createResource( "http://www.geonames.org/ontology#L.BSNP" ); + + public static final Resource L_BTL = M_MODEL.createResource( "http://www.geonames.org/ontology#L.BTL" ); + + public static final Resource L_CLG = M_MODEL.createResource( "http://www.geonames.org/ontology#L.CLG" ); + + public static final Resource L_CMN = M_MODEL.createResource( "http://www.geonames.org/ontology#L.CMN" ); + + public static final Resource L_CNS = M_MODEL.createResource( "http://www.geonames.org/ontology#L.CNS" ); + + public static final Resource L_COLF = M_MODEL.createResource( "http://www.geonames.org/ontology#L.COLF" ); + + public static final Resource L_CONT = M_MODEL.createResource( "http://www.geonames.org/ontology#L.CONT" ); + + public static final Resource L_CST = M_MODEL.createResource( "http://www.geonames.org/ontology#L.CST" ); + + public static final Resource L_CTRB = M_MODEL.createResource( "http://www.geonames.org/ontology#L.CTRB" ); + + public static final Resource L_DEVH = M_MODEL.createResource( "http://www.geonames.org/ontology#L.DEVH" ); + + public static final Resource L_FLD = M_MODEL.createResource( "http://www.geonames.org/ontology#L.FLD" ); + + public static final Resource L_FLDI = M_MODEL.createResource( "http://www.geonames.org/ontology#L.FLDI" ); + + public static final Resource L_GASF = M_MODEL.createResource( "http://www.geonames.org/ontology#L.GASF" ); + + public static final Resource L_GRAZ = M_MODEL.createResource( "http://www.geonames.org/ontology#L.GRAZ" ); + + public static final Resource L_GVL = M_MODEL.createResource( "http://www.geonames.org/ontology#L.GVL" ); + + public static final Resource L_INDS = M_MODEL.createResource( "http://www.geonames.org/ontology#L.INDS" ); + + public static final Resource L_LAND = M_MODEL.createResource( "http://www.geonames.org/ontology#L.LAND" ); + + public static final Resource L_LCTY = M_MODEL.createResource( "http://www.geonames.org/ontology#L.LCTY" ); + + public static final Resource L_MILB = M_MODEL.createResource( "http://www.geonames.org/ontology#L.MILB" ); + + public static final Resource L_MNA = M_MODEL.createResource( "http://www.geonames.org/ontology#L.MNA" ); + + public static final Resource L_MVA = M_MODEL.createResource( "http://www.geonames.org/ontology#L.MVA" ); + + public static final Resource L_NVB = M_MODEL.createResource( "http://www.geonames.org/ontology#L.NVB" ); + + public static final Resource L_OAS = M_MODEL.createResource( "http://www.geonames.org/ontology#L.OAS" ); + + public static final Resource L_OILF = M_MODEL.createResource( "http://www.geonames.org/ontology#L.OILF" ); + + public static final Resource L_PEAT = M_MODEL.createResource( "http://www.geonames.org/ontology#L.PEAT" ); + + public static final Resource L_PRK = M_MODEL.createResource( "http://www.geonames.org/ontology#L.PRK" ); + + public static final Resource L_PRT = M_MODEL.createResource( "http://www.geonames.org/ontology#L.PRT" ); + + public static final Resource L_QCKS = M_MODEL.createResource( "http://www.geonames.org/ontology#L.QCKS" ); + + public static final Resource L_REP = M_MODEL.createResource( "http://www.geonames.org/ontology#L.REP" ); + + public static final Resource L_RES = M_MODEL.createResource( "http://www.geonames.org/ontology#L.RES" ); + + public static final Resource L_RESA = M_MODEL.createResource( "http://www.geonames.org/ontology#L.RESA" ); + + public static final Resource L_RESF = M_MODEL.createResource( "http://www.geonames.org/ontology#L.RESF" ); + + public static final Resource L_RESH = M_MODEL.createResource( "http://www.geonames.org/ontology#L.RESH" ); + + public static final Resource L_RESN = M_MODEL.createResource( "http://www.geonames.org/ontology#L.RESN" ); + + public static final Resource L_RESP = M_MODEL.createResource( "http://www.geonames.org/ontology#L.RESP" ); + + public static final Resource L_RESV = M_MODEL.createResource( "http://www.geonames.org/ontology#L.RESV" ); + + public static final Resource L_RESW = M_MODEL.createResource( "http://www.geonames.org/ontology#L.RESW" ); + + public static final Resource L_RGN = M_MODEL.createResource( "http://www.geonames.org/ontology#L.RGN" ); + + public static final Resource L_RGNE = M_MODEL.createResource( "http://www.geonames.org/ontology#L.RGNE" ); + + public static final Resource L_RGNH = M_MODEL.createResource( "http://www.geonames.org/ontology#L.RGNH" ); + + public static final Resource L_RGNL = M_MODEL.createResource( "http://www.geonames.org/ontology#L.RGNL" ); + + public static final Resource L_RNGA = M_MODEL.createResource( "http://www.geonames.org/ontology#L.RNGA" ); + + public static final Resource L_SALT = M_MODEL.createResource( "http://www.geonames.org/ontology#L.SALT" ); + + public static final Resource L_SNOW = M_MODEL.createResource( "http://www.geonames.org/ontology#L.SNOW" ); + + public static final Resource L_TRB = M_MODEL.createResource( "http://www.geonames.org/ontology#L.TRB" ); + + public static final Resource L_ZZZZZ = M_MODEL.createResource( "http://www.geonames.org/ontology#L.ZZZZZ" ); + + /**

city, village,...

*/ + public static final Resource P = M_MODEL.createResource( "http://www.geonames.org/ontology#P" ); + + public static final Resource P_PPL = M_MODEL.createResource( "http://www.geonames.org/ontology#P.PPL" ); + + public static final Resource P_PPLA = M_MODEL.createResource( "http://www.geonames.org/ontology#P.PPLA" ); + + public static final Resource P_PPLA2 = M_MODEL.createResource( "http://www.geonames.org/ontology#P.PPLA2" ); + + public static final Resource P_PPLA3 = M_MODEL.createResource( "http://www.geonames.org/ontology#P.PPLA3" ); + + public static final Resource P_PPLA4 = M_MODEL.createResource( "http://www.geonames.org/ontology#P.PPLA4" ); + + public static final Resource P_PPLC = M_MODEL.createResource( "http://www.geonames.org/ontology#P.PPLC" ); + + public static final Resource P_PPLF = M_MODEL.createResource( "http://www.geonames.org/ontology#P.PPLF" ); + + public static final Resource P_PPLG = M_MODEL.createResource( "http://www.geonames.org/ontology#P.PPLG" ); + + public static final Resource P_PPLL = M_MODEL.createResource( "http://www.geonames.org/ontology#P.PPLL" ); + + public static final Resource P_PPLQ = M_MODEL.createResource( "http://www.geonames.org/ontology#P.PPLQ" ); + + public static final Resource P_PPLR = M_MODEL.createResource( "http://www.geonames.org/ontology#P.PPLR" ); + + public static final Resource P_PPLS = M_MODEL.createResource( "http://www.geonames.org/ontology#P.PPLS" ); + + public static final Resource P_PPLW = M_MODEL.createResource( "http://www.geonames.org/ontology#P.PPLW" ); + + public static final Resource P_PPLX = M_MODEL.createResource( "http://www.geonames.org/ontology#P.PPLX" ); + + public static final Resource P_STLMT = M_MODEL.createResource( "http://www.geonames.org/ontology#P.STLMT" ); + + /**

road, railroad, ...

*/ + public static final Resource R = M_MODEL.createResource( "http://www.geonames.org/ontology#R" ); + + public static final Resource R_CSWY = M_MODEL.createResource( "http://www.geonames.org/ontology#R.CSWY" ); + + public static final Resource R_CSWYQ = M_MODEL.createResource( "http://www.geonames.org/ontology#R.CSWYQ" ); + + public static final Resource R_OILP = M_MODEL.createResource( "http://www.geonames.org/ontology#R.OILP" ); + + public static final Resource R_PRMN = M_MODEL.createResource( "http://www.geonames.org/ontology#R.PRMN" ); + + public static final Resource R_PTGE = M_MODEL.createResource( "http://www.geonames.org/ontology#R.PTGE" ); + + public static final Resource R_RD = M_MODEL.createResource( "http://www.geonames.org/ontology#R.RD" ); + + public static final Resource R_RDA = M_MODEL.createResource( "http://www.geonames.org/ontology#R.RDA" ); + + public static final Resource R_RDB = M_MODEL.createResource( "http://www.geonames.org/ontology#R.RDB" ); + + public static final Resource R_RDCUT = M_MODEL.createResource( "http://www.geonames.org/ontology#R.RDCUT" ); + + public static final Resource R_RDJCT = M_MODEL.createResource( "http://www.geonames.org/ontology#R.RDJCT" ); + + public static final Resource R_RJCT = M_MODEL.createResource( "http://www.geonames.org/ontology#R.RJCT" ); + + public static final Resource R_RR = M_MODEL.createResource( "http://www.geonames.org/ontology#R.RR" ); + + public static final Resource R_RRQ = M_MODEL.createResource( "http://www.geonames.org/ontology#R.RRQ" ); + + public static final Resource R_RTE = M_MODEL.createResource( "http://www.geonames.org/ontology#R.RTE" ); + + public static final Resource R_RYD = M_MODEL.createResource( "http://www.geonames.org/ontology#R.RYD" ); + + public static final Resource R_ST = M_MODEL.createResource( "http://www.geonames.org/ontology#R.ST" ); + + public static final Resource R_STKR = M_MODEL.createResource( "http://www.geonames.org/ontology#R.STKR" ); + + public static final Resource R_TNL = M_MODEL.createResource( "http://www.geonames.org/ontology#R.TNL" ); + + public static final Resource R_TNLN = M_MODEL.createResource( "http://www.geonames.org/ontology#R.TNLN" ); + + public static final Resource R_TNLRD = M_MODEL.createResource( "http://www.geonames.org/ontology#R.TNLRD" ); + + public static final Resource R_TNLRR = M_MODEL.createResource( "http://www.geonames.org/ontology#R.TNLRR" ); + + public static final Resource R_TNLS = M_MODEL.createResource( "http://www.geonames.org/ontology#R.TNLS" ); + + public static final Resource R_TRL = M_MODEL.createResource( "http://www.geonames.org/ontology#R.TRL" ); + + /**

spot, building, farm, ...

*/ + public static final Resource S = M_MODEL.createResource( "http://www.geonames.org/ontology#S" ); + + public static final Resource S_ADMF = M_MODEL.createResource( "http://www.geonames.org/ontology#S.ADMF" ); + + public static final Resource S_AGRF = M_MODEL.createResource( "http://www.geonames.org/ontology#S.AGRF" ); + + public static final Resource S_AIRB = M_MODEL.createResource( "http://www.geonames.org/ontology#S.AIRB" ); + + public static final Resource S_AIRF = M_MODEL.createResource( "http://www.geonames.org/ontology#S.AIRF" ); + + public static final Resource S_AIRH = M_MODEL.createResource( "http://www.geonames.org/ontology#S.AIRH" ); + + public static final Resource S_AIRP = M_MODEL.createResource( "http://www.geonames.org/ontology#S.AIRP" ); + + public static final Resource S_AIRQ = M_MODEL.createResource( "http://www.geonames.org/ontology#S.AIRQ" ); + + public static final Resource S_AMTH = M_MODEL.createResource( "http://www.geonames.org/ontology#S.AMTH" ); + + public static final Resource S_ANS = M_MODEL.createResource( "http://www.geonames.org/ontology#S.ANS" ); + + public static final Resource S_AQC = M_MODEL.createResource( "http://www.geonames.org/ontology#S.AQC" ); + + public static final Resource S_ARCH = M_MODEL.createResource( "http://www.geonames.org/ontology#S.ARCH" ); + + public static final Resource S_ASTR = M_MODEL.createResource( "http://www.geonames.org/ontology#S.ASTR" ); + + public static final Resource S_ASYL = M_MODEL.createResource( "http://www.geonames.org/ontology#S.ASYL" ); + + public static final Resource S_ATHF = M_MODEL.createResource( "http://www.geonames.org/ontology#S.ATHF" ); + + public static final Resource S_ATM = M_MODEL.createResource( "http://www.geonames.org/ontology#S.ATM" ); + + public static final Resource S_BANK = M_MODEL.createResource( "http://www.geonames.org/ontology#S.BANK" ); + + public static final Resource S_BCN = M_MODEL.createResource( "http://www.geonames.org/ontology#S.BCN" ); + + public static final Resource S_BDG = M_MODEL.createResource( "http://www.geonames.org/ontology#S.BDG" ); + + public static final Resource S_BDGQ = M_MODEL.createResource( "http://www.geonames.org/ontology#S.BDGQ" ); + + public static final Resource S_BLDG = M_MODEL.createResource( "http://www.geonames.org/ontology#S.BLDG" ); + + public static final Resource S_BLDO = M_MODEL.createResource( "http://www.geonames.org/ontology#S.BLDO" ); + + public static final Resource S_BP = M_MODEL.createResource( "http://www.geonames.org/ontology#S.BP" ); + + public static final Resource S_BRKS = M_MODEL.createResource( "http://www.geonames.org/ontology#S.BRKS" ); + + public static final Resource S_BRKW = M_MODEL.createResource( "http://www.geonames.org/ontology#S.BRKW" ); + + public static final Resource S_BSTN = M_MODEL.createResource( "http://www.geonames.org/ontology#S.BSTN" ); + + public static final Resource S_BTYD = M_MODEL.createResource( "http://www.geonames.org/ontology#S.BTYD" ); + + public static final Resource S_BUR = M_MODEL.createResource( "http://www.geonames.org/ontology#S.BUR" ); + + public static final Resource S_BUSTN = M_MODEL.createResource( "http://www.geonames.org/ontology#S.BUSTN" ); + + public static final Resource S_BUSTP = M_MODEL.createResource( "http://www.geonames.org/ontology#S.BUSTP" ); + + public static final Resource S_CARN = M_MODEL.createResource( "http://www.geonames.org/ontology#S.CARN" ); + + public static final Resource S_CAVE = M_MODEL.createResource( "http://www.geonames.org/ontology#S.CAVE" ); + + public static final Resource S_CCL = M_MODEL.createResource( "http://www.geonames.org/ontology#S.CCL" ); + + public static final Resource S_CH = M_MODEL.createResource( "http://www.geonames.org/ontology#S.CH" ); + + public static final Resource S_CMP = M_MODEL.createResource( "http://www.geonames.org/ontology#S.CMP" ); + + public static final Resource S_CMPL = M_MODEL.createResource( "http://www.geonames.org/ontology#S.CMPL" ); + + public static final Resource S_CMPLA = M_MODEL.createResource( "http://www.geonames.org/ontology#S.CMPLA" ); + + public static final Resource S_CMPMN = M_MODEL.createResource( "http://www.geonames.org/ontology#S.CMPMN" ); + + public static final Resource S_CMPO = M_MODEL.createResource( "http://www.geonames.org/ontology#S.CMPO" ); + + public static final Resource S_CMPQ = M_MODEL.createResource( "http://www.geonames.org/ontology#S.CMPQ" ); + + public static final Resource S_CMPRF = M_MODEL.createResource( "http://www.geonames.org/ontology#S.CMPRF" ); + + public static final Resource S_CMTY = M_MODEL.createResource( "http://www.geonames.org/ontology#S.CMTY" ); + + public static final Resource S_COMC = M_MODEL.createResource( "http://www.geonames.org/ontology#S.COMC" ); + + public static final Resource S_CRRL = M_MODEL.createResource( "http://www.geonames.org/ontology#S.CRRL" ); + + public static final Resource S_CSNO = M_MODEL.createResource( "http://www.geonames.org/ontology#S.CSNO" ); + + public static final Resource S_CSTL = M_MODEL.createResource( "http://www.geonames.org/ontology#S.CSTL" ); + + public static final Resource S_CSTM = M_MODEL.createResource( "http://www.geonames.org/ontology#S.CSTM" ); + + public static final Resource S_CTHSE = M_MODEL.createResource( "http://www.geonames.org/ontology#S.CTHSE" ); + + public static final Resource S_CTRA = M_MODEL.createResource( "http://www.geonames.org/ontology#S.CTRA" ); + + public static final Resource S_CTRCM = M_MODEL.createResource( "http://www.geonames.org/ontology#S.CTRCM" ); + + public static final Resource S_CTRF = M_MODEL.createResource( "http://www.geonames.org/ontology#S.CTRF" ); + + public static final Resource S_CTRM = M_MODEL.createResource( "http://www.geonames.org/ontology#S.CTRM" ); + + public static final Resource S_CTRR = M_MODEL.createResource( "http://www.geonames.org/ontology#S.CTRR" ); + + public static final Resource S_CTRS = M_MODEL.createResource( "http://www.geonames.org/ontology#S.CTRS" ); + + public static final Resource S_CVNT = M_MODEL.createResource( "http://www.geonames.org/ontology#S.CVNT" ); + + public static final Resource S_DAM = M_MODEL.createResource( "http://www.geonames.org/ontology#S.DAM" ); + + public static final Resource S_DAMQ = M_MODEL.createResource( "http://www.geonames.org/ontology#S.DAMQ" ); + + public static final Resource S_DAMSB = M_MODEL.createResource( "http://www.geonames.org/ontology#S.DAMSB" ); + + public static final Resource S_DARY = M_MODEL.createResource( "http://www.geonames.org/ontology#S.DARY" ); + + public static final Resource S_DCKD = M_MODEL.createResource( "http://www.geonames.org/ontology#S.DCKD" ); + + public static final Resource S_DCKY = M_MODEL.createResource( "http://www.geonames.org/ontology#S.DCKY" ); + + public static final Resource S_DIKE = M_MODEL.createResource( "http://www.geonames.org/ontology#S.DIKE" ); + + public static final Resource S_DIP = M_MODEL.createResource( "http://www.geonames.org/ontology#S.DIP" ); + + public static final Resource S_DPOF = M_MODEL.createResource( "http://www.geonames.org/ontology#S.DPOF" ); + + public static final Resource S_EST = M_MODEL.createResource( "http://www.geonames.org/ontology#S.EST" ); + + public static final Resource S_ESTB = M_MODEL.createResource( "http://www.geonames.org/ontology#S.ESTB" ); + + public static final Resource S_ESTC = M_MODEL.createResource( "http://www.geonames.org/ontology#S.ESTC" ); + + public static final Resource S_ESTO = M_MODEL.createResource( "http://www.geonames.org/ontology#S.ESTO" ); + + public static final Resource S_ESTR = M_MODEL.createResource( "http://www.geonames.org/ontology#S.ESTR" ); + + public static final Resource S_ESTSG = M_MODEL.createResource( "http://www.geonames.org/ontology#S.ESTSG" ); + + public static final Resource S_ESTSL = M_MODEL.createResource( "http://www.geonames.org/ontology#S.ESTSL" ); + + public static final Resource S_ESTT = M_MODEL.createResource( "http://www.geonames.org/ontology#S.ESTT" ); + + public static final Resource S_ESTX = M_MODEL.createResource( "http://www.geonames.org/ontology#S.ESTX" ); + + public static final Resource S_FCL = M_MODEL.createResource( "http://www.geonames.org/ontology#S.FCL" ); + + public static final Resource S_FNDY = M_MODEL.createResource( "http://www.geonames.org/ontology#S.FNDY" ); + + public static final Resource S_FRM = M_MODEL.createResource( "http://www.geonames.org/ontology#S.FRM" ); + + public static final Resource S_FRMQ = M_MODEL.createResource( "http://www.geonames.org/ontology#S.FRMQ" ); + + public static final Resource S_FRMS = M_MODEL.createResource( "http://www.geonames.org/ontology#S.FRMS" ); + + public static final Resource S_FRMT = M_MODEL.createResource( "http://www.geonames.org/ontology#S.FRMT" ); + + public static final Resource S_FT = M_MODEL.createResource( "http://www.geonames.org/ontology#S.FT" ); + + public static final Resource S_FY = M_MODEL.createResource( "http://www.geonames.org/ontology#S.FY" ); + + public static final Resource S_GATE = M_MODEL.createResource( "http://www.geonames.org/ontology#S.GATE" ); + + public static final Resource S_GDN = M_MODEL.createResource( "http://www.geonames.org/ontology#S.GDN" ); + + public static final Resource S_GHAT = M_MODEL.createResource( "http://www.geonames.org/ontology#S.GHAT" ); + + public static final Resource S_GHSE = M_MODEL.createResource( "http://www.geonames.org/ontology#S.GHSE" ); + + public static final Resource S_GOSP = M_MODEL.createResource( "http://www.geonames.org/ontology#S.GOSP" ); + + public static final Resource S_GOVL = M_MODEL.createResource( "http://www.geonames.org/ontology#S.GOVL" ); + + public static final Resource S_GRVE = M_MODEL.createResource( "http://www.geonames.org/ontology#S.GRVE" ); + + public static final Resource S_HERM = M_MODEL.createResource( "http://www.geonames.org/ontology#S.HERM" ); + + public static final Resource S_HLT = M_MODEL.createResource( "http://www.geonames.org/ontology#S.HLT" ); + + public static final Resource S_HMSD = M_MODEL.createResource( "http://www.geonames.org/ontology#S.HMSD" ); + + public static final Resource S_HSE = M_MODEL.createResource( "http://www.geonames.org/ontology#S.HSE" ); + + public static final Resource S_HSEC = M_MODEL.createResource( "http://www.geonames.org/ontology#S.HSEC" ); + + public static final Resource S_HSP = M_MODEL.createResource( "http://www.geonames.org/ontology#S.HSP" ); + + public static final Resource S_HSPC = M_MODEL.createResource( "http://www.geonames.org/ontology#S.HSPC" ); + + public static final Resource S_HSPD = M_MODEL.createResource( "http://www.geonames.org/ontology#S.HSPD" ); + + public static final Resource S_HSPL = M_MODEL.createResource( "http://www.geonames.org/ontology#S.HSPL" ); + + public static final Resource S_HSTS = M_MODEL.createResource( "http://www.geonames.org/ontology#S.HSTS" ); + + public static final Resource S_HTL = M_MODEL.createResource( "http://www.geonames.org/ontology#S.HTL" ); + + public static final Resource S_HUT = M_MODEL.createResource( "http://www.geonames.org/ontology#S.HUT" ); + + public static final Resource S_HUTS = M_MODEL.createResource( "http://www.geonames.org/ontology#S.HUTS" ); + + public static final Resource S_INSM = M_MODEL.createResource( "http://www.geonames.org/ontology#S.INSM" ); + + public static final Resource S_ITTR = M_MODEL.createResource( "http://www.geonames.org/ontology#S.ITTR" ); + + public static final Resource S_JTY = M_MODEL.createResource( "http://www.geonames.org/ontology#S.JTY" ); + + public static final Resource S_LDNG = M_MODEL.createResource( "http://www.geonames.org/ontology#S.LDNG" ); + + public static final Resource S_LEPC = M_MODEL.createResource( "http://www.geonames.org/ontology#S.LEPC" ); + + public static final Resource S_LIBR = M_MODEL.createResource( "http://www.geonames.org/ontology#S.LIBR" ); + + public static final Resource S_LNDF = M_MODEL.createResource( "http://www.geonames.org/ontology#S.LNDF" ); + + public static final Resource S_LOCK = M_MODEL.createResource( "http://www.geonames.org/ontology#S.LOCK" ); + + public static final Resource S_LTHSE = M_MODEL.createResource( "http://www.geonames.org/ontology#S.LTHSE" ); + + public static final Resource S_MALL = M_MODEL.createResource( "http://www.geonames.org/ontology#S.MALL" ); + + public static final Resource S_MAR = M_MODEL.createResource( "http://www.geonames.org/ontology#S.MAR" ); + + public static final Resource S_MFG = M_MODEL.createResource( "http://www.geonames.org/ontology#S.MFG" ); + + public static final Resource S_MFGB = M_MODEL.createResource( "http://www.geonames.org/ontology#S.MFGB" ); + + public static final Resource S_MFGC = M_MODEL.createResource( "http://www.geonames.org/ontology#S.MFGC" ); + + public static final Resource S_MFGCU = M_MODEL.createResource( "http://www.geonames.org/ontology#S.MFGCU" ); + + public static final Resource S_MFGLM = M_MODEL.createResource( "http://www.geonames.org/ontology#S.MFGLM" ); + + public static final Resource S_MFGM = M_MODEL.createResource( "http://www.geonames.org/ontology#S.MFGM" ); + + public static final Resource S_MFGPH = M_MODEL.createResource( "http://www.geonames.org/ontology#S.MFGPH" ); + + public static final Resource S_MFGQ = M_MODEL.createResource( "http://www.geonames.org/ontology#S.MFGQ" ); + + public static final Resource S_MFGSG = M_MODEL.createResource( "http://www.geonames.org/ontology#S.MFGSG" ); + + public static final Resource S_MKT = M_MODEL.createResource( "http://www.geonames.org/ontology#S.MKT" ); + + public static final Resource S_ML = M_MODEL.createResource( "http://www.geonames.org/ontology#S.ML" ); + + public static final Resource S_MLM = M_MODEL.createResource( "http://www.geonames.org/ontology#S.MLM" ); + + public static final Resource S_MLO = M_MODEL.createResource( "http://www.geonames.org/ontology#S.MLO" ); + + public static final Resource S_MLSG = M_MODEL.createResource( "http://www.geonames.org/ontology#S.MLSG" ); + + public static final Resource S_MLSGQ = M_MODEL.createResource( "http://www.geonames.org/ontology#S.MLSGQ" ); + + public static final Resource S_MLSW = M_MODEL.createResource( "http://www.geonames.org/ontology#S.MLSW" ); + + public static final Resource S_MLWND = M_MODEL.createResource( "http://www.geonames.org/ontology#S.MLWND" ); + + public static final Resource S_MLWTR = M_MODEL.createResource( "http://www.geonames.org/ontology#S.MLWTR" ); + + public static final Resource S_MN = M_MODEL.createResource( "http://www.geonames.org/ontology#S.MN" ); + + public static final Resource S_MNAU = M_MODEL.createResource( "http://www.geonames.org/ontology#S.MNAU" ); + + public static final Resource S_MNC = M_MODEL.createResource( "http://www.geonames.org/ontology#S.MNC" ); + + public static final Resource S_MNCR = M_MODEL.createResource( "http://www.geonames.org/ontology#S.MNCR" ); + + public static final Resource S_MNCU = M_MODEL.createResource( "http://www.geonames.org/ontology#S.MNCU" ); + + public static final Resource S_MNDT = M_MODEL.createResource( "http://www.geonames.org/ontology#S.MNDT" ); + + public static final Resource S_MNFE = M_MODEL.createResource( "http://www.geonames.org/ontology#S.MNFE" ); + + public static final Resource S_MNMT = M_MODEL.createResource( "http://www.geonames.org/ontology#S.MNMT" ); + + public static final Resource S_MNN = M_MODEL.createResource( "http://www.geonames.org/ontology#S.MNN" ); + + public static final Resource S_MNNI = M_MODEL.createResource( "http://www.geonames.org/ontology#S.MNNI" ); + + public static final Resource S_MNPB = M_MODEL.createResource( "http://www.geonames.org/ontology#S.MNPB" ); + + public static final Resource S_MNPL = M_MODEL.createResource( "http://www.geonames.org/ontology#S.MNPL" ); + + public static final Resource S_MNQ = M_MODEL.createResource( "http://www.geonames.org/ontology#S.MNQ" ); + + public static final Resource S_MNQR = M_MODEL.createResource( "http://www.geonames.org/ontology#S.MNQR" ); + + public static final Resource S_MNSN = M_MODEL.createResource( "http://www.geonames.org/ontology#S.MNSN" ); + + public static final Resource S_MOLE = M_MODEL.createResource( "http://www.geonames.org/ontology#S.MOLE" ); + + public static final Resource S_MSQE = M_MODEL.createResource( "http://www.geonames.org/ontology#S.MSQE" ); + + public static final Resource S_MSSN = M_MODEL.createResource( "http://www.geonames.org/ontology#S.MSSN" ); + + public static final Resource S_MSSNQ = M_MODEL.createResource( "http://www.geonames.org/ontology#S.MSSNQ" ); + + public static final Resource S_MSTY = M_MODEL.createResource( "http://www.geonames.org/ontology#S.MSTY" ); + + public static final Resource S_MTRO = M_MODEL.createResource( "http://www.geonames.org/ontology#S.MTRO" ); + + public static final Resource S_MUS = M_MODEL.createResource( "http://www.geonames.org/ontology#S.MUS" ); + + public static final Resource S_NOV = M_MODEL.createResource( "http://www.geonames.org/ontology#S.NOV" ); + + public static final Resource S_NSY = M_MODEL.createResource( "http://www.geonames.org/ontology#S.NSY" ); + + public static final Resource S_OBPT = M_MODEL.createResource( "http://www.geonames.org/ontology#S.OBPT" ); + + public static final Resource S_OBS = M_MODEL.createResource( "http://www.geonames.org/ontology#S.OBS" ); + + public static final Resource S_OBSR = M_MODEL.createResource( "http://www.geonames.org/ontology#S.OBSR" ); + + public static final Resource S_OILJ = M_MODEL.createResource( "http://www.geonames.org/ontology#S.OILJ" ); + + public static final Resource S_OILQ = M_MODEL.createResource( "http://www.geonames.org/ontology#S.OILQ" ); + + public static final Resource S_OILR = M_MODEL.createResource( "http://www.geonames.org/ontology#S.OILR" ); + + public static final Resource S_OILT = M_MODEL.createResource( "http://www.geonames.org/ontology#S.OILT" ); + + public static final Resource S_OILW = M_MODEL.createResource( "http://www.geonames.org/ontology#S.OILW" ); + + public static final Resource S_OPRA = M_MODEL.createResource( "http://www.geonames.org/ontology#S.OPRA" ); + + public static final Resource S_PAL = M_MODEL.createResource( "http://www.geonames.org/ontology#S.PAL" ); + + public static final Resource S_PGDA = M_MODEL.createResource( "http://www.geonames.org/ontology#S.PGDA" ); + + public static final Resource S_PIER = M_MODEL.createResource( "http://www.geonames.org/ontology#S.PIER" ); + + public static final Resource S_PKLT = M_MODEL.createResource( "http://www.geonames.org/ontology#S.PKLT" ); + + public static final Resource S_PMPO = M_MODEL.createResource( "http://www.geonames.org/ontology#S.PMPO" ); + + public static final Resource S_PMPW = M_MODEL.createResource( "http://www.geonames.org/ontology#S.PMPW" ); + + public static final Resource S_PO = M_MODEL.createResource( "http://www.geonames.org/ontology#S.PO" ); + + public static final Resource S_PP = M_MODEL.createResource( "http://www.geonames.org/ontology#S.PP" ); + + public static final Resource S_PPQ = M_MODEL.createResource( "http://www.geonames.org/ontology#S.PPQ" ); + + public static final Resource S_PRKGT = M_MODEL.createResource( "http://www.geonames.org/ontology#S.PRKGT" ); + + public static final Resource S_PRKHQ = M_MODEL.createResource( "http://www.geonames.org/ontology#S.PRKHQ" ); + + public static final Resource S_PRN = M_MODEL.createResource( "http://www.geonames.org/ontology#S.PRN" ); + + public static final Resource S_PRNJ = M_MODEL.createResource( "http://www.geonames.org/ontology#S.PRNJ" ); + + public static final Resource S_PRNQ = M_MODEL.createResource( "http://www.geonames.org/ontology#S.PRNQ" ); + + public static final Resource S_PS = M_MODEL.createResource( "http://www.geonames.org/ontology#S.PS" ); + + public static final Resource S_PSH = M_MODEL.createResource( "http://www.geonames.org/ontology#S.PSH" ); + + public static final Resource S_PSTB = M_MODEL.createResource( "http://www.geonames.org/ontology#S.PSTB" ); + + public static final Resource S_PSTC = M_MODEL.createResource( "http://www.geonames.org/ontology#S.PSTC" ); + + public static final Resource S_PSTP = M_MODEL.createResource( "http://www.geonames.org/ontology#S.PSTP" ); + + public static final Resource S_PYR = M_MODEL.createResource( "http://www.geonames.org/ontology#S.PYR" ); + + public static final Resource S_PYRS = M_MODEL.createResource( "http://www.geonames.org/ontology#S.PYRS" ); + + public static final Resource S_QUAY = M_MODEL.createResource( "http://www.geonames.org/ontology#S.QUAY" ); + + public static final Resource S_RDCR = M_MODEL.createResource( "http://www.geonames.org/ontology#S.RDCR" ); + + public static final Resource S_RECG = M_MODEL.createResource( "http://www.geonames.org/ontology#S.RECG" ); + + public static final Resource S_RECR = M_MODEL.createResource( "http://www.geonames.org/ontology#S.RECR" ); + + public static final Resource S_REST = M_MODEL.createResource( "http://www.geonames.org/ontology#S.REST" ); + + public static final Resource S_RET = M_MODEL.createResource( "http://www.geonames.org/ontology#S.RET" ); + + public static final Resource S_RHSE = M_MODEL.createResource( "http://www.geonames.org/ontology#S.RHSE" ); + + public static final Resource S_RKRY = M_MODEL.createResource( "http://www.geonames.org/ontology#S.RKRY" ); + + public static final Resource S_RLG = M_MODEL.createResource( "http://www.geonames.org/ontology#S.RLG" ); + + public static final Resource S_RLGR = M_MODEL.createResource( "http://www.geonames.org/ontology#S.RLGR" ); + + public static final Resource S_RNCH = M_MODEL.createResource( "http://www.geonames.org/ontology#S.RNCH" ); + + public static final Resource S_RSD = M_MODEL.createResource( "http://www.geonames.org/ontology#S.RSD" ); + + public static final Resource S_RSGNL = M_MODEL.createResource( "http://www.geonames.org/ontology#S.RSGNL" ); + + public static final Resource S_RSRT = M_MODEL.createResource( "http://www.geonames.org/ontology#S.RSRT" ); + + public static final Resource S_RSTN = M_MODEL.createResource( "http://www.geonames.org/ontology#S.RSTN" ); + + public static final Resource S_RSTNQ = M_MODEL.createResource( "http://www.geonames.org/ontology#S.RSTNQ" ); + + public static final Resource S_RSTP = M_MODEL.createResource( "http://www.geonames.org/ontology#S.RSTP" ); + + public static final Resource S_RSTPQ = M_MODEL.createResource( "http://www.geonames.org/ontology#S.RSTPQ" ); + + public static final Resource S_RUIN = M_MODEL.createResource( "http://www.geonames.org/ontology#S.RUIN" ); + + public static final Resource S_SCH = M_MODEL.createResource( "http://www.geonames.org/ontology#S.SCH" ); + + public static final Resource S_SCHA = M_MODEL.createResource( "http://www.geonames.org/ontology#S.SCHA" ); + + public static final Resource S_SCHC = M_MODEL.createResource( "http://www.geonames.org/ontology#S.SCHC" ); + + public static final Resource S_SCHD = M_MODEL.createResource( "http://www.geonames.org/ontology#S.SCHD" ); + + public static final Resource S_SCHL = M_MODEL.createResource( "http://www.geonames.org/ontology#S.SCHL" ); + + public static final Resource S_SCHM = M_MODEL.createResource( "http://www.geonames.org/ontology#S.SCHM" ); + + public static final Resource S_SCHN = M_MODEL.createResource( "http://www.geonames.org/ontology#S.SCHN" ); + + public static final Resource S_SCHT = M_MODEL.createResource( "http://www.geonames.org/ontology#S.SCHT" ); + + public static final Resource S_SECP = M_MODEL.createResource( "http://www.geonames.org/ontology#S.SECP" ); + + public static final Resource S_SHPF = M_MODEL.createResource( "http://www.geonames.org/ontology#S.SHPF" ); + + public static final Resource S_SHRN = M_MODEL.createResource( "http://www.geonames.org/ontology#S.SHRN" ); + + public static final Resource S_SHSE = M_MODEL.createResource( "http://www.geonames.org/ontology#S.SHSE" ); + + public static final Resource S_SLCE = M_MODEL.createResource( "http://www.geonames.org/ontology#S.SLCE" ); + + public static final Resource S_SNTR = M_MODEL.createResource( "http://www.geonames.org/ontology#S.SNTR" ); + + public static final Resource S_SPA = M_MODEL.createResource( "http://www.geonames.org/ontology#S.SPA" ); + + public static final Resource S_SPLY = M_MODEL.createResource( "http://www.geonames.org/ontology#S.SPLY" ); + + public static final Resource S_SQR = M_MODEL.createResource( "http://www.geonames.org/ontology#S.SQR" ); + + public static final Resource S_STBL = M_MODEL.createResource( "http://www.geonames.org/ontology#S.STBL" ); + + public static final Resource S_STDM = M_MODEL.createResource( "http://www.geonames.org/ontology#S.STDM" ); + + public static final Resource S_STNB = M_MODEL.createResource( "http://www.geonames.org/ontology#S.STNB" ); + + public static final Resource S_STNC = M_MODEL.createResource( "http://www.geonames.org/ontology#S.STNC" ); + + public static final Resource S_STNE = M_MODEL.createResource( "http://www.geonames.org/ontology#S.STNE" ); + + public static final Resource S_STNF = M_MODEL.createResource( "http://www.geonames.org/ontology#S.STNF" ); + + public static final Resource S_STNI = M_MODEL.createResource( "http://www.geonames.org/ontology#S.STNI" ); + + public static final Resource S_STNM = M_MODEL.createResource( "http://www.geonames.org/ontology#S.STNM" ); + + public static final Resource S_STNR = M_MODEL.createResource( "http://www.geonames.org/ontology#S.STNR" ); + + public static final Resource S_STNS = M_MODEL.createResource( "http://www.geonames.org/ontology#S.STNS" ); + + public static final Resource S_STNW = M_MODEL.createResource( "http://www.geonames.org/ontology#S.STNW" ); + + public static final Resource S_STPS = M_MODEL.createResource( "http://www.geonames.org/ontology#S.STPS" ); + + public static final Resource S_SWT = M_MODEL.createResource( "http://www.geonames.org/ontology#S.SWT" ); + + public static final Resource S_THTR = M_MODEL.createResource( "http://www.geonames.org/ontology#S.THTR" ); + + public static final Resource S_TMB = M_MODEL.createResource( "http://www.geonames.org/ontology#S.TMB" ); + + public static final Resource S_TMPL = M_MODEL.createResource( "http://www.geonames.org/ontology#S.TMPL" ); + + public static final Resource S_TNKD = M_MODEL.createResource( "http://www.geonames.org/ontology#S.TNKD" ); + + public static final Resource S_TOWR = M_MODEL.createResource( "http://www.geonames.org/ontology#S.TOWR" ); + + public static final Resource S_TRANT = M_MODEL.createResource( "http://www.geonames.org/ontology#S.TRANT" ); + + public static final Resource S_TRIG = M_MODEL.createResource( "http://www.geonames.org/ontology#S.TRIG" ); + + public static final Resource S_TRMO = M_MODEL.createResource( "http://www.geonames.org/ontology#S.TRMO" ); + + public static final Resource S_TWO = M_MODEL.createResource( "http://www.geonames.org/ontology#S.TWO" ); + + public static final Resource S_UNIO = M_MODEL.createResource( "http://www.geonames.org/ontology#S.UNIO" ); + + public static final Resource S_UNIP = M_MODEL.createResource( "http://www.geonames.org/ontology#S.UNIP" ); + + public static final Resource S_UNIV = M_MODEL.createResource( "http://www.geonames.org/ontology#S.UNIV" ); + + public static final Resource S_USGE = M_MODEL.createResource( "http://www.geonames.org/ontology#S.USGE" ); + + public static final Resource S_VETF = M_MODEL.createResource( "http://www.geonames.org/ontology#S.VETF" ); + + public static final Resource S_WALL = M_MODEL.createResource( "http://www.geonames.org/ontology#S.WALL" ); + + public static final Resource S_WALLA = M_MODEL.createResource( "http://www.geonames.org/ontology#S.WALLA" ); + + public static final Resource S_WEIR = M_MODEL.createResource( "http://www.geonames.org/ontology#S.WEIR" ); + + public static final Resource S_WHRF = M_MODEL.createResource( "http://www.geonames.org/ontology#S.WHRF" ); + + public static final Resource S_WRCK = M_MODEL.createResource( "http://www.geonames.org/ontology#S.WRCK" ); + + public static final Resource S_WTRW = M_MODEL.createResource( "http://www.geonames.org/ontology#S.WTRW" ); + + public static final Resource S_ZNF = M_MODEL.createResource( "http://www.geonames.org/ontology#S.ZNF" ); + + public static final Resource S_ZOO = M_MODEL.createResource( "http://www.geonames.org/ontology#S.ZOO" ); + + /**

mountain, hill, rock, ...

*/ + public static final Resource T = M_MODEL.createResource( "http://www.geonames.org/ontology#T" ); + + public static final Resource T_ASPH = M_MODEL.createResource( "http://www.geonames.org/ontology#T.ASPH" ); + + public static final Resource T_ATOL = M_MODEL.createResource( "http://www.geonames.org/ontology#T.ATOL" ); + + public static final Resource T_BAR = M_MODEL.createResource( "http://www.geonames.org/ontology#T.BAR" ); + + public static final Resource T_BCH = M_MODEL.createResource( "http://www.geonames.org/ontology#T.BCH" ); + + public static final Resource T_BCHS = M_MODEL.createResource( "http://www.geonames.org/ontology#T.BCHS" ); + + public static final Resource T_BDLD = M_MODEL.createResource( "http://www.geonames.org/ontology#T.BDLD" ); + + public static final Resource T_BLDR = M_MODEL.createResource( "http://www.geonames.org/ontology#T.BLDR" ); + + public static final Resource T_BLHL = M_MODEL.createResource( "http://www.geonames.org/ontology#T.BLHL" ); + + public static final Resource T_BLOW = M_MODEL.createResource( "http://www.geonames.org/ontology#T.BLOW" ); + + public static final Resource T_BNCH = M_MODEL.createResource( "http://www.geonames.org/ontology#T.BNCH" ); + + public static final Resource T_BUTE = M_MODEL.createResource( "http://www.geonames.org/ontology#T.BUTE" ); + + public static final Resource T_CAPE = M_MODEL.createResource( "http://www.geonames.org/ontology#T.CAPE" ); + + public static final Resource T_CFT = M_MODEL.createResource( "http://www.geonames.org/ontology#T.CFT" ); + + public static final Resource T_CLDA = M_MODEL.createResource( "http://www.geonames.org/ontology#T.CLDA" ); + + public static final Resource T_CLF = M_MODEL.createResource( "http://www.geonames.org/ontology#T.CLF" ); + + public static final Resource T_CNYN = M_MODEL.createResource( "http://www.geonames.org/ontology#T.CNYN" ); + + public static final Resource T_CONE = M_MODEL.createResource( "http://www.geonames.org/ontology#T.CONE" ); + + public static final Resource T_CRDR = M_MODEL.createResource( "http://www.geonames.org/ontology#T.CRDR" ); + + public static final Resource T_CRQ = M_MODEL.createResource( "http://www.geonames.org/ontology#T.CRQ" ); + + public static final Resource T_CRQS = M_MODEL.createResource( "http://www.geonames.org/ontology#T.CRQS" ); + + public static final Resource T_CRTR = M_MODEL.createResource( "http://www.geonames.org/ontology#T.CRTR" ); + + public static final Resource T_CUET = M_MODEL.createResource( "http://www.geonames.org/ontology#T.CUET" ); + + public static final Resource T_DLTA = M_MODEL.createResource( "http://www.geonames.org/ontology#T.DLTA" ); + + public static final Resource T_DPR = M_MODEL.createResource( "http://www.geonames.org/ontology#T.DPR" ); + + public static final Resource T_DSRT = M_MODEL.createResource( "http://www.geonames.org/ontology#T.DSRT" ); + + public static final Resource T_DUNE = M_MODEL.createResource( "http://www.geonames.org/ontology#T.DUNE" ); + + public static final Resource T_DVD = M_MODEL.createResource( "http://www.geonames.org/ontology#T.DVD" ); + + public static final Resource T_ERG = M_MODEL.createResource( "http://www.geonames.org/ontology#T.ERG" ); + + public static final Resource T_FAN = M_MODEL.createResource( "http://www.geonames.org/ontology#T.FAN" ); + + public static final Resource T_FORD = M_MODEL.createResource( "http://www.geonames.org/ontology#T.FORD" ); + + public static final Resource T_FSR = M_MODEL.createResource( "http://www.geonames.org/ontology#T.FSR" ); + + public static final Resource T_GAP = M_MODEL.createResource( "http://www.geonames.org/ontology#T.GAP" ); + + public static final Resource T_GRGE = M_MODEL.createResource( "http://www.geonames.org/ontology#T.GRGE" ); + + public static final Resource T_HDLD = M_MODEL.createResource( "http://www.geonames.org/ontology#T.HDLD" ); + + public static final Resource T_HLL = M_MODEL.createResource( "http://www.geonames.org/ontology#T.HLL" ); + + public static final Resource T_HLLS = M_MODEL.createResource( "http://www.geonames.org/ontology#T.HLLS" ); + + public static final Resource T_HMCK = M_MODEL.createResource( "http://www.geonames.org/ontology#T.HMCK" ); + + public static final Resource T_HMDA = M_MODEL.createResource( "http://www.geonames.org/ontology#T.HMDA" ); + + public static final Resource T_INTF = M_MODEL.createResource( "http://www.geonames.org/ontology#T.INTF" ); + + public static final Resource T_ISL = M_MODEL.createResource( "http://www.geonames.org/ontology#T.ISL" ); + + public static final Resource T_ISLET = M_MODEL.createResource( "http://www.geonames.org/ontology#T.ISLET" ); + + public static final Resource T_ISLF = M_MODEL.createResource( "http://www.geonames.org/ontology#T.ISLF" ); + + public static final Resource T_ISLM = M_MODEL.createResource( "http://www.geonames.org/ontology#T.ISLM" ); + + public static final Resource T_ISLS = M_MODEL.createResource( "http://www.geonames.org/ontology#T.ISLS" ); + + public static final Resource T_ISLT = M_MODEL.createResource( "http://www.geonames.org/ontology#T.ISLT" ); + + public static final Resource T_ISLX = M_MODEL.createResource( "http://www.geonames.org/ontology#T.ISLX" ); + + public static final Resource T_ISTH = M_MODEL.createResource( "http://www.geonames.org/ontology#T.ISTH" ); + + public static final Resource T_KRST = M_MODEL.createResource( "http://www.geonames.org/ontology#T.KRST" ); + + public static final Resource T_LAVA = M_MODEL.createResource( "http://www.geonames.org/ontology#T.LAVA" ); + + public static final Resource T_LEV = M_MODEL.createResource( "http://www.geonames.org/ontology#T.LEV" ); + + public static final Resource T_MESA = M_MODEL.createResource( "http://www.geonames.org/ontology#T.MESA" ); + + public static final Resource T_MND = M_MODEL.createResource( "http://www.geonames.org/ontology#T.MND" ); + + public static final Resource T_MRN = M_MODEL.createResource( "http://www.geonames.org/ontology#T.MRN" ); + + public static final Resource T_MT = M_MODEL.createResource( "http://www.geonames.org/ontology#T.MT" ); + + public static final Resource T_MTS = M_MODEL.createResource( "http://www.geonames.org/ontology#T.MTS" ); + + public static final Resource T_NKM = M_MODEL.createResource( "http://www.geonames.org/ontology#T.NKM" ); + + public static final Resource T_NTK = M_MODEL.createResource( "http://www.geonames.org/ontology#T.NTK" ); + + public static final Resource T_NTKS = M_MODEL.createResource( "http://www.geonames.org/ontology#T.NTKS" ); + + public static final Resource T_PAN = M_MODEL.createResource( "http://www.geonames.org/ontology#T.PAN" ); + + public static final Resource T_PANS = M_MODEL.createResource( "http://www.geonames.org/ontology#T.PANS" ); + + public static final Resource T_PASS = M_MODEL.createResource( "http://www.geonames.org/ontology#T.PASS" ); + + public static final Resource T_PEN = M_MODEL.createResource( "http://www.geonames.org/ontology#T.PEN" ); + + public static final Resource T_PENX = M_MODEL.createResource( "http://www.geonames.org/ontology#T.PENX" ); + + public static final Resource T_PK = M_MODEL.createResource( "http://www.geonames.org/ontology#T.PK" ); + + public static final Resource T_PKS = M_MODEL.createResource( "http://www.geonames.org/ontology#T.PKS" ); + + public static final Resource T_PLAT = M_MODEL.createResource( "http://www.geonames.org/ontology#T.PLAT" ); + + public static final Resource T_PLATX = M_MODEL.createResource( "http://www.geonames.org/ontology#T.PLATX" ); + + public static final Resource T_PLDR = M_MODEL.createResource( "http://www.geonames.org/ontology#T.PLDR" ); + + public static final Resource T_PLN = M_MODEL.createResource( "http://www.geonames.org/ontology#T.PLN" ); + + public static final Resource T_PLNX = M_MODEL.createResource( "http://www.geonames.org/ontology#T.PLNX" ); + + public static final Resource T_PROM = M_MODEL.createResource( "http://www.geonames.org/ontology#T.PROM" ); + + public static final Resource T_PT = M_MODEL.createResource( "http://www.geonames.org/ontology#T.PT" ); + + public static final Resource T_PTS = M_MODEL.createResource( "http://www.geonames.org/ontology#T.PTS" ); + + public static final Resource T_RDGB = M_MODEL.createResource( "http://www.geonames.org/ontology#T.RDGB" ); + + public static final Resource T_RDGE = M_MODEL.createResource( "http://www.geonames.org/ontology#T.RDGE" ); + + public static final Resource T_REG = M_MODEL.createResource( "http://www.geonames.org/ontology#T.REG" ); + + public static final Resource T_RK = M_MODEL.createResource( "http://www.geonames.org/ontology#T.RK" ); + + public static final Resource T_RKFL = M_MODEL.createResource( "http://www.geonames.org/ontology#T.RKFL" ); + + public static final Resource T_RKS = M_MODEL.createResource( "http://www.geonames.org/ontology#T.RKS" ); + + public static final Resource T_SAND = M_MODEL.createResource( "http://www.geonames.org/ontology#T.SAND" ); + + public static final Resource T_SBED = M_MODEL.createResource( "http://www.geonames.org/ontology#T.SBED" ); + + public static final Resource T_SCRP = M_MODEL.createResource( "http://www.geonames.org/ontology#T.SCRP" ); + + public static final Resource T_SDL = M_MODEL.createResource( "http://www.geonames.org/ontology#T.SDL" ); + + public static final Resource T_SHOR = M_MODEL.createResource( "http://www.geonames.org/ontology#T.SHOR" ); + + public static final Resource T_SINK = M_MODEL.createResource( "http://www.geonames.org/ontology#T.SINK" ); + + public static final Resource T_SLID = M_MODEL.createResource( "http://www.geonames.org/ontology#T.SLID" ); + + public static final Resource T_SLP = M_MODEL.createResource( "http://www.geonames.org/ontology#T.SLP" ); + + public static final Resource T_SPIT = M_MODEL.createResource( "http://www.geonames.org/ontology#T.SPIT" ); + + public static final Resource T_SPUR = M_MODEL.createResource( "http://www.geonames.org/ontology#T.SPUR" ); + + public static final Resource T_TAL = M_MODEL.createResource( "http://www.geonames.org/ontology#T.TAL" ); + + public static final Resource T_TRGD = M_MODEL.createResource( "http://www.geonames.org/ontology#T.TRGD" ); + + public static final Resource T_TRR = M_MODEL.createResource( "http://www.geonames.org/ontology#T.TRR" ); + + public static final Resource T_UPLD = M_MODEL.createResource( "http://www.geonames.org/ontology#T.UPLD" ); + + public static final Resource T_VAL = M_MODEL.createResource( "http://www.geonames.org/ontology#T.VAL" ); + + public static final Resource T_VALG = M_MODEL.createResource( "http://www.geonames.org/ontology#T.VALG" ); + + public static final Resource T_VALS = M_MODEL.createResource( "http://www.geonames.org/ontology#T.VALS" ); + + public static final Resource T_VALX = M_MODEL.createResource( "http://www.geonames.org/ontology#T.VALX" ); + + public static final Resource T_VLC = M_MODEL.createResource( "http://www.geonames.org/ontology#T.VLC" ); + + /**

undersea

*/ + public static final Resource U = M_MODEL.createResource( "http://www.geonames.org/ontology#U" ); + + public static final Resource U_APNU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.APNU" ); + + public static final Resource U_ARCU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.ARCU" ); + + public static final Resource U_ARRU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.ARRU" ); + + public static final Resource U_BDLU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.BDLU" ); + + public static final Resource U_BKSU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.BKSU" ); + + public static final Resource U_BNCU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.BNCU" ); + + public static final Resource U_BNKU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.BNKU" ); + + public static final Resource U_BSNU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.BSNU" ); + + public static final Resource U_CDAU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.CDAU" ); + + public static final Resource U_CNSU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.CNSU" ); + + public static final Resource U_CNYU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.CNYU" ); + + public static final Resource U_CRSU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.CRSU" ); + + public static final Resource U_DEPU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.DEPU" ); + + public static final Resource U_EDGU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.EDGU" ); + + public static final Resource U_ESCU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.ESCU" ); + + public static final Resource U_FANU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.FANU" ); + + public static final Resource U_FLTU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.FLTU" ); + + public static final Resource U_FRKU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.FRKU" ); + + public static final Resource U_FRSU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.FRSU" ); + + public static final Resource U_FRZU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.FRZU" ); + + public static final Resource U_FURU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.FURU" ); + + public static final Resource U_GAPU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.GAPU" ); + + public static final Resource U_GLYU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.GLYU" ); + + public static final Resource U_HLLU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.HLLU" ); + + public static final Resource U_HLSU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.HLSU" ); + + public static final Resource U_HOLU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.HOLU" ); + + public static final Resource U_KNLU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.KNLU" ); + + public static final Resource U_KNSU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.KNSU" ); + + public static final Resource U_LDGU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.LDGU" ); + + public static final Resource U_LEVU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.LEVU" ); + + public static final Resource U_MDVU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.MDVU" ); + + public static final Resource U_MESU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.MESU" ); + + public static final Resource U_MNDU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.MNDU" ); + + public static final Resource U_MOTU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.MOTU" ); + + public static final Resource U_MTSU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.MTSU" ); + + public static final Resource U_MTU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.MTU" ); + + public static final Resource U_PKSU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.PKSU" ); + + public static final Resource U_PKU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.PKU" ); + + public static final Resource U_PLFU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.PLFU" ); + + public static final Resource U_PLNU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.PLNU" ); + + public static final Resource U_PLTU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.PLTU" ); + + public static final Resource U_PNLU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.PNLU" ); + + public static final Resource U_PRVU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.PRVU" ); + + public static final Resource U_RAVU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.RAVU" ); + + public static final Resource U_RDGU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.RDGU" ); + + public static final Resource U_RDSU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.RDSU" ); + + public static final Resource U_RFSU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.RFSU" ); + + public static final Resource U_RFU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.RFU" ); + + public static final Resource U_RISU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.RISU" ); + + public static final Resource U_RMPU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.RMPU" ); + + public static final Resource U_RNGU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.RNGU" ); + + public static final Resource U_SCNU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.SCNU" ); + + public static final Resource U_SCSU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.SCSU" ); + + public static final Resource U_SDLU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.SDLU" ); + + public static final Resource U_SHFU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.SHFU" ); + + public static final Resource U_SHLU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.SHLU" ); + + public static final Resource U_SHSU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.SHSU" ); + + public static final Resource U_SHVU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.SHVU" ); + + public static final Resource U_SILU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.SILU" ); + + public static final Resource U_SLPU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.SLPU" ); + + public static final Resource U_SMSU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.SMSU" ); + + public static final Resource U_SMU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.SMU" ); + + public static final Resource U_SPRU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.SPRU" ); + + public static final Resource U_TERU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.TERU" ); + + public static final Resource U_TMSU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.TMSU" ); + + public static final Resource U_TMTU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.TMTU" ); + + public static final Resource U_TNGU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.TNGU" ); + + public static final Resource U_TRGU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.TRGU" ); + + public static final Resource U_TRNU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.TRNU" ); + + public static final Resource U_VALU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.VALU" ); + + public static final Resource U_VLSU = M_MODEL.createResource( "http://www.geonames.org/ontology#U.VLSU" ); + + /**

forest, heath, ...

*/ + public static final Resource V = M_MODEL.createResource( "http://www.geonames.org/ontology#V" ); + + public static final Resource V_BUSH = M_MODEL.createResource( "http://www.geonames.org/ontology#V.BUSH" ); + + public static final Resource V_CULT = M_MODEL.createResource( "http://www.geonames.org/ontology#V.CULT" ); + + public static final Resource V_FRST = M_MODEL.createResource( "http://www.geonames.org/ontology#V.FRST" ); + + public static final Resource V_FRSTF = M_MODEL.createResource( "http://www.geonames.org/ontology#V.FRSTF" ); + + public static final Resource V_GRSLD = M_MODEL.createResource( "http://www.geonames.org/ontology#V.GRSLD" ); + + public static final Resource V_GRVC = M_MODEL.createResource( "http://www.geonames.org/ontology#V.GRVC" ); + + public static final Resource V_GRVO = M_MODEL.createResource( "http://www.geonames.org/ontology#V.GRVO" ); + + public static final Resource V_GRVP = M_MODEL.createResource( "http://www.geonames.org/ontology#V.GRVP" ); + + public static final Resource V_GRVPN = M_MODEL.createResource( "http://www.geonames.org/ontology#V.GRVPN" ); + + public static final Resource V_HTH = M_MODEL.createResource( "http://www.geonames.org/ontology#V.HTH" ); + + public static final Resource V_MDW = M_MODEL.createResource( "http://www.geonames.org/ontology#V.MDW" ); + + public static final Resource V_OCH = M_MODEL.createResource( "http://www.geonames.org/ontology#V.OCH" ); + + public static final Resource V_SCRB = M_MODEL.createResource( "http://www.geonames.org/ontology#V.SCRB" ); + + public static final Resource V_TREE = M_MODEL.createResource( "http://www.geonames.org/ontology#V.TREE" ); + + public static final Resource V_TUND = M_MODEL.createResource( "http://www.geonames.org/ontology#V.TUND" ); + + public static final Resource V_VIN = M_MODEL.createResource( "http://www.geonames.org/ontology#V.VIN" ); + + public static final Resource V_VINS = M_MODEL.createResource( "http://www.geonames.org/ontology#V.VINS" ); + +} diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/writer/rdf/PAV.java b/orcid-api-common/src/main/java/org/orcid/api/common/writer/rdf/PAV.java new file mode 100644 index 00000000000..7525af5ce2a --- /dev/null +++ b/orcid-api-common/src/main/java/org/orcid/api/common/writer/rdf/PAV.java @@ -0,0 +1,273 @@ +/* CVS $Id: $ */ +package org.orcid.api.common.writer.rdf.vocabs; +import org.apache.jena.rdf.model.*; + +/** + * Vocabulary definitions from C:\Users\angel\Documents\ORCID\development\tmp\deleteme\ORCID-Source\orcid-api-common/src/main/vocabs/pav.rdf + * @author Auto-generated by schemagen on 26 Mar 2026 15:47 + */ +public class PAV { + /**

The RDF model that holds the vocabulary terms

*/ + private static final Model M_MODEL = ModelFactory.createDefaultModel(); + + /**

The namespace of the vocabulary as a string

*/ + public static final String NS = "http://purl.org/pav/"; + + /**

The namespace of the vocabulary as a string

+ * @return namespace as String + * @see #NS */ + public static String getURI() {return NS;} + + /**

The namespace of the vocabulary as a resource

*/ + public static final Resource NAMESPACE = M_MODEL.createResource( NS ); + + /**

The ontology's owl:versionInfo as a string

*/ + public static final String VERSION_INFO = "2.1.1"; + + /**

An agent that originated or gave existence to the work that is expressed by + * the digital resource. The author of the content of a resource may be different + * from the creator of the resource representation (although they are often the + * same). See pav:createdBy for a discussion. The date of authoring can be expressed + * using pav:authoredOn - note however in the case of multiple authors that there + * is no relationship in PAV identifying which agent contributed when or what. + * If capturing such lineage is desired, it should be additionally expressed + * using activity-centric provenance vocabularies, for instance with prov:wasGeneratedBy + * and prov:qualifiedAssocation.

+ */ + public static final Property authoredBy = M_MODEL.createProperty( "http://purl.org/pav/authoredBy" ); + + /**

The date this resource was authored. pav:authoredBy gives the authoring agent. + * Note that pav:authoredOn is different from pav:createdOn, although they are + * often the same. See pav:createdBy for a discussion.

+ */ + public static final Property authoredOn = M_MODEL.createProperty( "http://purl.org/pav/authoredOn" ); + + /**

The resource was contributed to by the given agent. The agent provided any + * sort of help in conceiving the work that is expressed by the digital artifact. + * Superproperty of pav:authoredBy and pav:curatedBy. Note that as pav:contributedBy + * identifies only agents that contributed to the work, knowledge or intellectual + * property, and not agents that made the digital artifact or representation + * (pav:createdBy), thus this property can be considered more precise than dct:contributor. + * See pav:createdBy for a discussion. The date of contribution can be expressed + * using pav:contributedOn - note however in the case of multiple contributors + * that there is no relationship in PAV identifying which agent contributed when + * or what. If capturing such lineage is desired, it should be additionally expressed + * using activity-centric provenance vocabularies, for instance with prov:wasGeneratedBy + * and prov:qualifiedAssocation.

+ */ + public static final Property contributedBy = M_MODEL.createProperty( "http://purl.org/pav/contributedBy" ); + + /**

The date this resource was contributed to. pav:contributedBy provides the + * agent(s) that contributed.

+ */ + public static final Property contributedOn = M_MODEL.createProperty( "http://purl.org/pav/contributedOn" ); + + /**

The geo-location of the agents when creating the resource (pav:createdBy). + * For instance a photographer takes a picture of the Eiffel Tower while standing + * in front of it.

+ */ + public static final Property createdAt = M_MODEL.createProperty( "http://purl.org/pav/createdAt" ); + + /**

An agent primary responsible for making the digital artifact or resource representation. + * This property is distinct from forming the content, which is indicated with + * pav:contributedBy or its subproperties; pav:authoredBy, which identifies who + * authored the knowledge expressed by this resource; and pav:curatedBy, which + * identifies who curated the knowledge into its current form. pav:createdBy + * is more specific than dct:createdBy - which might or might not be interpreted + * to cover this creator. For instance, the author wrote 'this species has bigger + * wings than normal' in his log book. The curator, going through the log book + * and identifying important knowledge, formalizes this as 'locus perculus has + * wingspan > 0.5m'. The creator enters this knowledge as a digital resource + * in the knowledge system, thus creating the digital artifact (say as JSON, + * RDF, XML or HTML). A different example is a news article. pav:authoredBy indicates + * the journalist who wrote the article. pav:contributedBy can indicate the artist + * who added an illustration. pav:curatedBy can indicate the editor who made + * the article conform to the news paper's style. pav:createdBy can indicate + * who put the article on the web site. The software tool used by the creator + * to make the digital resource (say Protege, Wordpress or OpenOffice) can be + * indicated with pav:createdWith. The date the digital resource was created + * can be indicated with pav:createdOn. The location the agent was at when creating + * the digital resource can be made using pav:createdAt.

+ */ + public static final Property createdBy = M_MODEL.createProperty( "http://purl.org/pav/createdBy" ); + + /**

The date of creation of the resource. pav:createdBy provides the agent(s) + * that created the resource.

+ */ + public static final Property createdOn = M_MODEL.createProperty( "http://purl.org/pav/createdOn" ); + + /**

The software/tool used by the creator (pav:createdBy) when making the digital + * resource, for instance a word processor or an annotation tool. A more independent + * software agent that creates the resource without direct interaction by a human + * creator should instead should instead by indicated using pav:createdBy.

+ */ + public static final Property createdWith = M_MODEL.createProperty( "http://purl.org/pav/createdWith" ); + + /**

An agent specialist responsible for shaping the expression in an appropriate + * format. Often the primary agent responsible for ensuring the quality of the + * representation. The curator may be different from the creator of the author + * (pav:authoredBy) and the creator of the digital resource (pav:createdBy). + * The date of curating can be expressed using pav:curatedOn - note however in + * the case of multiple curators that there is no relationship in PAV identifying + * which agent contributed when or what. If capturing such lineage is desired, + * it should be additionally expressed using activity-centric provenance vocabularies, + * for instance with prov:wasGeneratedBy and prov:qualifiedAssocation.

+ */ + public static final Property curatedBy = M_MODEL.createProperty( "http://purl.org/pav/curatedBy" ); + + /**

The date this resource was curated. pav:curatedBy gives the agent(s) that + * performed the curation.

+ */ + public static final Property curatedOn = M_MODEL.createProperty( "http://purl.org/pav/curatedOn" ); + + /**

Provided for backwards compatibility with PAV 1.2 only. Use instead the inverse + * pav:curatedBy.

+ */ + public static final Property curates = M_MODEL.createProperty( "http://purl.org/pav/curates" ); + + /**

Derived from a different resource. Derivation conserns itself with derived + * knowledge. If this resource has the same content as the other resource, but + * has simply been transcribed to fit a different model (like XML -> RDF or + * SQL -> CVS), use pav:importedFrom. If a resource was simply retrieved, + * use pav:retrievedFrom. If the content has however been further refined or + * modified, pav:derivedFrom should be used. Details about who performed the + * derivation may be indicated with pav:contributedBy and its subproperties.

+ */ + public static final Property derivedFrom = M_MODEL.createProperty( "http://purl.org/pav/derivedFrom" ); + + /**

An entity responsible for importing the data. The importer is usually a software + * entity which has done the transcription from the original source. Note that + * pav:importedBy may overlap with pav:createdWith. The source for the import + * should be given with pav:importedFrom. The time of the import should be given + * with pav:importedOn. See pav:importedFrom for a discussion of import vs. retrieve + * vs. derived.

+ */ + public static final Property importedBy = M_MODEL.createProperty( "http://purl.org/pav/importedBy" ); + + /**

The original source of imported information. Import means that the content + * has been preserved, but transcribed somehow, for instance to fit a different + * representation model. Examples of import are when the original was JSON and + * the current resource is RDF, or where the original was an document scan, and + * this resource is the plain text found through OCR. The imported resource does + * not have to be complete, but should be consistent with the knowledge conveyed + * by the original resource. If additional knowledge has been contributed, pav:derivedFrom + * would be more appropriate. If the resource has been copied verbatim from the + * original representation (e.g. downloaded), use pav:retrievedFrom. To indicate + * which agent(s) performed the import, use pav:importedBy. Use pav:importedOn + * to indicate when it happened.

+ */ + public static final Property importedFrom = M_MODEL.createProperty( "http://purl.org/pav/importedFrom" ); + + /**

The date this resource was imported from a source (pav:importedFrom). Note + * that pav:importedOn may overlap with pav:createdOn, but in cases where they + * differ, the import time indicates the time of the retrieval and transcription + * of the original source, while the creation time indicates when the final resource + * was made, for instance after user approval. If the source is later reimported, + * this should be indicated with pav:lastRefreshedOn. The source of the import + * should be given with pav:importedFrom. The agent that performed the import + * should be given with pav:importedBy. See pav:importedFrom for a discussion + * about import vs. retrieval.

+ */ + public static final Property importedOn = M_MODEL.createProperty( "http://purl.org/pav/importedOn" ); + + /**

The date of the last re-import of the resource. This property is used in addition + * to pav:importedOn if this version has been updated due to a re-import. If + * the re-import created a new resource rather than refreshing an existing, then + * pav:importedOn should be used together with pav:previousVersion.

+ */ + public static final Property lastRefreshedOn = M_MODEL.createProperty( "http://purl.org/pav/lastRefreshedOn" ); + + /**

The date of the last update of the resource. An update is a change which did + * not warrant making a new resource related using pav:previousVersion, for instance + * correcting a spelling mistake.

+ */ + public static final Property lastUpdateOn = M_MODEL.createProperty( "http://purl.org/pav/lastUpdateOn" ); + + /**

The previous version of a resource in a lineage. For instance a news article + * updated to correct factual information would point to the previous version + * of the article with pav:previousVersion. If however the content has significantly + * changed so that the two resources no longer share lineage (say a new news + * article that talks about the same facts), they should be related using pav:derivedFrom. + * A version number of this resource can be provided using the data property + * pav:version.

+ */ + public static final Property previousVersion = M_MODEL.createProperty( "http://purl.org/pav/previousVersion" ); + + /**

The original provider of the encoded information (e.g. PubMed, UniProt, Science + * Commons). The provider might not coincide with the dct:publisher, which would + * describe the current publisher of the resource. For instance if the resource + * was retrieved, imported or derived from a source, that source was published + * by the original provider. pav:providedBy provides a shortcut to indicate the + * original provider on the new resource.

+ */ + public static final Property providedBy = M_MODEL.createProperty( "http://purl.org/pav/providedBy" ); + + /**

An entity responsible for retrieving the data from an external source. The + * retrieving agent is usually a software entity, which has done the retrieval + * from the original source without performing any transcription. The source + * that was retrieved should be given with pav:retrievedFrom. The time of the + * retrieval should be indicated using pav:retrievedOn. See pav:importedFrom + * for a discussion of import vs. retrieve vs. derived.

+ */ + public static final Property retrievedBy = M_MODEL.createProperty( "http://purl.org/pav/retrievedBy" ); + + /**

The URI where a resource has been retrieved from. Retrieval indicates that + * this resource has the same representation as the original resource. If the + * resource has been somewhat transformed, use pav:importedFrom instead. The + * time of the retrieval should be indicated using pav:retrievedOn. The agent + * may be indicated with pav:retrievedBy.

+ */ + public static final Property retrievedFrom = M_MODEL.createProperty( "http://purl.org/pav/retrievedFrom" ); + + /**

The date the source for this resource was retrieved. The source that was retrieved + * should be indicated with pav:retrievedFrom. The agent that performed the retrieval + * may be specified with pav:retrievedBy.

+ */ + public static final Property retrievedOn = M_MODEL.createProperty( "http://purl.org/pav/retrievedOn" ); + + /**

The resource is related to a given source which was accessed or consulted + * (but not retrieved, imported or derived from). This access can be detailed + * with pav:sourceAccessedBy and pav:sourceAccessedOn. For instance, a curator + * (pav:curatedBy) might have consulted figures in a published paper to confirm + * that a dataset was correctly pav:importedFrom the paper's supplementary CSV + * file.

+ */ + public static final Property sourceAccessedAt = M_MODEL.createProperty( "http://purl.org/pav/sourceAccessedAt" ); + + /**

The resource is related to a source which was accessed or consulted by the + * given agent. The source(s) should be specified using pav:sourceAccessedAt, + * and the time with pav:sourceAccessedOn. For instance, the given agent could + * be a curator (also pav:curatedBy) which consulted figures in a published paper + * to confirm that a dataset was correctly pav:importedFrom the paper's supplementary + * CSV file.

+ */ + public static final Property sourceAccessedBy = M_MODEL.createProperty( "http://purl.org/pav/sourceAccessedBy" ); + + /**

The resource is related to a source which was originally accessed or consulted + * on the given date as part of creating or authoring the resource. The source(s) + * should be specified using pav:sourceAccessedAt. If the source is subsequently + * checked again (say to verify validity), this should be indicated with pav:sourceLastAccessedOn. + * In the case multiple sources being accessed at different times or by different + * agents, PAV does not distinguish who accessed when what. If such details are + * required, they may be provided by additionally using prov:qualifiedInfluence.

+ */ + public static final Property sourceAccessedOn = M_MODEL.createProperty( "http://purl.org/pav/sourceAccessedOn" ); + + /**

The resource is related to a source which was last accessed or consulted on + * the given date. The source(s) should be specified using pav:sourceAccessedAt. + * Usage of this property indicates that the source has been checked previously, + * which the initial time should be indicated with pav:sourceAccessedOn. This + * property can be useful together with pav:lastRefreshedOn or pav:lastUpdateOn + * in order to indicate a re-import or update, but could also be used alone, + * for instance when a source was simply verified and no further action was taken + * for the resource,

+ */ + public static final Property sourceLastAccessedOn = M_MODEL.createProperty( "http://purl.org/pav/sourceLastAccessedOn" ); + + /**

The version number of a resource. This is a freetext string, typical values + * are "1.5" or "21". The URI identifying the previous version can be provided + * using prov:previousVersion.

+ */ + public static final Property version = M_MODEL.createProperty( "http://purl.org/pav/version" ); + +} diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/writer/rdf/PROV.java b/orcid-api-common/src/main/java/org/orcid/api/common/writer/rdf/PROV.java new file mode 100644 index 00000000000..3d27d7e47ac --- /dev/null +++ b/orcid-api-common/src/main/java/org/orcid/api/common/writer/rdf/PROV.java @@ -0,0 +1,503 @@ +/* CVS $Id: $ */ +package org.orcid.api.common.writer.rdf.vocabs; +import org.apache.jena.rdf.model.*; + +/** + * Vocabulary definitions from C:\Users\angel\Documents\ORCID\development\tmp\deleteme\ORCID-Source\orcid-api-common/src/main/vocabs/prov-o.rdf + * @author Auto-generated by schemagen on 26 Mar 2026 15:47 + */ +public class PROV { + /**

The RDF model that holds the vocabulary terms

*/ + private static final Model M_MODEL = ModelFactory.createDefaultModel(); + + /**

The namespace of the vocabulary as a string

*/ + public static final String NS = "http://www.w3.org/ns/prov#"; + + /**

The namespace of the vocabulary as a string

+ * @return namespace as String + * @see #NS */ + public static String getURI() {return NS;} + + /**

The namespace of the vocabulary as a resource

*/ + public static final Resource NAMESPACE = M_MODEL.createResource( NS ); + + /**

An object property to express the accountability of an agent towards another + * agent. The subordinate agent acted on behalf of the responsible agent in an + * actual activity.

+ */ + public static final Property actedOnBehalfOf = M_MODEL.createProperty( "http://www.w3.org/ns/prov#actedOnBehalfOf" ); + + public static final Property activity = M_MODEL.createProperty( "http://www.w3.org/ns/prov#activity" ); + + public static final Property agent = M_MODEL.createProperty( "http://www.w3.org/ns/prov#agent" ); + + public static final Property alternateOf = M_MODEL.createProperty( "http://www.w3.org/ns/prov#alternateOf" ); + + public static final Property aq = M_MODEL.createProperty( "http://www.w3.org/ns/prov#aq" ); + + /**

The Location of any resource.This property has multiple RDFS domains to suit + * multiple OWL Profiles. See <a href="#owl-profile">PROV-O OWL Profile</a>.

+ */ + public static final Property atLocation = M_MODEL.createProperty( "http://www.w3.org/ns/prov#atLocation" ); + + /**

The time at which an InstantaneousEvent occurred, in the form of xsd:dateTime.

*/ + public static final Property atTime = M_MODEL.createProperty( "http://www.w3.org/ns/prov#atTime" ); + + /**

Classify prov-o terms into three categories, including 'starting-point', 'qualifed', + * and 'extended'. This classification is used by the prov-o html document to + * gently introduce prov-o terms to its users.

+ */ + public static final Property category = M_MODEL.createProperty( "http://www.w3.org/ns/prov#category" ); + + /**

Classify prov-o terms into six components according to prov-dm, including + * 'agents-responsibility', 'alternate', 'annotations', 'collections', 'derivations', + * and 'entities-activities'. This classification is used so that readers of + * prov-o specification can find its correspondence with the prov-dm specification.

+ */ + public static final Property component = M_MODEL.createProperty( "http://www.w3.org/ns/prov#component" ); + + /**

A reference to the principal section of the PROV-CONSTRAINTS document that + * describes this concept.

+ */ + public static final Property constraints = M_MODEL.createProperty( "http://www.w3.org/ns/prov#constraints" ); + + /**

A definition quoted from PROV-DM or PROV-CONSTRAINTS that describes the concept + * expressed with this OWL term.

+ */ + public static final Property definition = M_MODEL.createProperty( "http://www.w3.org/ns/prov#definition" ); + + /**

A reference to the principal section of the PROV-DM document that describes + * this concept.

+ */ + public static final Property dm = M_MODEL.createProperty( "http://www.w3.org/ns/prov#dm" ); + + /**

A note by the OWL development team about how this term expresses the PROV-DM + * concept, or how it should be used in context of semantic web or linked data.

+ */ + public static final Property editorialNote = M_MODEL.createProperty( "http://www.w3.org/ns/prov#editorialNote" ); + + /**

When the prov-o term does not have a definition drawn from prov-dm, and the + * prov-o editor provides one.

+ */ + public static final Property editorsDefinition = M_MODEL.createProperty( "http://www.w3.org/ns/prov#editorsDefinition" ); + + /**

The time at which an activity ended. See also prov:startedAtTime.

*/ + public static final Property endedAtTime = M_MODEL.createProperty( "http://www.w3.org/ns/prov#endedAtTime" ); + + public static final Property entity = M_MODEL.createProperty( "http://www.w3.org/ns/prov#entity" ); + + public static final Property generated = M_MODEL.createProperty( "http://www.w3.org/ns/prov#generated" ); + + /**

The time at which an entity was completely created and is available for use.

*/ + public static final Property generatedAtTime = M_MODEL.createProperty( "http://www.w3.org/ns/prov#generatedAtTime" ); + + /**

This property has multiple RDFS domains to suit multiple OWL Profiles. See + * <a href="#owl-profile">PROV-O OWL Profile</a>.The _optional_ Activity + * of an Influence, which used, generated, invalidated, or was the responsibility + * of some Entity. This property is _not_ used by ActivityInfluence (use prov:activity + * instead).

+ */ + public static final Property hadActivity = M_MODEL.createProperty( "http://www.w3.org/ns/prov#hadActivity" ); + + /**

The _optional_ Generation involved in an Entity's Derivation.

*/ + public static final Property hadGeneration = M_MODEL.createProperty( "http://www.w3.org/ns/prov#hadGeneration" ); + + public static final Property hadMember = M_MODEL.createProperty( "http://www.w3.org/ns/prov#hadMember" ); + + /**

The _optional_ Plan adopted by an Agent in Association with some Activity. + * Plan specifications are out of the scope of this specification.

+ */ + public static final Property hadPlan = M_MODEL.createProperty( "http://www.w3.org/ns/prov#hadPlan" ); + + public static final Property hadPrimarySource = M_MODEL.createProperty( "http://www.w3.org/ns/prov#hadPrimarySource" ); + + /**

The _optional_ Role that an Entity assumed in the context of an Activity. + * For example, :baking prov:used :spoon; prov:qualified [ a prov:Usage; prov:entity + * :spoon; prov:hadRole roles:mixing_implement ].This property has multiple RDFS + * domains to suit multiple OWL Profiles. See <a href="#owl-profile">PROV-O + * OWL Profile</a>.

+ */ + public static final Property hadRole = M_MODEL.createProperty( "http://www.w3.org/ns/prov#hadRole" ); + + /**

The _optional_ Usage involved in an Entity's Derivation.

*/ + public static final Property hadUsage = M_MODEL.createProperty( "http://www.w3.org/ns/prov#hadUsage" ); + + public static final Property influenced = M_MODEL.createProperty( "http://www.w3.org/ns/prov#influenced" ); + + /**

Subproperties of prov:influencer are used to cite the object of an unqualified + * PROV-O triple whose predicate is a subproperty of prov:wasInfluencedBy (e.g. + * prov:used, prov:wasGeneratedBy). prov:influencer is used much like rdf:object + * is used.

+ */ + public static final Property influencer = M_MODEL.createProperty( "http://www.w3.org/ns/prov#influencer" ); + + public static final Property invalidated = M_MODEL.createProperty( "http://www.w3.org/ns/prov#invalidated" ); + + /**

The time at which an entity was invalidated (i.e., no longer usable).

*/ + public static final Property invalidatedAtTime = M_MODEL.createProperty( "http://www.w3.org/ns/prov#invalidatedAtTime" ); + + /**

PROV-O does not define all property inverses. The directionalities defined + * in PROV-O should be given preference over those not defined. However, if users + * wish to name the inverse of a PROV-O property, the local name given by prov:inverse + * should be used.

+ */ + public static final Property inverse = M_MODEL.createProperty( "http://www.w3.org/ns/prov#inverse" ); + + /**

A reference to the principal section of the PROV-DM document that describes + * this concept.

+ */ + public static final Property n = M_MODEL.createProperty( "http://www.w3.org/ns/prov#n" ); + + /**

If this Activity prov:wasAssociatedWith Agent :ag, then it can qualify the + * Association using prov:qualifiedAssociation [ a prov:Association; prov:agent + * :ag; :foo :bar ].

+ */ + public static final Property qualifiedAssociation = M_MODEL.createProperty( "http://www.w3.org/ns/prov#qualifiedAssociation" ); + + /**

If this Entity prov:wasAttributedTo Agent :ag, then it can qualify how it + * was influenced using prov:qualifiedAttribution [ a prov:Attribution; prov:agent + * :ag; :foo :bar ].

+ */ + public static final Property qualifiedAttribution = M_MODEL.createProperty( "http://www.w3.org/ns/prov#qualifiedAttribution" ); + + /**

If this Activity prov:wasInformedBy Activity :a, then it can qualify how it + * was influenced using prov:qualifiedCommunication [ a prov:Communication; prov:activity + * :a; :foo :bar ].

+ */ + public static final Property qualifiedCommunication = M_MODEL.createProperty( "http://www.w3.org/ns/prov#qualifiedCommunication" ); + + /**

If this Agent prov:actedOnBehalfOf Agent :ag, then it can qualify how with + * prov:qualifiedResponsibility [ a prov:Responsibility; prov:agent :ag; :foo + * :bar ].

+ */ + public static final Property qualifiedDelegation = M_MODEL.createProperty( "http://www.w3.org/ns/prov#qualifiedDelegation" ); + + /**

If this Entity prov:wasDerivedFrom Entity :e, then it can qualify how it was + * derived using prov:qualifiedDerivation [ a prov:Derivation; prov:entity :e; + * :foo :bar ].

+ */ + public static final Property qualifiedDerivation = M_MODEL.createProperty( "http://www.w3.org/ns/prov#qualifiedDerivation" ); + + /**

If this Activity prov:wasEndedBy Entity :e1, then it can qualify how it was + * ended using prov:qualifiedEnd [ a prov:End; prov:entity :e1; :foo :bar ].

+ */ + public static final Property qualifiedEnd = M_MODEL.createProperty( "http://www.w3.org/ns/prov#qualifiedEnd" ); + + /**

This annotation property links a subproperty of prov:wasInfluencedBy with + * the subclass of prov:Influence and the qualifying property that are used to + * qualify it. Example annotation: prov:wasGeneratedBy prov:qualifiedForm prov:qualifiedGeneration, + * prov:Generation . Then this unqualified assertion: :entity1 prov:wasGeneratedBy + * :activity1 . can be qualified by adding: :entity1 prov:qualifiedGeneration + * :entity1Gen . :entity1Gen a prov:Generation, prov:Influence; prov:activity + * :activity1; :customValue 1337 . Note how the value of the unqualified influence + * (prov:wasGeneratedBy :activity1) is mirrored as the value of the prov:activity + * (or prov:entity, or prov:agent) property on the influence class.

+ */ + public static final Property qualifiedForm = M_MODEL.createProperty( "http://www.w3.org/ns/prov#qualifiedForm" ); + + /**

If this Activity prov:generated Entity :e, then it can qualify how it performed + * the Generation using prov:qualifiedGeneration [ a prov:Generation; prov:entity + * :e; :foo :bar ].

+ */ + public static final Property qualifiedGeneration = M_MODEL.createProperty( "http://www.w3.org/ns/prov#qualifiedGeneration" ); + + /**

Because prov:qualifiedInfluence is a broad relation, the more specific relations + * (qualifiedCommunication, qualifiedDelegation, qualifiedEnd, etc.) should be + * used when applicable.

+ */ + public static final Property qualifiedInfluence = M_MODEL.createProperty( "http://www.w3.org/ns/prov#qualifiedInfluence" ); + + /**

If this Entity prov:wasInvalidatedBy Activity :a, then it can qualify how + * it was invalidated using prov:qualifiedInvalidation [ a prov:Invalidation; + * prov:activity :a; :foo :bar ].

+ */ + public static final Property qualifiedInvalidation = M_MODEL.createProperty( "http://www.w3.org/ns/prov#qualifiedInvalidation" ); + + /**

If this Entity prov:hadPrimarySource Entity :e, then it can qualify how using + * prov:qualifiedPrimarySource [ a prov:PrimarySource; prov:entity :e; :foo :bar + * ].

+ */ + public static final Property qualifiedPrimarySource = M_MODEL.createProperty( "http://www.w3.org/ns/prov#qualifiedPrimarySource" ); + + /**

If this Entity prov:wasQuotedFrom Entity :e, then it can qualify how using + * prov:qualifiedQuotation [ a prov:Quotation; prov:entity :e; :foo :bar ].

+ */ + public static final Property qualifiedQuotation = M_MODEL.createProperty( "http://www.w3.org/ns/prov#qualifiedQuotation" ); + + /**

If this Entity prov:wasRevisionOf Entity :e, then it can qualify how it was + * revised using prov:qualifiedRevision [ a prov:Revision; prov:entity :e; :foo + * :bar ].

+ */ + public static final Property qualifiedRevision = M_MODEL.createProperty( "http://www.w3.org/ns/prov#qualifiedRevision" ); + + /**

If this Activity prov:wasStartedBy Entity :e1, then it can qualify how it + * was started using prov:qualifiedStart [ a prov:Start; prov:entity :e1; :foo + * :bar ].

+ */ + public static final Property qualifiedStart = M_MODEL.createProperty( "http://www.w3.org/ns/prov#qualifiedStart" ); + + /**

If this Activity prov:used Entity :e, then it can qualify how it used it using + * prov:qualifiedUsage [ a prov:Usage; prov:entity :e; :foo :bar ].

+ */ + public static final Property qualifiedUsage = M_MODEL.createProperty( "http://www.w3.org/ns/prov#qualifiedUsage" ); + + public static final Property sharesDefinitionWith = M_MODEL.createProperty( "http://www.w3.org/ns/prov#sharesDefinitionWith" ); + + public static final Property specializationOf = M_MODEL.createProperty( "http://www.w3.org/ns/prov#specializationOf" ); + + /**

The time at which an activity started. See also prov:endedAtTime.

*/ + public static final Property startedAtTime = M_MODEL.createProperty( "http://www.w3.org/ns/prov#startedAtTime" ); + + /**

Classes and properties used to qualify relationships are annotated with prov:unqualifiedForm + * to indicate the property used to assert an unqualified provenance relation.

+ */ + public static final Property unqualifiedForm = M_MODEL.createProperty( "http://www.w3.org/ns/prov#unqualifiedForm" ); + + /**

A prov:Entity that was used by this prov:Activity. For example, :baking prov:used + * :spoon, :egg, :oven .

+ */ + public static final Property used = M_MODEL.createProperty( "http://www.w3.org/ns/prov#used" ); + + public static final Property value = M_MODEL.createProperty( "http://www.w3.org/ns/prov#value" ); + + /**

An prov:Agent that had some (unspecified) responsibility for the occurrence + * of this prov:Activity.

+ */ + public static final Property wasAssociatedWith = M_MODEL.createProperty( "http://www.w3.org/ns/prov#wasAssociatedWith" ); + + /**

Attribution is the ascribing of an entity to an agent.

*/ + public static final Property wasAttributedTo = M_MODEL.createProperty( "http://www.w3.org/ns/prov#wasAttributedTo" ); + + /**

The more specific subproperties of prov:wasDerivedFrom (i.e., prov:wasQuotedFrom, + * prov:wasRevisionOf, prov:hadPrimarySource) should be used when applicable.

+ */ + public static final Property wasDerivedFrom = M_MODEL.createProperty( "http://www.w3.org/ns/prov#wasDerivedFrom" ); + + /**

End is when an activity is deemed to have ended. An end may refer to an entity, + * known as trigger, that terminated the activity.

+ */ + public static final Property wasEndedBy = M_MODEL.createProperty( "http://www.w3.org/ns/prov#wasEndedBy" ); + + public static final Property wasGeneratedBy = M_MODEL.createProperty( "http://www.w3.org/ns/prov#wasGeneratedBy" ); + + /**

This property has multiple RDFS domains to suit multiple OWL Profiles. See + * <a href="#owl-profile">PROV-O OWL Profile</a>.Because prov:wasInfluencedBy + * is a broad relation, its more specific subproperties (e.g. prov:wasInformedBy, + * prov:actedOnBehalfOf, prov:wasEndedBy, etc.) should be used when applicable.

+ */ + public static final Property wasInfluencedBy = M_MODEL.createProperty( "http://www.w3.org/ns/prov#wasInfluencedBy" ); + + /**

An activity a2 is dependent on or informed by another activity a1, by way + * of some unspecified entity that is generated by a1 and used by a2.

+ */ + public static final Property wasInformedBy = M_MODEL.createProperty( "http://www.w3.org/ns/prov#wasInformedBy" ); + + public static final Property wasInvalidatedBy = M_MODEL.createProperty( "http://www.w3.org/ns/prov#wasInvalidatedBy" ); + + /**

An entity is derived from an original entity by copying, or 'quoting', some + * or all of it.

+ */ + public static final Property wasQuotedFrom = M_MODEL.createProperty( "http://www.w3.org/ns/prov#wasQuotedFrom" ); + + /**

A revision is a derivation that revises an entity into a revised version.

*/ + public static final Property wasRevisionOf = M_MODEL.createProperty( "http://www.w3.org/ns/prov#wasRevisionOf" ); + + /**

Start is when an activity is deemed to have started. A start may refer to + * an entity, known as trigger, that initiated the activity.

+ */ + public static final Property wasStartedBy = M_MODEL.createProperty( "http://www.w3.org/ns/prov#wasStartedBy" ); + + public static final Resource Activity = M_MODEL.createResource( "http://www.w3.org/ns/prov#Activity" ); + + /**

It is not recommended that the type ActivityInfluence be asserted without + * also asserting one of its more specific subclasses.ActivityInfluence provides + * additional descriptions of an Activity's binary influence upon any other kind + * of resource. Instances of ActivityInfluence use the prov:activity property + * to cite the influencing Activity.

+ */ + public static final Resource ActivityInfluence = M_MODEL.createResource( "http://www.w3.org/ns/prov#ActivityInfluence" ); + + public static final Resource Agent = M_MODEL.createResource( "http://www.w3.org/ns/prov#Agent" ); + + /**

It is not recommended that the type AgentInfluence be asserted without also + * asserting one of its more specific subclasses.AgentInfluence provides additional + * descriptions of an Agent's binary influence upon any other kind of resource. + * Instances of AgentInfluence use the prov:agent property to cite the influencing + * Agent.

+ */ + public static final Resource AgentInfluence = M_MODEL.createResource( "http://www.w3.org/ns/prov#AgentInfluence" ); + + /**

An instance of prov:Association provides additional descriptions about the + * binary prov:wasAssociatedWith relation from an prov:Activity to some prov:Agent + * that had some responsiblity for it. For example, :baking prov:wasAssociatedWith + * :baker; prov:qualifiedAssociation [ a prov:Association; prov:agent :baker; + * :foo :bar ].

+ */ + public static final Resource Association = M_MODEL.createResource( "http://www.w3.org/ns/prov#Association" ); + + /**

An instance of prov:Attribution provides additional descriptions about the + * binary prov:wasAttributedTo relation from an prov:Entity to some prov:Agent + * that had some responsible for it. For example, :cake prov:wasAttributedTo + * :baker; prov:qualifiedAttribution [ a prov:Attribution; prov:entity :baker; + * :foo :bar ].

+ */ + public static final Resource Attribution = M_MODEL.createResource( "http://www.w3.org/ns/prov#Attribution" ); + + /**

Note that there are kinds of bundles (e.g. handwritten letters, audio recordings, + * etc.) that are not expressed in PROV-O, but can be still be described by PROV-O.

+ */ + public static final Resource Bundle = M_MODEL.createResource( "http://www.w3.org/ns/prov#Bundle" ); + + public static final Resource Collection = M_MODEL.createResource( "http://www.w3.org/ns/prov#Collection" ); + + /**

An instance of prov:Communication provides additional descriptions about the + * binary prov:wasInformedBy relation from an informed prov:Activity to the prov:Activity + * that informed it. For example, :you_jumping_off_bridge prov:wasInformedBy + * :everyone_else_jumping_off_bridge; prov:qualifiedCommunication [ a prov:Communication; + * prov:activity :everyone_else_jumping_off_bridge; :foo :bar ].

+ */ + public static final Resource Communication = M_MODEL.createResource( "http://www.w3.org/ns/prov#Communication" ); + + /**

An instance of prov:Delegation provides additional descriptions about the + * binary prov:actedOnBehalfOf relation from a performing prov:Agent to some + * prov:Agent for whom it was performed. For example, :mixing prov:wasAssociatedWith + * :toddler . :toddler prov:actedOnBehalfOf :mother; prov:qualifiedDelegation + * [ a prov:Delegation; prov:entity :mother; :foo :bar ].

+ */ + public static final Resource Delegation = M_MODEL.createResource( "http://www.w3.org/ns/prov#Delegation" ); + + /**

An instance of prov:Derivation provides additional descriptions about the + * binary prov:wasDerivedFrom relation from some derived prov:Entity to another + * prov:Entity from which it was derived. For example, :chewed_bubble_gum prov:wasDerivedFrom + * :unwrapped_bubble_gum; prov:qualifiedDerivation [ a prov:Derivation; prov:entity + * :unwrapped_bubble_gum; :foo :bar ].The more specific forms of prov:Derivation + * (i.e., prov:Revision, prov:Quotation, prov:PrimarySource) should be asserted + * if they apply.

+ */ + public static final Resource Derivation = M_MODEL.createResource( "http://www.w3.org/ns/prov#Derivation" ); + + public static final Resource EmptyCollection = M_MODEL.createResource( "http://www.w3.org/ns/prov#EmptyCollection" ); + + /**

An instance of prov:End provides additional descriptions about the binary + * prov:wasEndedBy relation from some ended prov:Activity to an prov:Entity that + * ended it. For example, :ball_game prov:wasEndedBy :buzzer; prov:qualifiedEnd + * [ a prov:End; prov:entity :buzzer; :foo :bar; prov:atTime '2012-03-09T08:05:08-05:00'^^xsd:dateTime + * ].

+ */ + public static final Resource End = M_MODEL.createResource( "http://www.w3.org/ns/prov#End" ); + + public static final Resource Entity = M_MODEL.createResource( "http://www.w3.org/ns/prov#Entity" ); + + /**

It is not recommended that the type EntityInfluence be asserted without also + * asserting one of its more specific subclasses.EntityInfluence provides additional + * descriptions of an Entity's binary influence upon any other kind of resource. + * Instances of EntityInfluence use the prov:entity property to cite the influencing + * Entity.

+ */ + public static final Resource EntityInfluence = M_MODEL.createResource( "http://www.w3.org/ns/prov#EntityInfluence" ); + + /**

An instance of prov:Generation provides additional descriptions about the + * binary prov:wasGeneratedBy relation from a generated prov:Entity to the prov:Activity + * that generated it. For example, :cake prov:wasGeneratedBy :baking; prov:qualifiedGeneration + * [ a prov:Generation; prov:activity :baking; :foo :bar ].

+ */ + public static final Resource Generation = M_MODEL.createResource( "http://www.w3.org/ns/prov#Generation" ); + + /**

Because prov:Influence is a broad relation, its most specific subclasses (e.g. + * prov:Communication, prov:Delegation, prov:End, prov:Revision, etc.) should + * be used when applicable.An instance of prov:Influence provides additional + * descriptions about the binary prov:wasInfluencedBy relation from some influenced + * Activity, Entity, or Agent to the influencing Activity, Entity, or Agent. + * For example, :stomach_ache prov:wasInfluencedBy :spoon; prov:qualifiedInfluence + * [ a prov:Influence; prov:entity :spoon; :foo :bar ] . Because prov:Influence + * is a broad relation, the more specific relations (Communication, Delegation, + * End, etc.) should be used when applicable.

+ */ + public static final Resource Influence = M_MODEL.createResource( "http://www.w3.org/ns/prov#Influence" ); + + /**

An instantaneous event, or event for short, happens in the world and marks + * a change in the world, in its activities and in its entities. The term 'event' + * is commonly used in process algebra with a similar meaning. Events represent + * communications or interactions; they are assumed to be atomic and instantaneous.

+ */ + public static final Resource InstantaneousEvent = M_MODEL.createResource( "http://www.w3.org/ns/prov#InstantaneousEvent" ); + + /**

An instance of prov:Invalidation provides additional descriptions about the + * binary prov:wasInvalidatedBy relation from an invalidated prov:Entity to the + * prov:Activity that invalidated it. For example, :uncracked_egg prov:wasInvalidatedBy + * :baking; prov:qualifiedInvalidation [ a prov:Invalidation; prov:activity :baking; + * :foo :bar ].

+ */ + public static final Resource Invalidation = M_MODEL.createResource( "http://www.w3.org/ns/prov#Invalidation" ); + + public static final Resource Location = M_MODEL.createResource( "http://www.w3.org/ns/prov#Location" ); + + public static final Resource Organization = M_MODEL.createResource( "http://www.w3.org/ns/prov#Organization" ); + + public static final Resource Person = M_MODEL.createResource( "http://www.w3.org/ns/prov#Person" ); + + /**

There exist no prescriptive requirement on the nature of plans, their representation, + * the actions or steps they consist of, or their intended goals. Since plans + * may evolve over time, it may become necessary to track their provenance, so + * plans themselves are entities. Representing the plan explicitly in the provenance + * can be useful for various tasks: for example, to validate the execution as + * represented in the provenance record, to manage expectation failures, or to + * provide explanations.

+ */ + public static final Resource Plan = M_MODEL.createResource( "http://www.w3.org/ns/prov#Plan" ); + + /**

An instance of prov:PrimarySource provides additional descriptions about the + * binary prov:hadPrimarySource relation from some secondary prov:Entity to an + * earlier, primary prov:Entity. For example, :blog prov:hadPrimarySource :newsArticle; + * prov:qualifiedPrimarySource [ a prov:PrimarySource; prov:entity :newsArticle; + * :foo :bar ] .

+ */ + public static final Resource PrimarySource = M_MODEL.createResource( "http://www.w3.org/ns/prov#PrimarySource" ); + + /**

An instance of prov:Quotation provides additional descriptions about the binary + * prov:wasQuotedFrom relation from some taken prov:Entity from an earlier, larger + * prov:Entity. For example, :here_is_looking_at_you_kid prov:wasQuotedFrom :casablanca_script; + * prov:qualifiedQuotation [ a prov:Quotation; prov:entity :casablanca_script; + * :foo :bar ].

+ */ + public static final Resource Quotation = M_MODEL.createResource( "http://www.w3.org/ns/prov#Quotation" ); + + /**

An instance of prov:Revision provides additional descriptions about the binary + * prov:wasRevisionOf relation from some newer prov:Entity to an earlier prov:Entity. + * For example, :draft_2 prov:wasRevisionOf :draft_1; prov:qualifiedRevision + * [ a prov:Revision; prov:entity :draft_1; :foo :bar ].

+ */ + public static final Resource Revision = M_MODEL.createResource( "http://www.w3.org/ns/prov#Revision" ); + + public static final Resource Role = M_MODEL.createResource( "http://www.w3.org/ns/prov#Role" ); + + public static final Resource SoftwareAgent = M_MODEL.createResource( "http://www.w3.org/ns/prov#SoftwareAgent" ); + + /**

An instance of prov:Start provides additional descriptions about the binary + * prov:wasStartedBy relation from some started prov:Activity to an prov:Entity + * that started it. For example, :foot_race prov:wasStartedBy :bang; prov:qualifiedStart + * [ a prov:Start; prov:entity :bang; :foo :bar; prov:atTime '2012-03-09T08:05:08-05:00'^^xsd:dateTime + * ] .

+ */ + public static final Resource Start = M_MODEL.createResource( "http://www.w3.org/ns/prov#Start" ); + + /**

An instance of prov:Usage provides additional descriptions about the binary + * prov:used relation from some prov:Activity to an prov:Entity that it used. + * For example, :keynote prov:used :podium; prov:qualifiedUsage [ a prov:Usage; + * prov:entity :podium; :foo :bar ].

+ */ + public static final Resource Usage = M_MODEL.createResource( "http://www.w3.org/ns/prov#Usage" ); + + public static final Resource prov_o = M_MODEL.createResource( "http://www.w3.org/ns/prov-o" ); + + /**

This document is published by the Provenance Working Group (http://www.w3.org/2011/prov/wiki/Main_Page). + * If you wish to make comments regarding this document, please send them to + * public-prov-comments@w3.org (subscribe public-prov-comments-request@w3.org, + * archives http://lists.w3.org/Archives/Public/public-prov-comments/). All feedback + * is welcome.

+ */ + public static final Resource __ = M_MODEL.createResource( "http://www.w3.org/ns/prov-o#" ); + + public static final Resource prov_o_20120312 = M_MODEL.createResource( "http://www.w3.org/ns/prov-o-20120312" ); + +} diff --git a/orcid-api-common/src/main/resources/orcid-oauth2-api-common-config.xml b/orcid-api-common/src/main/resources/orcid-oauth2-api-common-config.xml index 83f001f8a76..5eb39c9a220 100644 --- a/orcid-api-common/src/main/resources/orcid-oauth2-api-common-config.xml +++ b/orcid-api-common/src/main/resources/orcid-oauth2-api-common-config.xml @@ -57,4 +57,5 @@
+ \ No newline at end of file diff --git a/orcid-api-web/src/main/java/org/orcid/api/notificationsV2/server/delegator/impl/NotificationsApiServiceDelegatorImpl.java b/orcid-api-web/src/main/java/org/orcid/api/notificationsV2/server/delegator/impl/NotificationsApiServiceDelegatorImpl.java index 0e80bada0a4..a0ce3f0dd07 100644 --- a/orcid-api-web/src/main/java/org/orcid/api/notificationsV2/server/delegator/impl/NotificationsApiServiceDelegatorImpl.java +++ b/orcid-api-web/src/main/java/org/orcid/api/notificationsV2/server/delegator/impl/NotificationsApiServiceDelegatorImpl.java @@ -25,6 +25,7 @@ import org.orcid.core.manager.ProfileEntityCacheManager; import org.orcid.core.manager.ProfileEntityManager; import org.orcid.core.manager.SourceManager; +import org.orcid.core.oauth.OrcidBearerTokenAuthentication; import org.orcid.core.security.visibility.aop.AccessControl; import org.orcid.jaxb.model.message.ScopePathType; import org.orcid.jaxb.model.notification.permission_v2.NotificationPermissions; @@ -35,8 +36,6 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.oauth2.provider.OAuth2Authentication; -import org.springframework.security.oauth2.provider.OAuth2Request; import org.springframework.stereotype.Component; /** @@ -79,9 +78,9 @@ public Response findPermissionNotifications(String orcid) { // Get the client profile information Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); String clientId = null; - if (OAuth2Authentication.class.isAssignableFrom(authentication.getClass())) { - OAuth2Request authorizationRequest = ((OAuth2Authentication) authentication).getOAuth2Request(); - clientId = authorizationRequest.getClientId(); + if (OrcidBearerTokenAuthentication.class.isAssignableFrom(authentication.getClass())) { + OrcidBearerTokenAuthentication authDetails = (OrcidBearerTokenAuthentication) authentication; + clientId = authDetails.getClientId(); } NotificationPermissions notifications = notificationManager.findPermissionsByOrcidAndClient(orcid, clientId, 0, MAX_NOTIFICATIONS_AVAILABLE); diff --git a/orcid-api-web/src/main/java/org/orcid/api/notificationsV3/server/delegator/impl/NotificationsApiServiceDelegatorImpl.java b/orcid-api-web/src/main/java/org/orcid/api/notificationsV3/server/delegator/impl/NotificationsApiServiceDelegatorImpl.java index 35708ce47a4..b946ff05bf0 100644 --- a/orcid-api-web/src/main/java/org/orcid/api/notificationsV3/server/delegator/impl/NotificationsApiServiceDelegatorImpl.java +++ b/orcid-api-web/src/main/java/org/orcid/api/notificationsV3/server/delegator/impl/NotificationsApiServiceDelegatorImpl.java @@ -12,6 +12,7 @@ import org.orcid.core.manager.v3.NotificationValidationManager; import org.orcid.core.manager.v3.OrcidSecurityManager; import org.orcid.core.manager.v3.ProfileEntityManager; +import org.orcid.core.oauth.OrcidBearerTokenAuthentication; import org.orcid.core.security.visibility.aop.AccessControl; import org.orcid.jaxb.model.message.ScopePathType; import org.orcid.jaxb.model.v3.release.notification.Notification; @@ -20,8 +21,6 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.oauth2.provider.OAuth2Authentication; -import org.springframework.security.oauth2.provider.OAuth2Request; import org.springframework.stereotype.Component; import javax.annotation.Resource; @@ -81,9 +80,9 @@ public Response findPermissionNotifications(String orcid) { // Get the client profile information Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); String clientId = null; - if (OAuth2Authentication.class.isAssignableFrom(authentication.getClass())) { - OAuth2Request authorizationRequest = ((OAuth2Authentication) authentication).getOAuth2Request(); - clientId = authorizationRequest.getClientId(); + if (OrcidBearerTokenAuthentication.class.isAssignableFrom(authentication.getClass())) { + OrcidBearerTokenAuthentication authDetails = (OrcidBearerTokenAuthentication) authentication; + clientId = authDetails.getClientId(); } NotificationPermissions notifications = notificationManager.findPermissionsByOrcidAndClient(orcid, clientId, 0, MAX_NOTIFICATIONS_AVAILABLE); diff --git a/orcid-api-web/src/main/resources/orcid-api-security-context.xml b/orcid-api-web/src/main/resources/orcid-api-security-context.xml index 118e07a14ff..82e441238a5 100644 --- a/orcid-api-web/src/main/resources/orcid-api-security-context.xml +++ b/orcid-api-web/src/main/resources/orcid-api-security-context.xml @@ -29,7 +29,6 @@ - @@ -38,49 +37,33 @@ - - - - + - - - - + - + - - - - + - - - - + + + + - - - - - - - - - + + diff --git a/orcid-api-web/src/main/resources/orcid-api-web-context.xml b/orcid-api-web/src/main/resources/orcid-api-web-context.xml index a5e21fbb4e8..2c8855ad949 100644 --- a/orcid-api-web/src/main/resources/orcid-api-web-context.xml +++ b/orcid-api-web/src/main/resources/orcid-api-web-context.xml @@ -39,7 +39,6 @@ - diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/ProfileEntityManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/ProfileEntityManagerImpl.java index ef7abcf029d..49547e81a6f 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/ProfileEntityManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/ProfileEntityManagerImpl.java @@ -44,6 +44,7 @@ import org.orcid.pojo.ajaxForm.Text; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.cache.annotation.Cacheable; import org.springframework.context.NoSuchMessageException; import org.springframework.transaction.TransactionStatus; import org.springframework.transaction.annotation.Transactional; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/ProfileEntityManagerReadOnly.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/ProfileEntityManagerReadOnly.java index 4c0d563f5c3..8235234bc4a 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/ProfileEntityManagerReadOnly.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/ProfileEntityManagerReadOnly.java @@ -13,4 +13,6 @@ public interface ProfileEntityManagerReadOnly extends ManagerReadOnlyBase { Boolean isOrcidValidAsDelegate(String orcid); Boolean haveMemberPushedWorksOrAffiliationsToRecord(String orcid, String clientId); + + Boolean hasToken(String userName, long lastModified); } \ No newline at end of file diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ProfileEntityManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ProfileEntityManagerReadOnlyImpl.java index 02ec8989336..17cf0aae4b3 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ProfileEntityManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ProfileEntityManagerReadOnlyImpl.java @@ -3,11 +3,18 @@ import java.text.SimpleDateFormat; import org.orcid.core.manager.v3.read_only.ProfileEntityManagerReadOnly; +import org.orcid.persistence.dao.OrcidOauth2TokenDetailDao; import org.orcid.persistence.dao.ProfileDao; import org.orcid.persistence.jpa.entities.ProfileEntity; import org.orcid.pojo.ajaxForm.PojoUtil; +import org.springframework.cache.annotation.Cacheable; -public class ProfileEntityManagerReadOnlyImpl extends ManagerReadOnlyBaseImpl implements ProfileEntityManagerReadOnly { +import javax.annotation.Resource; + +public class ProfileEntityManagerReadOnlyImpl extends ManagerReadOnlyBaseImpl implements ProfileEntityManagerReadOnly { + + @Resource(name="orcidOauth2TokenDetailDaoReadOnly") + private OrcidOauth2TokenDetailDao orcidOauth2TokenDetailDaoReadOnly; protected ProfileDao profileDao; @@ -68,4 +75,10 @@ public Boolean haveMemberPushedWorksOrAffiliationsToRecord(String orcid, String } return profileDao.haveMemberPushedWorksOrAffiliationsToRecord(orcid, clientId); } + + @Override + @Cacheable(value = "count-tokens", key = "#userName.concat('-').concat(#lastModified)") + public Boolean hasToken(String userName, long lastModified) { + return orcidOauth2TokenDetailDaoReadOnly.hasToken(userName); + } } diff --git a/orcid-core/src/main/java/org/orcid/core/oauth/OrcidBearerTokenAuthentication.java b/orcid-core/src/main/java/org/orcid/core/oauth/OrcidBearerTokenAuthentication.java index aa7ccb9c396..5ac29a59814 100644 --- a/orcid-core/src/main/java/org/orcid/core/oauth/OrcidBearerTokenAuthentication.java +++ b/orcid-core/src/main/java/org/orcid/core/oauth/OrcidBearerTokenAuthentication.java @@ -24,10 +24,6 @@ public class OrcidBearerTokenAuthentication implements Authentication { private boolean authenticated = false; private String oboClientId; - private OrcidBearerTokenAuthentication() { - - } - private OrcidBearerTokenAuthentication(Builder builder) { this.clientId = builder.clientId; this.userOrcid = builder.userOrcid; diff --git a/orcid-core/src/main/java/org/orcid/core/oauth/OrcidMultiSecretAuthenticationProvider.java b/orcid-core/src/main/java/org/orcid/core/oauth/OrcidMultiSecretAuthenticationProvider.java new file mode 100644 index 00000000000..1498f8c7377 --- /dev/null +++ b/orcid-core/src/main/java/org/orcid/core/oauth/OrcidMultiSecretAuthenticationProvider.java @@ -0,0 +1,51 @@ +package org.orcid.core.oauth; + +import javax.annotation.Resource; + +import org.orcid.core.manager.ClientDetailsManager; +import org.orcid.core.manager.EncryptionManager; +import org.orcid.persistence.jpa.entities.ClientDetailsEntity; +import org.orcid.persistence.jpa.entities.ClientSecretEntity; +import org.springframework.security.authentication.BadCredentialsException; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.authentication.dao.DaoAuthenticationProvider; +import org.springframework.security.core.AuthenticationException; +import org.springframework.security.core.userdetails.UserDetails; + +/** + * + * @author Will Simpson + * + */ +public class OrcidMultiSecretAuthenticationProvider extends DaoAuthenticationProvider { + + @Resource + private ClientDetailsManager clientDetailsManager; + + @Resource + private EncryptionManager encryptionManager; + + @SuppressWarnings("deprecation") + @Override + protected void additionalAuthenticationChecks(UserDetails userDetails, UsernamePasswordAuthenticationToken authentication) throws AuthenticationException { + if (authentication.getCredentials() == null) { + logger.debug("Authentication failed: no credentials provided"); + throw new BadCredentialsException(messages.getMessage("AbstractUserDetailsAuthenticationProvider.badCredentials", "Bad credentials")); + } + + String presentedPassword = authentication.getCredentials().toString(); + + ClientDetailsEntity clientDetailsEntity = clientDetailsManager.findByClientId(userDetails.getUsername()); + for (ClientSecretEntity clientSecretEntity : clientDetailsEntity.getClientSecrets()) { + if(!presentedPassword.startsWith("{noop}")){ + presentedPassword = "{noop}" + presentedPassword; + } + if (getPasswordEncoder().matches(encryptionManager.decryptForInternalUse(clientSecretEntity.getClientSecret()), presentedPassword)) { + return; + } + } + logger.debug("Authentication failed: password does not match any value"); + throw new BadCredentialsException(messages.getMessage("AbstractUserDetailsAuthenticationProvider.badCredentials", "Bad credentials")); + } + +} \ No newline at end of file diff --git a/orcid-core/src/main/java/org/orcid/core/oauth/openid/OpenIDConnectDiscoveryService.java b/orcid-core/src/main/java/org/orcid/core/oauth/openid/OpenIDConnectDiscoveryService.java new file mode 100644 index 00000000000..90d586e8525 --- /dev/null +++ b/orcid-core/src/main/java/org/orcid/core/oauth/openid/OpenIDConnectDiscoveryService.java @@ -0,0 +1,125 @@ +package org.orcid.core.oauth.openid; + +import java.util.List; + +import org.springframework.beans.factory.annotation.Value; + +import com.google.common.collect.Lists; + +public class OpenIDConnectDiscoveryService { + + private OpenIDConnectDiscoveryServiceConfig config; + + public static class OpenIDConnectDiscoveryServiceConfig{ + @Value("${org.orcid.core.baseUri}") + private String path; + + private List token_endpoint_auth_signing_alg_values_supported = Lists.newArrayList("RS256"); + private List id_token_signing_alg_values_supported = Lists.newArrayList("RS256"); + private String userinfo_endpoint = "/oauth/userinfo"; + private String authorization_endpoint = "/oauth/authorize"; + private String token_endpoint = "/oauth/token"; + private String jwks_uri = "/oauth/jwks"; + private List claims_supported = Lists.newArrayList("family_name","given_name","name","auth_time","iss","sub"); + private List scopes_supported = Lists.newArrayList("openid"); + private List subject_types_supported = Lists.newArrayList("public"); + private List response_types_supported = Lists.newArrayList("code","id_token","id_token token"); + private Boolean claims_parameter_supported = false; + private List token_endpoint_auth_methods_supported = Lists.newArrayList("client_secret_post"); + private List grant_types_supported = Lists.newArrayList("authorization_code","implicit","refresh_token"); + public String getIssuer() { + return path; + } + public List getToken_endpoint_auth_signing_alg_values_supported() { + return token_endpoint_auth_signing_alg_values_supported; + } + public List getId_token_signing_alg_values_supported() { + return id_token_signing_alg_values_supported; + } + public String getUserinfo_endpoint() { + return path+userinfo_endpoint; + } + public String getAuthorization_endpoint() { + return path+authorization_endpoint; + } + public String getToken_endpoint() { + return path+token_endpoint; + } + public String getJwks_uri() { + return path+jwks_uri; + } + public List getClaims_supported() { + return claims_supported; + } + public List getScopes_supported() { + return scopes_supported; + } + public List getSubject_types_supported() { + return subject_types_supported; + } + public List getResponse_types_supported() { + return response_types_supported; + } + public Boolean getClaims_parameter_supported() { + return claims_parameter_supported; + } + public List getToken_endpoint_auth_methods_supported() { + return token_endpoint_auth_methods_supported; + } + public List getGrant_types_supported() { + return grant_types_supported; + } + + /* example: + * "provider_info":{ + "token_endpoint_auth_signing_alg_values_supported":[ + "RS256" + ], + "userinfo_endpoint":"https://qa.orcid.org/oauth/userinfo", + "authorization_endpoint":"https://qa.orcid.org/oauth/authorize", + "claims_supported":[ + "family_name", + "given_name", + "name", + "auth_time", + "iss", + "sub" + ], + "scopes_supported":[ + "openid" + ], + "grant_types_supported":[ + "authorization_code" + ], + "token_endpoint":"https://qa.orcid.org/oauth/token", + "id_token_signing_alg_values_supported":[ + "RS256" + ], + "subject_types_supported":[ + "public" + ], + "response_types_supported":[ + "code" + ], + "jwks_uri":"https://qa.orcid.org/oauth/jwks", + "claims_parameter_supported":"false", + "token_endpoint_auth_methods_supported":[ + "client_secret_basic" + ], + "claim_types_supported":[ + "normal" + ], + "issuer":"https://orcid.org" + } + + */ + } + + public OpenIDConnectDiscoveryService(OpenIDConnectDiscoveryServiceConfig config){ + this.config = config; + } + + public OpenIDConnectDiscoveryServiceConfig getConfig(){ + return config; + } +} diff --git a/orcid-core/src/main/java/org/orcid/core/oauth/openid/OpenIDConnectKeyService.java b/orcid-core/src/main/java/org/orcid/core/oauth/openid/OpenIDConnectKeyService.java new file mode 100644 index 00000000000..28e46200f25 --- /dev/null +++ b/orcid-core/src/main/java/org/orcid/core/oauth/openid/OpenIDConnectKeyService.java @@ -0,0 +1,128 @@ +package org.orcid.core.oauth.openid; + +import java.io.File; +import java.io.IOException; +import java.net.URISyntaxException; +import java.security.NoSuchAlgorithmException; +import java.text.ParseException; + +import com.nimbusds.jose.JOSEException; +import com.nimbusds.jose.JWSAlgorithm; +import com.nimbusds.jose.JWSHeader; +import com.nimbusds.jose.JWSSigner; +import com.nimbusds.jose.JWSVerifier; +import com.nimbusds.jose.crypto.RSASSASigner; +import com.nimbusds.jose.crypto.RSASSAVerifier; +import com.nimbusds.jose.jwk.JWKSet; +import com.nimbusds.jose.jwk.RSAKey; +import com.nimbusds.jwt.JWTClaimsSet; +import com.nimbusds.jwt.SignedJWT; + +public class OpenIDConnectKeyService { + + private final String keyID; + private final RSAKey publicJWK; + private final RSAKey privateJWK; + private final JWSAlgorithm defaultAlg = JWSAlgorithm.RS256; + + public static class OpenIDConnectKeyServiceConfig{ + String jwksLocation; + public String getJwksLocation() { + return jwksLocation; + } + public void setJwksLocation(String jwksLocation) { + this.jwksLocation = jwksLocation; + } + public String getJsonKey() { + return jsonKey; + } + public void setJsonKey(String jsonKey) { + this.jsonKey = jsonKey; + } + public String getKeyName() { + return keyName; + } + public void setKeyName(String keyName) { + this.keyName = keyName; + } + String jsonKey; + String keyName; + } + + /** Use a configured key ${org.orcid.openid.jwksLocation} or ${org.orcid.openid.jwksTestKey} + ${org.orcid.openid.jwksKeyName} + * + * New keys can be generated using this: https://mkjwk.org/ or a command line tool found here: https://connect2id.com/products/nimbus-jose-jwt/generator + * @throws NoSuchAlgorithmException + * @throws ParseException + * @throws IOException + * @throws URISyntaxException + */ + public OpenIDConnectKeyService(OpenIDConnectKeyServiceConfig config) throws NoSuchAlgorithmException, IOException, ParseException, URISyntaxException{ + if (config.jwksLocation !=null && !config.jwksLocation.isEmpty() && config.keyName!=null && !config.keyName.isEmpty()){ + //use a configured key. + this.keyID = config.keyName; + JWKSet keys = JWKSet.load(new File(config.jwksLocation)); + privateJWK = (RSAKey) keys.getKeyByKeyId(keyID); + publicJWK = privateJWK.toPublicJWK(); + }else if (config.jsonKey!=null){ + //use a key embedded in the properties file + this.keyID = config.keyName; + JWKSet keys = JWKSet.parse(config.jsonKey); + privateJWK = (RSAKey) keys.getKeyByKeyId(keyID); + publicJWK = privateJWK.toPublicJWK(); + }else + throw new RuntimeException("OpenID jwks not configured!"); + } + + /** Get the private key for signing + * + * @return + * @throws JOSEException + */ + public SignedJWT sign(JWTClaimsSet claims) throws JOSEException{ + JWSSigner signer = new RSASSASigner(privateJWK); + JWSHeader.Builder head = new JWSHeader.Builder(defaultAlg); + head.keyID(getDefaultKeyID()); + SignedJWT signedJWT = new SignedJWT(head.build(), claims); + signedJWT.sign(signer); + return signedJWT; + + /* For HMAC we could do the following. This may be useful for the implicit flow: + ClientDetailsEntity clientEntity = clientDetailsEntityCacheManager.retrieve(authentication.getOAuth2Request().getClientId()); + JWSSigner signer = new MACSigner(StringUtils.rightPad(clientEntity.getDecryptedClientSecret(), 32, "#").getBytes()); + signedJWT = new SignedJWT(new JWSHeader(JWSAlgorithm.HS256), claims.build()); + signedJWT.sign(signer); + */ + } + + /** Get the key ID we'll be using + * + * @return + */ + public String getDefaultKeyID(){ + return keyID; + } + + /** get the Json Web Key representation of the public key + * + * @return a JWK. use .toString() to generate JSON representation. + */ + public JWKSet getPublicJWK(){ + return new JWKSet(publicJWK); + } + + /** verify an id_token was signed by us + * + * @param signed + * @return + */ + public boolean verify(SignedJWT signed) { + try { + JWSVerifier verifier = new RSASSAVerifier(publicJWK); + return signed.verify(verifier); + } catch (JOSEException e) { + throw new RuntimeException(e); + } + } + +} diff --git a/orcid-core/src/main/java/org/orcid/core/oauth/openid/OpenIDConnectUserInfo.java b/orcid-core/src/main/java/org/orcid/core/oauth/openid/OpenIDConnectUserInfo.java new file mode 100644 index 00000000000..6db95f308e5 --- /dev/null +++ b/orcid-core/src/main/java/org/orcid/core/oauth/openid/OpenIDConnectUserInfo.java @@ -0,0 +1,67 @@ +package org.orcid.core.oauth.openid; + +import org.orcid.jaxb.model.v3.release.record.Person; +import org.orcid.jaxb.model.v3.release.record.PersonalDetails; + +public class OpenIDConnectUserInfo { + + private String id; + private String sub; + private String name; + private String family_name; + private String given_name; + + public OpenIDConnectUserInfo(){ + + } + + public OpenIDConnectUserInfo(String orcid, Person person, String path) { + this.id = path+"/"+orcid; + this.sub = orcid; + if (person.getName() != null){ + if (person.getName().getCreditName() != null){ + this.name = person.getName().getCreditName().getContent(); + } + if (person.getName().getFamilyName() != null){ + this.family_name = person.getName().getFamilyName().getContent(); + } + if (person.getName().getGivenNames() != null){ + this.given_name = person.getName().getGivenNames().getContent(); + } + } + } + public OpenIDConnectUserInfo(String orcid, PersonalDetails person, String path) { + this.id = path+"/"+orcid; + this.sub = orcid; + if (person.getName() != null){ + if (person.getName().getCreditName() != null){ + this.name = person.getName().getCreditName().getContent(); + } + if (person.getName().getFamilyName() != null){ + this.family_name = person.getName().getFamilyName().getContent(); + } + if (person.getName().getGivenNames() != null){ + this.given_name = person.getName().getGivenNames().getContent(); + } + } + } + public String getId() { + return id; + } + public void setId(String id) { + this.id = id; + } + public String getName() { + return name; + } + public String getSub() { + return sub; + } + public String getFamily_name() { + return family_name; + } + public String getGiven_name() { + return given_name; + } + +} diff --git a/orcid-core/src/test/java/org/orcid/core/manager/InstitutionalSignInManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/InstitutionalSignInManagerTest.java index d38317dc33f..53f347dc5fe 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/InstitutionalSignInManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/InstitutionalSignInManagerTest.java @@ -25,7 +25,6 @@ import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; -import org.orcid.core.oauth.OrcidOauth2TokenDetailService; import org.orcid.core.utils.JsonUtils; import org.orcid.persistence.dao.UserConnectionDao; import org.orcid.persistence.jpa.entities.ClientDetailsEntity; @@ -52,9 +51,6 @@ public class InstitutionalSignInManagerTest { @Mock private NotificationManager mock_notificationManager; - @Mock - private OrcidOauth2TokenDetailService mock_orcidOauth2TokenDetailService; - @Resource private UserConnectionDao userConnectionDao; @@ -64,9 +60,6 @@ public class InstitutionalSignInManagerTest { @Resource private NotificationManager notificationManager; - @Resource - private OrcidOauth2TokenDetailService orcidOauth2TokenDetailService; - @Resource private InstitutionalSignInManager institutionalSignInManager; @@ -76,7 +69,6 @@ public void before() { TargetProxyHelper.injectIntoProxy(institutionalSignInManager, "userConnectionDao", mock_userConnectionDao); TargetProxyHelper.injectIntoProxy(institutionalSignInManager, "clientDetailsEntityCacheManager", mock_clientDetailsEntityCacheManager); TargetProxyHelper.injectIntoProxy(institutionalSignInManager, "notificationManager", mock_notificationManager); - TargetProxyHelper.injectIntoProxy(institutionalSignInManager, "orcidOauth2TokenDetailService", mock_orcidOauth2TokenDetailService); } @After @@ -85,7 +77,6 @@ public void after() { TargetProxyHelper.injectIntoProxy(institutionalSignInManager, "userConnectionDao", userConnectionDao); TargetProxyHelper.injectIntoProxy(institutionalSignInManager, "clientDetailsEntityCacheManager", clientDetailsEntityCacheManager); TargetProxyHelper.injectIntoProxy(institutionalSignInManager, "notificationManager", notificationManager); - TargetProxyHelper.injectIntoProxy(institutionalSignInManager, "orcidOauth2TokenDetailService", orcidOauth2TokenDetailService); } @Test @@ -94,7 +85,6 @@ public void testCreateUserConnectionAndNotify() throws UnsupportedEncodingExcept when(mock_userConnectionDao.findByProviderIdAndProviderUserIdAndIdType(anyString(), anyString(), anyString())).thenReturn(null); when(mock_clientDetailsEntityCacheManager.retrieveByIdP(anyString())).thenReturn(testClient); - when(mock_orcidOauth2TokenDetailService.doesClientKnowUser(anyString(), anyString())).thenReturn(false); institutionalSignInManager.createUserConnectionAndNotify("idType", "remoteUserId", "displayName", "providerId", userOrcid, Collections. emptyMap()); @@ -109,7 +99,6 @@ public void testDontSendNotificationIfClientKnowUser() throws UnsupportedEncodin when(mock_userConnectionDao.findByProviderIdAndProviderUserIdAndIdType(anyString(), anyString(), anyString())).thenReturn(null); when(mock_clientDetailsEntityCacheManager.retrieveByIdP(anyString())).thenReturn(testClient); - when(mock_orcidOauth2TokenDetailService.doesClientKnowUser(anyString(), anyString())).thenReturn(true); institutionalSignInManager.createUserConnectionAndNotify("idType", "remoteUserId", "displayName", "providerId", userOrcid, Collections. emptyMap()); @@ -122,7 +111,6 @@ public void testDontSendNotificationIfClientKnowUser() throws UnsupportedEncodin public void testDontSendNotificationIfIdPNotLinkedToClient() throws UnsupportedEncodingException { when(mock_userConnectionDao.findByProviderIdAndProviderUserIdAndIdType(anyString(), anyString(), anyString())).thenReturn(null); when(mock_clientDetailsEntityCacheManager.retrieveByIdP(anyString())).thenThrow(new IllegalArgumentException()); - when(mock_orcidOauth2TokenDetailService.doesClientKnowUser(anyString(), anyString())).thenReturn(false); institutionalSignInManager.createUserConnectionAndNotify("idType", "remoteUserId", "displayName", "providerId", userOrcid, Collections. emptyMap()); @@ -136,7 +124,6 @@ public void testDontPersistIfUserConnectionAlreadyExists() throws UnsupportedEnc ClientDetailsEntity testClient = new ClientDetailsEntity(clientId); when(mock_userConnectionDao.findByProviderIdAndProviderUserIdAndIdType(anyString(), anyString(), anyString())).thenReturn(new UserconnectionEntity()); when(mock_clientDetailsEntityCacheManager.retrieveByIdP(anyString())).thenReturn(testClient); - when(mock_orcidOauth2TokenDetailService.doesClientKnowUser(anyString(), anyString())).thenReturn(false); institutionalSignInManager.createUserConnectionAndNotify("idType", "remoteUserId", "displayName", "providerId", userOrcid, Collections. emptyMap()); @@ -149,7 +136,6 @@ public void testDontPersistIfUserConnectionAlreadyExists() throws UnsupportedEnc public void testDontPersistAndDontNotify() throws UnsupportedEncodingException { when(mock_userConnectionDao.findByProviderIdAndProviderUserIdAndIdType(anyString(), anyString(), anyString())).thenReturn(new UserconnectionEntity()); when(mock_clientDetailsEntityCacheManager.retrieveByIdP(anyString())).thenThrow(new IllegalArgumentException()); - when(mock_orcidOauth2TokenDetailService.doesClientKnowUser(anyString(), anyString())).thenReturn(true); institutionalSignInManager.createUserConnectionAndNotify("idType", "remoteUserId", "displayName", "providerId", userOrcid, Collections. emptyMap()); @@ -211,5 +197,4 @@ public void testCheckHeaders() throws IOException { assertEquals("myself@testshib.org", mismatch.getOriginalValue()); assertEquals("myself@testshib.org;someoneelse@testshib.org", mismatch.getCurrentValue()); } - } diff --git a/orcid-core/src/test/java/org/orcid/core/manager/NotificationManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/NotificationManagerTest.java index 0271780d64d..e508905beb9 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/NotificationManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/NotificationManagerTest.java @@ -41,7 +41,6 @@ import org.orcid.core.api.OrcidApiConstants; import org.orcid.core.manager.impl.NotificationManagerImpl; import org.orcid.core.manager.read_only.EmailManagerReadOnly; -import org.orcid.core.oauth.OrcidOauth2TokenDetailService; import org.orcid.jaxb.model.common_v2.Locale; import org.orcid.jaxb.model.common_v2.Source; import org.orcid.jaxb.model.notification.amended_v2.AmendedSection; @@ -52,14 +51,12 @@ import org.orcid.jaxb.model.notification_v2.NotificationType; import org.orcid.model.notification.institutional_sign_in_v2.NotificationInstitutionalConnection; import org.orcid.persistence.dao.ClientDetailsDao; -import org.orcid.persistence.dao.GenericDao; import org.orcid.persistence.dao.NotificationDao; import org.orcid.persistence.dao.ProfileDao; import org.orcid.persistence.dao.ProfileEventDao; import org.orcid.persistence.dao.impl.NotificationDaoImpl; import org.orcid.persistence.jpa.entities.ClientDetailsEntity; import org.orcid.persistence.jpa.entities.NotificationEntity; -import org.orcid.persistence.jpa.entities.ProfileEventEntity; import org.orcid.persistence.jpa.entities.SourceEntity; import org.orcid.test.DBUnitTest; import org.orcid.test.OrcidJUnit4ClassRunner; @@ -89,9 +86,6 @@ public class NotificationManagerTest extends DBUnitTest { @Mock private NotificationDao mockNotificationDao; - @Mock - private OrcidOauth2TokenDetailService mockOrcidOauth2TokenDetailService; - @Mock private ProfileEntityCacheManager mockProfileEntityCacheManager; @@ -148,9 +142,6 @@ public void initMocks() throws Exception { TargetProxyHelper.injectIntoProxy(notificationManager, "encryptionManager", encryptionManager); TargetProxyHelper.injectIntoProxy(notificationManager, "profileEventDao", profileEventDao); TargetProxyHelper.injectIntoProxy(notificationManager, "sourceManager", sourceManager); - TargetProxyHelper.injectIntoProxy(notificationManager, "orcidOauth2TokenDetailService", mockOrcidOauth2TokenDetailService); - - when(mockOrcidOauth2TokenDetailService.doesClientKnowUser(Matchers.anyString(), Matchers.anyString())).thenReturn(true); } @After diff --git a/orcid-core/src/test/java/org/orcid/core/manager/impl/ProfileEntityManagerImplTest.java b/orcid-core/src/test/java/org/orcid/core/manager/impl/ProfileEntityManagerImplTest.java index 90065a85469..06069f3a5d1 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/impl/ProfileEntityManagerImplTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/impl/ProfileEntityManagerImplTest.java @@ -17,7 +17,6 @@ import org.orcid.core.manager.ProfileEntityManager; import org.orcid.core.manager.RecordNameManager; import org.orcid.core.manager.read_only.EmailManagerReadOnly; -import org.orcid.core.oauth.OrcidOauth2TokenDetailService; import org.orcid.persistence.dao.UserConnectionDao; import org.orcid.persistence.jpa.entities.ProfileEntity; import org.orcid.test.DBUnitTest; @@ -33,9 +32,6 @@ public class ProfileEntityManagerImplTest extends DBUnitTest { private static final String CLIENT_ID_1 = "APP-5555555555555555"; private static final String USER_ORCID = "0000-0000-0000-0001"; - @Resource - private OrcidOauth2TokenDetailService orcidOauth2TokenDetailService; - @Resource private ProfileEntityManager profileEntityManager; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/impl/RegistrationManagerImplTest.java b/orcid-core/src/test/java/org/orcid/core/manager/impl/RegistrationManagerImplTest.java index 89b4b6768ed..63fb888d090 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/impl/RegistrationManagerImplTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/impl/RegistrationManagerImplTest.java @@ -53,7 +53,6 @@ import org.orcid.test.OrcidJUnit4ClassRunner; import org.orcid.test.TargetProxyHelper; import org.orcid.utils.OrcidStringUtils; -import org.springframework.security.oauth2.common.exceptions.InvalidRequestException; import org.springframework.test.context.ContextConfiguration; @RunWith(OrcidJUnit4ClassRunner.class) @@ -181,7 +180,7 @@ public void testCreateMinimalRegistrationWithExistingClaimedEmail() { try { registrationManager.createMinimalRegistration(form, true, java.util.Locale.ENGLISH, "0.0.0.0"); fail(); - } catch(InvalidRequestException e) { + } catch(IllegalArgumentException e) { assertEquals("Unable to register user due: Email " + email + " already exists and is claimed, so, it can't be used again", e.getMessage()); } catch(Exception e) { fail(); @@ -192,7 +191,7 @@ public void testCreateMinimalRegistrationWithExistingClaimedEmail() { try { registrationManager.createMinimalRegistration(form, true, java.util.Locale.ENGLISH, "0.0.0.0"); fail(); - } catch(InvalidRequestException e) { + } catch(IllegalArgumentException e) { assertEquals("Unable to register user due: Email " + email.toLowerCase() + " already exists and is claimed, so, it can't be used again", e.getMessage()); } catch(Exception e) { fail(); @@ -204,7 +203,7 @@ public void testCreateMinimalRegistrationWithExistingClaimedEmail() { try { registrationManager.createMinimalRegistration(form, true, java.util.Locale.ENGLISH, "0.0.0.0"); fail(); - } catch(InvalidRequestException e) { + } catch(IllegalArgumentException e) { assertEquals("Unable to register user due: Email " + spacedEmail + " already exists and is claimed, so, it can't be used again", e.getMessage()); } catch(Exception e) { fail(); @@ -230,7 +229,7 @@ public void testCreateMinimalRegistrationWithExistingClaimedEmailAdditional() { try { registrationManager.createMinimalRegistration(form, true, java.util.Locale.ENGLISH, "0.0.0.0"); fail(); - } catch(InvalidRequestException e) { + } catch(IllegalArgumentException e) { assertEquals("Unable to register user due: Email " + email + " already exists and is claimed, so, it can't be used again", e.getMessage()); } catch(Exception e) { fail(); @@ -248,7 +247,7 @@ public void testCreateMinimalRegistrationWithExistingUnclaimedEmailNotAutoDeprec entity.setClaimed(false); entity.setSource(new SourceEntity(new ClientDetailsEntity(CLIENT_ID_AUTODEPRECATE_DISABLED))); profileDao.merge(entity); - } catch(InvalidRequestException e) { + } catch(IllegalArgumentException e) { fail(); } catch(Exception e) { fail(); @@ -258,7 +257,7 @@ public void testCreateMinimalRegistrationWithExistingUnclaimedEmailNotAutoDeprec Registration form = createRegistrationForm(email, true); registrationManager.createMinimalRegistration(form, true, java.util.Locale.ENGLISH, "0.0.0.0"); fail(); - } catch(InvalidRequestException e) { + } catch(IllegalArgumentException e) { assertEquals("Unable to register user due: Autodeprecate is not enabled for " + email, e.getMessage()); } catch(Exception e) { fail(); @@ -278,7 +277,7 @@ public void testCreateMinimalRegistrationWithExistingUnclaimedEmailAdditionalNot entity.setClaimed(false); entity.setSource(new SourceEntity(new ClientDetailsEntity(CLIENT_ID_AUTODEPRECATE_DISABLED))); profileDao.merge(entity); - } catch(InvalidRequestException e) { + } catch(IllegalArgumentException e) { fail(); } catch(Exception e) { fail(); @@ -293,7 +292,7 @@ public void testCreateMinimalRegistrationWithExistingUnclaimedEmailAdditionalNot Registration form = createRegistrationFormMultipleEmails(email2, emailsAdditionalList, true); registrationManager.createMinimalRegistration(form, true, java.util.Locale.ENGLISH, "0.0.0.0"); fail(); - } catch(InvalidRequestException e) { + } catch(IllegalArgumentException e) { assertEquals("Unable to register user due: Autodeprecate is not enabled for " + email, e.getMessage()); } catch(Exception e) { fail(); @@ -313,7 +312,7 @@ public void testCreateMinimalRegistrationWithExistingEmailThatCanBeAutoDeprecate entity.setClaimed(false); entity.setSource(new SourceEntity(new ClientDetailsEntity(CLIENT_ID_AUTODEPRECATE_ENABLED))); profileDao.merge(entity); - } catch(InvalidRequestException e) { + } catch(IllegalArgumentException e) { fail(); } catch(Exception e) { fail(); @@ -347,7 +346,7 @@ public void testCreateMinimalRegistrationWithExistingEmailAdditionalThatCanBeAut entity.setClaimed(false); entity.setSource(new SourceEntity(new ClientDetailsEntity(CLIENT_ID_AUTODEPRECATE_ENABLED))); profileDao.merge(entity); - } catch(InvalidRequestException e) { + } catch(IllegalArgumentException e) { fail(); } catch(Exception e) { fail(); @@ -389,7 +388,7 @@ public void testCreateMinimalRegistrationWithExistingTwoEmailsAdditionalThatCanB entity.setClaimed(false); entity.setSource(new SourceEntity(new ClientDetailsEntity(CLIENT_ID_AUTODEPRECATE_ENABLED))); profileDao.merge(entity); - } catch(InvalidRequestException e) { + } catch(IllegalArgumentException e) { fail(); } catch(Exception e) { fail(); @@ -411,7 +410,7 @@ public void testCreateMinimalRegistrationWithExistingTwoEmailsAdditionalThatCanB entity.setClaimed(false); entity.setSource(new SourceEntity(new ClientDetailsEntity(CLIENT_ID_AUTODEPRECATE_ENABLED))); profileDao.merge(entity); - } catch(InvalidRequestException e) { + } catch(IllegalArgumentException e) { fail(); } catch(Exception e) { fail(); @@ -433,7 +432,7 @@ public void testCreateMinimalRegistrationWithExistingTwoEmailsAdditionalThatCanB Registration form = createRegistrationFormMultipleEmails(email3, emailsAdditionalList, true); registrationManager.createMinimalRegistration(form, true, java.util.Locale.ENGLISH, "0.0.0.0"); fail(); - } catch(InvalidRequestException e) { + } catch(IllegalArgumentException e) { assertEquals("Unable to register user due: More than 2 duplicate emails", e.getMessage()); } catch(Exception e) { fail(); diff --git a/orcid-core/src/test/java/org/orcid/core/manager/v3/FindMyStuffManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/v3/FindMyStuffManagerTest.java index 1971f89f8c9..bae964f9356 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/v3/FindMyStuffManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/v3/FindMyStuffManagerTest.java @@ -21,7 +21,6 @@ import org.orcid.core.manager.ClientDetailsEntityCacheManager; import org.orcid.core.manager.impl.OrcidUrlManager; import org.orcid.core.manager.v3.read_only.WorkManagerReadOnly; -import org.orcid.core.oauth.OrcidOauth2TokenDetailService; import org.orcid.core.utils.v3.identifiers.finders.DataciteFinder; import org.orcid.core.utils.v3.identifiers.finders.Finder; import org.orcid.jaxb.model.clientgroup.RedirectUriType; @@ -62,9 +61,6 @@ public class FindMyStuffManagerTest extends DBUnitTest{ @Mock private ClientDetailsEntityCacheManager clientDetailsEntityCacheManager; - @Mock - private OrcidOauth2TokenDetailService orcidOauth2TokenDetailService; - @Resource(name = "jpaJaxbNotificationAdapterV3") private JpaJaxbNotificationAdapter notificationAdapter; @@ -86,7 +82,6 @@ public void initMocks() throws Exception { TargetProxyHelper.injectIntoProxy(findMyStuffManager, "workManagerReadOnly", workManagerReadOnly); TargetProxyHelper.injectIntoProxy(findMyStuffManager, "notificationManager", notificationManager); TargetProxyHelper.injectIntoProxy(findMyStuffManager, "clientDetailsEntityCacheManager", clientDetailsEntityCacheManager); - TargetProxyHelper.injectIntoProxy(findMyStuffManager, "orcidOauth2TokenDetailService", orcidOauth2TokenDetailService); TargetProxyHelper.injectIntoProxy(findMyStuffManager, "findMyStuffHistoryDao", findMyStuffHistoryDao); //Finder mock @@ -122,7 +117,6 @@ public void initMocks() throws Exception { @Test public void testFindIfAppropriate(){ //new user - when(orcidOauth2TokenDetailService.doesClientKnowUser(Matchers.anyString(), Matchers.anyString())).thenReturn(false); when(workManagerReadOnly.getAllExternalIDs(Matchers.contains(""))).thenReturn(new ExternalIDs()); when(findMyStuffHistoryDao.findAll(Matchers.contains(""))).thenReturn(new ArrayList()); @@ -136,12 +130,10 @@ public void testFindIfAppropriate(){ //check history persisted verify(findMyStuffHistoryDao, times(1)).persist(Matchers.any()); //check notification created - } @Test public void testFindIfAppropriateExistingHistory(){ - when(orcidOauth2TokenDetailService.doesClientKnowUser(Matchers.anyString(), Matchers.anyString())).thenReturn(false); when(workManagerReadOnly.getAllExternalIDs(Matchers.contains(""))).thenReturn(new ExternalIDs()); //optedOut FindMyStuffHistoryEntity e = new FindMyStuffHistoryEntity(); @@ -160,7 +152,6 @@ public void testFindIfAppropriateExistingHistory(){ @Test public void testFindIfAppropriateOptedOut(){ - when(orcidOauth2TokenDetailService.doesClientKnowUser(Matchers.anyString(), Matchers.anyString())).thenReturn(false); when(workManagerReadOnly.getAllExternalIDs(Matchers.contains(""))).thenReturn(new ExternalIDs()); //optedOut FindMyStuffHistoryEntity e = new FindMyStuffHistoryEntity(); @@ -181,7 +172,6 @@ public void testFindIfAppropriateOptedOut(){ @Test public void testFindIfAppropriateExistingWorks(){ - when(orcidOauth2TokenDetailService.doesClientKnowUser(Matchers.anyString(), Matchers.anyString())).thenReturn(false); //user with existing works ExternalID id = new ExternalID(); ExternalIDs ids = new ExternalIDs(); @@ -199,7 +189,6 @@ public void testFindIfAppropriateExistingWorks(){ @Test public void testFindIfAppropriateExistingPerms(){ //user with existing permissions - when(orcidOauth2TokenDetailService.doesClientKnowUser(Matchers.anyString(), Matchers.anyString())).thenReturn(true); when(workManagerReadOnly.getAllExternalIDs(Matchers.contains(""))).thenReturn(new ExternalIDs()); when(findMyStuffHistoryDao.findAll(Matchers.contains(""))).thenReturn(new ArrayList()); @@ -217,7 +206,6 @@ public void testFindIfAppropriateExistingPerms(){ @Test public void testFindIfAppropriateExistingNotifications(){ //new user - when(orcidOauth2TokenDetailService.doesClientKnowUser(Matchers.anyString(), Matchers.anyString())).thenReturn(false); when(workManagerReadOnly.getAllExternalIDs(Matchers.contains(""))).thenReturn(new ExternalIDs()); when(findMyStuffHistoryDao.findAll(Matchers.contains(""))).thenReturn(new ArrayList()); NotificationFindMyStuff n = new NotificationFindMyStuff(); diff --git a/orcid-core/src/test/java/org/orcid/core/manager/v3/NotificationManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/v3/NotificationManagerTest.java index 21e71b25680..160465907d4 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/v3/NotificationManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/v3/NotificationManagerTest.java @@ -14,7 +14,6 @@ import org.orcid.core.manager.EncryptionManager; import org.orcid.core.manager.ProfileEntityCacheManager; import org.orcid.core.manager.v3.impl.NotificationManagerImpl; -import org.orcid.core.oauth.OrcidOauth2TokenDetailService; import org.orcid.jaxb.model.common.AvailableLocales; import org.orcid.jaxb.model.v3.release.common.Source; import org.orcid.jaxb.model.v3.release.notification.Notification; @@ -69,9 +68,6 @@ public class NotificationManagerTest extends DBUnitTest { @Mock private NotificationDao mockNotificationDao; - @Mock - private OrcidOauth2TokenDetailService mockOrcidOauth2TokenDetailService; - @Mock private ProfileEntityCacheManager mockProfileEntityCacheManager; @@ -128,13 +124,11 @@ public void initMocks() throws Exception { TargetProxyHelper.injectIntoProxy(notificationManager, "encryptionManager", encryptionManager); TargetProxyHelper.injectIntoProxy(notificationManager, "profileEventDao", profileEventDao); TargetProxyHelper.injectIntoProxy(notificationManager, "sourceManager", mockSourceManager); - TargetProxyHelper.injectIntoProxy(notificationManager, "orcidOauth2TokenDetailService", mockOrcidOauth2TokenDetailService); TargetProxyHelper.injectIntoProxy(notificationManager, "profileEntityCacheManager", mockProfileEntityCacheManager); TargetProxyHelper.injectIntoProxy(notificationManager, "emailManager", mockEmailManager); TargetProxyHelper.injectIntoProxy(notificationManager, "profileDao", mockProfileDao); TargetProxyHelper.injectIntoProxy(notificationManager, "notificationDao", mockNotificationDao); TargetProxyHelper.injectIntoProxy(notificationManager, "notificationAdapter", mockNotificationAdapter); - when(mockOrcidOauth2TokenDetailService.doesClientKnowUser(Matchers.anyString(), Matchers.anyString())).thenReturn(true); } @After diff --git a/orcid-core/src/test/java/org/orcid/core/manager/v3/impl/ProfileEntityManagerImplTest.java b/orcid-core/src/test/java/org/orcid/core/manager/v3/impl/ProfileEntityManagerImplTest.java index 0b07089fc66..df6bc33a594 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/v3/impl/ProfileEntityManagerImplTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/v3/impl/ProfileEntityManagerImplTest.java @@ -23,7 +23,6 @@ import org.orcid.core.manager.v3.ProfileKeywordManager; import org.orcid.core.manager.v3.RecordNameManager; import org.orcid.core.manager.v3.ResearcherUrlManager; -import org.orcid.core.oauth.OrcidOauth2TokenDetailService; import org.orcid.core.profile.history.ProfileHistoryEventType; import org.orcid.jaxb.model.common.AvailableLocales; import org.orcid.jaxb.model.message.ScopePathType; @@ -78,9 +77,6 @@ public class ProfileEntityManagerImplTest extends DBUnitTest { private static final String CLIENT_ID_2 = "APP-5555555555555556"; private static final String USER_ORCID = "0000-0000-0000-0001"; - @Resource - private OrcidOauth2TokenDetailService orcidOauth2TokenDetailService; - @Resource(name = "profileEntityManagerV3") private ProfileEntityManager profileEntityManager; diff --git a/orcid-core/src/test/java/org/orcid/core/oauth/OAuthErrorUtilsTest.java b/orcid-core/src/test/java/org/orcid/core/oauth/OAuthErrorUtilsTest.java index 6b94ee9ef15..7187cc49509 100644 --- a/orcid-core/src/test/java/org/orcid/core/oauth/OAuthErrorUtilsTest.java +++ b/orcid-core/src/test/java/org/orcid/core/oauth/OAuthErrorUtilsTest.java @@ -17,8 +17,6 @@ * ============================================================================= */ import static org.junit.Assert.assertEquals; -import static org.junit.Assert.fail; - import javax.ws.rs.core.Response.Status; import org.junit.Test; @@ -27,7 +25,6 @@ import org.orcid.core.exception.OrcidDeprecatedException; import org.orcid.core.exception.OrcidInvalidScopeException; import org.springframework.security.authentication.InsufficientAuthenticationException; -import org.springframework.security.oauth2.common.exceptions.UnsupportedGrantTypeException; public class OAuthErrorUtilsTest { @@ -41,7 +38,7 @@ public void testGetOAuthErrorForLockedException() { @Test public void testGetOAuthErrorForUnsupportedGrantTypeException() { - OAuthError error = OAuthErrorUtils.getOAuthError(new UnsupportedGrantTypeException("message here")); + OAuthError error = OAuthErrorUtils.getOAuthError(new IllegalArgumentException("message here")); assertEquals(OAuthError.UNSUPPORTED_GRANT_TYPE, error.getError()); assertEquals(Status.BAD_REQUEST, error.getResponseStatus()); assertEquals("message here", error.getErrorDescription()); diff --git a/orcid-core/src/test/java/org/orcid/core/oauth/OrcidClientCredentialsCheckerTest.java b/orcid-core/src/test/java/org/orcid/core/oauth/OrcidClientCredentialsCheckerTest.java deleted file mode 100644 index a3d5e89ad6b..00000000000 --- a/orcid-core/src/test/java/org/orcid/core/oauth/OrcidClientCredentialsCheckerTest.java +++ /dev/null @@ -1,115 +0,0 @@ -package org.orcid.core.oauth; - -import static org.mockito.Mockito.when; - -import java.util.Arrays; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - -import org.junit.Before; -import org.junit.Test; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.orcid.core.constants.OrcidOauth2Constants; -import org.orcid.core.manager.ClientDetailsEntityCacheManager; -import org.orcid.core.oauth.service.OrcidOAuth2RequestValidator; -import org.orcid.jaxb.model.message.ScopePathType; -import org.orcid.persistence.jpa.entities.ClientDetailsEntity; -import org.orcid.persistence.jpa.entities.ClientScopeEntity; -import org.orcid.persistence.jpa.entities.ProfileEntity; -import org.orcid.persistence.jpa.entities.keys.ClientScopePk; -import org.springframework.security.oauth2.common.exceptions.InvalidScopeException; -import org.springframework.security.oauth2.provider.ClientDetailsService; -import org.springframework.security.oauth2.provider.OAuth2RequestFactory; -import org.springframework.security.oauth2.provider.TokenRequest; -import org.springframework.security.oauth2.provider.request.DefaultOAuth2RequestFactory; - -/** - * @author Declan Newman (declan) Date: 11/05/2012 - */ -public class OrcidClientCredentialsCheckerTest { - - @Mock - private ClientDetailsService clientDetailsService; - - @Mock - private ClientDetailsEntityCacheManager clientDetailsEntityCacheManager; - - @Mock - private OrcidOAuth2RequestValidator orcidOAuth2RequestValidator; - - private OAuth2RequestFactory oAuth2RequestFactory; - - private OrcidClientCredentialsChecker checker; - - @Before - public void setup() { - MockitoAnnotations.initMocks(this); - oAuth2RequestFactory = new DefaultOAuth2RequestFactory(clientDetailsService); - checker = new OrcidClientCredentialsChecker(oAuth2RequestFactory); - checker.setClientDetailsEntityCacheManager(clientDetailsEntityCacheManager); - checker.setOrcidOAuth2RequestValidator(orcidOAuth2RequestValidator); - } - - @Test(expected = InvalidScopeException.class) - public void testInvalidCredentialsScopes() throws Exception { - String memberId = "2875-8158-1475-6194"; - String clientId = "APP-1"; - setupMocks(clientId, memberId); - Set requestedScopes = new HashSet(Arrays.asList(ScopePathType.FUNDING_CREATE.value())); - Map requestParams = new HashMap (); - requestParams.put(OrcidOauth2Constants.SCOPE_PARAM, ScopePathType.FUNDING_CREATE.value()); - - checker.validateCredentials("client_credentials", new TokenRequest(requestParams, clientId, requestedScopes, "client_credentials")); - } - - @Test - public void testValidCredentialsScopes() throws Exception { - String memberId = "2875-8158-1475-6194"; - String clientId = "APP-1"; - setupMocks(clientId, memberId); - Set requestedScopes = new HashSet(Arrays.asList(ScopePathType.READ_PUBLIC.value())); - Map requestParams = new HashMap (); - requestParams.put(OrcidOauth2Constants.SCOPE_PARAM, ScopePathType.READ_PUBLIC.value()); - checker.validateCredentials("client_credentials", new TokenRequest(requestParams, clientId, requestedScopes, "client_credentials")); - } - - @Test - public void testValidCredentialsScopesForClientOnly() throws Exception { - String memberId = "2875-8158-1475-6194"; - String clientId = "APP-1"; - setupMocks(clientId, memberId); - Set requestedScopes = new HashSet(Arrays.asList(ScopePathType.READ_PUBLIC.value())); - Map requestParams = new HashMap (); - requestParams.put(OrcidOauth2Constants.SCOPE_PARAM, ScopePathType.READ_PUBLIC.value()); - checker.validateCredentials("client_credentials", new TokenRequest(requestParams, clientId, requestedScopes, "client_credentials")); - } - - private void setupMocks(String clientId, String memberId) { - ClientDetailsEntity clientDetailsEntity = new ClientDetailsEntity(); - Set scopes = new HashSet(3); - ClientScopeEntity c1 = new ClientScopeEntity(); - c1.setClientId(clientId); - c1.setScopeType(ScopePathType.ORCID_WORKS_UPDATE.value()); - scopes.add(c1); - - ClientScopeEntity c2 = new ClientScopeEntity(); - c2.setClientId(clientId); - c2.setScopeType(ScopePathType.ORCID_BIO_READ_LIMITED.value()); - scopes.add(c2); - - ClientScopeEntity c3 = new ClientScopeEntity(); - c3.setClientId(clientId); - c3.setScopeType(ScopePathType.ORCID_PROFILE_CREATE.value()); - scopes.add(c3); - - clientDetailsEntity.setClientScopes(scopes); - clientDetailsEntity.setGroupProfileId(memberId); - ProfileEntity profile = new ProfileEntity(memberId); - profile.setRecordLocked(false); - when(clientDetailsService.loadClientByClientId(clientId)).thenReturn(clientDetailsEntity); - when(clientDetailsEntityCacheManager.retrieve(clientId)).thenReturn(clientDetailsEntity); - } -} diff --git a/orcid-core/src/test/java/org/orcid/core/oauth/OrcidRefreshTokenTokenGranterTest.java b/orcid-core/src/test/java/org/orcid/core/oauth/OrcidRefreshTokenTokenGranterTest.java deleted file mode 100644 index e93edb05829..00000000000 --- a/orcid-core/src/test/java/org/orcid/core/oauth/OrcidRefreshTokenTokenGranterTest.java +++ /dev/null @@ -1,441 +0,0 @@ -package org.orcid.core.oauth; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; - -import java.util.Arrays; -import java.util.Date; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Random; -import java.util.Set; - -import javax.annotation.Resource; -import javax.transaction.Transactional; - -import org.apache.commons.lang.StringUtils; -import org.apache.commons.math3.random.RandomDataGenerator; -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.orcid.core.constants.OrcidOauth2Constants; -import org.orcid.persistence.dao.OrcidOauth2TokenDetailDao; -import org.orcid.persistence.jpa.entities.OrcidOauth2TokenDetail; -import org.orcid.pojo.ajaxForm.PojoUtil; -import org.orcid.test.DBUnitTest; -import org.orcid.test.OrcidJUnit4ClassRunner; -import org.springframework.security.oauth2.common.OAuth2AccessToken; -import org.springframework.security.oauth2.common.exceptions.InvalidScopeException; -import org.springframework.security.oauth2.common.exceptions.InvalidTokenException; -import org.springframework.security.oauth2.common.util.OAuth2Utils; -import org.springframework.security.oauth2.provider.TokenRequest; -import org.springframework.test.context.ContextConfiguration; - -@RunWith(OrcidJUnit4ClassRunner.class) -@ContextConfiguration(locations = { "classpath:test-orcid-core-context.xml" }) -public class OrcidRefreshTokenTokenGranterTest extends DBUnitTest { - - private static final String CLIENT_ID_1 = "APP-5555555555555555"; - private static final String CLIENT_ID_2 = "APP-5555555555555556"; - private static final String USER_ORCID = "0000-0000-0000-0001"; - - @Resource - private OrcidOauth2TokenDetailService orcidOauth2TokenDetailService; - - @Resource - private OrcidRefreshTokenTokenGranter refreshTokenTokenGranter; - - @Resource(name="orcidOauth2TokenDetailDao") - private OrcidOauth2TokenDetailDao orcidOauth2TokenDetailDao; - - @BeforeClass - public static void initDBUnitData() throws Exception { - initDBUnitData(Arrays.asList("/data/SubjectEntityData.xml", "/data/SourceClientDetailsEntityData.xml", - "/data/ProfileEntityData.xml", "/data/RecordNameEntityData.xml")); - } - - @AfterClass - public static void removeDBUnitData() throws Exception { - removeDBUnitData(Arrays.asList("/data/RecordNameEntityData.xml", "/data/ProfileEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/SubjectEntityData.xml")); - } - - @Transactional - private OrcidOauth2TokenDetail createToken(String clientId, String userOrcid, String tokenValue, String refreshTokenValue, Date expirationDate, String scopes) { - OrcidOauth2TokenDetail token = new OrcidOauth2TokenDetail(); - token.setApproved(true); - token.setClientDetailsId(clientId); - token.setOrcid(userOrcid); - token.setScope(scopes); - token.setTokenDisabled(false); - token.setTokenExpiration(expirationDate); - token.setTokenType("bearer"); - token.setTokenValue(tokenValue); - token.setRefreshTokenValue(refreshTokenValue); - orcidOauth2TokenDetailDao.persist(token); - assertNotNull(token.getDateCreated()); - assertNotNull(token.getLastModified()); - return token; - } - - private OAuth2AccessToken generateRefreshToken(OrcidOauth2TokenDetail tokenDetails, String customClientId, Boolean revokeOld, Long expiresIn, String... scopesParam) { - Set scopes = null; - if (scopesParam != null) { - scopes = new HashSet(Arrays.asList(scopesParam)); - } - - Map authorizationParameters = new HashMap(); - String scopesString = scopes == null ? null : StringUtils.join(scopes, ' '); - String clientId = PojoUtil.isEmpty(customClientId) ? tokenDetails.getClientDetailsId() : customClientId; - String refreshTokenValue = tokenDetails.getRefreshTokenValue(); - - authorizationParameters.put(OAuth2Utils.CLIENT_ID, clientId); - authorizationParameters.put(OrcidOauth2Constants.IS_PERSISTENT, "true"); - authorizationParameters.put(OrcidOauth2Constants.AUTHORIZATION, tokenDetails.getTokenValue()); - authorizationParameters.put(OrcidOauth2Constants.REFRESH_TOKEN, refreshTokenValue); - authorizationParameters.put(OAuth2Utils.REDIRECT_URI, tokenDetails.getRedirectUri()); - - if (!PojoUtil.isEmpty(scopesString)) { - authorizationParameters.put(OAuth2Utils.SCOPE, scopesString); - } - - if (revokeOld != null) { - authorizationParameters.put(OrcidOauth2Constants.REVOKE_OLD, String.valueOf(revokeOld)); - } - - if (expiresIn != null) { - authorizationParameters.put(OrcidOauth2Constants.EXPIRES_IN, String.valueOf(expiresIn)); - } - - TokenRequest tokenRequest = new TokenRequest(authorizationParameters, clientId, scopes, OrcidOauth2Constants.REFRESH_TOKEN); - return refreshTokenTokenGranter.grant(OrcidOauth2Constants.REFRESH_TOKEN, tokenRequest); - } - - @Test - public void createRefreshTokenTest() { - // Create token, create refresh, parent should be disabled, scopes - // should be equal - long time = System.currentTimeMillis(); - String scope = "/activities/update"; - String tokenValue = "parent-token-" + getRandom(); - String refreshTokenValue = "refresh-token-" + getRandom(); - Boolean revokeOld = null; - Date parentTokenExpiration = new Date(time + 10000); - Long expireIn = null; - - OrcidOauth2TokenDetail parent = createToken(CLIENT_ID_1, USER_ORCID, tokenValue, refreshTokenValue, parentTokenExpiration, scope); - OAuth2AccessToken refresh = generateRefreshToken(parent, null, revokeOld, expireIn, scope); - assertNotNull(refresh); - - OrcidOauth2TokenDetail parentToken = orcidOauth2TokenDetailService.findIgnoringDisabledByTokenValue(parent.getTokenValue()); - assertNotNull(parentToken); - assertEquals(tokenValue, parentToken.getTokenValue()); - assertTrue(parentToken.getTokenDisabled()); - assertEquals(scope, parentToken.getScope()); - assertNotNull(parentToken.getTokenExpiration()); - - OrcidOauth2TokenDetail refreshToken = orcidOauth2TokenDetailService.findIgnoringDisabledByTokenValue(refresh.getValue()); - assertNotNull(refreshToken); - assertNotNull(refreshToken.getTokenValue()); - assertNotNull(refreshToken.getRefreshTokenValue()); - assertFalse(refreshToken.getTokenDisabled()); - assertEquals(scope, refreshToken.getScope()); - assertNotNull(refreshToken.getTokenExpiration()); - - assertEquals(parentToken.getTokenExpiration().getTime(), refreshToken.getTokenExpiration().getTime()); - } - - @Test - public void createRefreshTokenWithNarrowerScopesTest() { - // Create token, create refresh with narrower scopes, parent should be - // disabled, scopes should be narrower - long time = System.currentTimeMillis(); - String parentScope = "/activities/update"; - String refreshScope = "/orcid-works/create"; - String tokenValue = "parent-token-" + getRandom(); - String refreshTokenValue = "refresh-token-" + getRandom(); - Boolean revokeOld = true; - Date parentTokenExpiration = new Date(time + 10000); - Long expireIn = null; - - OrcidOauth2TokenDetail parent = createToken(CLIENT_ID_1, USER_ORCID, tokenValue, refreshTokenValue, parentTokenExpiration, parentScope); - OAuth2AccessToken refresh = generateRefreshToken(parent, null, revokeOld, expireIn, refreshScope); - assertNotNull(refresh); - - OrcidOauth2TokenDetail parentToken = orcidOauth2TokenDetailService.findIgnoringDisabledByTokenValue(parent.getTokenValue()); - assertNotNull(parentToken); - assertEquals(tokenValue, parentToken.getTokenValue()); - assertTrue(parentToken.getTokenDisabled()); - assertEquals(parentScope, parentToken.getScope()); - assertNotNull(parentToken.getTokenExpiration()); - - OrcidOauth2TokenDetail refreshToken = orcidOauth2TokenDetailService.findIgnoringDisabledByTokenValue(refresh.getValue()); - assertNotNull(refreshToken); - assertNotNull(refreshToken.getTokenValue()); - assertNotNull(refreshToken.getRefreshTokenValue()); - assertFalse(refreshToken.getTokenDisabled()); - assertEquals(refreshScope, refreshToken.getScope()); - assertNotNull(refreshToken.getTokenExpiration()); - - assertEquals(parentToken.getTokenExpiration().getTime(), refreshToken.getTokenExpiration().getTime()); - } - - @Test - public void createRefreshTokenWithoutRevokeParent() { - // Create token, create refresh without disabling parent token, parent - // should be enabled, refresh should be enabled - long time = System.currentTimeMillis(); - String parentScope = "/activities/update /read-limited"; - String tokenValue = "parent-token-" + getRandom(); - String refreshTokenValue = "refresh-token-" + getRandom(); - Boolean revokeOld = false; - Date parentTokenExpiration = new Date(time + 10000); - Long expireIn = null; - - OrcidOauth2TokenDetail parent = createToken(CLIENT_ID_1, USER_ORCID, tokenValue, refreshTokenValue, parentTokenExpiration, parentScope); - OAuth2AccessToken refresh = generateRefreshToken(parent, null, revokeOld, expireIn); - assertNotNull(refresh); - - OrcidOauth2TokenDetail parentToken = orcidOauth2TokenDetailService.findIgnoringDisabledByTokenValue(parent.getTokenValue()); - assertNotNull(parentToken); - assertEquals(tokenValue, parentToken.getTokenValue()); - assertFalse(parentToken.getTokenDisabled()); - assertNotNull(parentToken.getTokenExpiration()); - - OrcidOauth2TokenDetail refreshToken = orcidOauth2TokenDetailService.findIgnoringDisabledByTokenValue(refresh.getValue()); - assertNotNull(refreshToken); - assertNotNull(refreshToken.getTokenValue()); - assertNotNull(refreshToken.getRefreshTokenValue()); - assertFalse(refreshToken.getTokenDisabled()); - assertNotNull(refreshToken.getTokenExpiration()); - - assertEquals(parentToken.getTokenExpiration().getTime(), refreshToken.getTokenExpiration().getTime()); - - assertEquals(parentToken.getScope(), refreshToken.getScope()); - - Set tokenScopes = OAuth2Utils.parseParameterList(parentToken.getScope()); - Set originalScopes = OAuth2Utils.parseParameterList(parentScope); - assertEquals(originalScopes, tokenScopes); - } - - @Test - public void createRefreshTokenWithoutRevokeParentAndWithNarrowerScopes() { - // Create token, create refresh with narrower scopes and without - // disabling parent token, parent should work, refresh should have - // narrower scopes - long time = System.currentTimeMillis(); - String parentScope = "/person/read-limited"; - String refreshScope = "/orcid-bio/read-limited"; - String tokenValue = "parent-token-" + getRandom(); - String refreshTokenValue = "refresh-token-" + getRandom(); - Boolean revokeOld = false; - Date parentTokenExpiration = new Date(time + 10000); - Long expireIn = null; - - OrcidOauth2TokenDetail parent = createToken(CLIENT_ID_1, USER_ORCID, tokenValue, refreshTokenValue, parentTokenExpiration, parentScope); - OAuth2AccessToken refresh = generateRefreshToken(parent, null, revokeOld, expireIn, refreshScope); - assertNotNull(refresh); - - OrcidOauth2TokenDetail parentToken = orcidOauth2TokenDetailService.findIgnoringDisabledByTokenValue(parent.getTokenValue()); - assertNotNull(parentToken); - assertEquals(tokenValue, parentToken.getTokenValue()); - assertFalse(parentToken.getTokenDisabled()); - assertEquals(parentScope, parentToken.getScope()); - assertNotNull(parentToken.getTokenExpiration()); - - OrcidOauth2TokenDetail refreshToken = orcidOauth2TokenDetailService.findIgnoringDisabledByTokenValue(refresh.getValue()); - assertNotNull(refreshToken); - assertNotNull(refreshToken.getTokenValue()); - assertNotNull(refreshToken.getRefreshTokenValue()); - assertFalse(refreshToken.getTokenDisabled()); - assertEquals(refreshScope, refreshToken.getScope()); - assertNotNull(refreshToken.getTokenExpiration()); - - assertEquals(parentToken.getTokenExpiration().getTime(), refreshToken.getTokenExpiration().getTime()); - } - - @Test - public void createRefreshTokenWithExpirationOf10Secs() { - // Create token, dont revoke parent and set expiration to 10 secs - long time = System.currentTimeMillis(); - String parentScope = "/person/read-limited"; - String refreshScope = "/orcid-bio/read-limited"; - String tokenValue = "parent-token-" + getRandom(); - String refreshTokenValue = "refresh-token-" + getRandom(); - Boolean revokeOld = false; - Date parentTokenExpiration = new Date(time + 10000); - Long expireIn = 5L; - - OrcidOauth2TokenDetail parent = createToken(CLIENT_ID_1, USER_ORCID, tokenValue, refreshTokenValue, parentTokenExpiration, parentScope); - OAuth2AccessToken refresh = generateRefreshToken(parent, null, revokeOld, expireIn, refreshScope); - assertNotNull(refresh); - - OrcidOauth2TokenDetail parentToken = orcidOauth2TokenDetailService.findIgnoringDisabledByTokenValue(parent.getTokenValue()); - assertNotNull(parentToken); - assertEquals(tokenValue, parentToken.getTokenValue()); - assertFalse(parentToken.getTokenDisabled()); - assertEquals(parentScope, parentToken.getScope()); - assertNotNull(parentToken.getTokenExpiration()); - - OrcidOauth2TokenDetail refreshToken = orcidOauth2TokenDetailService.findIgnoringDisabledByTokenValue(refresh.getValue()); - assertNotNull(refreshToken); - assertNotNull(refreshToken.getTokenValue()); - assertNotNull(refreshToken.getRefreshTokenValue()); - assertFalse(refreshToken.getTokenDisabled()); - assertEquals(refreshScope, refreshToken.getScope()); - assertNotNull(refreshToken.getTokenExpiration()); - - assertTrue(parentToken.getTokenExpiration().getTime() > refreshToken.getTokenExpiration().getTime()); - // Assert that current time plus 6 secs is greather than refresh token - // expiration - assertTrue((time + 6000) > refreshToken.getTokenExpiration().getTime()); - } - - @Test - public void tryToCreateRefreshTokenWithInvalidScopesTest() { - // Create token, try to create refresh token with invalid scopes, fail - long time = System.currentTimeMillis(); - String parentScope = "/person/update"; - String refreshScope = "/orcid-works/read-limited"; - String tokenValue = "parent-token-" + getRandom(); - String refreshTokenValue = "refresh-token-" + getRandom(); - Boolean revokeOld = true; - Date parentTokenExpiration = new Date(time + 10000); - Long expireIn = null; - - OrcidOauth2TokenDetail parent = createToken(CLIENT_ID_1, USER_ORCID, tokenValue, refreshTokenValue, parentTokenExpiration, parentScope); - try { - generateRefreshToken(parent, null, revokeOld, expireIn, refreshScope); - fail(); - } catch(InvalidScopeException e) { - assertTrue(e.getMessage().contains("is not allowed for the parent token")); - } catch(Exception e) { - fail(); - } - } - - @Test - public void tryToCreateRefreshTokenWithThatExpireAfterParentTokenTest() { - // Create token, try to create refresh token that expires after parent - // token, fail - long time = System.currentTimeMillis(); - String parentScope = "/person/update"; - String tokenValue = "parent-token-" + getRandom(); - String refreshTokenValue = "refresh-token-" + getRandom(); - Boolean revokeOld = true; - Date parentTokenExpiration = new Date(time + 10000); - Long expireIn = time + (15000); - - OrcidOauth2TokenDetail parent = createToken(CLIENT_ID_1, USER_ORCID, tokenValue, refreshTokenValue, parentTokenExpiration, parentScope); - try { - generateRefreshToken(parent, null, revokeOld, expireIn, parentScope); - fail(); - } catch(IllegalArgumentException e) { - assertTrue(e.getMessage().contains("Token expiration can't be after")); - } catch(Exception e) { - fail(); - } - } - - @Test - public void tryToCreateRefreshTokenWithInvalidClientTest() { - // Create token for client # 1, try to create a refresh token using - // client # 2, fail - long time = System.currentTimeMillis(); - String parentScope = "/person/update"; - String tokenValue = "parent-token-" + getRandom(); - String refreshTokenValue = "refresh-token-" + getRandom(); - Boolean revokeOld = true; - Date parentTokenExpiration = new Date(time + 10000); - Long expireIn = null; - - OrcidOauth2TokenDetail parent = createToken(CLIENT_ID_1, USER_ORCID, tokenValue, refreshTokenValue, parentTokenExpiration, parentScope); - try { - generateRefreshToken(parent, CLIENT_ID_2, revokeOld, expireIn, parentScope); - fail(); - } catch(IllegalArgumentException e) { - assertTrue(e.getMessage().contains("This token does not belong to the given client")); - } catch(Exception e) { - fail(); - } - - } - - @Test - public void tryToRefreshAnExpiredTokenTest() { - long time = System.currentTimeMillis(); - String parentScope = "/person/update"; - String tokenValue = "parent-token-" + getRandom(); - String refreshTokenValue = "refresh-token-" + getRandom(); - Boolean revokeOld = true; - Date parentTokenExpiration = new Date(time - 10000); - Long expireIn = null; - - OrcidOauth2TokenDetail parent = createToken(CLIENT_ID_1, USER_ORCID, tokenValue, refreshTokenValue, parentTokenExpiration, parentScope); - try { - generateRefreshToken(parent, null, revokeOld, expireIn, parentScope); - fail(); - } catch(InvalidTokenException e) { - assertTrue(e.getMessage().contains("Access token expired:")); - } catch(Exception e) { - fail(); - } - } - - @Test - public void tryToCreateRefreshTokenWithInvalidRefreshTokenTest() { - // Create token, try to create refresh token with invalid refresh value, - // fail - long time = System.currentTimeMillis(); - String parentScope = "/person/update"; - String tokenValue = "parent-token-" + getRandom(); - String refreshTokenValue = "refresh-token-" + getRandom(); - Boolean revokeOld = true; - Date parentTokenExpiration = new Date(time + 10000); - Long expireIn = null; - - OrcidOauth2TokenDetail parent = createToken(CLIENT_ID_1, USER_ORCID, tokenValue, refreshTokenValue, parentTokenExpiration, parentScope); - try { - //Change the value we are going to use for the refresh token - parent.setRefreshTokenValue("invalid-value"); - generateRefreshToken(parent, null, revokeOld, expireIn, parentScope); - fail(); - } catch(InvalidTokenException e) { - assertTrue(e.getMessage().contains("Unable to find refresh token")); - } catch(Exception e) { - fail(); - } - } - - @Test - public void tryToCreateRefreshTokenWithInvalidParentTokenValueTest() { - // Create token, try to create refresh token with invalid parent token - // value, fail - long time = System.currentTimeMillis(); - String parentScope = "/person/update"; - String tokenValue = "parent-token-" + getRandom(); - String refreshTokenValue = "refresh-token-" + getRandom(); - Boolean revokeOld = true; - Date parentTokenExpiration = new Date(time + 15000); - Long expireIn = null; - - OrcidOauth2TokenDetail parent = createToken(CLIENT_ID_1, USER_ORCID, tokenValue, refreshTokenValue, parentTokenExpiration, parentScope); - // Change the value we are going to use for the refresh token - parent.setTokenValue("invalid-value"); - OAuth2AccessToken refreshedToken = generateRefreshToken(parent, null, revokeOld, expireIn, parentScope); - // We shouldn't care about the access token, it's not required and - // shouldn't really be there. If the refresh token and client - // credentials are good, we can generate the refresh token. - assertNotNull(refreshedToken); - } - - private long getRandom() { - long leftLimit = 10L; - long rightLimit = 10000000L; - return new RandomDataGenerator().nextLong(leftLimit, rightLimit); - } -} diff --git a/orcid-core/src/test/java/org/orcid/core/oauth/security/OrcidOauthRedirectResolverTest.java b/orcid-core/src/test/java/org/orcid/core/oauth/security/OrcidOauthRedirectResolverTest.java deleted file mode 100644 index 8014354f080..00000000000 --- a/orcid-core/src/test/java/org/orcid/core/oauth/security/OrcidOauthRedirectResolverTest.java +++ /dev/null @@ -1,245 +0,0 @@ -package org.orcid.core.oauth.security; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - -import java.util.Arrays; -import java.util.Collection; -import java.util.Set; -import java.util.TreeSet; - -import org.junit.Rule; -import org.junit.Test; -import org.orcid.core.togglz.Features; -import org.orcid.persistence.jpa.entities.ClientAuthorisedGrantTypeEntity; -import org.orcid.persistence.jpa.entities.ClientDetailsEntity; -import org.orcid.persistence.jpa.entities.ClientRedirectUriEntity; -import org.orcid.persistence.jpa.entities.keys.ClientAuthorisedGrantTypePk; -import org.orcid.persistence.jpa.entities.keys.ClientRedirectUriPk; -import org.springframework.security.oauth2.common.exceptions.InvalidGrantException; -import org.springframework.security.oauth2.common.exceptions.InvalidRequestException; -import org.springframework.security.oauth2.common.exceptions.RedirectMismatchException; -import org.togglz.junit.TogglzRule; - -public class OrcidOauthRedirectResolverTest { - - private Collection allRedirectGrantTypes = Arrays.asList("implicit", "refresh_token", "client_credentials", "authorization_code", - "urn:ietf:params:oauth:grant-type:token-exchange"); - - @Rule - public TogglzRule togglzRule = TogglzRule.allDisabled(Features.class); - - private OrcidOauthRedirectResolver resolver = new OrcidOauthRedirectResolver(); - - { - resolver.setRedirectGrantTypes(allRedirectGrantTypes); - } - - @Test - public void resolveRedirect_emptyGrantTypesTest() { - ClientDetailsEntity clientDetails = new ClientDetailsEntity(); - // Empty authorized grant types should fail - clientDetails.setClientAuthorizedGrantTypes(Set.of()); - try { - resolver.resolveRedirect("", clientDetails); - } catch (InvalidGrantException e) { - assertEquals("A client must have at least one authorized grant type.", e.getMessage()); - } - } - - @Test - public void resolveRedirect_invalidGrantTypesTest() { - ClientDetailsEntity clientDetails = new ClientDetailsEntity(); - // Empty authorized grant types should fail - ClientAuthorisedGrantTypeEntity gte1 = new ClientAuthorisedGrantTypeEntity(); - gte1.setClientId("id"); - gte1.setGrantType("other"); - clientDetails.setClientAuthorizedGrantTypes(Set.of(gte1)); - try { - resolver.resolveRedirect("", clientDetails); - } catch (InvalidGrantException e) { - assertEquals("A redirect_uri can only be used by implicit or authorization_code grant types.", e.getMessage()); - } - } - - @Test - public void resolveRedirect_noRegisteredRedirectUriTest() { - ClientDetailsEntity clientDetails = new ClientDetailsEntity(); - // Empty authorized grant types should fail - ClientAuthorisedGrantTypeEntity gte1 = new ClientAuthorisedGrantTypeEntity(); - gte1.setClientId("id"); - gte1.setGrantType("authorization_code"); - clientDetails.setClientAuthorizedGrantTypes(Set.of(gte1)); - // Null redirect uris - try { - resolver.resolveRedirect("", clientDetails); - } catch (InvalidRequestException e) { - assertEquals("At least one redirect_uri must be registered with the client.", e.getMessage()); - } - // Empty redirect uris - try { - clientDetails.setClientRegisteredRedirectUris(new TreeSet()); - resolver.resolveRedirect("", clientDetails); - } catch (InvalidRequestException e) { - assertEquals("At least one redirect_uri must be registered with the client.", e.getMessage()); - } - } - - @Test - public void resolveRedirect_NoMatchingRedirectTest() { - ClientDetailsEntity clientDetails = new ClientDetailsEntity(); - // Empty authorized grant types should fail - ClientAuthorisedGrantTypeEntity gte1 = new ClientAuthorisedGrantTypeEntity(); - gte1.setClientId("id"); - gte1.setGrantType("authorization_code"); - clientDetails.setClientAuthorizedGrantTypes(Set.of(gte1)); - - TreeSet redirectUris = new TreeSet(); - setRedirectUris("id", redirectUris); - clientDetails.setClientRegisteredRedirectUris(redirectUris); - - // Root url should not match if it is not registered - try { - resolver.resolveRedirect("https://qa.orcid.org", clientDetails); - } catch (RedirectMismatchException e) { - assertEquals("Unable to find a matching redirect_uri for the client.", e.getMessage()); - } - - // Different protocol should not match - try { - resolver.resolveRedirect("http://qa.orcid.org/1", clientDetails); - } catch (RedirectMismatchException e) { - assertEquals("Unable to find a matching redirect_uri for the client.", e.getMessage()); - } - - // Different domain should not match - try { - resolver.resolveRedirect("https://orcid.org/1", clientDetails); - } catch (RedirectMismatchException e) { - assertEquals("Unable to find a matching redirect_uri for the client.", e.getMessage()); - } - - // Different domain should not match - try { - resolver.resolveRedirect("https://example.com/1", clientDetails); - } catch (RedirectMismatchException e) { - assertEquals("Unable to find a matching redirect_uri for the client.", e.getMessage()); - } - - // Same domain but different patch should not match - try { - resolver.resolveRedirect("https://qa.orcid.org/4", clientDetails); - } catch (RedirectMismatchException e) { - assertEquals("Unable to find a matching redirect_uri for the client.", e.getMessage()); - } - } - - @Test - public void resolveRedirectTest() { - ClientDetailsEntity clientDetails = new ClientDetailsEntity(); - // Empty authorized grant types should fail - ClientAuthorisedGrantTypeEntity gte1 = new ClientAuthorisedGrantTypeEntity(); - gte1.setGrantType("authorization_code"); - clientDetails.setClientAuthorizedGrantTypes(Set.of(gte1)); - - TreeSet redirectUris = new TreeSet(); - setRedirectUris("id", redirectUris); - clientDetails.setClientRegisteredRedirectUris(redirectUris); - - assertEquals("https://qa.orcid.org/1", resolver.resolveRedirect("https://qa.orcid.org/1", clientDetails)); - assertEquals("https://qa.orcid.org/2", resolver.resolveRedirect("https://qa.orcid.org/2", clientDetails)); - assertEquals("https://qa.orcid.org/3", resolver.resolveRedirect("https://qa.orcid.org/3", clientDetails)); - assertEquals("https://qa.orcid.org/1/subdirectory", resolver.resolveRedirect("https://qa.orcid.org/1/subdirectory", clientDetails)); - assertEquals("https://qa.orcid.org/1/2/3", resolver.resolveRedirect("https://qa.orcid.org/1/2/3", clientDetails)); - } - - @Test - public void redirectUriGeneralTests() { - redirectUriGeneralTest(); - } - - private void redirectUriGeneralTest() { - // No matches at all - assertFalse(resolver.redirectMatches("https://example.com", "https://qa.orcid.org")); - assertFalse(resolver.redirectMatches("https://qa.orcid.org", "https://example.com")); - - // Different scheme should not match - assertFalse(resolver.redirectMatches("https://qa.orcid.org", "http://qa.orcid.org")); - assertFalse(resolver.redirectMatches("http://qa.orcid.org", "https://qa.orcid.org")); - assertFalse(resolver.redirectMatches("https://example.com", "http://example.com")); - assertFalse(resolver.redirectMatches("http://example.com", "https://example.com")); - - // Different port should not match - assertFalse(resolver.redirectMatches("http://qa.orcid.org", "http://qa.orcid.org:8080")); - assertFalse(resolver.redirectMatches("http://qa.orcid.org:8080", "http://qa.orcid.org")); - assertFalse(resolver.redirectMatches("http://qa.orcid.org:8080", "http://qa.orcid.org:8081")); - assertFalse(resolver.redirectMatches("http://127.0.0.1", "http://127.0.0.1:8080")); - assertFalse(resolver.redirectMatches("http://127.0.0.1:8080", "http://127.0.0.1")); - assertFalse(resolver.redirectMatches("http://127.0.0.1:8080", "http://127.0.0.1:8081")); - - // Different host should not match - assertFalse(resolver.redirectMatches("https://orcid.org", "http://example.com")); - - // Root should not match if it is not registered - assertFalse(resolver.redirectMatches("https://qa.orcid.org", "http://qa.orcid.org/subdirectory")); - - // Subdirectory should not match if it is not registered - assertFalse(resolver.redirectMatches("https://qa.orcid.org/subdirectory/2", "https://qa.orcid.org/subdirectory/1")); - assertFalse(resolver.redirectMatches("https://qa.orcid.org/s2", "https://qa.orcid.org/s1")); - - // Exact match - assertTrue(resolver.redirectMatches("https://orcid.org", "https://orcid.org")); - assertTrue(resolver.redirectMatches("http://example.com:9001", "http://example.com:9001")); - assertTrue(resolver.redirectMatches("http://127.0.0.1", "http://127.0.0.1")); - assertTrue(resolver.redirectMatches("http://127.0.0.1:8080", "http://127.0.0.1:8080")); - - // Subdirectory should match - assertTrue(resolver.redirectMatches("https://orcid.org/subdirectory", "https://orcid.org")); - assertTrue(resolver.redirectMatches("https://orcid.org/subdirectory/1", "https://orcid.org")); - assertTrue(resolver.redirectMatches("https://orcid.org/subdirectory/1/2", "https://orcid.org")); - assertTrue(resolver.redirectMatches("https://orcid.org/subdirectory/1/2", "https://orcid.org/subdirectory")); - assertTrue(resolver.redirectMatches("https://orcid.org/subdirectory/1/2", "https://orcid.org/subdirectory/1")); - assertTrue(resolver.redirectMatches("https://orcid.org/subdirectory/1/2", "https://orcid.org/subdirectory/1/2")); - - // If a subdomain is registered but not the domain, it should fail - assertFalse(resolver.redirectMatches("https://orcid.org", "https://qa.orcid.org")); - // Different subdomains should not match - assertFalse(resolver.redirectMatches("https://qa.orcid.org", "https://sandbox.orcid.org")); - - // Acceptance criteria checks: subdirectory should be allowed - assertTrue(resolver.redirectMatches("https://example.com/subdirectory", "https://example.com")); - } - - @Test - public void redirectMatches_AllowMatchingSubdomainsTest() { - // Subdomain should not match - assertFalse(resolver.redirectMatches("https://www.orcid.org", "https://orcid.org")); - assertFalse(resolver.redirectMatches("https://qa.orcid.org", "https://orcid.org")); - - // Acceptance criteria checks: subdomains should be rejected - assertFalse(resolver.redirectMatches("https://subdomain.example.com/", "https://example.com")); - assertFalse(resolver.redirectMatches("https://subdomain.example.com/subdirectory", "https://example.com")); - assertFalse(resolver.redirectMatches("https://www.example.com", "https://example.com")); - } - - private void setRedirectUris(String clientId, TreeSet redirectUris) { - ClientRedirectUriEntity r1 = new ClientRedirectUriEntity(); - r1.setClientId(clientId); - r1.setRedirectUri("https://qa.orcid.org/1"); - r1.setRedirectUriType("type-1"); - - ClientRedirectUriEntity r2 = new ClientRedirectUriEntity(); - r2.setClientId(clientId); - r2.setRedirectUri("https://qa.orcid.org/2"); - r2.setRedirectUriType("type-1"); - - ClientRedirectUriEntity r3 = new ClientRedirectUriEntity(); - r3.setClientId(clientId); - r3.setRedirectUri("https://qa.orcid.org/3"); - r3.setRedirectUriType("type-1"); - redirectUris.add(r1); - redirectUris.add(r2); - redirectUris.add(r3); - } -} diff --git a/orcid-core/src/test/java/org/orcid/core/oauth/service/OrcidAuthorizationCodeServiceTest.java b/orcid-core/src/test/java/org/orcid/core/oauth/service/OrcidAuthorizationCodeServiceTest.java deleted file mode 100644 index cc7ebada5fc..00000000000 --- a/orcid-core/src/test/java/org/orcid/core/oauth/service/OrcidAuthorizationCodeServiceTest.java +++ /dev/null @@ -1,127 +0,0 @@ -package org.orcid.core.oauth.service; - -import static org.junit.Assert.assertNotNull; - -import java.util.Arrays; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - -import javax.annotation.Resource; - -import org.junit.AfterClass; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.orcid.core.manager.ProfileEntityManager; -import org.orcid.core.security.OrcidUserDetailsService; -import org.orcid.test.DBUnitTest; -import org.orcid.test.OrcidJUnit4ClassRunner; -import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.core.authority.SimpleGrantedAuthority; -import org.springframework.security.core.userdetails.UserDetails; -import org.springframework.security.oauth2.common.exceptions.InvalidClientException; -import org.springframework.security.oauth2.common.exceptions.InvalidGrantException; -import org.springframework.security.oauth2.common.util.OAuth2Utils; -import org.springframework.security.oauth2.provider.AuthorizationRequest; -import org.springframework.security.oauth2.provider.ClientDetailsService; -import org.springframework.security.oauth2.provider.OAuth2Authentication; -import org.springframework.security.oauth2.provider.OAuth2RequestFactory; -import org.springframework.security.oauth2.provider.code.AuthorizationCodeServices; -import org.springframework.security.oauth2.provider.request.DefaultOAuth2RequestFactory; -import org.springframework.test.annotation.Rollback; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.transaction.annotation.Transactional; - -/** - * @author Declan Newman (declan) Date: 24/04/2012 - */ -@RunWith(OrcidJUnit4ClassRunner.class) -@ContextConfiguration(locations = { "classpath:test-orcid-core-context.xml" }) -public class OrcidAuthorizationCodeServiceTest extends DBUnitTest { - - @Resource(name = "orcidAuthorizationCodeService") - private AuthorizationCodeServices authorizationCodeServices; - - @Resource(name = "profileEntityManager") - private ProfileEntityManager profileEntityManager; - - @Resource(name = "clientDetailsManager") - private ClientDetailsService clientDetailsService; - - @Resource - private OrcidUserDetailsService orcidUserDetailsService; - - private OAuth2RequestFactory oAuth2RequestFactory; - - @BeforeClass - public static void initDBUnitData() throws Exception { - initDBUnitData(Arrays.asList("/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", - "/data/ClientDetailsEntityData.xml")); - } - - @AfterClass - public static void removeDBUnitData() throws Exception { - removeDBUnitData(Arrays.asList("/data/ClientDetailsEntityData.xml", "/data/ProfileEntityData.xml")); - } - - @Before - public void before() { - oAuth2RequestFactory = new DefaultOAuth2RequestFactory(clientDetailsService); - } - - @Test - @Rollback - @Transactional - public void testCreateAuthorizationCodeWithValidClient() { - AuthorizationRequest request = getAuthorizationRequest("4444-4444-4444-4441"); - OAuth2Authentication oauth2Authentication = new OAuth2Authentication(oAuth2RequestFactory.createOAuth2Request(request), getUserAuthentication("0000-0000-0000-0002")); - String authorizationCode = authorizationCodeServices.createAuthorizationCode(oauth2Authentication); - assertNotNull(authorizationCode); - oauth2Authentication = authorizationCodeServices.consumeAuthorizationCode(authorizationCode); - assertNotNull(oauth2Authentication); - } - - @Test(expected = InvalidGrantException.class) - @Rollback - @Transactional - public void testConsumeNonExistentCode() { - authorizationCodeServices.consumeAuthorizationCode("bodus-code!"); - } - - @Test(expected = InvalidClientException.class) - @Rollback - @Transactional - public void testCreateAuthorizationCodeWithInvalidClient() { - AuthorizationRequest request = getAuthorizationRequest("6444-4444-4444-4441"); - OAuth2Authentication auth = new OAuth2Authentication(oAuth2RequestFactory.createOAuth2Request(request), getUserAuthentication("0000-0000-0000-0002")); - authorizationCodeServices.createAuthorizationCode(auth); - } - - public AuthorizationRequest getAuthorizationRequest(String clientId) { - Set grantedAuthorities = new HashSet(Arrays.asList(new SimpleGrantedAuthority("ROLE_USER"))); - Set resourceIds = new HashSet<>(); - resourceIds.add("orcid"); - - Map params = new HashMap(); - params.put(OAuth2Utils.CLIENT_ID, clientId); - params.put(OAuth2Utils.SCOPE, "a-scope"); - - AuthorizationRequest authorizationRequest = oAuth2RequestFactory.createAuthorizationRequest(params); - authorizationRequest.setAuthorities(grantedAuthorities); - authorizationRequest.setResourceIds(resourceIds); - - return authorizationRequest; - } - - private Authentication getUserAuthentication(String orcid) { - UserDetails details = (UserDetails) orcidUserDetailsService.loadUserByUsername(orcid); - UsernamePasswordAuthenticationToken auth = new UsernamePasswordAuthenticationToken(details.getUsername(), "password"); - auth.setDetails(details); - return auth; - } -} diff --git a/orcid-core/src/test/java/org/orcid/core/oauth/service/OrcidOauth2TokenDetailServiceTest.java b/orcid-core/src/test/java/org/orcid/core/oauth/service/OrcidOauth2TokenDetailServiceTest.java deleted file mode 100644 index 6982f76b55a..00000000000 --- a/orcid-core/src/test/java/org/orcid/core/oauth/service/OrcidOauth2TokenDetailServiceTest.java +++ /dev/null @@ -1,353 +0,0 @@ -package org.orcid.core.oauth.service; - -import static org.hamcrest.core.AllOf.allOf; -import static org.hamcrest.core.AnyOf.anyOf; -import static org.hamcrest.core.Is.is; -import static org.hamcrest.core.IsNot.not; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertThat; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; - -import java.util.Arrays; -import java.util.Date; -import java.util.List; - -import javax.annotation.Resource; -import javax.persistence.NoResultException; - -import org.junit.AfterClass; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.orcid.core.common.manager.EmailFrequencyManager; -import org.orcid.core.constants.RevokeReason; -import org.orcid.core.oauth.OrcidOauth2TokenDetailService; -import org.orcid.core.utils.cache.redis.RedisClient; -import org.orcid.persistence.dao.OrcidOauth2TokenDetailDao; -import org.orcid.persistence.jpa.entities.OrcidOauth2TokenDetail; -import org.orcid.persistence.jpa.entities.ProfileEntity; -import org.orcid.test.DBUnitTest; -import org.orcid.test.OrcidJUnit4ClassRunner; -import org.orcid.test.TargetProxyHelper; -import org.springframework.test.context.ContextConfiguration; - -/** - * - * @author Angel Montenegro - */ -@RunWith(OrcidJUnit4ClassRunner.class) -@ContextConfiguration(locations = { "classpath:test-orcid-core-context.xml" }) -public class OrcidOauth2TokenDetailServiceTest extends DBUnitTest { - private static final String CLIENT_ID_1 = "APP-5555555555555555"; - private static final String CLIENT_ID_2 = "APP-5555555555555556"; - private static final String USER_ORCID = "0000-0000-0000-0001"; - private static final String USER_ORCID_2 = "0000-0000-0000-0002"; - private static final String USER_ORCID_3 = "0000-0000-0000-0003"; - - @Resource - private OrcidOauth2TokenDetailService orcidOauth2TokenDetailService; - - @Resource(name="orcidOauth2TokenDetailDao") - private OrcidOauth2TokenDetailDao orcidOauth2TokenDetailDao; - - @Mock - private RedisClient redisClientMock; - - @BeforeClass - public static void initDBUnitData() throws Exception { - initDBUnitData(Arrays.asList("/data/SubjectEntityData.xml", "/data/SourceClientDetailsEntityData.xml", - "/data/ProfileEntityData.xml")); - } - - @Before - public void before() { - MockitoAnnotations.initMocks(this); - // Enable the cache - TargetProxyHelper.injectIntoProxy(orcidOauth2TokenDetailService, "isTokenCacheEnabled", true); - TargetProxyHelper.injectIntoProxy(orcidOauth2TokenDetailService, "redisClient", redisClientMock); - } - - @AfterClass - public static void removeDBUnitData() throws Exception { - removeDBUnitData(Arrays.asList("/data/ProfileEntityData.xml", "/data/SourceClientDetailsEntityData.xml", - "/data/SubjectEntityData.xml")); - } - - @Test - public void dontGetExpiredTokensTest() { - //Token # 1: expired - Long token1Id = createToken(CLIENT_ID_1, "expired-1", USER_ORCID, new Date(System.currentTimeMillis() - 100000), "/read-limited", false).getId(); - //Token # 2: /activities/update - Long token2Id = createToken(CLIENT_ID_1, "active-1", USER_ORCID, new Date(System.currentTimeMillis() + 100000), "/activities/update", false).getId(); - //Token # 3: disabled - Long token3Id = createToken(CLIENT_ID_1, "disabled-1", USER_ORCID, new Date(System.currentTimeMillis() + 100000), "/activities/update", true).getId(); - //Token # 4: /read-limited - Long token4Id = createToken(CLIENT_ID_1, "active-2", USER_ORCID, new Date(System.currentTimeMillis() + 100000), "/read-limited", false).getId(); - //Fetch all active tokens - List activeTokens = orcidOauth2TokenDetailService.findByUserName(USER_ORCID); - assertNotNull(activeTokens); - assertEquals(2, activeTokens.size()); - assertThat(activeTokens.get(0).getScope(), anyOf(is("/activities/update"), is("/read-limited"))); - assertThat(activeTokens.get(1).getScope(), anyOf(is("/activities/update"), is("/read-limited"))); - - //Find the id of the token with scope '/activities/update' and disable that token - Long tokenToDisableId = null; - for(OrcidOauth2TokenDetail token : activeTokens) { - if("/activities/update".equals(token.getScope())) { - tokenToDisableId = token.getId(); - break; - } - } - - assertNotNull(tokenToDisableId); - //Disable that access token - orcidOauth2TokenDetailService.disableAccessToken(tokenToDisableId, USER_ORCID); - //Fetch the active tokens again, it should contain just one - activeTokens = orcidOauth2TokenDetailService.findByUserName(USER_ORCID); - assertNotNull(activeTokens); - assertEquals(1, activeTokens.size()); - assertEquals("/read-limited", activeTokens.get(0).getScope()); - assertEquals("active-2", activeTokens.get(0).getTokenValue()); - - orcidOauth2TokenDetailDao.remove(token1Id); - orcidOauth2TokenDetailDao.remove(token2Id); - orcidOauth2TokenDetailDao.remove(token3Id); - orcidOauth2TokenDetailDao.remove(token4Id); - } - - @Test - public void removeAllTokensWithSameScopesTest() { - //We will test deleting this token - Long token1Id = createToken(CLIENT_ID_1, "token-1", USER_ORCID, new Date(System.currentTimeMillis() + 100000), "/activities/update /read-limited", false).getId(); //Delete - //Should not delete this - Long token2Id = createToken(CLIENT_ID_1, "token-2", USER_ORCID, new Date(System.currentTimeMillis() + 100000), "/activities/update", false).getId(); - //Should not delete this - Long token3Id = createToken(CLIENT_ID_1, "token-3", USER_ORCID, new Date(System.currentTimeMillis() + 100000), "/read-limited", false).getId(); - //Should delete this one since it have the same scopes but in different order - Long token4Id = createToken(CLIENT_ID_1, "token-4", USER_ORCID, new Date(System.currentTimeMillis() + 100000), "/read-limited /activities/update", false).getId(); //Delete - //Should not delete this since it have one scope more /orcid-profile/read-limited - Long token5Id = createToken(CLIENT_ID_1, "token-5", USER_ORCID, new Date(System.currentTimeMillis() + 100000), "/orcid-profile/read-limited /activities/update /read-limited", false).getId(); - //Should not delete this since it have one scope more /activities/read-limited - Long token6Id = createToken(CLIENT_ID_1, "token-6", USER_ORCID, new Date(System.currentTimeMillis() + 100000), "/read-limited /activities/update /activities/read-limited", false).getId(); - //Should not delete this - Long token7Id = createToken(CLIENT_ID_1, "token-7", USER_ORCID, new Date(System.currentTimeMillis() + 100000), "/person/read-limited", false).getId(); - //Should not delete this since it have several more scopes - Long token8Id = createToken(CLIENT_ID_1, "token-8", USER_ORCID, new Date(System.currentTimeMillis() + 100000), "/funding/read-limited /read-limited /activities/read-limited /orcid-works/create /affiliations/update /activities/update", false).getId(); - //Should remove this since it contains the same scopes - Long token9Id = createToken(CLIENT_ID_1, "token-9", USER_ORCID, new Date(System.currentTimeMillis() + 100000), "/activities/update /read-limited", false).getId(); //Delete - - - List activeTokens = orcidOauth2TokenDetailService.findByUserName(USER_ORCID); - assertNotNull(activeTokens); - assertEquals(9, activeTokens.size()); - - orcidOauth2TokenDetailService.disableAccessToken(token1Id, USER_ORCID); - activeTokens = orcidOauth2TokenDetailService.findByUserName(USER_ORCID); - assertEquals(6, activeTokens.size()); - - for(OrcidOauth2TokenDetail token : activeTokens) { - assertThat(token.getId(), allOf(not(token1Id), not(token4Id), not(token9Id))); - assertThat(token.getId(), anyOf(is(token2Id), is(token3Id), is(token5Id), is(token6Id), is(token7Id), is(token8Id))); - } - - orcidOauth2TokenDetailDao.remove(token1Id); - orcidOauth2TokenDetailDao.remove(token2Id); - orcidOauth2TokenDetailDao.remove(token3Id); - orcidOauth2TokenDetailDao.remove(token4Id); - orcidOauth2TokenDetailDao.remove(token5Id); - orcidOauth2TokenDetailDao.remove(token6Id); - orcidOauth2TokenDetailDao.remove(token7Id); - orcidOauth2TokenDetailDao.remove(token8Id); - orcidOauth2TokenDetailDao.remove(token9Id); - } - - @Test - public void dontRemoveOtherClientScopesTest() { - Long seed = System.currentTimeMillis(); - Long token1Id = createToken(CLIENT_ID_1, "token-1-" + seed, USER_ORCID, new Date(System.currentTimeMillis() + 100000), "/read-limited", false).getId(); //Delete - Long token2Id = createToken(CLIENT_ID_1, "token-2-" + seed, USER_ORCID, new Date(System.currentTimeMillis() + 100000), "/activities/update", false).getId(); - Long token3Id = createToken(CLIENT_ID_1, "token-3-" + seed, USER_ORCID, new Date(System.currentTimeMillis() + 100000), "/activities/update /read-limited", false).getId(); - Long token4Id = createToken(CLIENT_ID_1, "token-4-" + seed, USER_ORCID, new Date(System.currentTimeMillis() + 100000), "/read-limited", false).getId(); //Delete - - Long token5Id = createToken(CLIENT_ID_2, "token-5-" + seed, USER_ORCID, new Date(System.currentTimeMillis() + 100000), "/read-limited", false).getId(); - Long token6Id = createToken(CLIENT_ID_2, "token-6-" + seed, USER_ORCID, new Date(System.currentTimeMillis() + 100000), "/activities/update", false).getId(); - Long token7Id = createToken(CLIENT_ID_2, "token-7-" + seed, USER_ORCID, new Date(System.currentTimeMillis() + 100000), "/activities/update /read-limited", false).getId(); - Long token8Id = createToken(CLIENT_ID_2, "token-8-" + seed, USER_ORCID, new Date(System.currentTimeMillis() + 100000), "/read-limited", false).getId(); - - List activeTokens = orcidOauth2TokenDetailService.findByUserName(USER_ORCID); - assertNotNull(activeTokens); - assertEquals(8, activeTokens.size()); - - orcidOauth2TokenDetailService.disableAccessToken(token1Id, USER_ORCID); - - activeTokens = orcidOauth2TokenDetailService.findByUserName(USER_ORCID); - assertEquals(6, activeTokens.size()); - - for(OrcidOauth2TokenDetail token : activeTokens) { - assertThat(token.getId(), allOf(not(token1Id), not(token4Id))); - assertThat(token.getId(), anyOf(is(token2Id), is(token3Id), is(token5Id), is(token6Id), is(token7Id), is(token8Id))); - } - } - - @Test - public void disableAccessTokenByUserOrcidTest() { - Date date = new Date(System.currentTimeMillis() + 100000); - createToken(CLIENT_ID_1, "active-1-user-1", USER_ORCID_2, date, "/activities/update", false); - createToken(CLIENT_ID_1, "active-2-user-1", USER_ORCID_2, date, "/activities/update", false); - createToken(CLIENT_ID_1, "active-3-user-1", USER_ORCID_2, date, "/activities/update", false); - createToken(CLIENT_ID_1, "active-1-user-2", USER_ORCID_3, date, "/activities/update", false); - createToken(CLIENT_ID_1, "active-2-user-2", USER_ORCID_3, date, "/activities/update", false); - createToken(CLIENT_ID_1, "active-3-user-2", USER_ORCID_3, date, "/activities/update", false); - - List tokensUser1 = orcidOauth2TokenDetailService.findByClientIdAndUserName(CLIENT_ID_1, USER_ORCID_2); - assertEquals(3, tokensUser1.size()); - for(OrcidOauth2TokenDetail token : tokensUser1) { - assertFalse(token.getTokenDisabled()); - } - - List tokensUser2 = orcidOauth2TokenDetailService.findByClientIdAndUserName(CLIENT_ID_1, USER_ORCID_3); - assertEquals(3, tokensUser2.size()); - for(OrcidOauth2TokenDetail token : tokensUser2) { - assertFalse(token.getTokenDisabled()); - } - - orcidOauth2TokenDetailService.disableAccessTokenByUserOrcid(USER_ORCID_2, RevokeReason.RECORD_DEACTIVATED); - - tokensUser1 = orcidOauth2TokenDetailService.findByClientIdAndUserName(CLIENT_ID_1, USER_ORCID_2); - assertEquals(3, tokensUser1.size()); - for(OrcidOauth2TokenDetail token : tokensUser1) { - // Tokens for this user MUST be disabled at this point - assertTrue(token.getTokenDisabled()); - } - - tokensUser2 = orcidOauth2TokenDetailService.findByClientIdAndUserName(CLIENT_ID_1, USER_ORCID_3); - assertEquals(3, tokensUser2.size()); - for(OrcidOauth2TokenDetail token : tokensUser2) { - assertFalse(token.getTokenDisabled()); - } - } - - @Test - public void disableAccessTokenByCodeAndClientTest() { - Date date = new Date(System.currentTimeMillis() + 100000); - String authCode = "auth-code-1"; - OrcidOauth2TokenDetail dbt1 = createToken(CLIENT_ID_1, "token-1", USER_ORCID, date, "/activities/update", false, authCode); - OrcidOauth2TokenDetail dbt2 = createToken(CLIENT_ID_1, "token-2", USER_ORCID, date, "/activities/update", false, authCode); - OrcidOauth2TokenDetail dbt3 = createToken(CLIENT_ID_1, "token-3", USER_ORCID, date, "/activities/update", false, authCode); - OrcidOauth2TokenDetail dbt4 = createToken(CLIENT_ID_1, "token-4", USER_ORCID_2, date, "/activities/update", false, authCode); - OrcidOauth2TokenDetail dbt5 = createToken(CLIENT_ID_2, "token-5", USER_ORCID_3, date, "/activities/update", false, authCode); - OrcidOauth2TokenDetail dbt6 = createToken(CLIENT_ID_2, "token-6", USER_ORCID, date, "/activities/update", false, authCode); - - // Disable tokens with authCode and CLIENT_ID_1 - orcidOauth2TokenDetailService.disableAccessTokenByCodeAndClient(authCode, CLIENT_ID_1, RevokeReason.AUTH_CODE_REUSED); - - verify(redisClientMock, times(1)).remove("token-1"); - verify(redisClientMock, times(1)).remove("token-2"); - verify(redisClientMock, times(1)).remove("token-3"); - verify(redisClientMock, times(1)).remove("token-4"); - - // Tokens 1, 2, 3 and 4 should be revoked - OrcidOauth2TokenDetail t1 = orcidOauth2TokenDetailService.findIgnoringDisabledByTokenValue("token-1"); - assertNotNull(t1.getRevocationDate()); - assertEquals(RevokeReason.AUTH_CODE_REUSED.toString(), t1.getRevokeReason()); - OrcidOauth2TokenDetail t2 = orcidOauth2TokenDetailService.findIgnoringDisabledByTokenValue("token-2"); - assertNotNull(t2.getRevocationDate()); - assertEquals(RevokeReason.AUTH_CODE_REUSED.toString(), t2.getRevokeReason()); - OrcidOauth2TokenDetail t3 = orcidOauth2TokenDetailService.findIgnoringDisabledByTokenValue("token-3"); - assertNotNull(t3.getRevocationDate()); - assertEquals(RevokeReason.AUTH_CODE_REUSED.toString(), t3.getRevokeReason()); - // This case is never possible, the client used the same auth code to create a token on other user - OrcidOauth2TokenDetail t4 = orcidOauth2TokenDetailService.findIgnoringDisabledByTokenValue("token-4"); - assertNotNull(t4.getRevocationDate()); - assertEquals(RevokeReason.AUTH_CODE_REUSED.toString(), t4.getRevokeReason()); - - // Tokens 5 and 6 should be active - OrcidOauth2TokenDetail t5 = orcidOauth2TokenDetailService.findIgnoringDisabledByTokenValue("token-5"); - assertNull(t5.getRevocationDate()); - assertNull(t5.getRevokeReason()); - OrcidOauth2TokenDetail t6 = orcidOauth2TokenDetailService.findIgnoringDisabledByTokenValue("token-6"); - assertNull(t6.getRevocationDate()); - assertNull(t6.getRevokeReason()); - - // Cleanup - orcidOauth2TokenDetailDao.remove(dbt1.getId()); - orcidOauth2TokenDetailDao.remove(dbt2.getId()); - orcidOauth2TokenDetailDao.remove(dbt3.getId()); - orcidOauth2TokenDetailDao.remove(dbt4.getId()); - orcidOauth2TokenDetailDao.remove(dbt5.getId()); - orcidOauth2TokenDetailDao.remove(dbt6.getId()); - } - - @Test - public void updateScopesTest() { - String tokenValue = "TOKEN123"; - String scopes1 = "/person/read-limited /activities/update /read-limited"; - String scopes2 = "/person/read-limited /read-limited"; - String scopes3 = "/read-limited"; - //We will test deleting this token - Long token1Id = createToken(CLIENT_ID_1, tokenValue, USER_ORCID, new Date(System.currentTimeMillis() + 100000), scopes1, false).getId(); //Delete - OrcidOauth2TokenDetail token1 = orcidOauth2TokenDetailDao.find(token1Id); - assertNotNull(token1); - assertEquals(CLIENT_ID_1, token1.getClientDetailsId()); - assertEquals(tokenValue, token1.getTokenValue()); - assertEquals(USER_ORCID, token1.getOrcid()); - assertEquals(scopes1, token1.getScope()); - assertEquals("bearer", token1.getTokenType()); - - orcidOauth2TokenDetailDao.updateScopes(tokenValue, scopes2); - OrcidOauth2TokenDetail token2 = orcidOauth2TokenDetailDao.findByTokenValue(tokenValue); - assertNotNull(token2); - assertEquals(CLIENT_ID_1, token2.getClientDetailsId()); - assertEquals(tokenValue, token2.getTokenValue()); - assertEquals(USER_ORCID, token2.getOrcid()); - assertEquals(scopes2, token2.getScope()); - assertEquals("bearer", token2.getTokenType()); - - orcidOauth2TokenDetailDao.updateScopes(tokenValue, scopes3); - OrcidOauth2TokenDetail token3 = orcidOauth2TokenDetailDao.findByTokenValue(tokenValue); - assertNotNull(token3); - assertEquals(CLIENT_ID_1, token3.getClientDetailsId()); - assertEquals(tokenValue, token3.getTokenValue()); - assertEquals(USER_ORCID, token3.getOrcid()); - assertEquals(scopes3, token3.getScope()); - assertEquals("bearer", token3.getTokenType()); - - orcidOauth2TokenDetailDao.remove(token1Id); - - try { - orcidOauth2TokenDetailDao.findByTokenValue(tokenValue); - fail(); - } catch(NoResultException nre) { - //Expected behavior - } - } - - private OrcidOauth2TokenDetail createToken(String clientId, String tokenValue, String userOrcid, Date expirationDate, String scopes, boolean disabled) { - return createToken(clientId, tokenValue, userOrcid, expirationDate, scopes, disabled, null); - } - - private OrcidOauth2TokenDetail createToken(String clientId, String tokenValue, String userOrcid, Date expirationDate, String scopes, boolean disabled, String authCode) { - OrcidOauth2TokenDetail token = new OrcidOauth2TokenDetail(); - token.setApproved(true); - token.setClientDetailsId(clientId); - token.setOrcid(userOrcid); - token.setScope(scopes); - token.setTokenDisabled(disabled); - token.setTokenExpiration(expirationDate); - token.setTokenType("bearer"); - token.setTokenValue(tokenValue); - token.setAuthorizationCode(authCode); - orcidOauth2TokenDetailDao.persist(token); - return token; - } - -} diff --git a/orcid-core/src/test/java/org/orcid/core/oauth/service/OrcidTokenStoreServiceTest.java b/orcid-core/src/test/java/org/orcid/core/oauth/service/OrcidTokenStoreServiceTest.java deleted file mode 100644 index 5c882cc40ab..00000000000 --- a/orcid-core/src/test/java/org/orcid/core/oauth/service/OrcidTokenStoreServiceTest.java +++ /dev/null @@ -1,279 +0,0 @@ -package org.orcid.core.oauth.service; - -import static org.hamcrest.core.AnyOf.anyOf; -import static org.hamcrest.core.Is.is; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertThat; -import static org.junit.Assert.assertTrue; - -import java.io.Serializable; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.Date; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; - -import javax.annotation.Resource; - -import org.junit.AfterClass; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.orcid.core.constants.OrcidOauth2Constants; -import org.orcid.core.manager.ClientDetailsEntityCacheManager; -import org.orcid.core.manager.ClientDetailsManager; -import org.orcid.core.manager.ProfileEntityManager; -import org.orcid.core.manager.SourceNameCacheManager; -import org.orcid.core.manager.v3.read_only.RecordNameManagerReadOnly; -import org.orcid.core.oauth.OrcidUserAuthentication; -import org.orcid.persistence.dao.OrcidOauth2TokenDetailDao; -import org.orcid.persistence.dao.RecordNameDao; -import org.orcid.persistence.jpa.entities.OrcidOauth2TokenDetail; -import org.orcid.persistence.jpa.entities.ProfileEntity; -import org.orcid.test.DBUnitTest; -import org.orcid.test.OrcidJUnit4ClassRunner; -import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.oauth2.common.DefaultExpiringOAuth2RefreshToken; -import org.springframework.security.oauth2.common.DefaultOAuth2AccessToken; -import org.springframework.security.oauth2.common.DefaultOAuth2RefreshToken; -import org.springframework.security.oauth2.common.ExpiringOAuth2RefreshToken; -import org.springframework.security.oauth2.common.OAuth2AccessToken; -import org.springframework.security.oauth2.common.OAuth2RefreshToken; -import org.springframework.security.oauth2.provider.OAuth2Authentication; -import org.springframework.security.oauth2.provider.OAuth2Request; -import org.springframework.security.oauth2.provider.token.TokenStore; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.transaction.annotation.Transactional; - -/** - * @author Declan Newman (declan) Date: 20/04/2012 - */ -@RunWith(OrcidJUnit4ClassRunner.class) -@ContextConfiguration(locations = { "classpath:test-orcid-core-context.xml" }) -public class OrcidTokenStoreServiceTest extends DBUnitTest { - - @Resource(name = "orcidTokenStore") - private TokenStore orcidTokenStoreService; - - @Resource - private ProfileEntityManager profileEntityManager; - - @Resource(name="orcidOauth2TokenDetailDao") - private OrcidOauth2TokenDetailDao orcidOauth2TokenDetailDao; - - @Resource - private ClientDetailsEntityCacheManager clientDetailsEntityCacheManager; - - @Resource - private SourceNameCacheManager sourceNameCacheManager; - - @Mock - private ClientDetailsManager mockClientDetailsManager; - - @Mock - private RecordNameDao mockRecordNameDao; - - @Mock - private RecordNameManagerReadOnly mockRecordNameManager; - - @BeforeClass - public static void initDBUnitData() throws Exception { - initDBUnitData(Arrays.asList("/data/SubjectEntityData.xml", "/data/SourceClientDetailsEntityData.xml", - "/data/ProfileEntityData.xml", "/data/ClientDetailsEntityData.xml", "/data/OrcidOauth2AuthorisationDetailsData.xml")); - } - - @Before - public void setUp() { - MockitoAnnotations.initMocks(this); - } - - @AfterClass - public static void removeDBUnitData() throws Exception { - removeDBUnitData(Arrays.asList("/data/OrcidOauth2AuthorisationDetailsData.xml", "/data/ClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", - "/data/SubjectEntityData.xml")); - } - - @Test - public void testReadAuthentication() throws Exception { - OAuth2Authentication oAuth2Authentication = orcidTokenStoreService.readAuthentication("persistent-token-2"); - assertNotNull(oAuth2Authentication); - OAuth2Request oAuth2Request = oAuth2Authentication.getOAuth2Request(); - assertNotNull(oAuth2Request); - Object principal = oAuth2Authentication.getPrincipal(); - assertNotNull(principal); - assertTrue(!oAuth2Authentication.isClientOnly()); - } - - @Test - @Transactional - public void testStoreAccessToken() throws Exception { - String clientId = "4444-4444-4444-4441"; - DefaultOAuth2AccessToken token = new DefaultOAuth2AccessToken("some-long-oauth2-token-value-9"); - - ExpiringOAuth2RefreshToken refreshToken = new DefaultExpiringOAuth2RefreshToken("some-long-oauth2-refresh-value-9", new Date()); - token.setRefreshToken(refreshToken); - token.setScope(new HashSet(Arrays.asList("/orcid-bio/read", "/orcid-works/read"))); - token.setTokenType("bearer"); - token.setExpiration(new Date()); - token.setAdditionalInformation(new HashMap()); - - Map parameters = new HashMap(); - parameters.put("client_id", clientId); - parameters.put("state", "read"); - parameters.put("scope", "/orcid-profile/write"); - parameters.put("redirect_uri", "http://www.google.com/"); - parameters.put("response_type", "bearer"); - OAuth2Request request = new OAuth2Request(Collections. emptyMap(), clientId, Collections. emptyList(), true, new HashSet(Arrays.asList("/orcid-profile/read-limited")), Collections. emptySet(), null, Collections. emptySet(), Collections. emptyMap()); - - ProfileEntity profileEntity = profileEntityManager.findByOrcid("4444-4444-4444-4444"); - OrcidUserAuthentication userAuthentication = new OrcidUserAuthentication(profileEntity, true); - - OAuth2Authentication authentication = new OAuth2Authentication(request, userAuthentication); - - assertFalse(token.getAdditionalInformation().containsKey(OrcidOauth2Constants.TOKEN_ID)); - orcidTokenStoreService.storeAccessToken(token, authentication); - assertTrue(token.getAdditionalInformation().containsKey(OrcidOauth2Constants.TOKEN_ID)); - } - - @Test - public void testReadAccessToken() throws Exception { - OAuth2AccessToken oAuth2AccessToken = orcidTokenStoreService.readAccessToken("some-long-oauth2-token-value-1"); - assertNotNull(oAuth2AccessToken); - } - - @Test - public void testRemoveAccessToken() throws Exception { - OAuth2AccessToken accessToken = new DefaultOAuth2AccessToken("code3"); - orcidTokenStoreService.removeAccessToken(accessToken); - OAuth2AccessToken oAuth2AccessToken = orcidTokenStoreService.readAccessToken("code3"); - assertNull(oAuth2AccessToken); - } - - @Test - @Transactional - public void testReadAuthenticationForRefreshToken() throws Exception { - OAuth2RefreshToken refreshToken = new DefaultOAuth2RefreshToken("some-long-oauth2-refresh-value-1"); - OAuth2Authentication oAuth2Authentication = orcidTokenStoreService.readAuthenticationForRefreshToken(refreshToken); - assertNotNull(oAuth2Authentication); - } - - @Test - public void testRemoveByRefreshToken() throws Exception { - OAuth2AccessToken token = orcidTokenStoreService.readAccessToken("some-long-oauth2-token-value-3"); - assertNotNull(token); - orcidTokenStoreService.removeRefreshToken(token.getRefreshToken()); - token = orcidTokenStoreService.readAccessToken("some-long-oauth2-token-value-3"); - assertNull(token); - } - - @Test - public void testRemoveAccessTokenUsingRefreshToken() throws Exception { - OAuth2AccessToken token = orcidTokenStoreService.readAccessToken("persistent-token-1"); - orcidTokenStoreService.removeAccessTokenUsingRefreshToken(token.getRefreshToken()); - token = orcidTokenStoreService.readAccessToken("persistent-token-1"); - assertNull(token); - } - - @Test - @Transactional - public void testGetAccessToken() throws Exception { - String clientId = "APP-5555555555555555"; - String orcid = "0000-0000-0000-0001"; - String scope = "/read-limited"; - String accessTokenValue = "00000000-0000-0000-0000-00000000000"; - Map parameters = new HashMap(); - parameters.put("client_id", clientId); - parameters.put("state", "a-state"); - parameters.put("scope", "/read-limited"); - parameters.put("redirect_uri", "http://www.google.com/"); - parameters.put("response_type", "bearer"); - OAuth2Request request = - new OAuth2Request(Collections. emptyMap(), clientId, Collections. emptyList(), true, new HashSet(Arrays.asList(scope)), Collections. emptySet(), null, Collections. emptySet(), Collections. emptyMap()); - - ProfileEntity profileEntity = profileEntityManager.findByOrcid(orcid); - OrcidUserAuthentication userAuthentication = new OrcidUserAuthentication(profileEntity, true); - - OAuth2Authentication authentication = new OAuth2Authentication(request, userAuthentication); - - OAuth2AccessToken accessToken = orcidTokenStoreService.getAccessToken(authentication); - assertNotNull(accessToken); - assertEquals(accessTokenValue, accessToken.getValue()); - assertEquals(1, accessToken.getScope().size()); - assertTrue(accessToken.getScope().contains(scope)); - } - - @Test - public void testFindTokensByUserName() throws Exception { - Collection tokensByUserName = orcidTokenStoreService.findTokensByClientIdAndUserName("4444-4444-4444-4441", "4444-4444-4444-4441"); - assertNotNull(tokensByUserName); - assertEquals(1, tokensByUserName.size()); - } - - @Test - public void testFindTokensByClientId() throws Exception { - Collection tokensByClientId = orcidTokenStoreService.findTokensByClientId("4444-4444-4444-4441"); - assertNotNull(tokensByClientId); - assertEquals(1, tokensByClientId.size()); - } - - @Test - public void testDisabledTokensAreNotReturnedWhenLookingByClientAndUserName() { - String clientId = "4444-4444-4444-4441"; - String userId = "0000-0000-0000-0001"; - OrcidOauth2TokenDetail token1 = createAccessToken("enabled-1", "/read-limited", clientId, userId, false); - assertNotNull(token1); - assertNotNull(token1.getId()); - - OrcidOauth2TokenDetail token2 = createAccessToken("enabled-2", "/read-limited", clientId, userId, false); - assertNotNull(token2); - assertNotNull(token2.getId()); - - OrcidOauth2TokenDetail token3 = createAccessToken("enabled-3", "/read-limited", clientId, userId, false); - assertNotNull(token3); - assertNotNull(token3.getId()); - - OrcidOauth2TokenDetail disabledToken1 = createAccessToken("disabled-1", "/read-limited", clientId, userId, true); - assertNotNull(disabledToken1); - assertNotNull(disabledToken1.getId()); - - OrcidOauth2TokenDetail disabledToken2 = createAccessToken("disabled-2", "/read-limited", clientId, userId, true); - assertNotNull(disabledToken2); - assertNotNull(disabledToken2.getId()); - - OrcidOauth2TokenDetail disabledToken3 = createAccessToken("disabled-3", "/read-limited", clientId, userId, true); - assertNotNull(disabledToken3); - assertNotNull(disabledToken3.getId()); - - Collection tokens = orcidTokenStoreService.findTokensByClientIdAndUserName(clientId, userId); - assertNotNull(tokens); - assertEquals(3, tokens.size()); - - for(OAuth2AccessToken token : tokens) { - assertThat(token.getValue(), anyOf(is("enabled-1"), is("enabled-2"), is("enabled-3"))); - } - } - - @Transactional - private OrcidOauth2TokenDetail createAccessToken(String tokenValue, String scope, String clientId, String userOrcid, boolean disabled) { - OrcidOauth2TokenDetail token = new OrcidOauth2TokenDetail(); - token.setApproved(true); - token.setClientDetailsId(clientId); - token.setOrcid(userOrcid); - token.setScope(scope); - token.setTokenDisabled(disabled); - token.setTokenValue(tokenValue); - orcidOauth2TokenDetailDao.persist(token); - assertNotNull(token.getDateCreated()); - assertNotNull(token.getLastModified()); - return token; - } - -} diff --git a/orcid-core/src/test/java/org/orcid/core/security/visibility/aop/OrcidApiAuthorizationSecurityAspectTest.java b/orcid-core/src/test/java/org/orcid/core/security/visibility/aop/OrcidApiAuthorizationSecurityAspectTest.java deleted file mode 100644 index 4707f6dc474..00000000000 --- a/orcid-core/src/test/java/org/orcid/core/security/visibility/aop/OrcidApiAuthorizationSecurityAspectTest.java +++ /dev/null @@ -1,129 +0,0 @@ -package org.orcid.core.security.visibility.aop; - -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.assertFalse; -import static org.mockito.Mockito.when; - -import java.util.Arrays; - -import org.junit.Before; -import org.junit.Test; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.orcid.core.BaseTest; -import org.orcid.jaxb.model.message.ScopePathType; -import org.orcid.persistence.dao.OrcidOauth2TokenDetailDao; - -public class OrcidApiAuthorizationSecurityAspectTest extends BaseTest { - private final String clientId = "APP-0001"; - private final String userOrcid = "0000-0000-0000-0001"; - - OrcidApiAuthorizationSecurityAspect orcidApiAuthorizationSecurityAspect; - - @Mock - private OrcidOauth2TokenDetailDao mockedOrcidOauth2TokenDetailDao; - - @Before - public void setup() { - if(orcidApiAuthorizationSecurityAspect == null) { - orcidApiAuthorizationSecurityAspect = new OrcidApiAuthorizationSecurityAspect(); - } - MockitoAnnotations.initMocks(this); - orcidApiAuthorizationSecurityAspect.setOrcidOauth2TokenDetailDao(mockedOrcidOauth2TokenDetailDao); - } - - @Test - public void testActivitiesReadLimitedScopes() { - when(mockedOrcidOauth2TokenDetailDao.findAvailableScopesByUserAndClientId(clientId, userOrcid)).thenReturn(Arrays.asList("/activities/read-limited")); - assertTrue(orcidApiAuthorizationSecurityAspect.hasScopeEnabled(clientId, userOrcid, ScopePathType.ORCID_WORKS_READ_LIMITED.getContent(), ScopePathType.ORCID_WORKS_UPDATE.getContent())); - assertTrue(orcidApiAuthorizationSecurityAspect.hasScopeEnabled(clientId, userOrcid, ScopePathType.FUNDING_READ_LIMITED.getContent(), ScopePathType.FUNDING_UPDATE.getContent())); - assertTrue(orcidApiAuthorizationSecurityAspect.hasScopeEnabled(clientId, userOrcid, ScopePathType.AFFILIATIONS_READ_LIMITED.getContent(), ScopePathType.AFFILIATIONS_UPDATE.getContent())); - } - - @Test - public void testActivitiesUpdateScopes() { - when(mockedOrcidOauth2TokenDetailDao.findAvailableScopesByUserAndClientId(clientId, userOrcid)).thenReturn(Arrays.asList("/activities/update")); - assertTrue(orcidApiAuthorizationSecurityAspect.hasScopeEnabled(clientId, userOrcid, ScopePathType.ORCID_WORKS_READ_LIMITED.getContent(), ScopePathType.ORCID_WORKS_UPDATE.getContent())); - assertTrue(orcidApiAuthorizationSecurityAspect.hasScopeEnabled(clientId, userOrcid, ScopePathType.FUNDING_READ_LIMITED.getContent(), ScopePathType.FUNDING_UPDATE.getContent())); - assertTrue(orcidApiAuthorizationSecurityAspect.hasScopeEnabled(clientId, userOrcid, ScopePathType.AFFILIATIONS_READ_LIMITED.getContent(), ScopePathType.AFFILIATIONS_UPDATE.getContent())); - } - - @Test - public void testWorksReadLimitedScopes() { - when(mockedOrcidOauth2TokenDetailDao.findAvailableScopesByUserAndClientId(clientId, userOrcid)).thenReturn(Arrays.asList("/orcid-works/read-limited")); - assertTrue(orcidApiAuthorizationSecurityAspect.hasScopeEnabled(clientId, userOrcid, ScopePathType.ORCID_WORKS_READ_LIMITED.getContent(), ScopePathType.ORCID_WORKS_UPDATE.getContent())); - assertFalse(orcidApiAuthorizationSecurityAspect.hasScopeEnabled(clientId, userOrcid, ScopePathType.FUNDING_READ_LIMITED.getContent(), ScopePathType.FUNDING_UPDATE.getContent())); - assertFalse(orcidApiAuthorizationSecurityAspect.hasScopeEnabled(clientId, userOrcid, ScopePathType.AFFILIATIONS_READ_LIMITED.getContent(), ScopePathType.AFFILIATIONS_UPDATE.getContent())); - } - - @Test - public void testFundingReadLimitedScopes() { - when(mockedOrcidOauth2TokenDetailDao.findAvailableScopesByUserAndClientId(clientId, userOrcid)).thenReturn(Arrays.asList("/funding/read-limited")); - assertTrue(orcidApiAuthorizationSecurityAspect.hasScopeEnabled(clientId, userOrcid, ScopePathType.FUNDING_READ_LIMITED.getContent(), ScopePathType.FUNDING_UPDATE.getContent())); - assertFalse(orcidApiAuthorizationSecurityAspect.hasScopeEnabled(clientId, userOrcid, ScopePathType.ORCID_WORKS_READ_LIMITED.getContent(), ScopePathType.ORCID_WORKS_UPDATE.getContent())); - assertFalse(orcidApiAuthorizationSecurityAspect.hasScopeEnabled(clientId, userOrcid, ScopePathType.AFFILIATIONS_READ_LIMITED.getContent(), ScopePathType.AFFILIATIONS_UPDATE.getContent())); - } - - @Test - public void testAffiliationsReadLimitedScopes() { - when(mockedOrcidOauth2TokenDetailDao.findAvailableScopesByUserAndClientId(clientId, userOrcid)).thenReturn(Arrays.asList("/affiliations/read-limited")); - assertTrue(orcidApiAuthorizationSecurityAspect.hasScopeEnabled(clientId, userOrcid, ScopePathType.AFFILIATIONS_READ_LIMITED.getContent(), ScopePathType.AFFILIATIONS_UPDATE.getContent())); - assertFalse(orcidApiAuthorizationSecurityAspect.hasScopeEnabled(clientId, userOrcid, ScopePathType.FUNDING_READ_LIMITED.getContent(), ScopePathType.FUNDING_UPDATE.getContent())); - assertFalse(orcidApiAuthorizationSecurityAspect.hasScopeEnabled(clientId, userOrcid, ScopePathType.ORCID_WORKS_READ_LIMITED.getContent(), ScopePathType.ORCID_WORKS_UPDATE.getContent())); - } - - @Test - public void testOrcidBioScopes() { - when(mockedOrcidOauth2TokenDetailDao.findAvailableScopesByUserAndClientId(clientId, userOrcid)).thenReturn(Arrays.asList("/orcid-bio/read-limited")); - assertFalse(orcidApiAuthorizationSecurityAspect.hasScopeEnabled(clientId, userOrcid, ScopePathType.AFFILIATIONS_READ_LIMITED.getContent(), ScopePathType.AFFILIATIONS_UPDATE.getContent())); - assertFalse(orcidApiAuthorizationSecurityAspect.hasScopeEnabled(clientId, userOrcid, ScopePathType.FUNDING_READ_LIMITED.getContent(), ScopePathType.FUNDING_UPDATE.getContent())); - assertFalse(orcidApiAuthorizationSecurityAspect.hasScopeEnabled(clientId, userOrcid, ScopePathType.ORCID_WORKS_READ_LIMITED.getContent(), ScopePathType.ORCID_WORKS_UPDATE.getContent())); - - when(mockedOrcidOauth2TokenDetailDao.findAvailableScopesByUserAndClientId(clientId, userOrcid)).thenReturn(Arrays.asList("/orcid-bio/external-identifiers/create")); - assertFalse(orcidApiAuthorizationSecurityAspect.hasScopeEnabled(clientId, userOrcid, ScopePathType.AFFILIATIONS_READ_LIMITED.getContent(), ScopePathType.AFFILIATIONS_UPDATE.getContent())); - assertFalse(orcidApiAuthorizationSecurityAspect.hasScopeEnabled(clientId, userOrcid, ScopePathType.FUNDING_READ_LIMITED.getContent(), ScopePathType.FUNDING_UPDATE.getContent())); - assertFalse(orcidApiAuthorizationSecurityAspect.hasScopeEnabled(clientId, userOrcid, ScopePathType.ORCID_WORKS_READ_LIMITED.getContent(), ScopePathType.ORCID_WORKS_UPDATE.getContent())); - } - - @Test - public void testOrcidProfileReadLimitedScope() { - when(mockedOrcidOauth2TokenDetailDao.findAvailableScopesByUserAndClientId(clientId, userOrcid)).thenReturn(Arrays.asList("/orcid-profile/read-limited")); - assertTrue(orcidApiAuthorizationSecurityAspect.hasScopeEnabled(clientId, userOrcid, ScopePathType.ORCID_WORKS_READ_LIMITED.getContent(), ScopePathType.ORCID_WORKS_UPDATE.getContent())); - assertTrue(orcidApiAuthorizationSecurityAspect.hasScopeEnabled(clientId, userOrcid, ScopePathType.FUNDING_READ_LIMITED.getContent(), ScopePathType.FUNDING_UPDATE.getContent())); - assertTrue(orcidApiAuthorizationSecurityAspect.hasScopeEnabled(clientId, userOrcid, ScopePathType.AFFILIATIONS_READ_LIMITED.getContent(), ScopePathType.AFFILIATIONS_UPDATE.getContent())); - } - - @Test - public void testPersonReadLimitedScope() { - when(mockedOrcidOauth2TokenDetailDao.findAvailableScopesByUserAndClientId(clientId, userOrcid)).thenReturn(Arrays.asList("/person/read-limited")); - assertFalse(orcidApiAuthorizationSecurityAspect.hasScopeEnabled(clientId, userOrcid, ScopePathType.ORCID_WORKS_READ_LIMITED.getContent(), ScopePathType.ORCID_WORKS_UPDATE.getContent())); - assertFalse(orcidApiAuthorizationSecurityAspect.hasScopeEnabled(clientId, userOrcid, ScopePathType.FUNDING_READ_LIMITED.getContent(), ScopePathType.FUNDING_UPDATE.getContent())); - assertFalse(orcidApiAuthorizationSecurityAspect.hasScopeEnabled(clientId, userOrcid, ScopePathType.AFFILIATIONS_READ_LIMITED.getContent(), ScopePathType.AFFILIATIONS_UPDATE.getContent())); - } - - @Test - public void testPersonUpdateScope() { - when(mockedOrcidOauth2TokenDetailDao.findAvailableScopesByUserAndClientId(clientId, userOrcid)).thenReturn(Arrays.asList("/person/update")); - assertFalse(orcidApiAuthorizationSecurityAspect.hasScopeEnabled(clientId, userOrcid, ScopePathType.ORCID_WORKS_READ_LIMITED.getContent(), ScopePathType.ORCID_WORKS_UPDATE.getContent())); - assertFalse(orcidApiAuthorizationSecurityAspect.hasScopeEnabled(clientId, userOrcid, ScopePathType.FUNDING_READ_LIMITED.getContent(), ScopePathType.FUNDING_UPDATE.getContent())); - assertFalse(orcidApiAuthorizationSecurityAspect.hasScopeEnabled(clientId, userOrcid, ScopePathType.AFFILIATIONS_READ_LIMITED.getContent(), ScopePathType.AFFILIATIONS_UPDATE.getContent())); - } - - @Test - public void testCombineSomeScopes() { - when(mockedOrcidOauth2TokenDetailDao.findAvailableScopesByUserAndClientId(clientId, userOrcid)).thenReturn(Arrays.asList("/person/update", "/orcid-works/update")); - assertTrue(orcidApiAuthorizationSecurityAspect.hasScopeEnabled(clientId, userOrcid, ScopePathType.ORCID_WORKS_READ_LIMITED.getContent(), ScopePathType.ORCID_WORKS_UPDATE.getContent())); - assertFalse(orcidApiAuthorizationSecurityAspect.hasScopeEnabled(clientId, userOrcid, ScopePathType.FUNDING_READ_LIMITED.getContent(), ScopePathType.FUNDING_UPDATE.getContent())); - assertFalse(orcidApiAuthorizationSecurityAspect.hasScopeEnabled(clientId, userOrcid, ScopePathType.AFFILIATIONS_READ_LIMITED.getContent(), ScopePathType.AFFILIATIONS_UPDATE.getContent())); - - when(mockedOrcidOauth2TokenDetailDao.findAvailableScopesByUserAndClientId(clientId, userOrcid)).thenReturn(Arrays.asList("/person/update", "/orcid-works/update", "/funding/read-limited")); - assertTrue(orcidApiAuthorizationSecurityAspect.hasScopeEnabled(clientId, userOrcid, ScopePathType.ORCID_WORKS_READ_LIMITED.getContent(), ScopePathType.ORCID_WORKS_UPDATE.getContent())); - assertTrue(orcidApiAuthorizationSecurityAspect.hasScopeEnabled(clientId, userOrcid, ScopePathType.FUNDING_READ_LIMITED.getContent(), ScopePathType.FUNDING_UPDATE.getContent())); - assertFalse(orcidApiAuthorizationSecurityAspect.hasScopeEnabled(clientId, userOrcid, ScopePathType.AFFILIATIONS_READ_LIMITED.getContent(), ScopePathType.AFFILIATIONS_UPDATE.getContent())); - - when(mockedOrcidOauth2TokenDetailDao.findAvailableScopesByUserAndClientId(clientId, userOrcid)).thenReturn(Arrays.asList("/person/update", "/orcid-works/update", "/funding/read-limited", "/activities/read-limited")); - assertTrue(orcidApiAuthorizationSecurityAspect.hasScopeEnabled(clientId, userOrcid, ScopePathType.ORCID_WORKS_READ_LIMITED.getContent(), ScopePathType.ORCID_WORKS_UPDATE.getContent())); - assertTrue(orcidApiAuthorizationSecurityAspect.hasScopeEnabled(clientId, userOrcid, ScopePathType.FUNDING_READ_LIMITED.getContent(), ScopePathType.FUNDING_UPDATE.getContent())); - assertTrue(orcidApiAuthorizationSecurityAspect.hasScopeEnabled(clientId, userOrcid, ScopePathType.AFFILIATIONS_READ_LIMITED.getContent(), ScopePathType.AFFILIATIONS_UPDATE.getContent())); - } -} diff --git a/orcid-core/src/test/java/org/orcid/core/utils/SecurityContextTestUtils.java b/orcid-core/src/test/java/org/orcid/core/utils/SecurityContextTestUtils.java new file mode 100644 index 00000000000..ef9150bf326 --- /dev/null +++ b/orcid-core/src/test/java/org/orcid/core/utils/SecurityContextTestUtils.java @@ -0,0 +1,89 @@ +package org.orcid.core.utils; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import java.io.Serializable; +import java.util.*; + +import org.orcid.core.oauth.OrcidBearerTokenAuthentication; +import org.orcid.jaxb.model.message.ScopePathType; +import org.orcid.persistence.jpa.entities.ProfileEntity; +import org.springframework.security.authentication.AnonymousAuthenticationToken; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.core.context.SecurityContextImpl; +import org.springframework.security.core.userdetails.User; +import org.springframework.security.core.userdetails.UserDetails; + +public class SecurityContextTestUtils { + + public final static String DEFAULT_CLIENT_ID = "APP-5555555555555555"; + + static public void setUpSecurityContext() { + setUpSecurityContext(ScopePathType.ORCID_WORKS_CREATE); + } + + static public void setUpSecurityContext(ScopePathType... scopePathTypes) { + setUpSecurityContext("4444-4444-4444-4441", scopePathTypes); + } + + static public void setUpSecurityContext(String userOrcid, ScopePathType... scopePathTypes) { + setUpSecurityContext(userOrcid, DEFAULT_CLIENT_ID, scopePathTypes); + } + + static public void setUpSecurityContext(String userOrcid, String clientId, ScopePathType... scopePathTypes) { + SecurityContextImpl securityContext = new SecurityContextImpl(); + OrcidBearerTokenAuthentication mockedAuthentication = mock(OrcidBearerTokenAuthentication.class); + securityContext.setAuthentication(mockedAuthentication); + SecurityContextHolder.setContext(securityContext); + when(mockedAuthentication.getPrincipal()).thenReturn(clientId); + when(mockedAuthentication.getUserOrcid()).thenReturn(userOrcid); + Set scopes = new HashSet(); + if (scopePathTypes != null) { + for (ScopePathType scopePathType : scopePathTypes) { + scopes.add(scopePathType.value()); + } + } + when(mockedAuthentication.getScopes()).thenReturn(scopes); + } + + static public void setUpSecurityContextForClientOnly() { + setUpSecurityContextForClientOnly("APP-5555555555555555"); + } + + static public void setUpSecurityContextForClientOnly(String clientId) { + Set scopes = new HashSet(); + scopes.add(ScopePathType.ORCID_PROFILE_CREATE.value()); + setUpSecurityContextForClientOnly(clientId, scopes); + } + + static public void setUpSecurityContextForClientOnly(String clientId, ScopePathType... scopePathTypes) { + Set scopes = new HashSet(); + for (ScopePathType scope : scopePathTypes) { + scopes.add(scope.value()); + } + setUpSecurityContextForClientOnly(clientId, scopes); + } + + static public void setUpSecurityContextForClientOnly(String clientId, Set scopes) { + SecurityContextImpl securityContext = new SecurityContextImpl(); + OrcidBearerTokenAuthentication mockedAuthentication = mock(OrcidBearerTokenAuthentication.class); + securityContext.setAuthentication(mockedAuthentication); + SecurityContextHolder.setContext(securityContext); + when(mockedAuthentication.getPrincipal()).thenReturn(clientId); + when(mockedAuthentication.getScopes()).thenReturn(scopes); + } + + static public void setUpSecurityContextForAnonymous() { + SecurityContextImpl securityContext = new SecurityContextImpl(); + ArrayList authorities = new ArrayList<>(); + authorities.add(new SimpleGrantedAuthority("ROLE_ANONYMOUS")); + AnonymousAuthenticationToken anonToken = new AnonymousAuthenticationToken("testKey", "testToken", authorities); + securityContext.setAuthentication(anonToken); + SecurityContextHolder.setContext(securityContext); + } +} \ No newline at end of file diff --git a/orcid-internal-api/src/main/java/org/orcid/internal/server/delegator/impl/InternalClientCredentialEndPointDelegatorImpl.java b/orcid-internal-api/src/main/java/org/orcid/internal/server/delegator/impl/InternalClientCredentialEndPointDelegatorImpl.java deleted file mode 100644 index aecc2cc001d..00000000000 --- a/orcid-internal-api/src/main/java/org/orcid/internal/server/delegator/impl/InternalClientCredentialEndPointDelegatorImpl.java +++ /dev/null @@ -1,78 +0,0 @@ -package org.orcid.internal.server.delegator.impl; - -import java.util.HashSet; -import java.util.Set; - -import javax.annotation.Resource; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.core.Response; - -import org.apache.commons.lang.StringUtils; -import org.orcid.api.common.oauth.OrcidClientCredentialEndPointDelegatorImpl; -import org.orcid.core.constants.OrcidOauth2Constants; -import org.orcid.core.exception.OrcidInvalidScopeException; -import org.orcid.core.locale.LocaleManager; -import org.orcid.jaxb.model.message.ScopePathType; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.security.authentication.InsufficientAuthenticationException; -import org.springframework.security.core.Authentication; -import org.springframework.security.oauth2.common.OAuth2AccessToken; -import org.springframework.security.oauth2.common.exceptions.UnsupportedGrantTypeException; -import org.springframework.security.oauth2.common.util.OAuth2Utils; - -/** - * - * @author Angel Montenegro - * - */ -public class InternalClientCredentialEndPointDelegatorImpl extends OrcidClientCredentialEndPointDelegatorImpl { - - private static final Logger LOGGER = LoggerFactory.getLogger(OrcidClientCredentialEndPointDelegatorImpl.class); - - @Resource - protected LocaleManager localeManager; - - @Override - public Response obtainOauth2Token(String authorization, MultivaluedMap formParams) { - String grantType = formParams.getFirst(OrcidOauth2Constants.GRANT_TYPE); - String scopeList = formParams.getFirst(OrcidOauth2Constants.SCOPE_PARAM); - String clientId = formParams.getFirst(OrcidOauth2Constants.CLIENT_ID_PARAM); - // Verify it is a client_credentials grant type request - if(!OrcidOauth2Constants.GRANT_TYPE_CLIENT_CREDENTIALS.equals(grantType)) { - Object params[] = {grantType}; - throw new UnsupportedGrantTypeException(localeManager.resolveMessage("apiError.unsupported_client_type.exception", params)); - } - - Authentication client = getClientAuthentication(); - if (!client.isAuthenticated()) { - LOGGER.info("Not authenticated for OAuth2: clientId={}, grantType={}, scope={}", new Object[] { - clientId, grantType, scopeList }); - throw new InsufficientAuthenticationException(localeManager.resolveMessage("apiError.client_not_authenticated.exception")); - } - - Set scopes = new HashSet(); - if (StringUtils.isNotEmpty(scopeList)) { - scopes = OAuth2Utils.parseParameterList(scopeList); - } - - // Verify it is requesting an internal scope - HashSet filteredScopes = new HashSet(); - for(String scope : scopes) { - ScopePathType scopeType = ScopePathType.fromValue(scope); - if(scopeType.isInternalScope()) { - filteredScopes.add(scope); - } - } - - if(filteredScopes.isEmpty()) { - String message = localeManager.resolveMessage("apiError.9015.developerMessage", new Object[]{}); - throw new OrcidInvalidScopeException(message); - } - - OAuth2AccessToken token = generateToken(client, scopes, grantType); - removeMetadataFromToken(token); - setToCache(client.getName(), token); - return getResponse(token); - } -} diff --git a/orcid-internal-api/src/main/resources/orcid-internal-api-security-context.xml b/orcid-internal-api/src/main/resources/orcid-internal-api-security-context.xml index d27c470afec..0acdab44be1 100644 --- a/orcid-internal-api/src/main/resources/orcid-internal-api-security-context.xml +++ b/orcid-internal-api/src/main/resources/orcid-internal-api-security-context.xml @@ -86,21 +86,5 @@ - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/orcid-pub-web/src/main/java/org/orcid/api/filters/ApiRateLimitFilter.java b/orcid-pub-web/src/main/java/org/orcid/api/filters/ApiRateLimitFilter.java index 865bb8a4b3a..d412a0019cf 100644 --- a/orcid-pub-web/src/main/java/org/orcid/api/filters/ApiRateLimitFilter.java +++ b/orcid-pub-web/src/main/java/org/orcid/api/filters/ApiRateLimitFilter.java @@ -21,9 +21,10 @@ import org.orcid.core.manager.impl.OrcidUrlManager; import org.orcid.core.manager.v3.EmailManager; import org.orcid.core.manager.v3.RecordNameManager; -import org.orcid.core.oauth.service.OrcidTokenStore; +import org.orcid.persistence.dao.OrcidOauth2TokenDetailDao; import org.orcid.persistence.dao.ProfileDao; import org.orcid.persistence.jpa.entities.ClientDetailsEntity; +import org.orcid.persistence.jpa.entities.OrcidOauth2TokenDetail; import org.orcid.persistence.jpa.entities.ProfileEntity; import org.orcid.utils.email.MailGunManager; import org.orcid.utils.panoply.PanoplyRedshiftClient; @@ -68,14 +69,11 @@ public class ApiRateLimitFilter extends OncePerRequestFilter { @Autowired private EmailManager emailManager; - @Resource - private PanoplyRedshiftClient panoplyClient; - @Resource private PapiRateLimitRedisClient papiRedisClient; - @Autowired - private OrcidTokenStore orcidTokenStore; + @Resource(name="orcidOauth2TokenDetailDaoReadOnly") + private OrcidOauth2TokenDetailDao orcidOauth2TokenDetailDaoReadOnly; @Autowired private MessageSource messageSource; @@ -89,7 +87,6 @@ public class ApiRateLimitFilter extends OncePerRequestFilter { @Value("${org.orcid.papi.rate.limit.enabled:false}") private boolean enableRateLimiting; - // :192.168.65.1 127.0.0.1 @Value("${org.orcid.papi.rate.limit.ip.whiteSpaceSeparatedWhiteList:192.168.65.1 127.0.0.1}") private String papiWhiteSpaceSeparatedWhiteList; @@ -146,11 +143,13 @@ public void doFilterInternal(HttpServletRequest httpServletRequest, HttpServletR String ipAddress = getClientIpAddress(httpServletRequest); if (!isIPInCidrWhiteListRange(ipAddress)) { - String clientId = null; if (tokenValue != null) { try { - clientId = orcidTokenStore.readClientId(tokenValue); + OrcidOauth2TokenDetail token = orcidOauth2TokenDetailDaoReadOnly.findByTokenValue(tokenValue); + if(token != null) { + clientId = token.getClientDetailsId(); + } } catch (Exception ex) { LOG.error("Exception when trying to get the client id from token value, ignoring and treating as anonymous client", ex); } diff --git a/orcid-web/src/main/java/org/orcid/frontend/util/AuthorizationRequestLocalCache.java b/orcid-web/src/main/java/org/orcid/frontend/util/AuthorizationRequestLocalCache.java deleted file mode 100644 index bed691f1a07..00000000000 --- a/orcid-web/src/main/java/org/orcid/frontend/util/AuthorizationRequestLocalCache.java +++ /dev/null @@ -1,59 +0,0 @@ -package org.orcid.frontend.util; -import org.ehcache.Cache; -import org.ehcache.CacheManager; -import org.ehcache.config.builders.CacheConfigurationBuilder; -import org.ehcache.config.builders.CacheManagerBuilder; -import org.ehcache.config.builders.ResourcePoolsBuilder; -import org.ehcache.expiry.Duration; -import org.ehcache.expiry.Expirations; -import org.orcid.pojo.ajaxForm.RequestInfoForm; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.security.oauth2.provider.AuthorizationRequest; -import org.springframework.stereotype.Component; - -import javax.annotation.PostConstruct; -import java.util.concurrent.TimeUnit; - -@Component -public class AuthorizationRequestLocalCache { - - @Value("${org.orcid.core.session.localCache.ttl:10800}") - private int cacheTTLInSeconds; - - @Value("${org.orcid.core.session.localCache.heap:50000}") - private int heapSize; - - private CacheManager cacheManager; - private Cache cache; - - public AuthorizationRequestLocalCache() { - cacheManager = CacheManagerBuilder - .newCacheManagerBuilder().build(); - cacheManager.init(); - } - - @PostConstruct - public void initCache() { - cache = cacheManager - .createCache("authorizationRequestLocalCache", CacheConfigurationBuilder - .newCacheConfigurationBuilder( - String.class, AuthorizationRequest.class, - ResourcePoolsBuilder.heap(heapSize)).withExpiry(Expirations.timeToLiveExpiration(Duration.of(cacheTTLInSeconds, TimeUnit.SECONDS)))); - } - - public AuthorizationRequest get(String key) { - return cache.get(key); - } - - public void put(String key, AuthorizationRequest value) { - cache.put(key, value); - } - - public void remove(String key) { - cache.remove(key); - } - - public boolean containsKey(String key) { - return cache.containsKey(key); - } -} diff --git a/orcid-web/src/main/java/org/orcid/frontend/util/OriginalAuthorizationRequestLocalCache.java b/orcid-web/src/main/java/org/orcid/frontend/util/OriginalAuthorizationRequestLocalCache.java deleted file mode 100644 index 47fb42e7013..00000000000 --- a/orcid-web/src/main/java/org/orcid/frontend/util/OriginalAuthorizationRequestLocalCache.java +++ /dev/null @@ -1,59 +0,0 @@ -package org.orcid.frontend.util; -import org.ehcache.Cache; -import org.ehcache.CacheManager; -import org.ehcache.config.builders.CacheConfigurationBuilder; -import org.ehcache.config.builders.CacheManagerBuilder; -import org.ehcache.config.builders.ResourcePoolsBuilder; -import org.ehcache.expiry.Duration; -import org.ehcache.expiry.Expirations; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.security.oauth2.provider.AuthorizationRequest; -import org.springframework.stereotype.Component; - -import javax.annotation.PostConstruct; -import java.util.Map; -import java.util.concurrent.TimeUnit; - -@Component -public class OriginalAuthorizationRequestLocalCache { - - @Value("${org.orcid.core.session.localCache.ttl:900}") - private int cacheTTLInSeconds; - - @Value("${org.orcid.core.session.localCache.heap:10000}") - private int heapSize; - - private CacheManager cacheManager; - private Cache cache; - - public OriginalAuthorizationRequestLocalCache() { - cacheManager = CacheManagerBuilder - .newCacheManagerBuilder().build(); - cacheManager.init(); - } - - @PostConstruct - public void initCache() { - cache = cacheManager - .createCache("originalAuthorizationRequestLocalCache", CacheConfigurationBuilder - .newCacheConfigurationBuilder( - String.class, Map.class, - ResourcePoolsBuilder.heap(heapSize)).withExpiry(Expirations.timeToLiveExpiration(Duration.of(cacheTTLInSeconds, TimeUnit.SECONDS)))); - } - - public Map get(String key) { - return cache.get(key); - } - - public void put(String key, Map value) { - cache.put(key, value); - } - - public void remove(String key) { - cache.remove(key); - } - - public boolean containsKey(String key) { - return cache.containsKey(key); - } -} diff --git a/orcid-web/src/main/java/org/orcid/frontend/util/RequestInfoFormLocalCache.java b/orcid-web/src/main/java/org/orcid/frontend/util/RequestInfoFormLocalCache.java deleted file mode 100644 index 9e0450cdb7e..00000000000 --- a/orcid-web/src/main/java/org/orcid/frontend/util/RequestInfoFormLocalCache.java +++ /dev/null @@ -1,58 +0,0 @@ -package org.orcid.frontend.util; -import org.ehcache.Cache; -import org.ehcache.CacheManager; -import org.ehcache.config.builders.CacheConfigurationBuilder; -import org.ehcache.config.builders.CacheManagerBuilder; -import org.ehcache.config.builders.ResourcePoolsBuilder; -import org.ehcache.expiry.Duration; -import org.ehcache.expiry.Expirations; -import org.orcid.pojo.ajaxForm.RequestInfoForm; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Component; - -import javax.annotation.PostConstruct; -import java.util.concurrent.TimeUnit; - -@Component -public class RequestInfoFormLocalCache { - - @Value("${org.orcid.core.session.localCache.ttl:10800}") - private int cacheTTLInSeconds; - - @Value("${org.orcid.core.session.localCache.heap:50000}") - private int heapSize; - - private CacheManager cacheManager; - private Cache cache; - - public RequestInfoFormLocalCache() { - cacheManager = CacheManagerBuilder - .newCacheManagerBuilder().build(); - cacheManager.init(); - } - - @PostConstruct - public void initCache() { - cache = cacheManager - .createCache("requestInfoFormLocalCache", CacheConfigurationBuilder - .newCacheConfigurationBuilder( - String.class, RequestInfoForm.class, - ResourcePoolsBuilder.heap(heapSize)).withExpiry(Expirations.timeToLiveExpiration(Duration.of(cacheTTLInSeconds, TimeUnit.SECONDS)))); - } - - public RequestInfoForm get(String key) { - return cache.get(key); - } - - public void put(String key, RequestInfoForm value) { - cache.put(key, value); - } - - public void remove(String key) { - cache.remove(key); - } - - public boolean containsKey(String key) { - return cache.containsKey(key); - } -} diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/BaseWorkspaceController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/BaseWorkspaceController.java index 7ab1b0ac170..b44002aa3bc 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/BaseWorkspaceController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/BaseWorkspaceController.java @@ -20,7 +20,6 @@ import org.orcid.core.manager.EncryptionManager; import org.orcid.core.manager.v3.ActivityManager; import org.orcid.core.manager.v3.ProfileEntityManager; -import org.orcid.core.security.visibility.filter.VisibilityFilter; import org.orcid.frontend.web.util.NumberList; import org.orcid.frontend.web.util.YearsList; import org.orcid.pojo.ajaxForm.Contributor; @@ -45,9 +44,6 @@ public class BaseWorkspaceController extends BaseController { @Resource(name = "profileEntityManagerV3") protected ProfileEntityManager profileEntityManager; - @Resource(name = "visibilityFilter") - protected VisibilityFilter visibilityFilter; - @Resource private ProfileLastModifiedAspect profileLastModifiedAspect; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/FindMyStuffController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/FindMyStuffController.java index 318a0ec8cfd..880b2a57212 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/FindMyStuffController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/FindMyStuffController.java @@ -6,7 +6,6 @@ import org.orcid.core.manager.v3.FindMyStuffManager; import org.orcid.core.manager.v3.NotificationManager; -import org.orcid.core.oauth.OrcidOauth2TokenDetailService; import org.orcid.pojo.FindMyStuffResult; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; @@ -21,9 +20,6 @@ public class FindMyStuffController extends BaseController{ @Resource NotificationController notificationsController; - @Resource - private OrcidOauth2TokenDetailService orcidOauth2TokenService; - @Resource(name = "notificationManagerV3") private NotificationManager notificationManager; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/LoginController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/LoginController.java index 8269f518a03..989c5f3dc1e 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/LoginController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/LoginController.java @@ -1,87 +1,29 @@ package org.orcid.frontend.web.controllers; -import java.io.IOException; import java.io.UnsupportedEncodingException; -import java.net.MalformedURLException; -import java.util.UUID; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.apache.commons.lang3.StringUtils; -import org.codehaus.jettison.json.JSONException; -import org.codehaus.jettison.json.JSONObject; -import org.orcid.core.common.manager.EventManager; import org.orcid.core.constants.OrcidOauth2Constants; -import org.orcid.core.manager.ClientDetailsEntityCacheManager; -import org.orcid.core.manager.UserConnectionManager; import org.orcid.core.manager.v3.read_only.RecordNameManagerReadOnly; -import org.orcid.core.security.OrcidUserDetailsService; -import org.orcid.core.togglz.Features; -import org.orcid.frontend.spring.web.social.config.SocialSignInUtils; -import org.orcid.frontend.spring.web.social.config.SocialType; -import org.orcid.frontend.spring.web.social.config.UserCookieGenerator; -import org.orcid.frontend.util.RequestInfoFormLocalCache; -import org.orcid.frontend.web.controllers.helper.OauthHelper; -import org.orcid.jaxb.model.message.ScopePathType; import org.orcid.jaxb.model.v3.release.common.Visibility; import org.orcid.jaxb.model.v3.release.record.Name; -import org.orcid.persistence.jpa.entities.EventType; -import org.orcid.persistence.jpa.entities.ProfileEntity; -import org.orcid.persistence.jpa.entities.UserconnectionEntity; -import org.orcid.persistence.jpa.entities.UserconnectionPK; import org.orcid.pojo.ajaxForm.Names; -import org.orcid.pojo.ajaxForm.PojoUtil; -import org.orcid.pojo.ajaxForm.RequestInfoForm; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.http.HttpStatus; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.core.userdetails.UserDetails; -import org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationToken; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.servlet.ModelAndView; -import org.springframework.web.servlet.view.RedirectView; @Controller("loginController") -public class LoginController extends OauthControllerBase { - - private static final Logger LOGGER = LoggerFactory.getLogger(LoginController.class); - - @Resource - protected ClientDetailsEntityCacheManager clientDetailsEntityCacheManager; +public class LoginController extends BaseController { @Resource(name = "recordNameManagerV3") private RecordNameManagerReadOnly recordNameManager; - @Resource - protected UserConnectionManager userConnectionManager; - - @Resource - private OrcidUserDetailsService orcidUserDetailsService; - - @Resource - private UserCookieGenerator userCookieGenerator; - - @Resource - private SocialSignInUtils socialSignInUtils; - - @Resource - private OauthHelper oauthHelper; - - @Resource - private EventManager eventManager; - - @Resource - private RequestInfoFormLocalCache requestInfoFormLocalCache; - @RequestMapping(value = "/account/names/{type}", method = RequestMethod.GET) public @ResponseBody Names getAccountNames(@PathVariable String type) { String currentOrcid = getCurrentUserOrcid(); @@ -100,11 +42,6 @@ public class LoginController extends OauthControllerBase { @RequestMapping(value = { "/signin", "/login" }, method = RequestMethod.GET) public ModelAndView loginGetHandler(HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException { String query = request.getQueryString(); - if (!PojoUtil.isEmpty(query)) { - if (query.contains("oauth")) { - return handleOauthSignIn(request, response); - } - } ModelAndView mav = new ModelAndView("login"); if (!domainsAllowingRobots.contains(orcidUrlManager.getBaseDomainRmProtocall())) { mav.addObject("noIndex", true); @@ -140,233 +77,4 @@ public String sessionExpiredHandler() { return "session_expired"; } - private ModelAndView handleOauthSignIn(HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException { - String queryString = request.getQueryString(); - String redirectUri = null; - - // Get and save the request information form - RequestInfoForm requestInfoForm; - try { - requestInfoForm = oauthHelper.generateRequestInfoForm(queryString); - } catch (Exception e) { - // convert to a 400 - ModelAndView mav = new ModelAndView("oauth-error"); - mav.setStatus(HttpStatus.BAD_REQUEST); - mav.addObject("noIndex", true); - return mav; - } - - // force a login even if the user is already logged in if openid - // prompt=login param present - boolean forceLogin = false; - if (!PojoUtil.isEmpty(requestInfoForm.getScopesAsString()) - && ScopePathType.getScopesFromSpaceSeparatedString(requestInfoForm.getScopesAsString()).contains(ScopePathType.OPENID)) { - String prompt = request.getParameter(OrcidOauth2Constants.PROMPT); - if (prompt != null && prompt.equals(OrcidOauth2Constants.PROMPT_LOGIN)) { - forceLogin = true; - } - } - - // Check if user is already logged in, if so, redirect it to - // oauth/authorize - UserDetails userDetails = getCurrentUser(); - if (!forceLogin && userDetails != null) { - redirectUri = orcidUrlManager.getBaseUrl() + "/oauth/authorize?"; - queryString = queryString.replace("oauth&", ""); - redirectUri = redirectUri + queryString; - RedirectView rView = new RedirectView(redirectUri); - return new ModelAndView(rView); - } - - // Redirect URI - redirectUri = requestInfoForm.getRedirectUrl(); - - // Check that the client have the required permissions - // Get client name - String clientId = requestInfoForm.getClientId(); - if (PojoUtil.isEmpty(clientId)) { - String redirectUriWithParams = redirectUri + "?error=invalid_client&error_description=invalid client_id"; - return new ModelAndView(new RedirectView(redirectUriWithParams)); - } - - // handle openID prompt and max_age behaviour - // here we remove prompt=login if present - // here we remove max_age if present - // - if (!PojoUtil.isEmpty(requestInfoForm.getScopesAsString()) - && ScopePathType.getScopesFromSpaceSeparatedString(requestInfoForm.getScopesAsString()).contains(ScopePathType.OPENID)) { - String prompt = request.getParameter(OrcidOauth2Constants.PROMPT); - if (prompt != null && prompt.equals(OrcidOauth2Constants.PROMPT_NONE)) { - String redirectUriWithParams = requestInfoForm.getRedirectUrl(); - - if (requestInfoForm.getResponseType().contains(OrcidOauth2Constants.CODE_RESPONSE_TYPE)) - redirectUriWithParams += "?"; - else - redirectUriWithParams += "#"; - - redirectUriWithParams += "error=login_required"; - RedirectView rView = new RedirectView(redirectUriWithParams); - ModelAndView error = new ModelAndView(); - error.setView(rView); - return error; - } - if (prompt != null && prompt.equals(OrcidOauth2Constants.PROMPT_CONFIRM)) { - // keep - handled by OAuthAuthorizeController - } else if (prompt != null && prompt.equals(OrcidOauth2Constants.PROMPT_LOGIN)) { - // remove because otherwise we'll end up back here again! - queryString = removeQueryStringParams(queryString, OrcidOauth2Constants.PROMPT); - } - if (request.getParameter(OrcidOauth2Constants.MAX_AGE) != null) { - // remove because otherwise we'll end up back here again! - queryString = removeQueryStringParams(queryString, OrcidOauth2Constants.MAX_AGE); - } - } - - requestInfoFormLocalCache.put(request.getSession().getId(), requestInfoForm); - // Save also the original query string - request.getSession().setAttribute(OrcidOauth2Constants.OAUTH_QUERY_STRING, queryString); - // Save a flag to indicate this is a request from the new - request.getSession().setAttribute(OrcidOauth2Constants.OAUTH_2SCREENS, true); - ModelAndView mav = new ModelAndView("login"); - mav.addObject("noIndex", true); - return mav; - } - - @RequestMapping(value = { "/signin/facebook" }, method = RequestMethod.POST) - public RedirectView initFacebookLogin(HttpServletRequest request) { - String sessionState = UUID.randomUUID().toString(); - request.getSession().setAttribute("f_state", sessionState); - return socialSignInUtils.initFacebookLogin(sessionState); - } - - @RequestMapping(value = { "/signin/facebook" }, method = RequestMethod.GET) - public ModelAndView getFacebookLogin(HttpServletRequest request, HttpServletResponse response, @RequestParam(name = "state") String state, - @RequestParam(name = "code", required = false) String code, @RequestParam(name = "error", required = false) String error, - @RequestParam(name = "error_code", required = false) String errorCode, @RequestParam(name = "error_description", required = false) String errorDescription, - @RequestParam(name = "error_reason", required = false) String errorReason) throws UnsupportedEncodingException, IOException, JSONException { - String facebookSessionState = (String) request.getSession().getAttribute("f_state"); - if (!state.equals(facebookSessionState)) { - LOGGER.warn("Facebook session state doesnt match"); - return new ModelAndView("redirect:" + calculateRedirectUrl("/login")); - } - - if (StringUtils.isBlank(code)) { - LOGGER.warn("Can't login to Facebook, {}: {}", error, errorDescription); - return new ModelAndView("redirect:" + calculateRedirectUrl("/login")); - } - - JSONObject userData = socialSignInUtils.getFacebookUserData(code); - return processSocialLogin(request, response, SocialType.FACEBOOK, userData); - } - - @RequestMapping(value = { "/signin/google" }, method = RequestMethod.POST) - public RedirectView initGoogleLogin(HttpServletRequest request) { - String sessionState = UUID.randomUUID().toString(); - request.getSession().setAttribute("g_state", sessionState); - return socialSignInUtils.initGoogleLogin(sessionState); - } - - @RequestMapping(value = { "/signin/google" }, method = RequestMethod.GET) - public ModelAndView getGoogleLogin(HttpServletRequest request, HttpServletResponse response, @RequestParam(name = "state") String state, - @RequestParam(name = "code", required = false) String code) throws MalformedURLException, IOException, JSONException { - String googleSessionState = (String) request.getSession().getAttribute("g_state"); - if (!state.equals(googleSessionState)) { - LOGGER.warn("Google session state doesnt match"); - return new ModelAndView("redirect:" + calculateRedirectUrl("/login")); - } - if (StringUtils.isBlank(code)) { - LOGGER.warn("Can't login to Google"); - return new ModelAndView("redirect:" + calculateRedirectUrl("/login")); - } - - JSONObject userData = socialSignInUtils.getGoogleUserData(code); - return processSocialLogin(request, response, SocialType.GOOGLE, userData); - } - - private ModelAndView processSocialLogin(HttpServletRequest request, HttpServletResponse response, SocialType socialType, JSONObject userData) throws JSONException { - String providerUserId = userData.getString(OrcidOauth2Constants.PROVIDER_USER_ID); - String accessToken = userData.getString(OrcidOauth2Constants.ACCESS_TOKEN); - Long expiresIn = Long.valueOf(userData.getString(OrcidOauth2Constants.EXPIRES_IN)); - - UserconnectionEntity userConnection = userConnectionManager.findByProviderIdAndProviderUserId(userData.getString(OrcidOauth2Constants.PROVIDER_USER_ID), - socialType.value()); - String userConnectionId = null; - ModelAndView view = null; - if (userConnection != null) { - userConnectionId = userConnection.getId().getUserid(); - // Store relevant data in the session - socialSignInUtils.setSignedInData(request, userData); - - if(userConnection.isLinked()) { - // If user exists and is linked update user connection info - // and redirect to user record - view = updateUserConnectionAndSocialLogUserIn(request, response, socialType, userConnection.getOrcid(), userConnection.getId().getUserid(), providerUserId, - accessToken, expiresIn); - } else { - // Forward to account link page - view = socialLinking(request); - } - } else { - // Store relevant data in the session - socialSignInUtils.setSignedInData(request, userData); - // Store user info - userConnectionId = createUserConnection(socialType, providerUserId, userData.getString(OrcidOauth2Constants.EMAIL), - userData.getString(OrcidOauth2Constants.DISPLAY_NAME), accessToken, expiresIn); - // Forward to account link page - view = socialLinking(request); - } - if (userConnectionId == null) { - throw new IllegalArgumentException("Unable to find userConnectionId for providerUserId = " + providerUserId); - } - - if (Features.EVENTS.isActive()) { - eventManager.createEvent(EventType.SIGN_IN, request); - } - userCookieGenerator.addCookie(userConnectionId, response); - - if ("social_2FA".equals(view.getViewName())) { - return new ModelAndView("redirect:" + calculateRedirectUrl("/2fa-signin?social=true")); - } - - return view; - } - - private String createUserConnection(SocialType socialType, String providerUserId, String email, String userName, String accessToken, Long expireTime) { - LOGGER.info("Creating userconnection for type={}, providerUserId={}, userName={}", new Object[] { socialType.value(), providerUserId, userName }); - return userConnectionManager.create(providerUserId, socialType.value(), email, userName, accessToken, expireTime); - } - - private ModelAndView updateUserConnectionAndSocialLogUserIn(HttpServletRequest request, HttpServletResponse response, SocialType socialType, String userOrcid, - String userConnectionId, String providerUserId, String accessToken, Long expiresIn) { - LOGGER.info("Updating existing userconnection for orcid={}, type={}, providerUserId={}", new Object[] { userOrcid, socialType.value(), providerUserId }); - // Update user connection info - userConnectionManager.update(providerUserId, socialType.value(), accessToken, expiresIn); - - // Log user in - ProfileEntity profileEntity = profileEntityCacheManager.retrieve(userOrcid); - if (profileEntity.getUsing2FA()) { - return new ModelAndView("social_2FA"); - } - - UserconnectionPK pk = new UserconnectionPK(userConnectionId, socialType.value(), providerUserId); - String aCredentials = socialType.value() + ':' + providerUserId; - PreAuthenticatedAuthenticationToken token = new PreAuthenticatedAuthenticationToken(userOrcid, aCredentials); - token.setDetails(orcidUserDetailsService.loadUserByProfile(profileEntity)); - Authentication authentication = authenticationManager.authenticate(token); - userConnectionManager.updateLoginInformation(pk); - - // Update security context with user information - SecurityContextHolder.getContext().setAuthentication(authentication); - return new ModelAndView(new RedirectView(calculateRedirectUrl(request, response, false, false, "social"))); - } - - private ModelAndView socialLinking(HttpServletRequest request) { - String socialLinking = "/social-linking"; - String queryString = (String) request.getSession().getAttribute(OrcidOauth2Constants.OAUTH_QUERY_STRING); - if (queryString != null) { - socialLinking = socialLinking + "?" + queryString; - } - return new ModelAndView(new RedirectView(orcidUrlManager.getBaseUrl() + socialLinking, true)); - - } } diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/OauthAuthorizeController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/OauthAuthorizeController.java deleted file mode 100644 index a538b7287f1..00000000000 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/OauthAuthorizeController.java +++ /dev/null @@ -1,337 +0,0 @@ -package org.orcid.frontend.web.controllers; - -import java.io.UnsupportedEncodingException; -import java.util.HashMap; -import java.util.Map; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.orcid.core.constants.OrcidOauth2Constants; -import org.orcid.core.exception.ClientDeactivatedException; -import org.orcid.core.exception.LockedException; -import org.orcid.core.common.manager.EventManager; -import org.orcid.core.manager.v3.ProfileEntityManager; -import org.orcid.core.oauth.OrcidRandomValueTokenServices; -import org.orcid.core.togglz.Features; -import org.orcid.frontend.util.AuthorizationRequestLocalCache; -import org.orcid.frontend.util.OriginalAuthorizationRequestLocalCache; -import org.orcid.frontend.util.RequestInfoFormLocalCache; -import org.orcid.frontend.web.controllers.helper.OauthHelper; -import org.orcid.jaxb.model.message.ScopePathType; -import org.orcid.persistence.jpa.entities.ClientDetailsEntity; -import org.orcid.persistence.jpa.entities.EventType; -import org.orcid.pojo.ajaxForm.OauthAuthorizeForm; -import org.orcid.pojo.ajaxForm.PojoUtil; -import org.orcid.pojo.ajaxForm.RequestInfoForm; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.core.userdetails.UserDetails; -import org.springframework.security.oauth2.common.exceptions.InvalidRequestException; -import org.springframework.security.oauth2.common.exceptions.InvalidScopeException; -import org.springframework.security.oauth2.common.util.OAuth2Utils; -import org.springframework.security.oauth2.provider.AuthorizationRequest; -import org.springframework.security.web.savedrequest.HttpSessionRequestCache; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.support.SimpleSessionStatus; -import org.springframework.web.servlet.ModelAndView; -import org.springframework.web.servlet.view.RedirectView; - -@Controller("oauthAuthorizeController") -public class OauthAuthorizeController extends OauthControllerBase { - - private static final Logger LOGGER = LoggerFactory.getLogger(OauthAuthorizeController.class); - - @Resource - protected OrcidRandomValueTokenServices tokenServices; - - @Resource(name = "profileEntityManagerV3") - private ProfileEntityManager profileEntityManager; - - @Resource - private OauthHelper oauthHelper; - - @Resource - private EventManager eventManager; - - @Resource - private RequestInfoFormLocalCache requestInfoFormLocalCache; - - @Resource - private AuthorizationRequestLocalCache authorizationRequestLocalCache; - - @Resource - private OriginalAuthorizationRequestLocalCache originalAuthorizationRequestLocalCache; - - /** This is called if user is already logged in. - * Checks permissions have been granted to client and generates access code. - * - * @param request - * @param response - * @param mav - * @return - * @throws UnsupportedEncodingException - */ - @RequestMapping(value = "/oauth/confirm_access", method = RequestMethod.GET) - public ModelAndView loginGetHandler(HttpServletRequest request, HttpServletResponse response, ModelAndView mav) throws UnsupportedEncodingException { - //Get and save the request information form - - String queryString = request.getQueryString(); - RequestInfoForm requestInfoForm = oauthHelper.generateRequestInfoForm(queryString); - - // Store the request info form in the cache - requestInfoFormLocalCache.put(request.getSession().getId(), requestInfoForm); - - boolean usePersistentTokens = false; - - ClientDetailsEntity clientDetails = clientDetailsEntityCacheManager.retrieve(requestInfoForm.getClientId()); - // validate client scopes - try { - authorizationEndpoint.validateScope(requestInfoForm.getScopesAsString(), clientDetails,requestInfoForm.getResponseType()); - orcidOAuth2RequestValidator.validateClientIsEnabled(clientDetails); - } catch (InvalidScopeException | ClientDeactivatedException | LockedException e) { - String redirectUriWithParams = requestInfoForm.getRedirectUrl(); - if(e instanceof InvalidScopeException) { - redirectUriWithParams += "?error=invalid_scope&error_description=" + e.getMessage(); - } else if (e instanceof LockedException) { - redirectUriWithParams += "?error=client_locked&error_description=" + e.getMessage(); - } else { - redirectUriWithParams += "?error=client_deactivated&error_description=" + e.getMessage(); - } - RedirectView rView = new RedirectView(redirectUriWithParams); - ModelAndView error = new ModelAndView(); - error.setView(rView); - return error; - } - - //implicit id_token requests must have nonce. - if (!PojoUtil.isEmpty(requestInfoForm.getScopesAsString()) - && ScopePathType.getScopesFromSpaceSeparatedString(requestInfoForm.getScopesAsString()).contains(ScopePathType.OPENID) - && request.getParameter(OAuth2Utils.RESPONSE_TYPE).contains("id_token") - && request.getParameter(OrcidOauth2Constants.NONCE) == null) { - String redirectUriWithParams = requestInfoForm.getRedirectUrl(); - redirectUriWithParams += "#error=invalid_request "; - RedirectView rView = new RedirectView(redirectUriWithParams); - ModelAndView error = new ModelAndView(); - error.setView(rView); - return error; - } - - //Check for prompt=login and max_age. This is a MUST in the openid spec. - //If found redirect back to the signin page. - //Add check for prompt=confirm here. This is a SHOULD in the openid spec. - //If found, force user to confirm permissions. - boolean forceConfirm = false; - if (!PojoUtil.isEmpty(requestInfoForm.getScopesAsString()) && ScopePathType.getScopesFromSpaceSeparatedString(requestInfoForm.getScopesAsString()).contains(ScopePathType.OPENID) ){ - String prompt = request.getParameter(OrcidOauth2Constants.PROMPT); - String maxAge = request.getParameter(OrcidOauth2Constants.MAX_AGE); - String orcid = getEffectiveUserOrcid(); - if (maxAge!=null){ - //if maxAge+lastlogin > now, force login. max_age is in seconds. - java.util.Date authTime = profileEntityManager.getLastLogin(orcid); //is also on the entity. - try{ - long max = Long.parseLong(maxAge); - if (authTime == null || ((authTime.getTime() + (max*1000)) < (new java.util.Date()).getTime())){ - return redirectToForceSignin(request); - } - }catch(NumberFormatException e){ - //ignore - } - } - if (prompt != null && prompt.equals(OrcidOauth2Constants.PROMPT_CONFIRM)){ - forceConfirm=true; - }else if (prompt!=null && prompt.equals(OrcidOauth2Constants.PROMPT_LOGIN)){ - return redirectToForceSignin(request); - } - } - - // Check if the client has persistent tokens enabled - if (clientDetails.isPersistentTokensEnabled()) { - usePersistentTokens = true; - } - - if (!forceConfirm && usePersistentTokens) { - boolean tokenLongLifeAlreadyExists = tokenServices.longLifeTokenExist(requestInfoForm.getClientId(), getEffectiveUserOrcid(), OAuth2Utils.parseParameterList(requestInfoForm.getScopesAsString())); - if (tokenLongLifeAlreadyExists) { - AuthorizationRequest authorizationRequest = authorizationRequestLocalCache.get(request.getSession().getId()); - Authentication auth = SecurityContextHolder.getContext().getAuthentication(); - Map requestParams = new HashMap(); - copyRequestParameters(request, requestParams); - Map approvalParams = new HashMap(); - - requestParams.put(OAuth2Utils.USER_OAUTH_APPROVAL, "true"); - approvalParams.put(OAuth2Utils.USER_OAUTH_APPROVAL, "true"); - - requestParams.put(OrcidOauth2Constants.TOKEN_VERSION, OrcidOauth2Constants.PERSISTENT_TOKEN); - - boolean hasPersistent = hasPersistenTokensEnabled(requestInfoForm.getClientId()); - // Don't let non persistent clients persist - if (!hasPersistent && "true".equals(requestParams.get(OrcidOauth2Constants.GRANT_PERSISTENT_TOKEN))){ - requestParams.put(OrcidOauth2Constants.GRANT_PERSISTENT_TOKEN, "false"); - } - //default to client default if not set - if (requestParams.get(OrcidOauth2Constants.GRANT_PERSISTENT_TOKEN) == null) { - if (hasPersistent) - requestParams.put(OrcidOauth2Constants.GRANT_PERSISTENT_TOKEN, "true"); - else - requestParams.put(OrcidOauth2Constants.GRANT_PERSISTENT_TOKEN, "false"); - } - - // Session status - SimpleSessionStatus status = new SimpleSessionStatus(); - - authorizationRequest.setRequestParameters(requestParams); - // Authorization request model - Map model = new HashMap(); - model.put("authorizationRequest", authorizationRequest); - - // Approve using the spring authorization endpoint code. - //note this will also handle generting implicit tokens via getTokenGranter().grant("implicit",new ImplicitTokenRequest(tokenRequest, storedOAuth2Request)); - RedirectView view = (RedirectView) authorizationEndpoint.approveOrDeny(approvalParams, model, status, auth); - ModelAndView authCodeView = new ModelAndView(); - authCodeView.setView(view); - return authCodeView; - } - } - - if (!PojoUtil.isEmpty(requestInfoForm.getScopesAsString()) && ScopePathType.getScopesFromSpaceSeparatedString(requestInfoForm.getScopesAsString()).contains(ScopePathType.OPENID) ){ - String prompt = request.getParameter(OrcidOauth2Constants.PROMPT); - if (prompt!=null && prompt.equals(OrcidOauth2Constants.PROMPT_NONE)){ - String redirectUriWithParams = requestInfoForm.getRedirectUrl(); - redirectUriWithParams += "#error=interaction_required"; - RedirectView rView = new RedirectView(redirectUriWithParams); - ModelAndView error = new ModelAndView(); - error.setView(rView); - return error; - } - } - mav.addObject("noIndex", true); - mav.addObject("hideSupportWidget", true); - mav.setViewName("confirm-oauth-access"); - return mav; - } - - @RequestMapping(value = { "/oauth/custom/authorize.json" }, method = RequestMethod.POST) - public @ResponseBody RequestInfoForm authorize(HttpServletRequest request, HttpServletResponse response, @RequestBody OauthAuthorizeForm form) { - RequestInfoForm requestInfoForm = new RequestInfoForm(); - Authentication auth = SecurityContextHolder.getContext().getAuthentication(); - AuthorizationRequest authorizationRequest = authorizationRequestLocalCache.get(request.getSession().getId()); - if (requestInfoFormLocalCache.containsKey(request.getSession().getId())) { - requestInfoForm = requestInfoFormLocalCache.get(request.getSession().getId()); - } else if (authorizationRequest != null) { - requestInfoForm.setRedirectUrl(authorizationRequest.getRedirectUri()); - requestInfoForm.setClientId(authorizationRequest.getClientId()); - } else { - LOGGER.warn("Both authorizationRequest and requestInfoForm caches are empty"); - } - - Map requestParams = new HashMap(authorizationRequest.getRequestParameters()); - Map approvalParams = new HashMap(); - - // Add the persistent token information - if (form.getApproved()) { - requestParams.put(OAuth2Utils.USER_OAUTH_APPROVAL, "true"); - approvalParams.put(OAuth2Utils.USER_OAUTH_APPROVAL, "true"); - } else { - requestParams.put(OAuth2Utils.USER_OAUTH_APPROVAL, "false"); - approvalParams.put(OAuth2Utils.USER_OAUTH_APPROVAL, "false"); - } - requestParams.put(OrcidOauth2Constants.TOKEN_VERSION, OrcidOauth2Constants.PERSISTENT_TOKEN); - // Check if the client have persistent tokens enabled - requestParams.put(OrcidOauth2Constants.GRANT_PERSISTENT_TOKEN, "false"); - if (hasPersistenTokensEnabled(requestInfoForm.getClientId())) - // Then check if the client granted the persistent token - if (form.getPersistentTokenEnabled()) - requestParams.put(OrcidOauth2Constants.GRANT_PERSISTENT_TOKEN, "true"); - - // strip /email/read-private scope if user has not consented - if (requestInfoForm.containsEmailReadPrivateScope() && !form.isEmailAccessAllowed()) { - requestInfoForm.removeEmailReadPrivateScope(); - requestParams.put(OrcidOauth2Constants.SCOPE_PARAM, requestInfoForm.getScopesAsString()); - } - - // Session status - SimpleSessionStatus status = new SimpleSessionStatus(); - - authorizationRequest.setRequestParameters(requestParams); - // Authorization request model - Map model = new HashMap(); - model.put("authorizationRequest", authorizationRequest); - Map originalRequest = originalAuthorizationRequestLocalCache.get(request.getSession().getId()); - if(originalRequest != null) { - model.put(OrcidOauth2Constants.ORIGINAL_AUTHORIZATION_REQUEST, originalRequest); - } - - // Approve - try { - RedirectView view = (RedirectView) authorizationEndpoint.approveOrDeny(approvalParams, model, status, auth); - requestInfoForm.setRedirectUrl(view.getUrl()); - } catch (InvalidRequestException ire) { - LOGGER.error("Something changed on the request, here are the authorization request and original authorization request values:"); - LOGGER.error("Client id: original '{}' latest '{}'", originalRequest.get(OrcidOauth2Constants.CLIENT_ID), authorizationRequest.getClientId()); - LOGGER.error("State: original '{}' latest '{}'", originalRequest.get(OrcidOauth2Constants.STATE_PARAM), authorizationRequest.getState()); - LOGGER.error("Redirect uri: original '{}' latest '{}'", originalRequest.get(OrcidOauth2Constants.REDIRECT_URI_PARAM), authorizationRequest.getRedirectUri()); - LOGGER.error("Response type: original '{}' latest '{}'", originalRequest.get(OrcidOauth2Constants.RESPONSE_TYPE_PARAM), authorizationRequest.getResponseTypes()); - LOGGER.error("Scope: original '{}' latest '{}'", originalRequest.get(OrcidOauth2Constants.SCOPE_PARAM), authorizationRequest.getScope()); - LOGGER.error("Approved: original '{}' latest '{}'", originalRequest.get("approved"), authorizationRequest.isApproved()); - LOGGER.error("Resource Ids: original '{}' latest '{}'", originalRequest.get("resourceIds"), authorizationRequest.getResourceIds()); - LOGGER.error("Authorities: original '{}' latest '{}'", originalRequest.get("authorities"), authorizationRequest.getAuthorities()); - // Propagate the exception - throw ire; - } - if (Features.EVENTS.isActive()) { - EventType eventType = "true".equals(approvalParams.get("user_oauth_approval")) ? EventType.AUTHORIZE : EventType.AUTHORIZE_DENY; - String orcid = null; - Object principal = auth.getPrincipal(); - if (principal instanceof UserDetails) { - orcid = ((UserDetails) principal).getUsername(); - } else { - orcid = auth.getPrincipal().toString(); - } - eventManager.createEvent(eventType, request); - } - if(new HttpSessionRequestCache().getRequest(request, response) != null) - new HttpSessionRequestCache().removeRequest(request, response); - LOGGER.info("OauthConfirmAccessController form.getRedirectUri being sent to client browser: " + requestInfoForm.getRedirectUrl()); - //Oauth has been finalized, hence, remove the oauth flag from the session - - // Remove the request info form from the cache - requestInfoFormLocalCache.remove(request.getSession().getId()); - - request.getSession().removeAttribute(OrcidOauth2Constants.OAUTH_2SCREENS); - return requestInfoForm; - } - - /** - * Copies all request parameters into the provided params map - * - * @param request - * The server request - * @param params - * The map to copy the params - * */ - private void copyRequestParameters(HttpServletRequest request, Map params) { - if (request != null && request.getParameterMap() != null) { - Map savedParams = request.getParameterMap(); - copy(savedParams, params); - } - } - - private ModelAndView redirectToForceSignin(HttpServletRequest request) { - String q = request.getQueryString(); - q = removeQueryStringParams(q,"prompt","max_age"); - q += "&prompt=login"; - RedirectView rView = new RedirectView(orcidUrlManager.getBaseUrl() + "/signin?oauth&" +q); - ModelAndView m = new ModelAndView(); - m.setView(rView); - return m; - } - -} diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/OauthControllerBase.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/OauthControllerBase.java deleted file mode 100644 index e883d8f5a8c..00000000000 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/OauthControllerBase.java +++ /dev/null @@ -1,168 +0,0 @@ -package org.orcid.frontend.web.controllers; - -import java.util.Map; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; - -import org.orcid.core.constants.OrcidOauth2Constants; -import org.orcid.core.manager.ClientDetailsEntityCacheManager; -import org.orcid.core.manager.ProfileEntityCacheManager; -import org.orcid.core.manager.v3.read_only.RecordNameManagerReadOnly; -import org.orcid.core.oauth.service.OrcidAuthorizationEndpoint; -import org.orcid.core.oauth.service.OrcidOAuth2RequestValidator; -import org.orcid.authorization.authentication.MFAWebAuthenticationDetails; -import org.orcid.persistence.jpa.entities.ClientDetailsEntity; -import org.orcid.pojo.ajaxForm.PojoUtil; -import org.orcid.pojo.ajaxForm.RequestInfoForm; -import org.springframework.security.authentication.AuthenticationManager; -import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.oauth2.common.util.OAuth2Utils; - -@Deprecated -public class OauthControllerBase extends BaseController { - protected static String REDIRECT_URI_ERROR = "/oauth/error/redirect-uri-mismatch?client_id={0}"; - - @Resource - protected ClientDetailsEntityCacheManager clientDetailsEntityCacheManager; - - @Resource - protected OrcidOAuth2RequestValidator orcidOAuth2RequestValidator; - - @Resource - protected ProfileEntityCacheManager profileEntityCacheManager; - - @Resource - protected AuthenticationManager authenticationManager; - - @Resource - protected OrcidAuthorizationEndpoint authorizationEndpoint; - - @Resource(name = "recordNameManagerReadOnlyV3") - private RecordNameManagerReadOnly recordNameManagerReadOnly; - - public AuthenticationManager getAuthenticationManager() { - return authenticationManager; - } - - public void setAuthenticationManager(AuthenticationManager authenticationManager) { - this.authenticationManager = authenticationManager; - } - - public OrcidAuthorizationEndpoint getAuthorizationEndpoint() { - return authorizationEndpoint; - } - - public void setAuthorizationEndpoint(OrcidAuthorizationEndpoint authorizationEndpoint) { - this.authorizationEndpoint = authorizationEndpoint; - } - - protected void fillOauthParams(RequestInfoForm requestInfoForm, Map params, Map approvalParams, boolean userEnabledPersistentTokens, boolean allowEmailAccess) { - if (requestInfoForm.containsEmailReadPrivateScope() && !allowEmailAccess) { - requestInfoForm.removeEmailReadPrivateScope(); - } - - if (!PojoUtil.isEmpty(requestInfoForm.getScopesAsString())) { - params.put(OrcidOauth2Constants.SCOPE_PARAM, requestInfoForm.getScopesAsString()); - } - - params.put(OrcidOauth2Constants.TOKEN_VERSION, OrcidOauth2Constants.PERSISTENT_TOKEN); - params.put(OrcidOauth2Constants.CLIENT_ID_PARAM, requestInfoForm.getClientId()); - - // Redirect URI - if (!PojoUtil.isEmpty(requestInfoForm.getRedirectUrl())) { - params.put(OrcidOauth2Constants.REDIRECT_URI_PARAM, requestInfoForm.getRedirectUrl()); - } else { - params.put(OrcidOauth2Constants.REDIRECT_URI_PARAM, new String()); - } - - // Response type - if (!PojoUtil.isEmpty(requestInfoForm.getResponseType())) { - params.put(OrcidOauth2Constants.RESPONSE_TYPE_PARAM, requestInfoForm.getResponseType()); - } - // State param - if (!PojoUtil.isEmpty(requestInfoForm.getStateParam())) { - params.put(OrcidOauth2Constants.STATE_PARAM, requestInfoForm.getStateParam()); - } - - // Set approval params - params.put(OAuth2Utils.USER_OAUTH_APPROVAL, "true"); - approvalParams.put(OAuth2Utils.USER_OAUTH_APPROVAL, "true"); - - // Set persistent token flag - if(requestInfoForm.getClientHavePersistentTokens() && userEnabledPersistentTokens) { - params.put(OrcidOauth2Constants.GRANT_PERSISTENT_TOKEN, "true"); - } else { - params.put(OrcidOauth2Constants.GRANT_PERSISTENT_TOKEN, "false"); - } - - //OpenID connect - if (!PojoUtil.isEmpty(requestInfoForm.getNonce())){ - params.put(OrcidOauth2Constants.NONCE, requestInfoForm.getNonce()); - } - } - - /** - * Builds the redirect uri string to use when the user deny the request - * - * @param redirectUri - * Redirect uri - * @return the redirect uri string with the deny params - */ - protected String buildDenyRedirectUri(String redirectUri, String stateParam) { - if (!PojoUtil.isEmpty(redirectUri)) { - if (redirectUri.contains("?")) { - redirectUri = redirectUri.concat("&error=access_denied&error_description=User denied access"); - } else { - redirectUri = redirectUri.concat("?error=access_denied&error_description=User denied access"); - } - } - if (!PojoUtil.isEmpty(stateParam)) - redirectUri += "&state=" + stateParam; - return redirectUri; - } - - protected void copy(Map savedParams, Map params) { - if (savedParams != null && !savedParams.isEmpty()) { - for (String key : savedParams.keySet()) { - String[] values = savedParams.get(key); - if (values != null && values.length > 0) - params.put(key, values[0]); - } - } - } - - /***************************** - * Authenticate user methods - ****************************/ - protected Authentication authenticateUser(HttpServletRequest request, String email, String password) { - UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(email, password); - token.setDetails(new MFAWebAuthenticationDetails(request)); - Authentication authentication = authenticationManager.authenticate(token); - SecurityContextHolder.getContext().setAuthentication(authentication); - return authentication; - } - - /** - * Checks if the client has the persistent tokens enabled - * - * @return true if the persistent tokens are enabled for that client - * @throws IllegalArgumentException - */ - protected boolean hasPersistenTokensEnabled(String clientId) throws IllegalArgumentException { - ClientDetailsEntity clientDetails = clientDetailsEntityCacheManager.retrieve(clientId); - if (clientDetails == null) - throw new IllegalArgumentException(getMessage("web.orcid.oauth_invalid_client.exception")); - return clientDetails.isPersistentTokensEnabled(); - } - - protected String removeQueryStringParams(String queryString, String... params) { - for (String param : params) { - String keyValue = param + "=[^&]*?"; - queryString = queryString.replaceAll("(&" + keyValue + "(?=(&|$))|^" + keyValue + "(&|$))", ""); - } - return queryString; - } -} diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/OauthGenericCallsController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/OauthGenericCallsController.java index 44a8a3bcc91..79f0b20c5cc 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/OauthGenericCallsController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/OauthGenericCallsController.java @@ -1,64 +1,40 @@ package org.orcid.frontend.web.controllers; import java.io.IOException; -import java.io.UnsupportedEncodingException; import java.net.URISyntaxException; -import java.util.Enumeration; import java.util.Map; import java.util.stream.Collectors; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedHashMap; -import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.core.Response; import javax.ws.rs.core.UriInfo; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.orcid.core.oauth.authorizationServer.AuthorizationServerUtil; -import org.orcid.api.common.oauth.OrcidClientCredentialEndPointDelegator; import org.orcid.core.constants.OrcidOauth2Constants; import org.orcid.core.oauth.OAuthError; import org.orcid.core.oauth.OAuthErrorUtils; import org.orcid.core.togglz.Features; -import org.orcid.frontend.util.RequestInfoFormLocalCache; -import org.orcid.pojo.ajaxForm.OauthAuthorizeForm; -import org.orcid.pojo.ajaxForm.OauthRegistrationForm; -import org.orcid.pojo.ajaxForm.PojoUtil; -import org.orcid.pojo.ajaxForm.RequestInfoForm; -import org.orcid.pojo.ajaxForm.Text; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.ResponseBody; import static org.orcid.core.constants.OrcidOauth2Constants.IETF_EXCHANGE_GRANT_TYPE; @Controller("oauthGenericCallsController") -public class OauthGenericCallsController extends OauthControllerBase { +public class OauthGenericCallsController { private static final Logger logger = Logger.getLogger(OauthGenericCallsController.class); - @Resource - private RegistrationController registrationController; - - @Resource - private OrcidClientCredentialEndPointDelegator orcidClientCredentialEndPointDelegator; - @Context private UriInfo uriInfo; - @Resource - private RequestInfoFormLocalCache requestInfoFormLocalCache; - @Resource private AuthorizationServerUtil authorizationServerUtil; @@ -72,50 +48,32 @@ public ResponseEntity obtainOauth2TokenPost(HttpServletRequest request) throw error.setResponseStatus(Response.Status.BAD_REQUEST); return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(error); } - if(Features.OAUTH_AUTHORIZATION_CODE_EXCHANGE.isActive()) { - try { - Response response = null; - if(StringUtils.isNotBlank(request.getHeader("Authorization"))) { - response = handleBasicAuthentication(grantType, request); - } else { - response = handlePlainClientCredentials(grantType, request); - } - HttpHeaders responseHeaders = new HttpHeaders(); - responseHeaders.set(Features.OAUTH_AUTHORIZATION_CODE_EXCHANGE.name(), - "ON"); - return ResponseEntity.status(response.getStatus()).headers(responseHeaders).body(response.getEntity()); - } catch(Exception e) { - OAuthError error = OAuthErrorUtils.getOAuthError(e); - Map params = request.getParameterMap(); - if(params != null && !params.isEmpty()) { - String paramList = params.entrySet().stream() - .map(entry -> { - String paramValues = (entry.getValue() == null || entry.getValue().length == 0) ? "-NOTHING-" : String.join(",", entry.getValue()); - return entry.getKey() + "=" + paramValues; - }) - .collect(Collectors.joining(", ")); - logger.error("Exception sending request to authorization server: " + error.getErrorDescription() + " - Param list: " + paramList, e); - } - return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(error); - } - } else { - String authorization = request.getHeader("Authorization"); - Enumeration paramNames = request.getParameterNames(); - MultivaluedMap formParams = new MultivaluedHashMap(); - while(paramNames.hasMoreElements()) { - String paramName = paramNames.nextElement(); - formParams.add(paramName, request.getParameter(paramName)); + try { + Response response = null; + if(StringUtils.isNotBlank(request.getHeader("Authorization"))) { + response = handleBasicAuthentication(grantType, request); + } else { + response = handlePlainClientCredentials(grantType, request); } - try { - Response response = orcidClientCredentialEndPointDelegator.obtainOauth2Token(authorization, formParams); - return ResponseEntity.status(response.getStatus()).body(response.getEntity()); - } catch(Exception e) { - OAuthError error = OAuthErrorUtils.getOAuthError(e); - HttpStatus status = HttpStatus.valueOf(error.getResponseStatus().getStatusCode()); - return ResponseEntity.status(status).body(error); + HttpHeaders responseHeaders = new HttpHeaders(); + responseHeaders.set(Features.OAUTH_AUTHORIZATION_CODE_EXCHANGE.name(), + "ON"); + return ResponseEntity.status(response.getStatus()).headers(responseHeaders).body(response.getEntity()); + } catch(Exception e) { + OAuthError error = OAuthErrorUtils.getOAuthError(e); + Map params = request.getParameterMap(); + if(params != null && !params.isEmpty()) { + String paramList = params.entrySet().stream() + .map(entry -> { + String paramValues = (entry.getValue() == null || entry.getValue().length == 0) ? "-NOTHING-" : String.join(",", entry.getValue()); + return entry.getKey() + "=" + paramValues; + }) + .collect(Collectors.joining(", ")); + logger.error("Exception sending request to authorization server: " + error.getErrorDescription() + " - Param list: " + paramList, e); } + return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(error); } } @@ -183,90 +141,4 @@ private Response handleBasicAuthentication(String grantType, HttpServletRequest return response; } - - @RequestMapping(value = "/oauth/custom/authorize/get_request_info_form.json", method = RequestMethod.GET) - public @ResponseBody RequestInfoForm getRequestInfoForm(HttpServletRequest request) throws UnsupportedEncodingException { - RequestInfoForm requestInfoForm = new RequestInfoForm(); - if(requestInfoFormLocalCache.containsKey(request.getSession().getId())) { - requestInfoForm = requestInfoFormLocalCache.get(request.getSession().getId()); - } - return requestInfoForm; - } - - @RequestMapping(value = "/oauth/custom/authorize/empty.json", method = RequestMethod.GET) - public @ResponseBody OauthAuthorizeForm getEmptyAuthorizeForm(HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException { - OauthAuthorizeForm empty = new OauthAuthorizeForm(); - Text emptyText = Text.valueOf(StringUtils.EMPTY); - empty.setPassword(emptyText); - empty.setUserName(emptyText); - - RequestInfoForm requestInfoForm = getRequestInfoForm(request); - if(requestInfoForm != null) { - if(!PojoUtil.isEmpty(requestInfoForm.getUserId())) { - empty.setUserName(Text.valueOf(requestInfoForm.getUserId())); - } - } - - return empty; - } - - /***************************** - * Validators - ****************************/ - @RequestMapping(value = "/oauth/custom/register/validateActivitiesVisibilityDefault.json", method = RequestMethod.POST) - public @ResponseBody OauthRegistrationForm validateActivitiesVisibilityDefaul(@RequestBody OauthRegistrationForm reg) { - registrationController.registerActivitiesVisibilityDefaultValidate(reg); - return reg; - } - - @RequestMapping(value = "/oauth/custom/register/validatePasswordConfirm.json", method = RequestMethod.POST) - public @ResponseBody OauthRegistrationForm validatePasswordConfirm(@RequestBody OauthRegistrationForm reg) { - registrationController.registerPasswordConfirmValidate(reg); - return reg; - } - - @RequestMapping(value = "/oauth/custom/register/validatePassword.json", method = RequestMethod.POST) - public @ResponseBody OauthRegistrationForm validatePassword(@RequestBody OauthRegistrationForm reg) { - registrationController.registerPasswordValidate(reg); - return reg; - } - - @RequestMapping(value = "/oauth/custom/register/validateTermsOfUse.json", method = RequestMethod.POST) - public @ResponseBody OauthRegistrationForm validateTermsOfUse(@RequestBody OauthRegistrationForm reg) { - registrationController.registerTermsOfUseValidate(reg); - return reg; - } - - @RequestMapping(value = "/oauth/custom/register/validateGivenNames.json", method = RequestMethod.POST) - public @ResponseBody OauthRegistrationForm validateGivenName(@RequestBody OauthRegistrationForm reg) { - - registrationController.registerGivenNameValidate(reg); - return reg; - } - - - @RequestMapping(value = "/oauth/custom/register/validateFamilyNames.json", method = RequestMethod.POST) - public @ResponseBody OauthRegistrationForm validateFamilyName(@RequestBody OauthRegistrationForm reg) { - - registrationController.registerFamilyNameValidate(reg); - return reg; - } - - @RequestMapping(value = "/oauth/custom/register/validateEmail.json", method = RequestMethod.POST) - public @ResponseBody OauthRegistrationForm validateEmail(HttpServletRequest request, @RequestBody OauthRegistrationForm reg) { - registrationController.regEmailValidate(request, reg, true, false); - return reg; - } - - @RequestMapping(value = "/oauth/custom/register/validateEmailConfirm.json", method = RequestMethod.POST) - public @ResponseBody OauthRegistrationForm validateEmailConfirm(@RequestBody OauthRegistrationForm reg) { - registrationController.regEmailConfirmValidate(reg); - return reg; - } - - @RequestMapping(value = "/oauth/custom/register/validateEmailsAdditional.json", method = RequestMethod.POST) - public @ResponseBody OauthRegistrationForm validateEmailsAdditional(HttpServletRequest request, @RequestBody OauthRegistrationForm reg) { - additionalEmailsValidateOnRegister(request, reg); - return reg; - } } diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/OauthLoginController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/OauthLoginController.java deleted file mode 100644 index 91b838aa8b7..00000000000 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/OauthLoginController.java +++ /dev/null @@ -1,216 +0,0 @@ -package org.orcid.frontend.web.controllers; - -import java.io.UnsupportedEncodingException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Map; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.orcid.core.constants.OrcidOauth2Constants; -import org.orcid.core.exception.ClientDeactivatedException; -import org.orcid.core.exception.LockedException; -import org.orcid.core.manager.v3.ProfileEntityManager; -import org.orcid.core.security.UnclaimedProfileExistsException; -import org.orcid.core.utils.OrcidRequestUtil; -import org.orcid.authorization.authentication.MFAWebAuthenticationDetails; -import org.orcid.frontend.util.RequestInfoFormLocalCache; -import org.orcid.frontend.web.controllers.helper.OauthHelper; -import org.orcid.frontend.web.exception.Bad2FARecoveryCodeException; -import org.orcid.frontend.web.exception.Bad2FAVerificationCodeException; -import org.orcid.frontend.web.exception.VerificationCodeFor2FARequiredException; -import org.orcid.jaxb.model.message.ScopePathType; -import org.orcid.persistence.jpa.entities.ClientDetailsEntity; -import org.orcid.pojo.ajaxForm.OauthAuthorizeForm; -import org.orcid.pojo.ajaxForm.PojoUtil; -import org.orcid.pojo.ajaxForm.RequestInfoForm; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.security.authentication.DisabledException; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.AuthenticationException; -import org.springframework.security.oauth2.common.exceptions.InvalidScopeException; -import org.springframework.security.oauth2.common.exceptions.RedirectMismatchException; -import org.springframework.security.web.savedrequest.HttpSessionRequestCache; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.support.SimpleSessionStatus; -import org.springframework.web.servlet.ModelAndView; -import org.springframework.web.servlet.view.RedirectView; - -@Deprecated -@Controller("oauthLoginController") -public class OauthLoginController extends OauthControllerBase { - private static final Logger LOGGER = LoggerFactory.getLogger(OauthLoginController.class); - - @Resource(name = "profileEntityManagerV3") - private ProfileEntityManager profileEntityManager; - - @Resource - private OauthHelper oauthHelper; - - @Resource - private RequestInfoFormLocalCache requestInfoFormLocalCache; - - @RequestMapping(value = { "/oauth/signin", "/oauth/login" }, method = RequestMethod.GET) - public ModelAndView loginGetHandler(HttpServletRequest request, HttpServletResponse response, ModelAndView mav) throws UnsupportedEncodingException { - String url = request.getQueryString(); - // Get and save the request information form - RequestInfoForm requestInfoForm = oauthHelper.generateRequestInfoForm(url); - // Store the request info form in the cache - requestInfoFormLocalCache.put(request.getSession().getId(), requestInfoForm); - - // Check that the client have the required permissions - // Get client name - ClientDetailsEntity clientDetails = clientDetailsEntityCacheManager.retrieve(requestInfoForm.getClientId()); - - // validate client scopes - try { - authorizationEndpoint.validateScope(requestInfoForm.getScopesAsString(), clientDetails,requestInfoForm.getResponseType()); - orcidOAuth2RequestValidator.validateClientIsEnabled(clientDetails); - } catch (InvalidScopeException | ClientDeactivatedException | LockedException e) { - String redirectUriWithParams = requestInfoForm.getRedirectUrl(); - if (e instanceof InvalidScopeException) { - redirectUriWithParams += "?error=invalid_scope&error_description=" + e.getMessage(); - } else if (e instanceof LockedException) { - redirectUriWithParams += "?error=client_locked&error_description=" + e.getMessage(); - } else { - redirectUriWithParams += "?error=client_deactivated&error_description=" + e.getMessage(); - } - RedirectView rView = new RedirectView(redirectUriWithParams); - ModelAndView error = new ModelAndView(); - error.setView(rView); - return error; - } - - //handle openID behaviour - if (!PojoUtil.isEmpty(requestInfoForm.getScopesAsString()) && ScopePathType.getScopesFromSpaceSeparatedString(requestInfoForm.getScopesAsString()).contains(ScopePathType.OPENID) ){ - String prompt = request.getParameter(OrcidOauth2Constants.PROMPT); - if (prompt != null && prompt.equals(OrcidOauth2Constants.PROMPT_NONE)){ - String redirectUriWithParams = requestInfoForm.getRedirectUrl(); - redirectUriWithParams += "?error=login_required"; - RedirectView rView = new RedirectView(redirectUriWithParams); - ModelAndView error = new ModelAndView(); - error.setView(rView); - return error; - } - } - mav.addObject("noIndex", true); - mav.addObject("hideSupportWidget", true); - mav.setViewName("oauth_login"); - return mav; - } - - @RequestMapping(value = { "/oauth/custom/signin.json", "/oauth/custom/login.json" }, method = RequestMethod.POST) - public @ResponseBody OauthAuthorizeForm authenticateAndAuthorize(HttpServletRequest request, HttpServletResponse response, @RequestBody OauthAuthorizeForm form) { - // Clean form errors - form.setErrors(new ArrayList()); - RequestInfoForm requestInfoForm = requestInfoFormLocalCache.get(request.getSession().getId()); - - boolean willBeRedirected = false; - if (form.getApproved()) { - // Validate name and password - validateUserNameAndPassword(form); - if (form.getErrors().isEmpty()) { - try { - // Authenticate user - copy2FAFields(form, request); - Authentication auth = authenticateUser(request, form.getUserName().getValue(), form.getPassword().getValue()); - profileEntityManager.updateLastLoginDetails(auth.getName(), OrcidRequestUtil.getIpAddress(request)); - - // Create authorization params - SimpleSessionStatus status = new SimpleSessionStatus(); - Map model = new HashMap(); - Map params = new HashMap(); - Map approvalParams = new HashMap(); - - fillOauthParams(requestInfoForm, params, approvalParams, form.getPersistentTokenEnabled(), form.isEmailAccessAllowed()); - - // Authorize - try { - authorizationEndpoint.authorize(model, params, status, auth); - } catch (RedirectMismatchException rUriError) { - String redirectUri = this.getBaseUri() + REDIRECT_URI_ERROR; - // Set the client id - redirectUri = redirectUri.replace("{0}", requestInfoForm.getClientId()); - // Set the response type if needed - if (!PojoUtil.isEmpty(requestInfoForm.getResponseType())) - redirectUri += "&response_type=" + requestInfoForm.getResponseType(); - // Set the redirect uri - if (!PojoUtil.isEmpty(requestInfoForm.getRedirectUrl())) - redirectUri += "&redirect_uri=" + requestInfoForm.getRedirectUrl(); - // Set the scope param - if (!PojoUtil.isEmpty(requestInfoForm.getScopesAsString())) - redirectUri += "&scope=" + requestInfoForm.getScopesAsString(); - // Copy the state param if present - if (!PojoUtil.isEmpty(requestInfoForm.getStateParam())) - redirectUri += "&state=" + requestInfoForm.getStateParam(); - form.setRedirectUrl(redirectUri); - LOGGER.info("OauthLoginController being sent to client browser: " + form.getRedirectUrl()); - return form; - } - // Approve - RedirectView view = (RedirectView) authorizationEndpoint.approveOrDeny(approvalParams, model, status, auth); - form.setRedirectUrl(view.getUrl()); - willBeRedirected = true; - - - } catch (AuthenticationException ae) { - if(ae.getCause() instanceof DisabledException){ - // Handle this message in angular to allow AJAX action - form.getErrors().add("orcid.frontend.security.orcid_deactivated"); - } else if(ae.getCause() instanceof UnclaimedProfileExistsException) { - String email = PojoUtil.isEmpty(form.getUserName()) ? null : form.getUserName().getValue(); - String resendEmailUrl = createResendClaimUrl(email, request); - String errorMessage = getMessage("orcid.frontend.security.unclaimed_exists_1"); - errorMessage += ""; - errorMessage += getMessage("orcid.frontend.security.unclaimed_exists_2"); - errorMessage += "" + getMessage("orcid.frontend.security.unclaimed_exists_3"); - form.getErrors().add(errorMessage); - } else if (ae instanceof VerificationCodeFor2FARequiredException) { - form.setVerificationCodeRequired(true); - } else if (ae instanceof Bad2FAVerificationCodeException) { - form.getErrors().add(getMessage("orcid.frontend.security.2fa.bad_verification_code")); - } else if (ae instanceof Bad2FARecoveryCodeException) { - form.getErrors().add(getMessage("orcid.frontend.security.2fa.bad_recovery_code")); - } else { - form.getErrors().add(getMessage("orcid.frontend.security.bad_credentials")); - } - } - } - } else { - form.setRedirectUrl(buildDenyRedirectUri(requestInfoForm.getRedirectUrl(), requestInfoForm.getStateParam())); - willBeRedirected = true; - } - - // If there was an authentication error, dont log since the user will - // not be redirected yet - if (willBeRedirected) { - if (new HttpSessionRequestCache().getRequest(request, response) != null) - new HttpSessionRequestCache().removeRequest(request, response); - LOGGER.info("OauthConfirmAccessController form.getRedirectUri being sent to client browser: " + requestInfoForm.getRedirectUrl()); - } - return form; - } - - private void copy2FAFields(OauthAuthorizeForm form, HttpServletRequest request) { - if (form.getVerificationCode() != null) { - request.setAttribute(MFAWebAuthenticationDetails.VERIFICATION_CODE_PARAMETER, form.getVerificationCode().getValue()); - } - - if (form.getRecoveryCode() != null) { - request.setAttribute(MFAWebAuthenticationDetails.RECOVERY_CODE_PARAMETER, form.getRecoveryCode().getValue()); - } - } - - private void validateUserNameAndPassword(OauthAuthorizeForm form) { - if (PojoUtil.isEmpty(form.getUserName()) || PojoUtil.isEmpty(form.getPassword())) { - form.getErrors().add(getMessage("orcid.frontend.security.bad_credentials")); - } - } -} diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/OauthRegistrationController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/OauthRegistrationController.java deleted file mode 100644 index 45d177c8fd0..00000000000 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/OauthRegistrationController.java +++ /dev/null @@ -1,224 +0,0 @@ -package org.orcid.frontend.web.controllers; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Locale; -import java.util.Map; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.commons.lang.StringUtils; -import org.orcid.core.constants.OrcidOauth2Constants; -import org.orcid.core.utils.OrcidRequestUtil; -import org.orcid.frontend.util.RequestInfoFormLocalCache; -import org.orcid.frontend.web.controllers.helper.OauthHelper; -import org.orcid.jaxb.model.message.CreationMethod; -import org.orcid.pojo.ajaxForm.OauthRegistrationForm; -import org.orcid.pojo.ajaxForm.PojoUtil; -import org.orcid.pojo.ajaxForm.RequestInfoForm; -import org.orcid.pojo.ajaxForm.Text; -import org.orcid.utils.OrcidStringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.security.core.Authentication; -import org.springframework.security.oauth2.common.exceptions.RedirectMismatchException; -import org.springframework.security.web.savedrequest.HttpSessionRequestCache; -import org.springframework.security.web.savedrequest.SavedRequest; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.support.SimpleSessionStatus; -import org.springframework.web.servlet.support.RequestContextUtils; -import org.springframework.web.servlet.view.RedirectView; - -@Controller("oauthRegisterController") -public class OauthRegistrationController extends OauthControllerBase { - private static final Logger LOGGER = LoggerFactory.getLogger(OauthRegistrationController.class); - @Resource - private RegistrationController registrationController; - - @Resource - private RequestInfoFormLocalCache requestInfoFormLocalCache; - - public RegistrationController getRegistrationController() { - return registrationController; - } - - public void setRequestInfoFormLocalCache(RequestInfoFormLocalCache requestInfoFormLocalCache) { - this.requestInfoFormLocalCache = requestInfoFormLocalCache; - } - - public void setRegistrationController(RegistrationController registrationController) { - this.registrationController = registrationController; - } - - @RequestMapping(value = "/oauth/custom/register/empty.json", method = RequestMethod.GET) - public @ResponseBody OauthRegistrationForm getRegister(HttpServletRequest request, HttpServletResponse response) { - // Remove the session hash if needed - if (request.getSession().getAttribute(RegistrationController.GRECAPTCHA_SESSION_ATTRIBUTE_NAME) != null) { - request.getSession().removeAttribute(RegistrationController.GRECAPTCHA_SESSION_ATTRIBUTE_NAME); - } - OauthRegistrationForm empty = new OauthRegistrationForm(registrationController.getRegister(request, response)); - // Creation type in oauth will always be member referred - empty.setCreationType(Text.valueOf(CreationMethod.MEMBER_REFERRED.value())); - Text emptyText = Text.valueOf(StringUtils.EMPTY); - empty.setPassword(emptyText); - return empty; - } - - @RequestMapping(value = "/oauth/custom/register.json", method = RequestMethod.POST) - public @ResponseBody OauthRegistrationForm checkRegisterForm(HttpServletRequest request, HttpServletResponse response, @RequestBody OauthRegistrationForm form) { - form.setErrors(new ArrayList()); - RequestInfoForm requestInfoForm = requestInfoFormLocalCache.get(request.getSession().getId()); - - if (form.getApproved()) { - registrationController.validateRegistrationFields(request, form); - registrationController.validateGrcaptcha(request, form); - } else { - SavedRequest savedRequest = new HttpSessionRequestCache().getRequest(request, response); - String stateParam = null; - if (savedRequest != null && savedRequest.getParameterMap() != null && savedRequest.getParameterValues("state") != null) { - if (savedRequest.getParameterValues("state").length > 0) - stateParam = savedRequest.getParameterValues("state")[0]; - } - form.setRedirectUrl(buildDenyRedirectUri(requestInfoForm.getRedirectUrl(), stateParam)); - } - - return form; - } - - @RequestMapping(value = "/oauth/custom/registerConfirm.json", method = RequestMethod.POST) - public @ResponseBody RequestInfoForm registerAndAuthorize(HttpServletRequest request, HttpServletResponse response, @RequestBody OauthRegistrationForm form) { - RequestInfoForm requestInfoForm = requestInfoFormLocalCache.get(request.getSession().getId()); - if (form.getApproved()) { - boolean usedCaptcha = false; - - // If recatcha wasn't loaded do nothing. This is for countries that - // block google. - if (form.getGrecaptchaWidgetId().getValue() != null) { - // If the captcha verified key is not in the session, redirect - // to the login page - if (request.getSession().getAttribute(RegistrationController.GRECAPTCHA_SESSION_ATTRIBUTE_NAME) == null - || PojoUtil.isEmpty(form.getGrecaptcha()) - || !form.getGrecaptcha().getValue().equals( - request.getSession().getAttribute(RegistrationController.GRECAPTCHA_SESSION_ATTRIBUTE_NAME))) { - String redirectUri = this.getBaseUri() + REDIRECT_URI_ERROR; - // Set the client id - redirectUri = redirectUri.replace("{0}", requestInfoForm.getClientId()); - // Set the response type if needed - if (!PojoUtil.isEmpty(requestInfoForm.getResponseType())) - redirectUri += "&response_type=" + requestInfoForm.getResponseType(); - // Set the redirect uri - if (!PojoUtil.isEmpty(requestInfoForm.getRedirectUrl())) - redirectUri += "&redirect_uri=" + requestInfoForm.getRedirectUrl(); - // remove email access scope if present but not granted - if (requestInfoForm.containsEmailReadPrivateScope() && !form.isEmailAccessAllowed()) { - requestInfoForm.removeEmailReadPrivateScope(); - } - // Set the scope param - if (!PojoUtil.isEmpty(requestInfoForm.getScopesAsString())) - redirectUri += "&scope=" + requestInfoForm.getScopesAsString(); - // Copy the state param if present - if (!PojoUtil.isEmpty(requestInfoForm.getStateParam())) - redirectUri += "&state=" + requestInfoForm.getStateParam(); - requestInfoForm.setRedirectUrl(redirectUri); - SavedRequest savedRequest = new HttpSessionRequestCache().getRequest(request, response); - if (savedRequest != null) - LOGGER.info("OauthConfirmAccessController original request: " + savedRequest.getRedirectUrl()); - LOGGER.info("OauthConfirmAccessController form.getRedirectUri being sent to client browser: " + requestInfoForm.getRedirectUrl()); - return requestInfoForm; - } - usedCaptcha = true; - } - - // Remove the session hash if needed - if (request.getSession().getAttribute(RegistrationController.GRECAPTCHA_SESSION_ATTRIBUTE_NAME) != null) { - request.getSession().removeAttribute(RegistrationController.GRECAPTCHA_SESSION_ATTRIBUTE_NAME); - } - - //Strip any html code from names before validating them - if(!PojoUtil.isEmpty(form.getFamilyNames())){ - form.getFamilyNames().setValue(OrcidStringUtils.stripHtml(form.getFamilyNames().getValue())); - } - - if(!PojoUtil.isEmpty(form.getGivenNames())) { - form.getGivenNames().setValue(OrcidStringUtils.stripHtml(form.getGivenNames().getValue())); - } - - // Check there are no errors - registrationController.validateRegistrationFields(request, form); - if (form.getErrors().isEmpty()) { - // Register user - try { - // Locale - Locale locale = RequestContextUtils.getLocale(request); - // Ip - String ip = OrcidRequestUtil.getIpAddress(request); - registrationController.createMinimalRegistration(request, form, usedCaptcha, locale, ip); - } catch(Exception e) { - LOGGER.error("Error registering a new user", e); - requestInfoForm.getErrors().add(getMessage("register.error.generalError")); - return requestInfoForm; - } - // Authenticate user - String email = form.getEmail().getValue(); - String password = form.getPassword().getValue(); - Authentication auth = authenticateUser(request, email, password); - // Create authorization params - SimpleSessionStatus status = new SimpleSessionStatus(); - Map model = new HashMap(); - Map params = new HashMap(); - Map approvalParams = new HashMap(); - - fillOauthParams(requestInfoForm, params, approvalParams, form.getPersistentTokenEnabled(), form.isEmailAccessAllowed()); - - // Authorize - try { - authorizationEndpoint.authorize(model, params, status, auth); - } catch (RedirectMismatchException rUriError) { - String redirectUri = this.getBaseUri() + REDIRECT_URI_ERROR; - // Set the client id - redirectUri = redirectUri.replace("{0}", requestInfoForm.getClientId()); - // Set the response type if needed - if (!PojoUtil.isEmpty(requestInfoForm.getResponseType())) - redirectUri += "&response_type=" + requestInfoForm.getResponseType(); - // Set the redirect uri - if (!PojoUtil.isEmpty(requestInfoForm.getRedirectUrl())) - redirectUri += "&redirect_uri=" + requestInfoForm.getRedirectUrl(); - // Set the scope param - if (!PojoUtil.isEmpty(requestInfoForm.getScopesAsString())) - redirectUri += "&scope=" + requestInfoForm.getScopesAsString(); - // Copy the state param if present - if (!PojoUtil.isEmpty(requestInfoForm.getStateParam())) - redirectUri += "&state=" + requestInfoForm.getStateParam(); - requestInfoForm.setRedirectUrl(redirectUri); - LOGGER.info("OauthRegisterController being sent to client browser: " + requestInfoForm.getRedirectUrl()); - return requestInfoForm; - } - - Boolean isOauth2ScreensRequest = (Boolean) request.getSession().getAttribute(OrcidOauth2Constants.OAUTH_2SCREENS); - if(isOauth2ScreensRequest != null && isOauth2ScreensRequest) { - // Just redirect to the authorization screen - String queryString = (String) request.getSession().getAttribute(OrcidOauth2Constants.OAUTH_QUERY_STRING); - requestInfoForm.setRedirectUrl(orcidUrlManager.getBaseUrl() + "/oauth/authorize?" + queryString); - request.getSession().removeAttribute(OrcidOauth2Constants.OAUTH_2SCREENS); - } else { - // Approve - RedirectView view = (RedirectView) authorizationEndpoint.approveOrDeny(approvalParams, model, status, auth); - requestInfoForm.setRedirectUrl(view.getUrl()); - } - } - } else { - requestInfoForm.setRedirectUrl(buildDenyRedirectUri(requestInfoForm.getRedirectUrl(), requestInfoForm.getStateParam())); - } - - if(new HttpSessionRequestCache().getRequest(request, response) != null) - new HttpSessionRequestCache().removeRequest(request, response); - LOGGER.info("OauthConfirmAccessController form.getRedirectUri being sent to client browser: " + requestInfoForm.getRedirectUrl()); - return requestInfoForm; - } -} diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/OpenIDController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/OpenIDController.java index f1a45e11595..4a2f930831e 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/OpenIDController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/OpenIDController.java @@ -1,15 +1,23 @@ package org.orcid.frontend.web.controllers; import java.io.IOException; +import java.net.URISyntaxException; +import java.util.Arrays; import java.util.Set; import java.util.regex.Pattern; +import java.util.stream.Collectors; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import org.codehaus.jettison.json.JSONException; +import org.orcid.core.manager.v3.read_only.PersonDetailsManagerReadOnly; import org.orcid.core.oauth.authorizationServer.AuthorizationServerUtil; import org.orcid.core.oauth.openid.OpenIDConnectUserInfo; import org.orcid.jaxb.model.message.ScopePathType; +import org.orcid.jaxb.model.v3.release.record.Person; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -19,8 +27,7 @@ import org.springframework.web.bind.annotation.ResponseBody; import com.fasterxml.jackson.core.JsonProcessingException; - -import net.minidev.json.JSONObject; +import org.codehaus.jettison.json.JSONObject; @Controller public class OpenIDController { @@ -54,7 +61,7 @@ public class OpenIDController { * @throws IOException */ @RequestMapping(value = "/oauth/userinfo", method = RequestMethod.GET, produces = "application/json") - public @ResponseBody ResponseEntity getUserInfo(HttpServletRequest request) throws IOException{ + public @ResponseBody ResponseEntity getUserInfo(HttpServletRequest request) throws IOException, JSONException, URISyntaxException, InterruptedException { if (request.getHeader("Authorization") != null) {//look in header String tokenValue = request.getHeader("Authorization").replaceAll("Bearer|bearer", "").trim(); OpenIDConnectUserInfo info = getInfoFromToken(tokenValue); @@ -65,7 +72,7 @@ public class OpenIDController { } @RequestMapping(value = "/oauth/userinfo", method = RequestMethod.POST, produces = "application/json") - public @ResponseBody ResponseEntity getUserInfoPOST(HttpServletRequest request) throws IOException{ + public @ResponseBody ResponseEntity getUserInfoPOST(HttpServletRequest request) throws IOException, JSONException, URISyntaxException, InterruptedException { if (request.getParameter("access_token") != null) { OpenIDConnectUserInfo info = getInfoFromToken(request.getParameter("access_token")); if (info != null) @@ -76,7 +83,7 @@ public class OpenIDController { //lookup token, check it's valid, check scope. //deal with incorrect bearer case in request (I'm looking at you spring security!) - private OpenIDConnectUserInfo getInfoFromToken(String tokenValue) { + private OpenIDConnectUserInfo getInfoFromToken(String tokenValue) throws JSONException, IOException, URISyntaxException, InterruptedException { //TODO: Refactor this to get the information from the database // This is unexpected and should be done with token introspection form the oauth server JSONObject tokenInfo = authorizationServerUtil.tokenIntrospection(tokenValue); @@ -88,17 +95,17 @@ private OpenIDConnectUserInfo getInfoFromToken(String tokenValue) { if(isTokenActive) { // If the token is user revoked it might be used for DELETE requests - Set scopes = OAuth2Utils.parseParameterList(tokenInfo.getString("scope")); - OpenIDConnectUserInfo info = scopes.stream().forEach(s -> - { - ScopePathType scope = ScopePathType.fromValue(s); - if(scope.hasScope(ScopePathType.AUTHENTICATE)) { - OpenIDConnectUserInfo t = new OpenIDConnectUserInfo(); - //TODO set data to the token - //TODO the name doesn't come in the token introspection data, so, we should get it from the names cache - return t; + Set scopes = Arrays.stream(tokenInfo.getString("scope").split("[\\s,]+")) + .collect(Collectors.toSet()); + OpenIDConnectUserInfo info = null; + for(String scope : scopes) { + ScopePathType scopePathType = ScopePathType.fromValue(scope); + if(scopePathType.hasScope(ScopePathType.AUTHENTICATE)) { + String orcid = tokenInfo.getString("username"); + Person person = personDetailsManagerReadOnly.getPublicPersonDetails(orcid); + return new OpenIDConnectUserInfo(orcid,person,path); } - }); + } return info; } return null; @@ -117,4 +124,14 @@ private OpenIDConnectUserInfo getInfoFromToken(String tokenValue) { throw new UnsupportedOperationException("Should be requested from the auth server"); } + @JsonInclude(JsonInclude.Include.NON_NULL) + public static class OpenIDConnectUserInfoAccessDenied extends OpenIDConnectUserInfo{ + @JsonProperty("error") + String error = "access_denied"; + @JsonProperty("error-description") + String errorDescription="access_token is invalid"; + OpenIDConnectUserInfoAccessDenied(){ + + } + } } diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/PublicProfileController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/PublicProfileController.java index d5bc25a1c34..c276b7ca94c 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/PublicProfileController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/PublicProfileController.java @@ -33,7 +33,6 @@ import org.orcid.core.manager.v3.read_only.ProfileFundingManagerReadOnly; import org.orcid.core.manager.v3.read_only.ResearchResourceManagerReadOnly; import org.orcid.core.manager.v3.read_only.WorkManagerReadOnly; -import org.orcid.core.oauth.OrcidOauth2TokenDetailService; import org.orcid.core.utils.v3.ContributorUtils; import org.orcid.core.utils.v3.SourceUtils; import org.orcid.core.utils.v3.activities.FundingComparators; @@ -127,9 +126,6 @@ public class PublicProfileController extends BaseWorkspaceController { @Resource private OrgDisambiguatedManager orgDisambiguatedManager; - @Resource - private OrcidOauth2TokenDetailService orcidOauth2TokenService; - @Resource(name = "sourceUtilsV3") private SourceUtils sourceUtils; @@ -220,7 +216,7 @@ public ModelAndView publicPreview(HttpServletRequest request, HttpServletRespons } if (!profile.isReviewed()) { - if (!orcidOauth2TokenService.hasToken(orcid, lastModifiedTime)) { + if (!profileEntityManagerReadOnly.hasToken(orcid, lastModifiedTime)) { mav.addObject("noIndex", true); } } @@ -276,7 +272,7 @@ private boolean isRecordReadyForIndexing(ProfileEntity profile) { // False if it is not reviewed and doesn't have any integration if(!profile.isReviewed()) { String userOrcid = profile.getId(); - if (!orcidOauth2TokenService.hasToken(userOrcid, getLastModifiedTime(userOrcid))) { + if (!profileEntityManagerReadOnly.hasToken(userOrcid, getLastModifiedTime(userOrcid))) { // If the user doesn't have any token, check if it was created by member, if so, // verify if that member pushed any work of affiliation on creation time SourceEntity source = profile.getSource(); diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/RegistrationController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/RegistrationController.java index 4027e47c308..d99e2fe8fc9 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/RegistrationController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/RegistrationController.java @@ -36,7 +36,6 @@ import org.orcid.frontend.spring.ShibbolethAjaxAuthenticationSuccessHandler; import org.orcid.frontend.spring.SocialAjaxAuthenticationSuccessHandler; import org.orcid.frontend.spring.web.social.config.SocialSignInUtils; -import org.orcid.frontend.util.RequestInfoFormLocalCache; import org.orcid.frontend.web.util.RecaptchaVerifier; import org.orcid.jaxb.model.common.AvailableLocales; import org.orcid.jaxb.model.message.CreationMethod; @@ -44,7 +43,6 @@ import org.orcid.jaxb.model.v3.release.record.AffiliationType; import org.orcid.persistence.constants.SendEmailFrequency; import org.orcid.persistence.jpa.entities.EventType; -import org.orcid.pojo.EmailListChange; import org.orcid.pojo.Redirect; import org.orcid.pojo.ajaxForm.AffiliationForm; import org.orcid.pojo.ajaxForm.Date; @@ -127,9 +125,6 @@ public class RegistrationController extends BaseController { @Resource private EventManager eventManager; - @Resource - private RequestInfoFormLocalCache requestInfoFormLocalCache; - @RequestMapping(value = "/register.json", method = RequestMethod.GET) public @ResponseBody Registration getRegister(HttpServletRequest request, HttpServletResponse response) { // Remove the session hash if needed @@ -160,21 +155,6 @@ public class RegistrationController extends BaseController { setError(reg.getTermsOfUse(), "validations.acceptTermsAndConditions"); - RequestInfoForm requestInfoForm = requestInfoFormLocalCache.get(request.getSession().getId()); - if (requestInfoForm != null) { - if (!PojoUtil.isEmpty(requestInfoForm.getUserEmail())) { - reg.getEmail().setValue(requestInfoForm.getUserEmail()); - } - - if (!PojoUtil.isEmpty(requestInfoForm.getUserGivenNames())) { - reg.getGivenNames().setValue(requestInfoForm.getUserGivenNames()); - } - - if (!PojoUtil.isEmpty(requestInfoForm.getUserFamilyNames())) { - reg.getFamilyNames().setValue(requestInfoForm.getUserFamilyNames()); - } - } - long numVal = generateRandomNumForValidation(); reg.setValNumServer(numVal); reg.setValNumClient(0); diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/helper/OauthHelper.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/helper/OauthHelper.java deleted file mode 100644 index c9198e286f1..00000000000 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/helper/OauthHelper.java +++ /dev/null @@ -1,263 +0,0 @@ -package org.orcid.frontend.web.controllers.helper; - -import java.io.UnsupportedEncodingException; -import java.net.URLDecoder; -import java.nio.charset.StandardCharsets; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import javax.annotation.Resource; - -import org.apache.commons.lang.StringUtils; -import org.orcid.core.locale.LocaleManager; -import org.orcid.core.manager.ClientDetailsEntityCacheManager; -import org.orcid.core.manager.v3.EmailManager; -import org.orcid.core.manager.v3.ProfileEntityManager; -import org.orcid.core.manager.v3.read_only.RecordNameManagerReadOnly; -import org.orcid.frontend.web.controllers.BaseControllerUtil; -import org.orcid.frontend.web.controllers.RegistrationController; -import org.orcid.frontend.web.exception.OauthInvalidRequestException; -import org.orcid.jaxb.model.clientgroup.ClientType; -import org.orcid.jaxb.model.message.ScopePathType; -import org.orcid.jaxb.model.v3.release.record.Name; -import org.orcid.persistence.jpa.entities.ClientDetailsEntity; -import org.orcid.pojo.ajaxForm.PojoUtil; -import org.orcid.pojo.ajaxForm.RequestInfoForm; -import org.orcid.pojo.ajaxForm.ScopeInfoForm; -import org.orcid.utils.OrcidStringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.context.NoSuchMessageException; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.core.userdetails.UserDetails; -import org.springframework.security.oauth2.common.exceptions.InvalidRequestException; -import org.springframework.stereotype.Component; - -@Component -public class OauthHelper { - - private static final Logger LOGGER = LoggerFactory.getLogger(OauthHelper.class); - public static final String PUBLIC_MEMBER_NAME = "PubApp"; - - private final Pattern redirectUriPattern = Pattern.compile("redirect_uri=([^&]*)"); - private final Pattern responseTypePattern = Pattern.compile("response_type=([^&]*)"); - private final Pattern stateParamPattern = Pattern.compile("state=([^&]*)"); - private final Pattern orcidPattern = Pattern.compile("(&|\\?)orcid=([^&]*)"); - private final Pattern noncePattern = Pattern.compile("nonce=([^&]*)"); - private final Pattern clientIdPattern = Pattern.compile("client_id=([^&]*)"); - private final Pattern scopesPattern = Pattern.compile("scope=([^&]*)"); - private final Pattern maxAgePattern = Pattern.compile("max_age=([^&]*)"); - - private BaseControllerUtil baseControllerUtil = new BaseControllerUtil(); - - @Resource(name = "profileEntityManagerV3") - protected ProfileEntityManager profileEntityManager; - - @Resource(name = "recordNameManagerReadOnlyV3") - private RecordNameManagerReadOnly recordNameManagerReadOnly; - - @Resource - protected LocaleManager localeManager; - - @Resource - protected ClientDetailsEntityCacheManager clientDetailsEntityCacheManager; - - @Resource(name = "emailManagerV3") - protected EmailManager emailManager; - - public RequestInfoForm generateRequestInfoForm(String requestUrl) throws UnsupportedEncodingException { - RequestInfoForm infoForm = new RequestInfoForm(); - - // If the user is logged in - String loggedUserOrcid = getEffectiveUserOrcid(); - if (!PojoUtil.isEmpty(loggedUserOrcid)) { - infoForm.setUserOrcid(loggedUserOrcid); - String creditName = recordNameManagerReadOnly.fetchDisplayableCreditName(loggedUserOrcid); - if (!PojoUtil.isEmpty(creditName)) { - infoForm.setUserName(URLDecoder.decode(creditName, "UTF-8").trim()); - } - } - - if (!PojoUtil.isEmpty(requestUrl)) { - Matcher matcher = clientIdPattern.matcher(requestUrl); - if (matcher.find()) { - String clientId = matcher.group(1); - // Check if the client has persistent tokens enabled - ClientDetailsEntity clientDetails = clientDetailsEntityCacheManager.retrieve(clientId); - if (clientDetails.isPersistentTokensEnabled()) { - infoForm.setClientHavePersistentTokens(true); - } - - // If client details is ok, continue - String clientName = clientDetails.getClientName() == null ? "" : clientDetails.getClientName(); - String clientEmailRequestReason = clientDetails.getEmailAccessReason() == null ? "" : clientDetails.getEmailAccessReason(); - String clientDescription = clientDetails.getClientDescription() == null ? "" : clientDetails.getClientDescription(); - String memberName = ""; - - // If client type is null it means it is a public client - if (ClientType.PUBLIC_CLIENT.equals(clientDetails.getClientType())) { - memberName = PUBLIC_MEMBER_NAME; - } else if (!PojoUtil.isEmpty(clientDetails.getGroupProfileId())) { - Name name = recordNameManagerReadOnly.getRecordName(clientDetails.getGroupProfileId()); - if (name != null) { - memberName = name.getCreditName() != null ? name.getCreditName().getContent() : ""; - } - } - - // If the group name is empty, use the same as the client - // name, since it should be a SSO user - if (StringUtils.isBlank(memberName)) { - memberName = clientName; - } - infoForm.setClientId(clientId); - infoForm.setClientDescription(clientDescription); - infoForm.setClientName(clientName); - infoForm.setClientEmailRequestReason(clientEmailRequestReason); - infoForm.setMemberName(memberName); - } else { - throw new OauthInvalidRequestException("Please specify a client id"); - } - - Matcher orcidMatcher = orcidPattern.matcher(requestUrl); - boolean userIdSet = false; - if (orcidMatcher.find()) { - String orcid = orcidMatcher.group(2); - try { - orcid = OrcidStringUtils.stripHtml(URLDecoder.decode(orcid, "UTF-8").trim()); - } catch (UnsupportedEncodingException e) { - } - if (!PojoUtil.isEmpty(orcid) && profileEntityManager.orcidExists(orcid)) { - infoForm.setUserId(orcid); - userIdSet = true; - } - } - - Matcher emailMatcher = RegistrationController.emailPattern.matcher(requestUrl); - if (emailMatcher.find()) { - String email = emailMatcher.group(1); - if (email != null && email.contains("%20")) { - email = email.replace("%20", "%2B"); - } - - email = OrcidStringUtils.stripHtml(URLDecoder.decode(email, StandardCharsets.UTF_8).trim()); - - if (!userIdSet && !PojoUtil.isEmpty(email)) { - email = OrcidStringUtils.filterEmailAddress(email); - if (emailManager.emailExists(email)) { - infoForm.setUserId(email); - } - } - infoForm.setUserEmail(email); - } - - Matcher scopeMatcher = scopesPattern.matcher(requestUrl); - if (scopeMatcher.find()) { - String scopes = scopeMatcher.group(1); - String scopesString = URLDecoder.decode(scopes, "UTF-8").trim(); - // Replace any number of spaces or a plus (+) sign with a single space - scopesString = scopesString.replaceAll("( |\\+)+", " "); - if(scopesString == null || scopesString.isBlank()) { - throw new OauthInvalidRequestException("Please specify the desired scopes"); - } - for (ScopePathType theScope : ScopePathType.getScopesFromSpaceSeparatedString(scopesString)) { - ScopeInfoForm scopeInfoForm = new ScopeInfoForm(); - scopeInfoForm.setValue(theScope.value()); - scopeInfoForm.setName(theScope.name()); - try { - scopeInfoForm.setDescription(getMessage(ScopePathType.class.getName() + '.' + theScope.name())); - scopeInfoForm.setLongDescription(getMessage(ScopePathType.class.getName() + '.' + theScope.name() + ".longDesc")); - } catch (NoSuchMessageException e) { - LOGGER.warn("Unable to find key message for scope: " + theScope.name() + " " + theScope.value()); - } - infoForm.getScopes().add(scopeInfoForm); - } - } else { - throw new OauthInvalidRequestException("Please specify the desired scopes"); - } - - Matcher redirectUriMatcher = redirectUriPattern.matcher(requestUrl); - if (redirectUriMatcher.find()) { - try { - infoForm.setRedirectUrl(OrcidStringUtils.stripHtml(URLDecoder.decode(redirectUriMatcher.group(1), "UTF-8").trim())); - } catch (UnsupportedEncodingException e) { - throw new OauthInvalidRequestException("Invalid redirect URL"); - } - } else { - throw new OauthInvalidRequestException("Please specify a redirect URL"); - } - - Matcher stateParamMatcher = stateParamPattern.matcher(requestUrl); - if (stateParamMatcher.find()) { - try { - infoForm.setStateParam(OrcidStringUtils.stripHtml(URLDecoder.decode(stateParamMatcher.group(1), "UTF-8").trim())); - } catch (UnsupportedEncodingException e) { - - } - } - - Matcher responseTypeMatcher = responseTypePattern.matcher(requestUrl); - if (responseTypeMatcher.find()) { - try { - infoForm.setResponseType(OrcidStringUtils.stripHtml(URLDecoder.decode(responseTypeMatcher.group(1), "UTF-8").trim())); - } catch (UnsupportedEncodingException e) { - throw new OauthInvalidRequestException("Invalid response type"); - } - } else { - throw new OauthInvalidRequestException("Please specify a response type"); - } - - Matcher givenNamesMatcher = RegistrationController.givenNamesPattern.matcher(requestUrl); - if (givenNamesMatcher.find()) { - infoForm.setUserGivenNames(OrcidStringUtils.stripHtml(URLDecoder.decode(givenNamesMatcher.group(1), "UTF-8").trim())); - } - - Matcher familyNamesMatcher = RegistrationController.familyNamesPattern.matcher(requestUrl); - if (familyNamesMatcher.find()) { - infoForm.setUserFamilyNames(OrcidStringUtils.stripHtml(URLDecoder.decode(familyNamesMatcher.group(1), "UTF-8").trim())); - } - - Matcher nonceMatcher = noncePattern.matcher(requestUrl); - if (nonceMatcher.find()) { - infoForm.setNonce(OrcidStringUtils.stripHtml(URLDecoder.decode(nonceMatcher.group(1), "UTF-8").trim())); - } - - Matcher maxAgeMatcher = maxAgePattern.matcher(requestUrl); - if (maxAgeMatcher.find()) { - String maxAge = OrcidStringUtils.stripHtml(URLDecoder.decode(maxAgeMatcher.group(1), "UTF-8").trim()); - if(!PojoUtil.isEmpty(maxAge)) { - try { - Long.parseLong(maxAge); - } catch(NumberFormatException nfe) { - throw new InvalidRequestException("Invalid max_age param"); - } - } - infoForm.setMaxAge(maxAge); - } - } - - return infoForm; - } - - public void setUserName(RequestInfoForm requestInfoForm) throws UnsupportedEncodingException { - String loggedUserOrcid = getEffectiveUserOrcid(); - if (!PojoUtil.isEmpty(loggedUserOrcid)) { - requestInfoForm.setUserOrcid(loggedUserOrcid); - String creditName = recordNameManagerReadOnly.fetchDisplayableCreditName(loggedUserOrcid); - if (!PojoUtil.isEmpty(creditName)) { - requestInfoForm.setUserName(URLDecoder.decode(creditName, "UTF-8").trim()); - } - } - } - - private String getEffectiveUserOrcid() { - UserDetails currentUser = baseControllerUtil.getCurrentUser(SecurityContextHolder.getContext()); - if (currentUser == null) { - return null; - } - return currentUser.getUsername(); - } - - public String getMessage(String messageCode, Object... messageParams) { - return localeManager.resolveMessage(messageCode, messageParams); - } -} diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/exception/OauthInvalidRequestException.java b/orcid-web/src/main/java/org/orcid/frontend/web/exception/OauthInvalidRequestException.java deleted file mode 100644 index 678da54756d..00000000000 --- a/orcid-web/src/main/java/org/orcid/frontend/web/exception/OauthInvalidRequestException.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.orcid.frontend.web.exception; - -import org.orcid.pojo.ajaxForm.RequestInfoForm; -import org.springframework.security.oauth2.common.exceptions.InvalidRequestException; - -@SuppressWarnings("serial") -public class OauthInvalidRequestException extends InvalidRequestException { - - public OauthInvalidRequestException(final String msg) { - super(msg); - } - - public OauthInvalidRequestException(final String msg, final Throwable t) { - super(msg, t); - } - -} diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/filter/OAuthAuthorizeNotSignedInFilter.java b/orcid-web/src/main/java/org/orcid/frontend/web/filter/OAuthAuthorizeNotSignedInFilter.java deleted file mode 100644 index 10e6339cf2c..00000000000 --- a/orcid-web/src/main/java/org/orcid/frontend/web/filter/OAuthAuthorizeNotSignedInFilter.java +++ /dev/null @@ -1,87 +0,0 @@ -package org.orcid.frontend.web.filter; - -import java.io.IOException; - -import javax.annotation.Resource; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - -import org.orcid.core.constants.OrcidOauth2Constants; -import org.orcid.core.manager.impl.OrcidUrlManager; -import org.orcid.frontend.util.RequestInfoFormLocalCache; -import org.orcid.frontend.web.controllers.BaseControllerUtil; -import org.orcid.frontend.web.controllers.helper.OauthHelper; -import org.orcid.pojo.ajaxForm.RequestInfoForm; -import org.springframework.security.core.context.SecurityContext; -import org.springframework.security.web.savedrequest.HttpSessionRequestCache; - -/** - * - * @author rcpeters - * - */ -public class OAuthAuthorizeNotSignedInFilter implements Filter { - - private BaseControllerUtil baseControllerUtil = new BaseControllerUtil(); - - @Resource - private OrcidUrlManager orcidUrlManager; - - @Resource - private OauthHelper oauthHelper; - - @Resource - private RequestInfoFormLocalCache requestInfoFormLocalCache; - - @Override - public void destroy() { - // Do nothing - } - - public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { - HttpServletRequest request = (HttpServletRequest) req; - if (OrcidUrlManager.getPathWithoutContextPath(request).equals("/oauth/authorize")) { - HttpServletResponse response = (HttpServletResponse) res; - HttpSession session = request.getSession(); - String queryString = request.getQueryString(); - boolean forceLogin = false; - - if (OrcidOauth2Constants.PROMPT_LOGIN.equals(request.getParameter(OrcidOauth2Constants.PROMPT))) { - //remove prompt param later on to prevent loop - forceLogin = true; - } - - //users not logged in must sign in - SecurityContext sci = null; - if (session != null) - sci = (SecurityContext)session.getAttribute("SPRING_SECURITY_CONTEXT"); - if (forceLogin || baseControllerUtil.getCurrentUser(sci) == null) { - if (session != null) { - new HttpSessionRequestCache().saveRequest(request, response); - RequestInfoForm rif = oauthHelper.generateRequestInfoForm(request.getQueryString()); - - // Store the request info form in the cache - requestInfoFormLocalCache.put(request.getSession().getId(), rif); - - request.getSession().setAttribute(OrcidOauth2Constants.OAUTH_QUERY_STRING, queryString); - } - response.sendRedirect(orcidUrlManager.getBaseUrl() + "/signin?oauth&" + queryString); - return; - } - } - chain.doFilter(req, res); - } - - @Override - public void init(FilterConfig arg0) throws ServletException { - // Do nothing - } - -} diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/util/ThirdPartyLinkManager.java b/orcid-web/src/main/java/org/orcid/frontend/web/util/ThirdPartyLinkManager.java index 6e18c6715f2..c62e52ce608 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/util/ThirdPartyLinkManager.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/util/ThirdPartyLinkManager.java @@ -7,8 +7,8 @@ import javax.annotation.Resource; import org.orcid.core.locale.LocaleManager; -import org.orcid.core.oauth.OrcidOauth2TokenDetailService; import org.orcid.core.manager.ClientDetailsEntityCacheManager; +import org.orcid.core.manager.v3.read_only.ClientDetailsManagerReadOnly; import org.orcid.core.utils.JsonUtils; import org.orcid.core.utils.cache.redis.RedisClient; import org.orcid.jaxb.model.clientgroup.RedirectUriType; @@ -42,12 +42,12 @@ public class ThirdPartyLinkManager implements InitializingBean { @Resource private LocaleManager localeManager; - @Resource - private OrcidOauth2TokenDetailService orcidOauth2TokenDetailService; - @Resource private RedisClient redisClient; + @Resource(name = "clientDetailsManagerReadOnlyV3") + private ClientDetailsManagerReadOnly clientDetailsManagerReadOnly; + @Value("${org.orcid.core.utils.cache.redis.works-search-and-link-wizard.ttl:3600}") private int worksSearchAndLinkWizardCacheTtl; @@ -105,7 +105,7 @@ public List findSearchAndLinkWizardClients(Strin List list = getWorksSearchAndLinkWizardBaseList(); for (SearchAndLinkWizardFormSummary form : list) { form.setConnected(StringUtils.isNotBlank(currentUserOrcid) - && orcidOauth2TokenDetailService.doesClientKnowUser(form.getId(), currentUserOrcid)); + && clientDetailsManagerReadOnly.doesClientKnowUser(form.getId(), currentUserOrcid)); } return list; } diff --git a/orcid-web/src/main/resources/orcid-frontend-security.xml b/orcid-web/src/main/resources/orcid-frontend-security.xml index 03e0d92d914..e469dae90c9 100644 --- a/orcid-web/src/main/resources/orcid-frontend-security.xml +++ b/orcid-web/src/main/resources/orcid-frontend-security.xml @@ -2,11 +2,9 @@ + http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> @@ -189,48 +187,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/PublicProfileControllerTest.java b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/PublicProfileControllerTest.java index a95abc2f5cc..3a4f673aae3 100644 --- a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/PublicProfileControllerTest.java +++ b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/PublicProfileControllerTest.java @@ -30,7 +30,6 @@ import org.orcid.core.manager.EncryptionManager; import org.orcid.core.manager.ProfileEntityCacheManager; import org.orcid.core.manager.v3.read_only.ProfileEntityManagerReadOnly; -import org.orcid.core.oauth.OrcidOauth2TokenDetailService; import org.orcid.jaxb.model.common.Iso3166Country; import org.orcid.jaxb.model.v3.release.common.Visibility; import org.orcid.jaxb.model.v3.release.record.Address; @@ -102,9 +101,6 @@ public class PublicProfileControllerTest extends DBUnitTest { @Mock private ProfileEntityCacheManager profileEntityCacheManagerMock; - @Mock - private OrcidOauth2TokenDetailService orcidOauth2TokenServiceMock; - @Mock private ProfileEntityManagerReadOnly profileEntityManagerReadOnlyMock; @@ -393,7 +389,6 @@ public void getUserInfoTest() { private void setupUserInfoMocks() { SourceEntity sourceEntity = new SourceEntity(new ClientDetailsEntity("APP-000000000001")); - TargetProxyHelper.injectIntoProxy(publicProfileController, "orcidOauth2TokenService", orcidOauth2TokenServiceMock); TargetProxyHelper.injectIntoProxy(publicProfileController, "profileEntityCacheManager", profileEntityCacheManagerMock); TargetProxyHelper.injectIntoProxy(publicProfileController, "profileEntityManagerReadOnly", profileEntityManagerReadOnlyMock); @@ -407,7 +402,7 @@ private void setupUserInfoMocks() { reviewedNoIntegrations.setRecordLocked(false); reviewedNoIntegrations.setReviewed(true); - when(orcidOauth2TokenServiceMock.hasToken(eq(reviewedNoIntegrationsOrcid), anyLong())).thenReturn(false); + when(profileEntityManagerReadOnlyMock.hasToken(eq(reviewedNoIntegrationsOrcid), anyLong())).thenReturn(false); when(profileEntityCacheManagerMock.retrieve(reviewedNoIntegrationsOrcid)).thenReturn(reviewedNoIntegrations); // Reviewed record with integrations @@ -415,7 +410,7 @@ private void setupUserInfoMocks() { reviewedWithIntegrations.setRecordLocked(false); reviewedWithIntegrations.setReviewed(true); - when(orcidOauth2TokenServiceMock.hasToken(eq(reviewedWithIntegrationsOrcid), anyLong())).thenReturn(true); + when(profileEntityManagerReadOnlyMock.hasToken(eq(reviewedWithIntegrationsOrcid), anyLong())).thenReturn(true); when(profileEntityCacheManagerMock.retrieve(reviewedWithIntegrationsOrcid)).thenReturn(reviewedWithIntegrations); // Un-reviewed record with no integrations @@ -423,7 +418,7 @@ private void setupUserInfoMocks() { unreviewedNoIntegrations.setRecordLocked(false); unreviewedNoIntegrations.setReviewed(false); - when(orcidOauth2TokenServiceMock.hasToken(eq(unreviewedNoIntegrationsOrcid), anyLong())).thenReturn(false); + when(profileEntityManagerReadOnlyMock.hasToken(eq(unreviewedNoIntegrationsOrcid), anyLong())).thenReturn(false); when(profileEntityCacheManagerMock.retrieve(unreviewedNoIntegrationsOrcid)).thenReturn(unreviewedNoIntegrations); // Un-reviewed record with integrations @@ -431,7 +426,7 @@ private void setupUserInfoMocks() { unreviewedWithIntegrations.setRecordLocked(false); unreviewedWithIntegrations.setReviewed(false); - when(orcidOauth2TokenServiceMock.hasToken(eq(unreviewedWithIntegrationsOrcid), anyLong())).thenReturn(true); + when(profileEntityManagerReadOnlyMock.hasToken(eq(unreviewedWithIntegrationsOrcid), anyLong())).thenReturn(true); when(profileEntityCacheManagerMock.retrieve(unreviewedWithIntegrationsOrcid)).thenReturn(unreviewedWithIntegrations); // Un reviewed record, created by member, with no integrations and no activities @@ -440,7 +435,7 @@ private void setupUserInfoMocks() { unreviewedWithIntegrations.setRecordLocked(false); unreviewedWithIntegrations.setReviewed(false); - when(orcidOauth2TokenServiceMock.hasToken(eq(unreviewedCreatedByMembersWithNoActivitiesOrcid), anyLong())).thenReturn(false); + when(profileEntityManagerReadOnlyMock.hasToken(eq(unreviewedCreatedByMembersWithNoActivitiesOrcid), anyLong())).thenReturn(false); when(profileEntityCacheManagerMock.retrieve(eq(unreviewedCreatedByMembersWithNoActivitiesOrcid))).thenReturn(unreviewedCreatedByMembersWithNoActivities); @@ -450,7 +445,7 @@ private void setupUserInfoMocks() { unreviewedWithIntegrations.setRecordLocked(false); unreviewedWithIntegrations.setReviewed(false); - when(orcidOauth2TokenServiceMock.hasToken(eq(unreviewedCreatedByMembersWithActivitiesOrcid), anyLong())).thenReturn(false); + when(profileEntityManagerReadOnlyMock.hasToken(eq(unreviewedCreatedByMembersWithActivitiesOrcid), anyLong())).thenReturn(false); when(profileEntityCacheManagerMock.retrieve(eq(unreviewedCreatedByMembersWithActivitiesOrcid))).thenReturn(unreviewedCreatedByMembersWithActivities); // Deprecated @@ -459,7 +454,7 @@ private void setupUserInfoMocks() { deprecated.setReviewed(true); deprecated.setPrimaryRecord(new ProfileEntity(primaryRecord)); - when(orcidOauth2TokenServiceMock.hasToken(eq(deprecatedUserOrcid), anyLong())).thenReturn(true); + when(profileEntityManagerReadOnlyMock.hasToken(eq(deprecatedUserOrcid), anyLong())).thenReturn(true); when(profileEntityCacheManagerMock.retrieve(deprecatedUserOrcid)).thenReturn(deprecated); // Locked @@ -467,7 +462,7 @@ private void setupUserInfoMocks() { locked.setRecordLocked(true); locked.setReviewed(true); - when(orcidOauth2TokenServiceMock.hasToken(eq(lockedUserOrcid), anyLong())).thenReturn(true); + when(profileEntityManagerReadOnlyMock.hasToken(eq(lockedUserOrcid), anyLong())).thenReturn(true); when(profileEntityCacheManagerMock.retrieve(lockedUserOrcid)).thenReturn(locked); @@ -476,7 +471,7 @@ private void setupUserInfoMocks() { allOk.setRecordLocked(false); allOk.setReviewed(true); - when(orcidOauth2TokenServiceMock.hasToken(eq(userOrcid), anyLong())).thenReturn(true); + when(profileEntityManagerReadOnlyMock.hasToken(eq(userOrcid), anyLong())).thenReturn(true); when(profileEntityCacheManagerMock.retrieve(userOrcid)).thenReturn(allOk); } } diff --git a/orcid-web/src/test/java/org/orcid/frontend/web/filter/OAuthAuthorizeNotSignedInFilterTest.java b/orcid-web/src/test/java/org/orcid/frontend/web/filter/OAuthAuthorizeNotSignedInFilterTest.java deleted file mode 100644 index 6f6b81154c2..00000000000 --- a/orcid-web/src/test/java/org/orcid/frontend/web/filter/OAuthAuthorizeNotSignedInFilterTest.java +++ /dev/null @@ -1,185 +0,0 @@ -package org.orcid.frontend.web.filter; - -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -import java.io.IOException; -import java.util.HashMap; -import java.util.List; -import java.util.Locale; -import java.util.Vector; - -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - -import org.junit.Before; -import org.junit.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Mockito; -import org.mockito.MockitoAnnotations; -import org.orcid.core.constants.OrcidOauth2Constants; -import org.orcid.core.manager.impl.OrcidUrlManager; -import org.orcid.frontend.util.RequestInfoFormLocalCache; -import org.orcid.frontend.web.controllers.helper.OauthHelper; -import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; -import org.springframework.security.core.context.SecurityContext; -import org.springframework.security.core.userdetails.User; -import org.springframework.security.core.userdetails.UserDetails; - -public class OAuthAuthorizeNotSignedInFilterTest { - - @InjectMocks - OAuthAuthorizeNotSignedInFilter oaFilter; - - @Mock - OrcidUrlManager orcidUrlManager; - - @Mock - HttpServletRequest request; - - @Mock - HttpServletResponse response; - - @Mock - HttpSession session; - - @Mock - FilterChain chain; - - @Mock - SecurityContext context; - - @Mock - UsernamePasswordAuthenticationToken usernamePasswordAuthenticationToken; - - @Mock - UserDetails orcidProfileUserDetails; - - @Mock - OauthHelper oauthHelper; - - @Mock - RequestInfoFormLocalCache requestInfoFormLocalCache; - - @Before - public void setup() { - MockitoAnnotations.initMocks(this); - when(orcidUrlManager.getBaseUrl()).thenReturn("http://test.com"); - when(request.getHeaderNames()).thenReturn(new Vector().elements()); - when(request.getLocales()).thenReturn(new Vector().elements()); - when(request.getParameterMap()).thenReturn(new HashMap()); - when(request.getScheme()).thenReturn("i hate you with all my heart spring mvc"); - when(request.getRequestURL()).thenReturn(new StringBuffer("really, we should break up")); - when(session.getId()).thenReturn("ID1"); - } - - @Test - public void nullSession() throws IOException, ServletException { - when(request.getContextPath()).thenReturn("http://test.com"); - when(request.getRequestURI()).thenReturn("http://test.com/oauth/authorize"); - when(request.getQueryString()).thenReturn("test_param=param"); - when(request.getSession(false)).thenReturn(null); - - oaFilter.doFilter((ServletRequest) request, (ServletResponse) response, chain); - - verify(response).sendRedirect("http://test.com/signin?oauth&test_param=param"); - verify(chain, never()).doFilter(Mockito.any(), Mockito.any()); - } - - @Test - public void noSecurityContext() throws IOException, ServletException { - when(request.getContextPath()).thenReturn("http://test.com"); - when(request.getRequestURI()).thenReturn("http://test.com/oauth/authorize"); - when(request.getQueryString()).thenReturn("test_param=param"); - when(request.getSession()).thenReturn(session); - when(request.getSession(false)).thenReturn(session); - - oaFilter.doFilter((ServletRequest) request, (ServletResponse) response, chain); - - verify(response).sendRedirect("http://test.com/signin?oauth&test_param=param"); - verify(chain, never()).doFilter(Mockito.any(), Mockito.any()); - } - - @Test - public void noAuthentication() throws IOException, ServletException { - when(request.getContextPath()).thenReturn("http://test.com"); - when(request.getRequestURI()).thenReturn("http://test.com/oauth/authorize"); - when(request.getQueryString()).thenReturn("test_param=param"); - when(request.getSession()).thenReturn(session); - when(request.getSession(false)).thenReturn(session); - when(session.getAttribute("SPRING_SECURITY_CONTEXT")).thenReturn(context); - - oaFilter.doFilter((ServletRequest) request, (ServletResponse) response, chain); - - verify(response).sendRedirect("http://test.com/signin?oauth&test_param=param"); - verify(chain, never()).doFilter(Mockito.any(), Mockito.any()); - } - - @Test - public void hasOrcidProfileUserDetails() throws IOException, ServletException { - when(request.getContextPath()).thenReturn("http://test.com"); - when(request.getRequestURI()).thenReturn("http://test.com/oauth/authorize"); - when(request.getQueryString()).thenReturn("test_param=param"); - when(request.getSession()).thenReturn(session); - when(request.getSession(false)).thenReturn(session); - when(session.getAttribute("SPRING_SECURITY_CONTEXT")).thenReturn(context); - when(context.getAuthentication()).thenReturn(usernamePasswordAuthenticationToken); - when(usernamePasswordAuthenticationToken.getName()).thenReturn("0000-0000-0000-0000"); - when(usernamePasswordAuthenticationToken.getCredentials()).thenReturn("password"); - - oaFilter.doFilter((ServletRequest) request, (ServletResponse) response, chain); - - verify(response, never()).sendRedirect(Mockito.anyString()); - verify(chain).doFilter(Mockito.any(), Mockito.any()); - } - - @Test - public void notUriOauthAuthorize() throws IOException, ServletException { - when(request.getContextPath()).thenReturn("http://test.com"); - when(request.getRequestURI()).thenReturn("http://test.com/signin?oauth"); - when(request.getQueryString()).thenReturn("test_param=param"); - when(request.getSession(false)).thenReturn(null); - - oaFilter.doFilter((ServletRequest) request, (ServletResponse) response, chain); - - verify(response, never()).sendRedirect(Mockito.anyString()); - verify(chain).doFilter(Mockito.any(), Mockito.any()); - } - - @Test - public void oauth2ScreensFeatureEnabledTest() throws IOException, ServletException { - when(request.getContextPath()).thenReturn("http://test.com"); - when(request.getRequestURI()).thenReturn("http://test.com/oauth/authorize"); - when(request.getQueryString()).thenReturn("test_param=param"); - when(request.getSession()).thenReturn(session); - when(request.getSession(false)).thenReturn(session); - when(session.getAttribute("SPRING_SECURITY_CONTEXT")).thenReturn(context); - - oaFilter.doFilter((ServletRequest) request, (ServletResponse) response, chain); - - verify(response).sendRedirect("http://test.com/signin?oauth&test_param=param"); - verify(chain, never()).doFilter(Mockito.any(), Mockito.any()); - } - - @Test - public void oauth2ScreensFeatureFlagUsedTest() throws IOException, ServletException { - when(request.getContextPath()).thenReturn("http://test.com"); - when(request.getRequestURI()).thenReturn("http://test.com/oauth/authorize"); - when(request.getQueryString()).thenReturn("test_param=param&" + OrcidOauth2Constants.OAUTH_2SCREENS); - when(request.getSession()).thenReturn(session); - when(request.getSession(false)).thenReturn(session); - when(session.getAttribute("SPRING_SECURITY_CONTEXT")).thenReturn(context); - - oaFilter.doFilter((ServletRequest) request, (ServletResponse) response, chain); - - verify(response).sendRedirect("http://test.com/signin?oauth&test_param=param&" + OrcidOauth2Constants.OAUTH_2SCREENS); - verify(chain, never()).doFilter(Mockito.any(), Mockito.any()); - } -} From bf574f2746569e5362cab3ef6cb57c52f944d2bc Mon Sep 17 00:00:00 2001 From: amontenegro Date: Thu, 26 Mar 2026 18:59:41 -0600 Subject: [PATCH 11/77] It is compiling! --- .../common/filter/TokenTargetFilterTest.java | 25 +- ...ClientCredentialEndPointDelegatorTest.java | 345 ------------------ .../core/utils/SecurityContextTestUtils.java | 19 +- .../src/main/resources/orcid-core-context.xml | 7 +- .../NamespacedRandomCodeGeneratorTest.java | 157 -------- .../api/filters/ApiRateLimitFilterTest.java | 25 -- .../resources/orcid-core-context-spam.xml | 7 +- .../frontend/email/RecordEmailSenderTest.java | 26 -- .../frontend/oauth2/RevokeControllerTest.java | 175 ++++----- .../OauthGenericCallsControllerTest.java | 73 ---- .../OauthRegistrationControllerTest.java | 135 ------- .../web/util/ThirdPartyLinkManagerTest.java | 16 +- 12 files changed, 94 insertions(+), 916 deletions(-) delete mode 100644 orcid-api-common/src/test/java/org/orcid/api/common/oauth/OrcidClientCredentialEndPointDelegatorTest.java rename orcid-core/src/{test => main}/java/org/orcid/core/utils/SecurityContextTestUtils.java (83%) delete mode 100644 orcid-core/src/test/java/org/orcid/core/oauth/service/NamespacedRandomCodeGeneratorTest.java delete mode 100644 orcid-web/src/test/java/org/orcid/frontend/web/controllers/OauthGenericCallsControllerTest.java delete mode 100644 orcid-web/src/test/java/org/orcid/frontend/web/controllers/OauthRegistrationControllerTest.java diff --git a/orcid-api-common/src/test/java/org/orcid/api/common/filter/TokenTargetFilterTest.java b/orcid-api-common/src/test/java/org/orcid/api/common/filter/TokenTargetFilterTest.java index 99d936597c8..1b8d45508f0 100644 --- a/orcid-api-common/src/test/java/org/orcid/api/common/filter/TokenTargetFilterTest.java +++ b/orcid-api-common/src/test/java/org/orcid/api/common/filter/TokenTargetFilterTest.java @@ -15,16 +15,14 @@ import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; -import org.orcid.api.common.filter.TokenTargetFilter; import org.orcid.core.exception.OrcidUnauthorizedException; -import org.orcid.core.oauth.OrcidOAuth2Authentication; +import org.orcid.core.oauth.OrcidBearerTokenAuthentication; import org.orcid.jaxb.model.message.ScopePathType; import org.orcid.persistence.jpa.entities.ProfileEntity; import org.springframework.security.core.Authentication; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.context.SecurityContextImpl; -import org.springframework.security.oauth2.provider.OAuth2Request; import org.springframework.web.context.request.RequestAttributes; import org.springframework.web.context.request.RequestContextHolder; import org.glassfish.jersey.server.ContainerRequest; @@ -104,29 +102,16 @@ public void readPublicTokenTest() { private void setUpSecurityContext(String userOrcid, String clientId, ScopePathType... scopePathTypes) { SecurityContextImpl securityContext = new SecurityContextImpl(); - OrcidOAuth2Authentication mockedAuthentication = mock(OrcidOAuth2Authentication.class); + OrcidBearerTokenAuthentication mockedAuthentication = mock(OrcidBearerTokenAuthentication.class); securityContext.setAuthentication(mockedAuthentication); SecurityContextHolder.setContext(securityContext); if(userOrcid != null) { - ProfileEntity userProfileEntity = new ProfileEntity(userOrcid); - when(mockedAuthentication.getPrincipal()).thenReturn(userProfileEntity); - Authentication userAuthentication = mock(Authentication.class); - when(userAuthentication.getPrincipal()).thenReturn(userProfileEntity); - when(mockedAuthentication.getUserAuthentication()).thenReturn(userAuthentication); + when(mockedAuthentication.getPrincipal()).thenReturn(clientId); + when(mockedAuthentication.getUserOrcid()).thenReturn(userOrcid); } else { when(mockedAuthentication.getPrincipal()).thenReturn(clientId); } - - Set scopes = new HashSet(); - if (scopePathTypes != null) { - for (ScopePathType scopePathType : scopePathTypes) { - scopes.add(scopePathType.value()); - } - } - OAuth2Request authorizationRequest = new OAuth2Request(Collections. emptyMap(), clientId, - Collections. emptyList(), true, scopes, Collections. emptySet(), null, Collections. emptySet(), - Collections. emptyMap()); - when(mockedAuthentication.getOAuth2Request()).thenReturn(authorizationRequest); + when(mockedAuthentication.isAuthenticated()).thenReturn(true); } } diff --git a/orcid-api-common/src/test/java/org/orcid/api/common/oauth/OrcidClientCredentialEndPointDelegatorTest.java b/orcid-api-common/src/test/java/org/orcid/api/common/oauth/OrcidClientCredentialEndPointDelegatorTest.java deleted file mode 100644 index 2598c1ad043..00000000000 --- a/orcid-api-common/src/test/java/org/orcid/api/common/oauth/OrcidClientCredentialEndPointDelegatorTest.java +++ /dev/null @@ -1,345 +0,0 @@ -package org.orcid.api.common.oauth; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; - -import java.util.Arrays; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; - -import javax.annotation.Resource; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.core.Response; - -import org.junit.After; -import org.junit.AfterClass; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.Mockito; -import org.mockito.MockitoAnnotations; -import org.orcid.core.constants.OrcidOauth2Constants; -import org.orcid.core.oauth.openid.OpenIDConnectKeyService; -import org.orcid.core.utils.JsonUtils; -import org.orcid.core.utils.SecurityContextTestUtils; -import org.orcid.core.utils.cache.redis.RedisClient; -import org.orcid.jaxb.model.message.ScopePathType; -import org.orcid.persistence.dao.OrcidOauth2AuthoriziationCodeDetailDao; -import org.orcid.persistence.dao.ProfileLastModifiedDao; -import org.orcid.persistence.jpa.entities.ClientDetailsEntity; -import org.orcid.persistence.jpa.entities.IndexingStatus; -import org.orcid.persistence.jpa.entities.OrcidOauth2AuthoriziationCodeDetail; -import org.orcid.persistence.jpa.entities.ProfileEntity; -import org.orcid.pojo.ajaxForm.PojoUtil; -import org.orcid.test.DBUnitTest; -import org.orcid.test.OrcidJUnit4ClassRunner; -import org.orcid.test.TargetProxyHelper; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.oauth2.common.DefaultOAuth2AccessToken; -import org.springframework.security.oauth2.common.exceptions.InvalidScopeException; -import org.springframework.security.oauth2.common.exceptions.InvalidTokenException; -import org.springframework.test.context.ContextConfiguration; - - -import javax.ws.rs.core.MultivaluedHashMap; - -@RunWith(OrcidJUnit4ClassRunner.class) -@ContextConfiguration(locations = { "classpath:test-orcid-api-common-context.xml"}) -public class OrcidClientCredentialEndPointDelegatorTest extends DBUnitTest { - - private static final String CLIENT_ID_1 = "APP-5555555555555555"; - private static final String USER_ORCID = "0000-0000-0000-0001"; - - @Resource - private OrcidOauth2AuthoriziationCodeDetailDao orcidOauth2AuthoriziationCodeDetailDao; - - @Resource - private OrcidClientCredentialEndPointDelegator orcidClientCredentialEndPointDelegator; - - @Resource - private OpenIDConnectKeyService keyManager; - - @Mock - private ProfileLastModifiedDao profileLastModifiedDaoMock; - - @Mock - private RedisClient redisClientMock; - - @Resource - private ProfileLastModifiedDao profileLastModifiedDao; - - @BeforeClass - public static void initDBUnitData() throws Exception { - initDBUnitData( - Arrays.asList("/data/SubjectEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/RecordNameEntityData.xml")); - } - - @Before - public void before() { - MockitoAnnotations.initMocks(this); - TargetProxyHelper.injectIntoProxy(orcidClientCredentialEndPointDelegator, "profileLastModifiedDao", profileLastModifiedDaoMock); - TargetProxyHelper.injectIntoProxy(orcidClientCredentialEndPointDelegator, "redisClient", redisClientMock); - // Keep the cache disabled - orcidClientCredentialEndPointDelegator.setTokenCacheEnabled(false); - } - - @AfterClass - public static void removeDBUnitData() throws Exception { - removeDBUnitData( - Arrays.asList("/data/RecordNameEntityData.xml", "/data/ProfileEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/SubjectEntityData.xml")); - } - - @After - public void after() { - SecurityContextHolder.clearContext(); - TargetProxyHelper.injectIntoProxy(orcidClientCredentialEndPointDelegator, "profileLastModifiedDao", profileLastModifiedDao); - } - - private OrcidOauth2AuthoriziationCodeDetail createAuthorizationCode(String value, String clientId, String redirectUri, boolean persistent, String... scopes) { - OrcidOauth2AuthoriziationCodeDetail authorizationCode = new OrcidOauth2AuthoriziationCodeDetail(); - authorizationCode.setId(value); - authorizationCode.setApproved(true); - authorizationCode.setScopes(new HashSet(Arrays.asList(scopes))); - authorizationCode.setClientDetailsEntity(new ClientDetailsEntity(clientId)); - authorizationCode.setPersistent(persistent); - authorizationCode.setOrcid(USER_ORCID); - authorizationCode.setRedirectUri(redirectUri); - authorizationCode.setResourceIds(new HashSet(Arrays.asList("orcid"))); - authorizationCode.setAuthenticated(true); - orcidOauth2AuthoriziationCodeDetailDao.persist(authorizationCode); - return authorizationCode; - } - - @Test - public void generateAccessTokenTest() { - SecurityContextTestUtils.setUpSecurityContextForClientOnly(CLIENT_ID_1, ScopePathType.ACTIVITIES_UPDATE, ScopePathType.READ_LIMITED); - OrcidOauth2AuthoriziationCodeDetail authCode = createAuthorizationCode("code-1", CLIENT_ID_1, "http://www.APP-5555555555555555.com/redirect/oauth", true, - "/activities/update"); - MultivaluedMap formParams = new MultivaluedHashMap(); - formParams.add("client_id", CLIENT_ID_1); - formParams.add("client_secret", "DhkFj5EI0qp6GsUKi55Vja+h+bsaKpBx"); - formParams.add("grant_type", "authorization_code"); - formParams.add("redirect_uri", "http://www.APP-5555555555555555.com/redirect/oauth"); - formParams.add("code", authCode.getId()); - Response response = orcidClientCredentialEndPointDelegator.obtainOauth2Token(null, formParams); - assertNotNull(response); - assertNotNull(response.getEntity()); - DefaultOAuth2AccessToken token = (DefaultOAuth2AccessToken) response.getEntity(); - assertNotNull(token); - assertTrue(!PojoUtil.isEmpty(token.getValue())); - assertNotNull(token.getRefreshToken()); - assertTrue(!PojoUtil.isEmpty(token.getRefreshToken().getValue())); - verify(profileLastModifiedDaoMock, times(1)).updateIndexingStatus(Mockito.any(), Mockito.any()); - } - - @Test - public void generateClientCredentialsAccessTokenTest() { - SecurityContextTestUtils.setUpSecurityContextForClientOnly(CLIENT_ID_1, ScopePathType.ACTIVITIES_UPDATE, ScopePathType.READ_LIMITED); - MultivaluedMap formParams = new MultivaluedHashMap(); - formParams.add("client_id", CLIENT_ID_1); - formParams.add("client_secret", "DhkFj5EI0qp6GsUKi55Vja+h+bsaKpBx"); - formParams.add("grant_type", "client_credentials"); - formParams.add("redirect_uri", "http://www.APP-5555555555555555.com/redirect/oauth"); - formParams.add("scope", "/orcid-profile/create"); - Response response = orcidClientCredentialEndPointDelegator.obtainOauth2Token(null, formParams); - assertNotNull(response); - assertNotNull(response.getEntity()); - DefaultOAuth2AccessToken token = (DefaultOAuth2AccessToken) response.getEntity(); - assertNotNull(token); - assertTrue(!PojoUtil.isEmpty(token.getValue())); - assertNotNull(token.getRefreshToken()); - assertTrue(!PojoUtil.isEmpty(token.getRefreshToken().getValue())); - - verify(profileLastModifiedDaoMock, times(0)).updateIndexingStatus(Arrays.asList(USER_ORCID), IndexingStatus.PENDING); - } - - @Test(expected = InvalidScopeException.class) - public void generateClientCredentialsAccessTokenWithInvalidTokenTest() { - SecurityContextTestUtils.setUpSecurityContextForClientOnly(CLIENT_ID_1, ScopePathType.ACTIVITIES_UPDATE); - MultivaluedMap formParams = new MultivaluedHashMap(); - formParams.add("client_id", CLIENT_ID_1); - formParams.add("client_secret", "DhkFj5EI0qp6GsUKi55Vja+h+bsaKpBx"); - formParams.add("grant_type", "client_credentials"); - formParams.add("redirect_uri", "http://www.APP-5555555555555555.com/redirect/oauth"); - formParams.add("scope", "/activities/update"); - orcidClientCredentialEndPointDelegator.obtainOauth2Token(null, formParams); - fail(); - } - - @Test - public void generateRefreshTokenTest() { - // Generate the access token - SecurityContextTestUtils.setUpSecurityContextForClientOnly(CLIENT_ID_1, ScopePathType.ACTIVITIES_UPDATE, ScopePathType.READ_LIMITED); - OrcidOauth2AuthoriziationCodeDetail authCode = createAuthorizationCode("code-1", CLIENT_ID_1, "http://www.APP-5555555555555555.com/redirect/oauth", true, - "/activities/update"); - MultivaluedMap formParams = new MultivaluedHashMap(); - formParams.add("client_id", CLIENT_ID_1); - formParams.add("client_secret", "DhkFj5EI0qp6GsUKi55Vja+h+bsaKpBx"); - formParams.add("grant_type", "authorization_code"); - formParams.add("redirect_uri", "http://www.APP-5555555555555555.com/redirect/oauth"); - formParams.add("code", authCode.getId()); - Response response = orcidClientCredentialEndPointDelegator.obtainOauth2Token(null, formParams); - assertNotNull(response); - assertNotNull(response.getEntity()); - DefaultOAuth2AccessToken token = (DefaultOAuth2AccessToken) response.getEntity(); - assertNotNull(token); - assertTrue(!PojoUtil.isEmpty(token.getValue())); - assertNotNull(token.getRefreshToken()); - assertTrue(!PojoUtil.isEmpty(token.getRefreshToken().getValue())); - - // Generate the refresh token - MultivaluedMap refreshTokenformParams = new MultivaluedHashMap(); - refreshTokenformParams.add("client_id", CLIENT_ID_1); - refreshTokenformParams.add("client_secret", "DhkFj5EI0qp6GsUKi55Vja+h+bsaKpBx"); - refreshTokenformParams.add("grant_type", "refresh_token"); - refreshTokenformParams.add("redirect_uri", "http://www.APP-5555555555555555.com/redirect/oauth"); - refreshTokenformParams.add("refresh_token", token.getRefreshToken().getValue()); - String authorization = "bearer " + token.getValue(); - Response refreshTokenResponse = orcidClientCredentialEndPointDelegator.obtainOauth2Token(authorization, refreshTokenformParams); - assertNotNull(refreshTokenResponse); - assertNotNull(refreshTokenResponse.getEntity()); - DefaultOAuth2AccessToken refreshToken = (DefaultOAuth2AccessToken) refreshTokenResponse.getEntity(); - assertNotNull(refreshToken); - assertTrue(!PojoUtil.isEmpty(refreshToken.getValue())); - assertNotNull(refreshToken.getRefreshToken()); - assertTrue(!PojoUtil.isEmpty(refreshToken.getRefreshToken().getValue())); - - // Assert that both tokens expires at the same time - assertEquals(token.getExpiration(), refreshToken.getExpiration()); - - // Try to generate another one, and fail, because parent token was - // disabled - try { - orcidClientCredentialEndPointDelegator.obtainOauth2Token(authorization, refreshTokenformParams); - } catch (InvalidTokenException e) { - assertTrue(e.getMessage().contains("Parent token is disabled")); - } - } - - @Test - public void generateRefreshTokenThatExpireAfterParentTokenTest() { - // Generate the access token - SecurityContextTestUtils.setUpSecurityContextForClientOnly(CLIENT_ID_1, ScopePathType.ACTIVITIES_UPDATE, ScopePathType.READ_LIMITED); - OrcidOauth2AuthoriziationCodeDetail authCode = createAuthorizationCode("code-1", CLIENT_ID_1, "http://www.APP-5555555555555555.com/redirect/oauth", false, - "/activities/update"); - MultivaluedMap formParams = new MultivaluedHashMap(); - formParams.add("client_id", CLIENT_ID_1); - formParams.add("client_secret", "DhkFj5EI0qp6GsUKi55Vja+h+bsaKpBx"); - formParams.add("grant_type", "authorization_code"); - formParams.add("redirect_uri", "http://www.APP-5555555555555555.com/redirect/oauth"); - formParams.add("code", authCode.getId()); - Response response = orcidClientCredentialEndPointDelegator.obtainOauth2Token(null, formParams); - assertNotNull(response); - assertNotNull(response.getEntity()); - DefaultOAuth2AccessToken token = (DefaultOAuth2AccessToken) response.getEntity(); - assertNotNull(token); - assertTrue(!PojoUtil.isEmpty(token.getValue())); - assertNotNull(token.getRefreshToken()); - assertTrue(!PojoUtil.isEmpty(token.getRefreshToken().getValue())); - - // Generate the refresh token that expires after parent token - MultivaluedMap refreshTokenformParams = new MultivaluedHashMap(); - refreshTokenformParams.add("client_id", CLIENT_ID_1); - refreshTokenformParams.add("client_secret", "DhkFj5EI0qp6GsUKi55Vja+h+bsaKpBx"); - refreshTokenformParams.add("grant_type", "refresh_token"); - refreshTokenformParams.add("redirect_uri", "http://www.APP-5555555555555555.com/redirect/oauth"); - refreshTokenformParams.add("refresh_token", token.getRefreshToken().getValue()); - refreshTokenformParams.add("expires_in", String.valueOf(2 * 60 * 60)); - String authorization = "bearer " + token.getValue(); - try { - orcidClientCredentialEndPointDelegator.obtainOauth2Token(authorization, refreshTokenformParams); - } catch (IllegalArgumentException e) { - assertTrue(e.getMessage().contains("Token expiration can't be after")); - } - - // Try again with a valid expiration value - refreshTokenformParams = new MultivaluedHashMap(); - refreshTokenformParams.add("client_id", CLIENT_ID_1); - refreshTokenformParams.add("client_secret", "DhkFj5EI0qp6GsUKi55Vja+h+bsaKpBx"); - refreshTokenformParams.add("grant_type", "refresh_token"); - refreshTokenformParams.add("redirect_uri", "http://www.APP-5555555555555555.com/redirect/oauth"); - refreshTokenformParams.add("refresh_token", token.getRefreshToken().getValue()); - refreshTokenformParams.add("expires_in", String.valueOf(60 * 30)); - response = orcidClientCredentialEndPointDelegator.obtainOauth2Token(authorization, refreshTokenformParams); - assertNotNull(response); - assertNotNull(response.getEntity()); - DefaultOAuth2AccessToken refreshToken = (DefaultOAuth2AccessToken) response.getEntity(); - assertNotNull(refreshToken); - assertTrue(!PojoUtil.isEmpty(refreshToken.getValue())); - assertNotNull(refreshToken.getRefreshToken()); - assertTrue(!PojoUtil.isEmpty(refreshToken.getRefreshToken().getValue())); - - assertTrue(token.getExpiration().getTime() > refreshToken.getExpiration().getTime()); - } - - @Test - public void obtainOauth2TokenSetCacheTest() { - // Enable cache - orcidClientCredentialEndPointDelegator.setTokenCacheEnabled(true); - SecurityContextTestUtils.setUpSecurityContextForClientOnly(CLIENT_ID_1, ScopePathType.ACTIVITIES_UPDATE, ScopePathType.READ_LIMITED); - OrcidOauth2AuthoriziationCodeDetail authCode = createAuthorizationCode("code-1", CLIENT_ID_1, "http://www.APP-5555555555555555.com/redirect/oauth", true, - "/activities/update"); - MultivaluedMap formParams = new MultivaluedHashMap(); - formParams.add("client_id", CLIENT_ID_1); - formParams.add("client_secret", "DhkFj5EI0qp6GsUKi55Vja+h+bsaKpBx"); - formParams.add("grant_type", "authorization_code"); - formParams.add("redirect_uri", "http://www.APP-5555555555555555.com/redirect/oauth"); - formParams.add("code", authCode.getId()); - Response response = orcidClientCredentialEndPointDelegator.obtainOauth2Token(null, formParams); - assertNotNull(response); - assertNotNull(response.getEntity()); - DefaultOAuth2AccessToken token = (DefaultOAuth2AccessToken) response.getEntity(); - assertNotNull(token); - assertTrue(!PojoUtil.isEmpty(token.getValue())); - - String tokenValue = token.getValue(); - - - Map tokenData = new HashMap(); - tokenData.put(OrcidOauth2Constants.ACCESS_TOKEN, tokenValue); - tokenData.put(OrcidOauth2Constants.TOKEN_EXPIRATION_TIME, String.valueOf(token.getExpiration().getTime())); - StringBuilder sb = new StringBuilder(); - token.getScope().forEach(x -> {sb.append(x); sb.append(' ');}); - tokenData.put(OrcidOauth2Constants.SCOPE_PARAM, sb.toString()); - tokenData.put(OrcidOauth2Constants.ORCID, (String) token.getAdditionalInformation().get(OrcidOauth2Constants.ORCID)); - tokenData.put(OrcidOauth2Constants.CLIENT_ID, CLIENT_ID_1); - tokenData.put(OrcidOauth2Constants.RESOURCE_IDS, OrcidOauth2Constants.ORCID); - tokenData.put(OrcidOauth2Constants.APPROVED, Boolean.TRUE.toString()); - - String tokenDataString = JsonUtils.convertToJsonString(tokenData); - - verify(redisClientMock, times(1)).set(Mockito.eq(tokenValue), Mockito.eq(tokenDataString)); - } - - @Test - public void obtainOauth2TokenSkipCacheTest() { - // Ensure cache is disabled - orcidClientCredentialEndPointDelegator.setTokenCacheEnabled(false); - - SecurityContextTestUtils.setUpSecurityContextForClientOnly(CLIENT_ID_1, ScopePathType.ACTIVITIES_UPDATE, ScopePathType.READ_LIMITED); - OrcidOauth2AuthoriziationCodeDetail authCode = createAuthorizationCode("code-1", CLIENT_ID_1, "http://www.APP-5555555555555555.com/redirect/oauth", true, - "/activities/update"); - MultivaluedMap formParams = new MultivaluedHashMap(); - formParams.add("client_id", CLIENT_ID_1); - formParams.add("client_secret", "DhkFj5EI0qp6GsUKi55Vja+h+bsaKpBx"); - formParams.add("grant_type", "authorization_code"); - formParams.add("redirect_uri", "http://www.APP-5555555555555555.com/redirect/oauth"); - formParams.add("code", authCode.getId()); - Response response = orcidClientCredentialEndPointDelegator.obtainOauth2Token(null, formParams); - assertNotNull(response); - assertNotNull(response.getEntity()); - DefaultOAuth2AccessToken token = (DefaultOAuth2AccessToken) response.getEntity(); - assertNotNull(token); - assertTrue(!PojoUtil.isEmpty(token.getValue())); - - verify(redisClientMock, never()).set(Mockito.any(), Mockito.any()); - } -} \ No newline at end of file diff --git a/orcid-core/src/test/java/org/orcid/core/utils/SecurityContextTestUtils.java b/orcid-core/src/main/java/org/orcid/core/utils/SecurityContextTestUtils.java similarity index 83% rename from orcid-core/src/test/java/org/orcid/core/utils/SecurityContextTestUtils.java rename to orcid-core/src/main/java/org/orcid/core/utils/SecurityContextTestUtils.java index ef9150bf326..aa5dcee2078 100644 --- a/orcid-core/src/test/java/org/orcid/core/utils/SecurityContextTestUtils.java +++ b/orcid-core/src/main/java/org/orcid/core/utils/SecurityContextTestUtils.java @@ -3,15 +3,12 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -import java.io.Serializable; import java.util.*; import org.orcid.core.oauth.OrcidBearerTokenAuthentication; import org.orcid.jaxb.model.message.ScopePathType; -import org.orcid.persistence.jpa.entities.ProfileEntity; import org.springframework.security.authentication.AnonymousAuthenticationToken; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; -import org.springframework.security.core.Authentication; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.context.SecurityContextHolder; @@ -86,4 +83,20 @@ static public void setUpSecurityContextForAnonymous() { securityContext.setAuthentication(anonToken); SecurityContextHolder.setContext(securityContext); } + + static public void setupSecurityContextForWebUser(String userId, String email) { + UserDetails details = new User(userId, email, List.of()); + UsernamePasswordAuthenticationToken auth = new UsernamePasswordAuthenticationToken(userId, "password"); + auth.setDetails(details); + SecurityContextImpl securityContext = new SecurityContextImpl(); + securityContext.setAuthentication(auth); + SecurityContextHolder.setContext(securityContext); + } + + static public void setUpSecurityContextForGroupIdClientOnly() { + Set scopes = new HashSet(); + scopes.add(ScopePathType.GROUP_ID_RECORD_READ.value()); + scopes.add(ScopePathType.GROUP_ID_RECORD_UPDATE.value()); + setUpSecurityContextForClientOnly("APP-5555555555555555", scopes); + } } \ No newline at end of file diff --git a/orcid-core/src/main/resources/orcid-core-context.xml b/orcid-core/src/main/resources/orcid-core-context.xml index 0cf31a587f4..a4f9b1413d3 100644 --- a/orcid-core/src/main/resources/orcid-core-context.xml +++ b/orcid-core/src/main/resources/orcid-core-context.xml @@ -1108,12 +1108,7 @@ - - - - - - + diff --git a/orcid-core/src/test/java/org/orcid/core/oauth/service/NamespacedRandomCodeGeneratorTest.java b/orcid-core/src/test/java/org/orcid/core/oauth/service/NamespacedRandomCodeGeneratorTest.java deleted file mode 100644 index 7ed6c44d3a6..00000000000 --- a/orcid-core/src/test/java/org/orcid/core/oauth/service/NamespacedRandomCodeGeneratorTest.java +++ /dev/null @@ -1,157 +0,0 @@ -package org.orcid.core.oauth.service; - -import static org.junit.Assert.*; - -import java.util.HashSet; -import java.util.Set; - -import org.junit.Test; - -import junit.framework.Assert; - -public class NamespacedRandomCodeGeneratorTest { - - private static final String base62 = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; - - @Test - public void test(){ - //check 1 node uses all chars - NamespacedRandomCodeGenerator g = new NamespacedRandomCodeGenerator(1,1); - Set unique = new HashSet(); - for(char c : base62.toCharArray()) { - unique.add(c); - } - for (int i=0;i<100000;i++){ - String code = g.nextRandomCode(); - if (!base62.contains(""+code.charAt(0))){ - fail("Char outside base 62"); - } - unique.remove(code.charAt(0)); - } - System.out.println(unique); - Assert.assertEquals(0,unique.size()); - - //check two nodes are 0-30 and 31-61 - NamespacedRandomCodeGenerator g1_2 = new NamespacedRandomCodeGenerator(1,2); - NamespacedRandomCodeGenerator g2_2 = new NamespacedRandomCodeGenerator(2,2); - Set unique1_2 = new HashSet(); - Set unique2_2 = new HashSet(); - int j = 0; - for(char c : base62.toCharArray()) { - if (j<31) - unique1_2.add(c); - else - unique2_2.add(c); - j++; - } - for (int i=0;i<100000;i++){ - String code = g1_2.nextRandomCode(); - if (!base62.contains(""+code.charAt(0))){ - fail("Char outside base 62"); - } - unique1_2.remove(code.charAt(0)); - unique2_2.remove(code.charAt(0)); - } - Assert.assertEquals(0,unique1_2.size()); //only removed from first half - Assert.assertEquals(31,unique2_2.size());//all still there - - //do it again for the second generator - j = 0; - for(char c : base62.toCharArray()) { - if (j<31) - unique1_2.add(c); - else - unique2_2.add(c); - j++; - } - for (int i=0;i<100000;i++){ - String code = g2_2.nextRandomCode(); - if (!base62.contains(""+code.charAt(0))){ - fail("Char outside base 62"); - } - unique1_2.remove(code.charAt(0)); - unique2_2.remove(code.charAt(0)); - } - Assert.assertEquals(31,unique1_2.size()); //all still there - Assert.assertEquals(0,unique2_2.size());//only removed from second half - - //--- now three nodes - //check two nodes are 0-30 and 31-61 - NamespacedRandomCodeGenerator g1_3 = new NamespacedRandomCodeGenerator(1,3); - NamespacedRandomCodeGenerator g2_3 = new NamespacedRandomCodeGenerator(2,3); - NamespacedRandomCodeGenerator g3_3 = new NamespacedRandomCodeGenerator(3,3); - Set unique1_3 = new HashSet(); - Set unique2_3 = new HashSet(); - Set unique3_3= new HashSet(); - j = 0; - for(char c : base62.toCharArray()) { - if (j<20) - unique1_3.add(c); - else if (j<40) - unique2_3.add(c); - else - unique3_3.add(c); // has the extra two chars! - j++; - } - for (int i=0;i<100000;i++){ - String code = g1_3.nextRandomCode(); - if (!base62.contains(""+code.charAt(0))){ - fail("Char outside base 62"); - } - unique1_3.remove(code.charAt(0)); - unique2_3.remove(code.charAt(0)); - unique3_3.remove(code.charAt(0)); - } - Assert.assertEquals(0,unique1_3.size()); //only removed from first third - Assert.assertEquals(20,unique2_3.size());//all still there - Assert.assertEquals(22,unique3_3.size());//all still there - - //node 2 of 3 - j = 0; - for(char c : base62.toCharArray()) { - if (j<20) - unique1_3.add(c); - else if (j<40) - unique2_3.add(c); - else - unique3_3.add(c); // has the extra two chars! - j++; - } - for (int i=0;i<100000;i++){ - String code = g2_3.nextRandomCode(); - if (!base62.contains(""+code.charAt(0))){ - fail("Char outside base 62"); - } - unique1_3.remove(code.charAt(0)); - unique2_3.remove(code.charAt(0)); - unique3_3.remove(code.charAt(0)); - } - Assert.assertEquals(20,unique1_3.size()); - Assert.assertEquals(0,unique2_3.size()); - Assert.assertEquals(22,unique3_3.size()); - - //node 3 of 3 - j = 0; - for(char c : base62.toCharArray()) { - if (j<20) - unique1_3.add(c); - else if (j<40) - unique2_3.add(c); - else - unique3_3.add(c); // has the extra two chars! - j++; - } - for (int i=0;i<100000;i++){ - String code = g3_3.nextRandomCode(); - if (!base62.contains(""+code.charAt(0))){ - fail("Char outside base 62"); - } - unique1_3.remove(code.charAt(0)); - unique2_3.remove(code.charAt(0)); - unique3_3.remove(code.charAt(0)); - } - Assert.assertEquals(20,unique1_3.size()); - Assert.assertEquals(20,unique2_3.size()); - Assert.assertEquals(0,unique3_3.size()); - } -} diff --git a/orcid-pub-web/src/test/java/org/orcid/api/filters/ApiRateLimitFilterTest.java b/orcid-pub-web/src/test/java/org/orcid/api/filters/ApiRateLimitFilterTest.java index 25d1849dba8..f3ab254adb5 100644 --- a/orcid-pub-web/src/test/java/org/orcid/api/filters/ApiRateLimitFilterTest.java +++ b/orcid-pub-web/src/test/java/org/orcid/api/filters/ApiRateLimitFilterTest.java @@ -7,7 +7,6 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.orcid.core.api.rate_limit.PapiRateLimitRedisClient; -import org.orcid.core.oauth.service.OrcidTokenStore; import org.orcid.test.OrcidJUnit4ClassRunner; import org.orcid.test.TargetProxyHelper; import org.springframework.mock.web.MockHttpServletRequest; @@ -33,9 +32,6 @@ public class ApiRateLimitFilterTest { @Mock private FilterChain filterChainMock; - @Mock - private OrcidTokenStore orcidTokenStoreMock; - @Mock private PapiRateLimitRedisClient papiRateLimitRedisMock; @@ -47,13 +43,11 @@ public class ApiRateLimitFilterTest { public void doFilterInternal_rateLimitingDisabledTest() throws ServletException, IOException { MockitoAnnotations.initMocks(this); TargetProxyHelper.injectIntoProxy(apiRateLimitFilter, "enableRateLimiting", false); - TargetProxyHelper.injectIntoProxy(apiRateLimitFilter, "orcidTokenStore", orcidTokenStoreMock); TargetProxyHelper.injectIntoProxy(apiRateLimitFilter, "papiRedisClient", papiRateLimitRedisMock); apiRateLimitFilter.doFilterInternal(httpServletRequestMock, httpServletResponseMock, filterChainMock); verify(filterChainMock, times(1)).doFilter(eq(httpServletRequestMock), eq(httpServletResponseMock)); - verify(orcidTokenStoreMock, never()).readClientId(anyString()); verify(papiRateLimitRedisMock, never()).getDailyLimitsForClient(anyString(), any()); verify(papiRateLimitRedisMock, never()).setTodayLimitsForClient(anyString(), any()); @@ -65,7 +59,6 @@ public void doFilterInternal_annonymousRequest_newEntry_X_FORWARDED_FOR_header_T String ip = "127.0.0.2"; TargetProxyHelper.injectIntoProxy(apiRateLimitFilter, "enableRateLimiting", true); - TargetProxyHelper.injectIntoProxy(apiRateLimitFilter, "orcidTokenStore", orcidTokenStoreMock); TargetProxyHelper.injectIntoProxy(apiRateLimitFilter, "papiRedisClient", papiRateLimitRedisMock); when(papiRateLimitRedisMock.getTodayDailyLimitsForClient(eq(ip))).thenReturn(null); @@ -73,7 +66,6 @@ public void doFilterInternal_annonymousRequest_newEntry_X_FORWARDED_FOR_header_T apiRateLimitFilter.doFilterInternal(httpServletRequestMock, httpServletResponseMock, filterChainMock); - verify(orcidTokenStoreMock, never()).readClientId(anyString()); verify(papiRateLimitRedisMock, times(1)).setTodayLimitsForClient(anyString(), any(JSONObject.class)); } @@ -83,7 +75,6 @@ public void doFilterInternal_annonymousRequest_newEntry_X_REAL_IP_header_Test() String ip = "127.0.0.2"; TargetProxyHelper.injectIntoProxy(apiRateLimitFilter, "enableRateLimiting", true); - TargetProxyHelper.injectIntoProxy(apiRateLimitFilter, "orcidTokenStore", orcidTokenStoreMock); TargetProxyHelper.injectIntoProxy(apiRateLimitFilter, "papiRedisClient", papiRateLimitRedisMock); when(papiRateLimitRedisMock.getTodayDailyLimitsForClient(eq(ip))).thenReturn(null); @@ -91,8 +82,6 @@ public void doFilterInternal_annonymousRequest_newEntry_X_REAL_IP_header_Test() apiRateLimitFilter.doFilterInternal(httpServletRequestMock, httpServletResponseMock, filterChainMock); - verify(orcidTokenStoreMock, never()).readClientId(anyString()); - verify(papiRateLimitRedisMock, never()).getDailyLimitsForClient(anyString(), any()); verify(papiRateLimitRedisMock, times(1)).setTodayLimitsForClient(anyString(), any(JSONObject.class)); } @@ -103,7 +92,6 @@ public void doFilterInternal_annonymousRequest_newEntry_whitelisted_IP_Test() th String ip = "127.0.0.1"; TargetProxyHelper.injectIntoProxy(apiRateLimitFilter, "enableRateLimiting", true); - TargetProxyHelper.injectIntoProxy(apiRateLimitFilter, "orcidTokenStore", orcidTokenStoreMock); TargetProxyHelper.injectIntoProxy(apiRateLimitFilter, "papiRedisClient", papiRateLimitRedisMock); when(papiRateLimitRedisMock.getTodayDailyLimitsForClient(eq(ip))).thenReturn(null); @@ -111,7 +99,6 @@ public void doFilterInternal_annonymousRequest_newEntry_whitelisted_IP_Test() th apiRateLimitFilter.doFilterInternal(httpServletRequestMock, httpServletResponseMock, filterChainMock); - verify(orcidTokenStoreMock, never()).readClientId(anyString()); verify(papiRateLimitRedisMock, never()).setTodayLimitsForClient(eq(ip), any()); } @@ -128,7 +115,6 @@ public void doFilterInternal_annonymousRequest_existingEntryTest() throws Servle dailyLimitsObj.put(PapiRateLimitRedisClient.KEY_LAST_MODIFIED, System.currentTimeMillis()); TargetProxyHelper.injectIntoProxy(apiRateLimitFilter, "enableRateLimiting", true); - TargetProxyHelper.injectIntoProxy(apiRateLimitFilter, "orcidTokenStore", orcidTokenStoreMock); TargetProxyHelper.injectIntoProxy(apiRateLimitFilter, "papiRedisClient", papiRateLimitRedisMock); when(papiRateLimitRedisMock.getTodayDailyLimitsForClient(eq(ip))).thenReturn(dailyLimitsObj); @@ -136,9 +122,7 @@ public void doFilterInternal_annonymousRequest_existingEntryTest() throws Servle apiRateLimitFilter.doFilterInternal(httpServletRequestMock, httpServletResponseMock, filterChainMock); - verify(orcidTokenStoreMock, never()).readClientId(anyString()); verify(papiRateLimitRedisMock, times(1)).setTodayLimitsForClient(anyString(), any(JSONObject.class)); - } @Test @@ -148,9 +132,7 @@ public void doFilterInternal_clientRequest_newEntryTest() throws ServletExceptio String clientId = "clientId1"; httpServletRequestMock.addHeader("Authorization", "TEST_TOKEN"); - when(orcidTokenStoreMock.readClientId(eq("TEST_TOKEN"))).thenReturn(clientId); TargetProxyHelper.injectIntoProxy(apiRateLimitFilter, "enableRateLimiting", true); - TargetProxyHelper.injectIntoProxy(apiRateLimitFilter, "orcidTokenStore", orcidTokenStoreMock); TargetProxyHelper.injectIntoProxy(apiRateLimitFilter, "papiRedisClient", papiRateLimitRedisMock); when(papiRateLimitRedisMock.getTodayDailyLimitsForClient(eq(ip))).thenReturn(null); @@ -176,9 +158,7 @@ public void doFilterInternal_clientRequest_existingEntryTest() throws ServletExc dailyLimitsObj.put(PapiRateLimitRedisClient.KEY_LAST_MODIFIED, System.currentTimeMillis()); httpServletRequestMock.addHeader("Authorization", "TEST_TOKEN"); - when(orcidTokenStoreMock.readClientId(eq("TEST_TOKEN"))).thenReturn(clientId); TargetProxyHelper.injectIntoProxy(apiRateLimitFilter, "enableRateLimiting", true); - TargetProxyHelper.injectIntoProxy(apiRateLimitFilter, "orcidTokenStore", orcidTokenStoreMock); TargetProxyHelper.injectIntoProxy(apiRateLimitFilter, "papiRedisClient", papiRateLimitRedisMock); when(papiRateLimitRedisMock.getDailyLimitsForClient(eq(clientId), any())).thenReturn(dailyLimitsObj); @@ -203,7 +183,6 @@ public void doFilterInternal_checkLimitReachedTest() throws ServletException, IO dailyLimitsObj.put(PapiRateLimitRedisClient.KEY_LAST_MODIFIED, System.currentTimeMillis()); TargetProxyHelper.injectIntoProxy(apiRateLimitFilter, "enableRateLimiting", true); - TargetProxyHelper.injectIntoProxy(apiRateLimitFilter, "orcidTokenStore", orcidTokenStoreMock); TargetProxyHelper.injectIntoProxy(apiRateLimitFilter, "papiRedisClient", papiRateLimitRedisMock); when(papiRateLimitRedisMock.getTodayDailyLimitsForClient(eq(ip))).thenReturn(dailyLimitsObj); @@ -224,7 +203,6 @@ public void doFilterInternal_annonymousRequest_whitelisted_cidr_IP_Test() throws String ip_in_cidr = "10.0.0.0"; TargetProxyHelper.injectIntoProxy(apiRateLimitFilter, "enableRateLimiting", true); - TargetProxyHelper.injectIntoProxy(apiRateLimitFilter, "orcidTokenStore", orcidTokenStoreMock); TargetProxyHelper.injectIntoProxy(apiRateLimitFilter, "papiRedisClient", papiRateLimitRedisMock); when(papiRateLimitRedisMock.getTodayDailyLimitsForClient(eq(ip_in_cidr))).thenReturn(null); @@ -232,7 +210,6 @@ public void doFilterInternal_annonymousRequest_whitelisted_cidr_IP_Test() throws apiRateLimitFilter.doFilterInternal(httpServletRequestMock, httpServletResponseMock, filterChainMock); - verify(orcidTokenStoreMock, never()).readClientId(anyString()); verify(papiRateLimitRedisMock, never()).setTodayLimitsForClient(eq(ip_in_cidr), any()); } @@ -242,7 +219,6 @@ public void doFilterInternal_annonymousRequest_not_whitelisted_cidr_IP_Test() th String ip_not_cidr = "20.0.0.0"; TargetProxyHelper.injectIntoProxy(apiRateLimitFilter, "enableRateLimiting", true); - TargetProxyHelper.injectIntoProxy(apiRateLimitFilter, "orcidTokenStore", orcidTokenStoreMock); TargetProxyHelper.injectIntoProxy(apiRateLimitFilter, "papiRedisClient", papiRateLimitRedisMock); when(papiRateLimitRedisMock.getTodayDailyLimitsForClient(eq(ip_not_cidr))).thenReturn(null); @@ -250,7 +226,6 @@ public void doFilterInternal_annonymousRequest_not_whitelisted_cidr_IP_Test() th apiRateLimitFilter.doFilterInternal(httpServletRequestMock, httpServletResponseMock, filterChainMock); - verify(orcidTokenStoreMock, never()).readClientId(anyString()); verify(papiRateLimitRedisMock, times(1)).setTodayLimitsForClient(eq(ip_not_cidr), any(JSONObject.class)); } } diff --git a/orcid-web/src/main/resources/orcid-core-context-spam.xml b/orcid-web/src/main/resources/orcid-core-context-spam.xml index 1be336d1966..0455d459698 100644 --- a/orcid-web/src/main/resources/orcid-core-context-spam.xml +++ b/orcid-web/src/main/resources/orcid-core-context-spam.xml @@ -1068,12 +1068,7 @@ - - - - - - + diff --git a/orcid-web/src/test/java/org/orcid/frontend/email/RecordEmailSenderTest.java b/orcid-web/src/test/java/org/orcid/frontend/email/RecordEmailSenderTest.java index 8a8fc8a7c3e..71fd7f37513 100644 --- a/orcid-web/src/test/java/org/orcid/frontend/email/RecordEmailSenderTest.java +++ b/orcid-web/src/test/java/org/orcid/frontend/email/RecordEmailSenderTest.java @@ -30,7 +30,6 @@ import org.orcid.core.manager.v3.EmailManager; import org.orcid.core.manager.v3.RecordNameManager; import org.orcid.core.manager.v3.SourceManager; -import org.orcid.core.oauth.OrcidOauth2TokenDetailService; import org.orcid.jaxb.model.common.AvailableLocales; import org.orcid.jaxb.model.v3.release.record.Email; import org.orcid.persistence.dao.GenericDao; @@ -39,7 +38,6 @@ import org.orcid.persistence.dao.ProfileEventDao; import org.orcid.persistence.jpa.entities.EmailEventEntity; import org.orcid.persistence.jpa.entities.ProfileEntity; -import org.orcid.persistence.jpa.entities.ProfileEventEntity; import org.orcid.pojo.EmailListChange; import org.orcid.test.OrcidJUnit4ClassRunner; import org.orcid.utils.email.MailGunManager; @@ -57,39 +55,15 @@ public class RecordEmailSenderTest { @Mock private ProfileEventDao mockProfileEventDao; - @Mock - private SourceManager sourceManager; - - @Mock - private NotificationDao mockNotificationDao; - @Mock private MailGunManager mockMailGunManager; - @Mock - private OrcidOauth2TokenDetailService mockOrcidOauth2TokenDetailService; - @Mock private ProfileEntityCacheManager mockProfileEntityCacheManager; @Mock private EmailManager mockEmailManager; - @Mock - private ProfileDao mockProfileDao; - - @Mock - private ProfileDao mockProfileDaoReadOnly; - - @Mock - private JpaJaxbNotificationAdapter mockNotificationAdapter; - - @Mock - public GenericDao mockEmailEventDao; - - @Mock - public EmailFrequencyManager mockEmailFrequencyManager; - @Mock public RecordNameManager mockRecordNameManager; diff --git a/orcid-web/src/test/java/org/orcid/frontend/oauth2/RevokeControllerTest.java b/orcid-web/src/test/java/org/orcid/frontend/oauth2/RevokeControllerTest.java index 6571af97cf1..f2cd808a240 100644 --- a/orcid-web/src/test/java/org/orcid/frontend/oauth2/RevokeControllerTest.java +++ b/orcid-web/src/test/java/org/orcid/frontend/oauth2/RevokeControllerTest.java @@ -1,29 +1,24 @@ package org.orcid.frontend.oauth2; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.fail; -import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.Mockito.times; +import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; +import javax.ws.rs.core.Response; -import org.junit.After; import org.junit.Before; -import org.junit.Rule; import org.junit.Test; +import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.MockitoAnnotations; -import org.orcid.core.oauth.OrcidOauth2TokenDetailService; -import org.orcid.core.togglz.Features; +import org.orcid.core.oauth.authorizationServer.AuthorizationServerUtil; import org.orcid.core.utils.SecurityContextTestUtils; -import org.orcid.persistence.jpa.entities.OrcidOauth2TokenDetail; -import org.togglz.junit.TogglzRule; - -import java.io.IOException; -import java.net.URISyntaxException; +import org.springframework.http.ResponseEntity; +import org.springframework.security.core.context.SecurityContextHolder; public class RevokeControllerTest { @@ -31,126 +26,82 @@ public class RevokeControllerTest { private HttpServletRequest request; @Mock - private OrcidOauth2TokenDetailService mockOrcidOauth2TokenDetailService; - - @Resource - private OrcidOauth2TokenDetailService orcidOauth2TokenDetailService; + private AuthorizationServerUtil authorizationServerUtil; - @Rule - public TogglzRule togglzRule = TogglzRule.allDisabled(Features.class); - - private RevokeController revokeController = new RevokeController(); + @InjectMocks + private RevokeController revokeController; @Before public void before() { MockitoAnnotations.initMocks(this); - revokeController.setOrcidOauth2TokenDetailService(mockOrcidOauth2TokenDetailService); - when(request.getParameter("token")).thenReturn("token-value"); - OrcidOauth2TokenDetail token = new OrcidOauth2TokenDetail(); - token.setClientDetailsId("client-id"); - token.setTokenValue("token-value"); - token.setRefreshTokenValue("refresh-token-value"); - token.setTokenDisabled(false); - when(mockOrcidOauth2TokenDetailService.findIgnoringDisabledByTokenValue("token-value")).thenReturn(token); - when(mockOrcidOauth2TokenDetailService.findByRefreshTokenValue("refresh-token-value")).thenReturn(token); - SecurityContextTestUtils.setUpSecurityContextForClientOnly("client-id"); } - - @After - public void after() { - revokeController.setOrcidOauth2TokenDetailService(orcidOauth2TokenDetailService); + + @Test + public void testRevokeWithClientIdAndSecret() throws Exception { + String clientId = "APP-1234567890123456"; + String clientSecret = "some-secret"; + String token = "some-token"; + + SecurityContextTestUtils.setUpSecurityContextForClientOnly(clientId); + + when(request.getParameter("token")).thenReturn(token); + when(request.getParameter("client_secret")).thenReturn(clientSecret); + when(request.getHeader("Authorization")).thenReturn(null); + + Response mockResponse = mock(Response.class); + when(mockResponse.getStatus()).thenReturn(200); + when(mockResponse.getEntity()).thenReturn("Success"); + + when(authorizationServerUtil.forwardTokenRevocationRequest(clientId, clientSecret, token)).thenReturn(mockResponse); + + ResponseEntity result = revokeController.revoke(request); + + assertNotNull(result); + assertEquals(200, result.getStatusCodeValue()); + assertEquals("Success", result.getBody()); + + verify(authorizationServerUtil).forwardTokenRevocationRequest(clientId, clientSecret, token); } - + @Test - public void noTokenTest() { + public void testRevokeWithBasicAuth() throws Exception { + String authorization = "Basic Y2xpZW50LWlkOnNlY3JldA=="; + String token = "some-token"; + + when(request.getParameter("token")).thenReturn(token); + when(request.getHeader("Authorization")).thenReturn(authorization); + + Response mockResponse = mock(Response.class); + when(mockResponse.getStatus()).thenReturn(200); + when(mockResponse.getEntity()).thenReturn("Success"); + + when(authorizationServerUtil.forwardTokenRevocationRequest(authorization, token)).thenReturn(mockResponse); + + ResponseEntity result = revokeController.revoke(request); + + assertNotNull(result); + assertEquals(200, result.getStatusCodeValue()); + assertEquals("Success", result.getBody()); + + verify(authorizationServerUtil).forwardTokenRevocationRequest(authorization, token); + } + + @Test + public void testRevokeNoToken() throws Exception { when(request.getParameter("token")).thenReturn(null); try { revokeController.revoke(request); - fail(); + fail("Should have thrown IllegalArgumentException"); } catch (IllegalArgumentException e) { assertEquals("Please provide the token to be param", e.getMessage()); - } catch (Exception e) { - fail(); } when(request.getParameter("token")).thenReturn(""); try { revokeController.revoke(request); - fail(); + fail("Should have thrown IllegalArgumentException"); } catch (IllegalArgumentException e) { assertEquals("Please provide the token to be param", e.getMessage()); - } catch (Exception e) { - fail(); - } - - when(request.getParameter("token")).thenReturn("token-value"); - try { - revokeController.revoke(request); - } catch (Exception e) { - fail(); } } - - @Test - public void notOwnerTest() throws IOException, URISyntaxException, InterruptedException { - SecurityContextTestUtils.setUpSecurityContextForClientOnly("other-client-id"); - - revokeController.revoke(request); - - verify(mockOrcidOauth2TokenDetailService, times(1)).findIgnoringDisabledByTokenValue("token-value"); - verify(mockOrcidOauth2TokenDetailService, times(0)).findByRefreshTokenValue(anyString()); - verify(mockOrcidOauth2TokenDetailService, times(0)).revokeAccessToken(anyString()); - } - - @Test - public void tokenAlreadyDisabledOrNonExistingTest() throws IOException, URISyntaxException, InterruptedException { - when(request.getParameter("token")).thenReturn("disabled-or-unexisting"); - - revokeController.revoke(request); - - verify(mockOrcidOauth2TokenDetailService, times(1)).findIgnoringDisabledByTokenValue("disabled-or-unexisting"); - verify(mockOrcidOauth2TokenDetailService, times(1)).findByRefreshTokenValue("disabled-or-unexisting"); - verify(mockOrcidOauth2TokenDetailService, times(0)).revokeAccessToken(anyString()); - } - - @Test - public void disableByTokenTest() throws IOException, URISyntaxException, InterruptedException { - when(request.getParameter("token")).thenReturn("token-value"); - - revokeController.revoke(request); - - verify(mockOrcidOauth2TokenDetailService, times(1)).findIgnoringDisabledByTokenValue("token-value"); - verify(mockOrcidOauth2TokenDetailService, times(0)).findByRefreshTokenValue(anyString()); - verify(mockOrcidOauth2TokenDetailService, times(1)).revokeAccessToken("token-value"); - } - - @Test - public void disableByRefreshTokenTest() throws IOException, URISyntaxException, InterruptedException { - when(request.getParameter("token")).thenReturn("refresh-token-value"); - - revokeController.revoke(request); - - verify(mockOrcidOauth2TokenDetailService, times(1)).findIgnoringDisabledByTokenValue("refresh-token-value"); - verify(mockOrcidOauth2TokenDetailService, times(1)).findByRefreshTokenValue("refresh-token-value"); - verify(mockOrcidOauth2TokenDetailService, times(1)).revokeAccessToken("token-value"); - } - - @Test - public void refreshTokenAlreadyDisabledTest() throws IOException, URISyntaxException, InterruptedException { - OrcidOauth2TokenDetail token = new OrcidOauth2TokenDetail(); - token.setClientDetailsId("client-id"); - token.setTokenValue("token-value"); - token.setRefreshTokenValue("refresh-token-value"); - token.setTokenDisabled(true); - when(mockOrcidOauth2TokenDetailService.findIgnoringDisabledByTokenValue("token-value")).thenReturn(token); - when(mockOrcidOauth2TokenDetailService.findByRefreshTokenValue("refresh-token-value")).thenReturn(token); - when(request.getParameter("token")).thenReturn("refresh-token-value"); - - revokeController.revoke(request); - - verify(mockOrcidOauth2TokenDetailService, times(1)).findIgnoringDisabledByTokenValue("refresh-token-value"); - verify(mockOrcidOauth2TokenDetailService, times(1)).findByRefreshTokenValue("refresh-token-value"); - // It should not call the disable function since it is already disabled - verify(mockOrcidOauth2TokenDetailService, times(0)).revokeAccessToken("refresh-token-value"); - } } diff --git a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/OauthGenericCallsControllerTest.java b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/OauthGenericCallsControllerTest.java deleted file mode 100644 index 92cca1481d8..00000000000 --- a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/OauthGenericCallsControllerTest.java +++ /dev/null @@ -1,73 +0,0 @@ -package org.orcid.frontend.web.controllers; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.isNull; -import static org.mockito.Mockito.when; - -import javax.ws.rs.core.Response; - -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.orcid.api.common.oauth.OrcidClientCredentialEndPointDelegator; -import org.orcid.core.exception.LockedException; -import org.orcid.core.oauth.OAuthError; -import org.orcid.core.togglz.Features; -import org.springframework.http.ResponseEntity; -import org.springframework.mock.web.MockHttpServletRequest; -import org.togglz.junit.TogglzRule; - -import java.io.IOException; -import java.net.URISyntaxException; - -public class OauthGenericCallsControllerTest { - - @Mock - private OrcidClientCredentialEndPointDelegator orcidClientCredentialEndPointDelegator; - - @InjectMocks - private OauthGenericCallsController controller; - - @Rule - public TogglzRule togglzRule = TogglzRule.allDisabled(Features.class); - - @Before - public void setUp() { - MockitoAnnotations.initMocks(this); - } - - @Test - public void testObtainOauth2TokenPost() throws IOException, URISyntaxException, InterruptedException { - when(orcidClientCredentialEndPointDelegator.obtainOauth2Token(isNull(), any())).thenReturn( - Response.ok("some-success-entity").build()); - MockHttpServletRequest mockHttpServletRequest = new MockHttpServletRequest(); - mockHttpServletRequest.addParameter("grant_type", "client_credentials"); - ResponseEntity responseEntity = controller.obtainOauth2TokenPost(mockHttpServletRequest); - assertNotNull(responseEntity); - assertNotNull(responseEntity.getBody()); - assertEquals("some-success-entity", responseEntity.getBody()); - } - - @Test - public void testObtainOauth2TokenPostLockedClient() throws IOException, URISyntaxException, InterruptedException { - when(orcidClientCredentialEndPointDelegator.obtainOauth2Token(isNull(), any())).thenThrow( - new LockedException("Client is locked")); - MockHttpServletRequest mockHttpServletRequest = new MockHttpServletRequest(); - mockHttpServletRequest.addParameter("grant_type", "client_credentials"); - ResponseEntity responseEntity = controller.obtainOauth2TokenPost(mockHttpServletRequest); - assertNotNull(responseEntity); - assertNotNull(responseEntity.getBody()); - assertTrue(responseEntity.getBody() instanceof OAuthError); - - OAuthError error = (OAuthError) responseEntity.getBody(); - assertEquals(OAuthError.UNAUTHORIZED_CLIENT, error.getError()); - assertEquals("Client is locked", error.getErrorDescription()); - } - -} diff --git a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/OauthRegistrationControllerTest.java b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/OauthRegistrationControllerTest.java deleted file mode 100644 index d6f9a7e3fef..00000000000 --- a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/OauthRegistrationControllerTest.java +++ /dev/null @@ -1,135 +0,0 @@ -package org.orcid.frontend.web.controllers; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -import java.io.UnsupportedEncodingException; -import java.security.Principal; -import java.util.Arrays; -import java.util.List; -import java.util.Locale; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - -import org.junit.AfterClass; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.ArgumentCaptor; -import org.mockito.Matchers; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.mockito.invocation.InvocationOnMock; -import org.mockito.stubbing.Answer; -import org.orcid.core.oauth.OrcidOAuth2Authentication; -import org.orcid.core.oauth.service.OrcidAuthorizationEndpoint; -import org.orcid.frontend.util.RequestInfoFormLocalCache; -import org.orcid.jaxb.model.message.CreationMethod; -import org.orcid.pojo.ajaxForm.Checkbox; -import org.orcid.pojo.ajaxForm.OauthRegistrationForm; -import org.orcid.pojo.ajaxForm.Registration; -import org.orcid.pojo.ajaxForm.RequestInfoForm; -import org.orcid.pojo.ajaxForm.Text; -import org.orcid.test.DBUnitTest; -import org.orcid.test.OrcidJUnit4ClassRunner; -import org.springframework.security.authentication.AuthenticationManager; -import org.springframework.security.core.Authentication; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.web.WebAppConfiguration; -import org.springframework.web.bind.support.SessionStatus; -import org.springframework.web.servlet.view.RedirectView; - -import com.google.common.collect.Lists; - -public class OauthRegistrationControllerTest { - OauthRegistrationController oauthRegistrationController = new OauthRegistrationController(); - - @Mock - RegistrationController registrationController; - - @Mock - OrcidAuthorizationEndpoint authorizationEndpoint; - - @Mock - AuthenticationManager authenticationManager; - - @Mock - private HttpServletRequest servletRequest; - - @Mock - private HttpServletResponse servletResponse; - - @Mock - private RequestInfoFormLocalCache requestInfoFormLocalCache; - - @Before - public void before() { - MockitoAnnotations.initMocks(this); - oauthRegistrationController.setRegistrationController(registrationController); - oauthRegistrationController.setAuthorizationEndpoint(authorizationEndpoint); - oauthRegistrationController.setAuthenticationManager(authenticationManager); - } - - @Test - public void testStripHtmlFromNames() throws UnsupportedEncodingException { - RequestInfoForm rf = new RequestInfoForm(); - HttpSession session = mock(HttpSession.class); - requestInfoFormLocalCache = mock(RequestInfoFormLocalCache.class); - when(requestInfoFormLocalCache.get(any())).thenReturn(rf); - oauthRegistrationController.setRequestInfoFormLocalCache(requestInfoFormLocalCache); - RedirectView mv = new RedirectView(); - when(servletRequest.getSession()).thenReturn(session); - when(session.getId()).thenReturn("ID1"); - when(authorizationEndpoint.approveOrDeny(Matchers.anyMap(), Matchers.anyMap(), any(SessionStatus.class), any(Principal.class))).thenReturn(mv); - when(authenticationManager.authenticate(any(Authentication.class))).thenAnswer(new Answer(){ - @Override - public Authentication answer(InvocationOnMock invocation) throws Throwable { - OrcidOAuth2Authentication mockedAuthentication = mock(OrcidOAuth2Authentication.class); - return mockedAuthentication; - } - }); - - Text email = Text.valueOf(System.currentTimeMillis() + "@test.orcid.org"); - - OauthRegistrationForm reg = new OauthRegistrationForm(); - org.orcid.pojo.ajaxForm.Visibility fv = new org.orcid.pojo.ajaxForm.Visibility(); - fv.setVisibility(org.orcid.jaxb.model.v3.release.common.Visibility.PUBLIC); - reg.setActivitiesVisibilityDefault(fv); - reg.setEmail(email); - reg.setEmailConfirm(email); - reg.setFamilyNames(Text.valueOf("")); - reg.setGivenNames(Text.valueOf("")); - reg.setPassword(Text.valueOf("1234abcd")); - reg.setPasswordConfirm(Text.valueOf("1234abcd")); - reg.setValNumClient(2L); - reg.setValNumServer(4L); - reg.setApproved(true); - Checkbox c = new Checkbox(); - c.setValue(true); - reg.setTermsOfUse(c); - reg.setCreationType(Text.valueOf(CreationMethod.DIRECT.value())); - reg.setPersistentTokenEnabled(true); - oauthRegistrationController.registerAndAuthorize(servletRequest, servletResponse, reg); - - ArgumentCaptor argument1 = ArgumentCaptor.forClass(HttpServletRequest.class); - ArgumentCaptor argument2 = ArgumentCaptor.forClass(Registration.class); - ArgumentCaptor argument3 = ArgumentCaptor.forClass(Boolean.class); - ArgumentCaptor argument4 = ArgumentCaptor.forClass(Locale.class); - ArgumentCaptor argument5 = ArgumentCaptor.forClass(String.class); - - verify(registrationController).createMinimalRegistration(argument1.capture(), argument2.capture(), argument3.capture(), argument4.capture(), argument5.capture()); - assertNotNull(argument2.getValue()); - Registration registration = argument2.getValue(); - assertEquals(email.getValue(), registration.getEmail().getValue()); - assertEquals("Given Names", registration.getGivenNames().getValue()); - assertEquals("Family Name", registration.getFamilyNames().getValue()); - } -} diff --git a/orcid-web/src/test/java/org/orcid/frontend/web/util/ThirdPartyLinkManagerTest.java b/orcid-web/src/test/java/org/orcid/frontend/web/util/ThirdPartyLinkManagerTest.java index 7b545fda591..0bd26970589 100644 --- a/orcid-web/src/test/java/org/orcid/frontend/web/util/ThirdPartyLinkManagerTest.java +++ b/orcid-web/src/test/java/org/orcid/frontend/web/util/ThirdPartyLinkManagerTest.java @@ -18,8 +18,8 @@ import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import org.orcid.core.locale.LocaleManager; -import org.orcid.core.oauth.OrcidOauth2TokenDetailService; import org.orcid.core.manager.ClientDetailsEntityCacheManager; +import org.orcid.core.manager.v3.read_only.ClientDetailsManagerReadOnly; import org.orcid.core.utils.cache.redis.RedisClient; import org.orcid.jaxb.model.clientgroup.RedirectUriType; import org.orcid.persistence.dao.ClientRedirectDao; @@ -38,10 +38,10 @@ public class ThirdPartyLinkManagerTest { private ClientDetailsEntityCacheManager clientDetailsEntityCacheManager; @Mock - private LocaleManager localeManager; + private ClientDetailsManagerReadOnly clientDetailsManagerReadOnly; @Mock - private OrcidOauth2TokenDetailService orcidOauth2TokenDetailService; + private LocaleManager localeManager; @Mock private RedisClient redisClient; @@ -222,8 +222,8 @@ public void findSearchAndLinkWizardClients_cacheMiss_buildsListAndSetsConnected( initSearchAndLinkWizardData(); Mockito.when(redisClient.get(eq("works-search-and-link-wizard-clients"))).thenReturn(null); - Mockito.when(orcidOauth2TokenDetailService.doesClientKnowUser(eq("APP-00001"), eq("0000-0000-0000-0001"))).thenReturn(true); - Mockito.when(orcidOauth2TokenDetailService.doesClientKnowUser(eq("APP-00002"), eq("0000-0000-0000-0001"))).thenReturn(false); + Mockito.when(clientDetailsManagerReadOnly.doesClientKnowUser(eq("APP-00001"), eq("0000-0000-0000-0001"))).thenReturn(true); + Mockito.when(clientDetailsManagerReadOnly.doesClientKnowUser(eq("APP-00002"), eq("0000-0000-0000-0001"))).thenReturn(false); List forms = thirdPartyLinkManager.findSearchAndLinkWizardClients("0000-0000-0000-0001"); assertNotNull(forms); @@ -253,7 +253,7 @@ public void findSearchAndLinkWizardClients_cacheHit_usesCachedValueAndSkipsDao() String cachedJson = "[{\"id\":\"APP-00001\",\"name\":\"Client One\",\"redirectUri\":\"https://test.orcid.org/search-link/1\",\"scopes\":\"/read-limited\",\"redirectUriMetadata\":{\"certified\":true}}]"; Mockito.when(redisClient.get(eq("works-search-and-link-wizard-clients"))).thenReturn(cachedJson); - Mockito.when(orcidOauth2TokenDetailService.doesClientKnowUser(eq("APP-00001"), eq("0000-0000-0000-0001"))).thenReturn(true); + Mockito.when(clientDetailsManagerReadOnly.doesClientKnowUser(eq("APP-00001"), eq("0000-0000-0000-0001"))).thenReturn(true); List forms = thirdPartyLinkManager.findSearchAndLinkWizardClients("0000-0000-0000-0001"); assertNotNull(forms); @@ -272,8 +272,8 @@ public void findSearchAndLinkWizardClients_badCachedValue_rebuildsAndStores() { ReflectionTestUtils.setField(thirdPartyLinkManager, "worksSearchAndLinkWizardCacheTtl", 99); Mockito.when(redisClient.get(eq("works-search-and-link-wizard-clients"))).thenReturn("{bad json"); - Mockito.when(orcidOauth2TokenDetailService.doesClientKnowUser(eq("APP-00001"), eq("0000-0000-0000-0001"))).thenReturn(true); - Mockito.when(orcidOauth2TokenDetailService.doesClientKnowUser(eq("APP-00002"), eq("0000-0000-0000-0001"))).thenReturn(false); + Mockito.when(clientDetailsManagerReadOnly.doesClientKnowUser(eq("APP-00001"), eq("0000-0000-0000-0001"))).thenReturn(true); + Mockito.when(clientDetailsManagerReadOnly.doesClientKnowUser(eq("APP-00002"), eq("0000-0000-0000-0001"))).thenReturn(false); List forms = thirdPartyLinkManager.findSearchAndLinkWizardClients("0000-0000-0000-0001"); assertNotNull(forms); From 6e5c6f05f98e3c912afc36bb7f49be8ea90658b7 Mon Sep 17 00:00:00 2001 From: amontenegro Date: Tue, 31 Mar 2026 10:32:09 -0600 Subject: [PATCH 12/77] Member API starts, client authentication beans are now in the orcid-api-common package --- .../api/common/OrcidApiCommonEndpoints.java | 4 ++ .../ClientDetailsUserDetailsService.java | 32 ++++++++++++++++ .../oauth/APIAuthenticationEntryPoint.java | 18 +++++++++ ...rcidMultiSecretAuthenticationProvider.java | 26 +++++-------- .../orcid-oauth2-api-common-config.xml | 18 ++++++++- .../resources/orcid-api-security-context.xml | 34 +++-------------- .../main/resources/orcid-api-web-context.xml | 10 ----- orcid-api-web/src/main/webapp/WEB-INF/web.xml | 10 ----- .../core/userDetails/MultiSecretClient.java | 38 +++++++++++++++++++ .../src/main/resources/orcid-core-context.xml | 4 -- .../orcid-internal-api-security-context.xml | 4 -- .../resources/orcid-t1-security-context.xml | 4 -- .../resources/orcid-frontend-security.xml | 4 -- 13 files changed, 124 insertions(+), 82 deletions(-) create mode 100644 orcid-api-common/src/main/java/org/orcid/api/common/provider/client/ClientDetailsUserDetailsService.java rename {orcid-core/src/main/java/org/orcid/core => orcid-api-common/src/main/java/org/orcid/api/common/security}/oauth/OrcidMultiSecretAuthenticationProvider.java (54%) create mode 100644 orcid-core/src/main/java/org/orcid/core/userDetails/MultiSecretClient.java diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/OrcidApiCommonEndpoints.java b/orcid-api-common/src/main/java/org/orcid/api/common/OrcidApiCommonEndpoints.java index f2b59e60c7b..441440b7b4a 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/OrcidApiCommonEndpoints.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/OrcidApiCommonEndpoints.java @@ -47,6 +47,10 @@ public Response obtainOauth2TokenPost(@HeaderParam("Authorization") @DefaultValu // Token delegation is not implemented in the authorization server if(grantType == null) { throw new IllegalArgumentException("grant_type is missing"); + } else if(clientId == null || clientId.length() > 50 || StringUtils.isBlank(clientId)) { + throw new IllegalArgumentException("client_id is missing or invalid"); + } else if(clientSecret == null || clientSecret.length() > 100 || StringUtils.isBlank(clientSecret)) { + throw new IllegalArgumentException("client_secret is missing or invalid"); } Response response = null; diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/provider/client/ClientDetailsUserDetailsService.java b/orcid-api-common/src/main/java/org/orcid/api/common/provider/client/ClientDetailsUserDetailsService.java new file mode 100644 index 00000000000..713341c5af3 --- /dev/null +++ b/orcid-api-common/src/main/java/org/orcid/api/common/provider/client/ClientDetailsUserDetailsService.java @@ -0,0 +1,32 @@ +package org.orcid.api.common.provider.client; + +import org.apache.commons.lang.StringUtils; +import org.orcid.core.manager.v3.read_only.ClientDetailsManagerReadOnly; +import org.orcid.core.userDetails.MultiSecretClient; +import org.orcid.persistence.jpa.entities.ClientDetailsEntity; +import org.orcid.persistence.jpa.entities.ClientSecretEntity; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.core.userdetails.UsernameNotFoundException; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +public class ClientDetailsUserDetailsService implements UserDetailsService { + + @Resource(name = "clientDetailsManagerReadOnlyV3") + private ClientDetailsManagerReadOnly clientDetailsManagerReadOnly; + + public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { + if(clientDetailsManagerReadOnly.exists(username)) { + ClientDetailsEntity client = clientDetailsManagerReadOnly.findByClientId(username); + Set secrets = client.getClientSecrets(); + List secretsList = secrets.stream().map(s -> new MultiSecretClient.Secret(s.getClientSecret(), s.isPrimary())).collect(Collectors.toList()); + return new MultiSecretClient(client.getClientId(), StringUtils.EMPTY, client.getAuthorities(), secretsList); + } else { + throw new UsernameNotFoundException("Client with id " + username + " not found"); + } + } +} diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/APIAuthenticationEntryPoint.java b/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/APIAuthenticationEntryPoint.java index 49516adba88..45579cb450f 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/APIAuthenticationEntryPoint.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/APIAuthenticationEntryPoint.java @@ -1,5 +1,7 @@ package org.orcid.api.common.security.oauth; +import org.orcid.jaxb.model.v3.release.error.OrcidError; +import org.springframework.http.HttpStatus; import org.springframework.security.core.AuthenticationException; import org.springframework.security.web.AuthenticationEntryPoint; @@ -11,6 +13,22 @@ public class APIAuthenticationEntryPoint implements AuthenticationEntryPoint { @Override public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException, ServletException { + try { + //TODO: This is NOT ready, exceptions should be handled and the proper error message returned + OrcidError orcidError = new OrcidError(); + orcidError.setResponseCode(response.getStatus()); + orcidError.setDeveloperMessage("GENERIC ERROR MESSAGE"); + response.setStatus(HttpStatus.FORBIDDEN.value()); + response.getWriter().write(orcidError.toString()); + response.flushBuffer(); + } catch (IOException e) { + throw e; + } catch (RuntimeException e) { + throw e; + } catch (Exception e) { + // Wrap other Exceptions. These are not expected to happen + throw new RuntimeException(e); + } } } diff --git a/orcid-core/src/main/java/org/orcid/core/oauth/OrcidMultiSecretAuthenticationProvider.java b/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidMultiSecretAuthenticationProvider.java similarity index 54% rename from orcid-core/src/main/java/org/orcid/core/oauth/OrcidMultiSecretAuthenticationProvider.java rename to orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidMultiSecretAuthenticationProvider.java index 1498f8c7377..c4b5c32a17f 100644 --- a/orcid-core/src/main/java/org/orcid/core/oauth/OrcidMultiSecretAuthenticationProvider.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidMultiSecretAuthenticationProvider.java @@ -1,11 +1,9 @@ -package org.orcid.core.oauth; +package org.orcid.api.common.security.oauth; import javax.annotation.Resource; -import org.orcid.core.manager.ClientDetailsManager; import org.orcid.core.manager.EncryptionManager; -import org.orcid.persistence.jpa.entities.ClientDetailsEntity; -import org.orcid.persistence.jpa.entities.ClientSecretEntity; +import org.orcid.core.userDetails.MultiSecretClient; import org.springframework.security.authentication.BadCredentialsException; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.authentication.dao.DaoAuthenticationProvider; @@ -19,33 +17,29 @@ */ public class OrcidMultiSecretAuthenticationProvider extends DaoAuthenticationProvider { - @Resource - private ClientDetailsManager clientDetailsManager; - @Resource private EncryptionManager encryptionManager; - @SuppressWarnings("deprecation") @Override protected void additionalAuthenticationChecks(UserDetails userDetails, UsernamePasswordAuthenticationToken authentication) throws AuthenticationException { if (authentication.getCredentials() == null) { logger.debug("Authentication failed: no credentials provided"); - throw new BadCredentialsException(messages.getMessage("AbstractUserDetailsAuthenticationProvider.badCredentials", "Bad credentials")); + throw new BadCredentialsException("No credentials provided for " + userDetails.getUsername()); } String presentedPassword = authentication.getCredentials().toString(); + if(!presentedPassword.startsWith("{noop}")){ + presentedPassword = "{noop}" + presentedPassword; + } - ClientDetailsEntity clientDetailsEntity = clientDetailsManager.findByClientId(userDetails.getUsername()); - for (ClientSecretEntity clientSecretEntity : clientDetailsEntity.getClientSecrets()) { - if(!presentedPassword.startsWith("{noop}")){ - presentedPassword = "{noop}" + presentedPassword; - } - if (getPasswordEncoder().matches(encryptionManager.decryptForInternalUse(clientSecretEntity.getClientSecret()), presentedPassword)) { + MultiSecretClient clientDetails = (MultiSecretClient) this.getUserDetailsService().loadUserByUsername(userDetails.getUsername()); + for (MultiSecretClient.Secret secret : clientDetails.getSecrets()) { + if (getPasswordEncoder().matches(encryptionManager.decryptForInternalUse(secret.getEncryptedSecret()), presentedPassword)) { return; } } logger.debug("Authentication failed: password does not match any value"); - throw new BadCredentialsException(messages.getMessage("AbstractUserDetailsAuthenticationProvider.badCredentials", "Bad credentials")); + throw new BadCredentialsException("Invalid client credentials provided for " + userDetails.getUsername()); } } \ No newline at end of file diff --git a/orcid-api-common/src/main/resources/orcid-oauth2-api-common-config.xml b/orcid-api-common/src/main/resources/orcid-oauth2-api-common-config.xml index 5eb39c9a220..e68aefde292 100644 --- a/orcid-api-common/src/main/resources/orcid-oauth2-api-common-config.xml +++ b/orcid-api-common/src/main/resources/orcid-oauth2-api-common-config.xml @@ -1,9 +1,10 @@ + http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-5.6.xsd"> + + + + + + + + + + + + + \ No newline at end of file diff --git a/orcid-api-web/src/main/resources/orcid-api-security-context.xml b/orcid-api-web/src/main/resources/orcid-api-security-context.xml index 82e441238a5..e712b733b06 100644 --- a/orcid-api-web/src/main/resources/orcid-api-security-context.xml +++ b/orcid-api-web/src/main/resources/orcid-api-security-context.xml @@ -25,46 +25,24 @@ - + - + + - - - - - - - - - - - - - - - - - - + + - - - - - - - - + diff --git a/orcid-api-web/src/main/resources/orcid-api-web-context.xml b/orcid-api-web/src/main/resources/orcid-api-web-context.xml index 2c8855ad949..70bdeb8f10f 100644 --- a/orcid-api-web/src/main/resources/orcid-api-web-context.xml +++ b/orcid-api-web/src/main/resources/orcid-api-web-context.xml @@ -12,16 +12,6 @@ - - diff --git a/orcid-api-web/src/main/webapp/WEB-INF/web.xml b/orcid-api-web/src/main/webapp/WEB-INF/web.xml index a37cb5608e1..50980d05d16 100644 --- a/orcid-api-web/src/main/webapp/WEB-INF/web.xml +++ b/orcid-api-web/src/main/webapp/WEB-INF/web.xml @@ -105,16 +105,6 @@ /* - - clientCredentialsTokenEndpointFilter - org.springframework.web.filter.DelegatingFilterProxy - - - - clientCredentialsTokenEndpointFilter - /oauth/token - - springSecurityFilterChain org.springframework.web.filter.DelegatingFilterProxy diff --git a/orcid-core/src/main/java/org/orcid/core/userDetails/MultiSecretClient.java b/orcid-core/src/main/java/org/orcid/core/userDetails/MultiSecretClient.java new file mode 100644 index 00000000000..870c13f430e --- /dev/null +++ b/orcid-core/src/main/java/org/orcid/core/userDetails/MultiSecretClient.java @@ -0,0 +1,38 @@ +package org.orcid.core.userDetails; + +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.userdetails.User; + +import java.util.Collection; +import java.util.List; + +public class MultiSecretClient extends User { + private List secrets; + + public MultiSecretClient(String username, String password, Collection authorities, List secrets) { + super(username, password, authorities); + this.secrets = secrets; + } + + public List getSecrets() { + return secrets; + } + + public static class Secret { + private final String encryptedSecret; + private final boolean primary; + + public Secret(String encryptedSecret, boolean primary) { + this.encryptedSecret = encryptedSecret; + this.primary = primary; + } + + public String getEncryptedSecret() { + return encryptedSecret; + } + + public boolean isPrimary() { + return primary; + } + } +} diff --git a/orcid-core/src/main/resources/orcid-core-context.xml b/orcid-core/src/main/resources/orcid-core-context.xml index a4f9b1413d3..171227c1073 100644 --- a/orcid-core/src/main/resources/orcid-core-context.xml +++ b/orcid-core/src/main/resources/orcid-core-context.xml @@ -28,10 +28,6 @@ - - - - diff --git a/orcid-internal-api/src/main/resources/orcid-internal-api-security-context.xml b/orcid-internal-api/src/main/resources/orcid-internal-api-security-context.xml index 0acdab44be1..08ec77e2ea4 100644 --- a/orcid-internal-api/src/main/resources/orcid-internal-api-security-context.xml +++ b/orcid-internal-api/src/main/resources/orcid-internal-api-security-context.xml @@ -58,10 +58,6 @@ - - - - diff --git a/orcid-pub-web/src/main/resources/orcid-t1-security-context.xml b/orcid-pub-web/src/main/resources/orcid-t1-security-context.xml index f2843b0f82f..ba149e70628 100644 --- a/orcid-pub-web/src/main/resources/orcid-t1-security-context.xml +++ b/orcid-pub-web/src/main/resources/orcid-t1-security-context.xml @@ -67,10 +67,6 @@ - - - - diff --git a/orcid-web/src/main/resources/orcid-frontend-security.xml b/orcid-web/src/main/resources/orcid-frontend-security.xml index e469dae90c9..a6df4fa3525 100644 --- a/orcid-web/src/main/resources/orcid-frontend-security.xml +++ b/orcid-web/src/main/resources/orcid-frontend-security.xml @@ -441,10 +441,6 @@ - - - - From 0390a8288256d30a61a21b2909d873c44c43879e Mon Sep 17 00:00:00 2001 From: amontenegro Date: Tue, 31 Mar 2026 12:28:59 -0600 Subject: [PATCH 13/77] Small update --- .../src/main/resources/orcid-api-security-context.xml | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/orcid-api-web/src/main/resources/orcid-api-security-context.xml b/orcid-api-web/src/main/resources/orcid-api-security-context.xml index e712b733b06..afd87b43516 100644 --- a/orcid-api-web/src/main/resources/orcid-api-security-context.xml +++ b/orcid-api-web/src/main/resources/orcid-api-security-context.xml @@ -16,10 +16,8 @@ - - + - @@ -27,12 +25,7 @@ - - - - - - + From 9954e1f0e1349398c0d9e38d79858fb822cd8bc7 Mon Sep 17 00:00:00 2001 From: amontenegro Date: Tue, 31 Mar 2026 17:59:29 -0600 Subject: [PATCH 14/77] The member API is working and the token introspection is working on the member API! --- orcid-api-common/pom.xml | 2 +- .../api/common/filter/TokenTargetFilter.java | 56 +------ .../oauth/OrcidBearerTokenFilter.java | 147 ++++++++++++++++++ .../orcid-oauth2-api-common-config.xml | 2 + .../resources/orcid-api-security-context.xml | 3 +- .../v3/impl/OrcidSecurityManagerImpl.java | 1 + .../oauth/OrcidBearerTokenAuthentication.java | 2 +- 7 files changed, 160 insertions(+), 53 deletions(-) create mode 100644 orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidBearerTokenFilter.java diff --git a/orcid-api-common/pom.xml b/orcid-api-common/pom.xml index 01c4a1504be..a32f06f3e90 100644 --- a/orcid-api-common/pom.xml +++ b/orcid-api-common/pom.xml @@ -44,7 +44,7 @@ org.springframework spring-aop
- + org.glassfish.jersey.containers diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/filter/TokenTargetFilter.java b/orcid-api-common/src/main/java/org/orcid/api/common/filter/TokenTargetFilter.java index 4954b775468..4d632d73b1c 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/filter/TokenTargetFilter.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/filter/TokenTargetFilter.java @@ -7,63 +7,28 @@ import javax.ws.rs.container.ContainerRequestFilter; import javax.ws.rs.ext.Provider; -import org.orcid.core.exception.OrcidUnauthorizedException; import org.orcid.core.oauth.OrcidBearerTokenAuthentication; import org.orcid.utils.OrcidStringUtils; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContext; import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.web.context.request.RequestAttributes; -import org.springframework.web.context.request.RequestContextHolder; -@Deprecated @Provider public class TokenTargetFilter implements ContainerRequestFilter { + //TODO: this method is doing exactly the same that the OrcidSecutiryManagerImpl.isMyToken does, so, lets review it and leave only one. + @Override public void filter(ContainerRequestContext request) { Matcher m = OrcidStringUtils.orcidPattern.matcher(request.getUriInfo().getPath()); if (m.find()) { - validateTargetRecord(m.group(), request); + validateTargetRecord(m.group()); } return ; } - private void validateTargetRecord(String targetOrcid, ContainerRequestContext request) { + private void validateTargetRecord(String targetOrcid) { // Verify if it is the owner of the token - - //TODO: CAN WE DELETE THIS FILTER???? - - System.out.println("------------------------------------------------------------"); - System.out.println("------------------------------------------------------------"); - System.out.println("------------------------------------------------------------"); - System.out.println("------------------------------------------------------------"); - System.out.println("------------------------------------------------------------"); - System.out.println("------------------------------------------------------------"); - System.out.println("------------------------------------------------------------"); - System.out.println("------------------------------------------------------------"); - System.out.println("------------------------------------------------------------"); - System.out.println("------------------------------------------------------------"); - System.out.println("------------------------------------------------------------"); - System.out.println("------------------------------------------------------------"); - System.out.println("------------------------------------------------------------"); - - System.out.println("TokenTargetFilter"); - - System.out.println("------------------------------------------------------------"); - System.out.println("------------------------------------------------------------"); - System.out.println("------------------------------------------------------------"); - System.out.println("------------------------------------------------------------"); - System.out.println("------------------------------------------------------------"); - System.out.println("------------------------------------------------------------"); - System.out.println("------------------------------------------------------------"); - System.out.println("------------------------------------------------------------"); - System.out.println("------------------------------------------------------------"); - System.out.println("------------------------------------------------------------"); - System.out.println("------------------------------------------------------------"); - System.out.println("------------------------------------------------------------"); - System.out.println("------------------------------------------------------------"); - SecurityContext context = SecurityContextHolder.getContext(); if (context != null && context.getAuthentication() != null) { Authentication authentication = context.getAuthentication(); @@ -71,20 +36,11 @@ private void validateTargetRecord(String targetOrcid, ContainerRequestContext re OrcidBearerTokenAuthentication authDetails = (OrcidBearerTokenAuthentication) authentication; if (authDetails != null) { if (!targetOrcid.equals(authDetails.getUserOrcid())) { - throwException(); + throw new AccessControlException("You do not have the required permissions."); } } } } } - - private void throwException() { - RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes(); - String apiVersion = (String) requestAttributes.getAttribute(ApiVersionFilter.API_VERSION_REQUEST_ATTRIBUTE_NAME, RequestAttributes.SCOPE_REQUEST); - if(apiVersion.equals("1.2")) { - throw new AccessControlException("You do not have the required permissions."); - } else { - throw new OrcidUnauthorizedException("Access token is for a different record"); - } - } + } diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidBearerTokenFilter.java b/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidBearerTokenFilter.java new file mode 100644 index 00000000000..0ba3e2d9bd8 --- /dev/null +++ b/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidBearerTokenFilter.java @@ -0,0 +1,147 @@ +package org.orcid.api.common.security.oauth; + + +import com.google.common.collect.Sets; +import org.apache.commons.lang.StringUtils; +import org.apache.log4j.Logger; +import org.codehaus.jettison.json.JSONException; +import org.codehaus.jettison.json.JSONObject; +import org.orcid.core.exception.InvalidTokenException; +import org.orcid.core.oauth.OrcidBearerTokenAuthentication; +import org.orcid.core.oauth.authorizationServer.AuthorizationServerUtil; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.annotation.Resource; +import javax.servlet.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.net.URISyntaxException; +import java.security.AccessControlException; +import java.util.Arrays; +import java.util.Enumeration; +import java.util.Set; +import java.util.stream.Collectors; + +public class OrcidBearerTokenFilter implements Filter { + private static final Logger logger = Logger.getLogger(OrcidBearerTokenFilter.class); + + @Resource + private AuthorizationServerUtil authorizationServerUtil; + + @Resource + private APIAuthenticationEntryPoint apiAuthenticationEntryPoint; + + @Override + public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { + final HttpServletRequest request = (HttpServletRequest) req; + final HttpServletResponse response = (HttpServletResponse) res; + + String tokenValue = extractToken(request); + if(StringUtils.isBlank(tokenValue)) { + apiAuthenticationEntryPoint.commence(request, response, null); + return; + } + + try { + JSONObject tokenData = authorizationServerUtil.tokenIntrospection(tokenValue); + OrcidBearerTokenAuthentication authentication = validateTokenData(tokenValue, tokenData); + SecurityContextHolder.getContext().setAuthentication(authentication); + chain.doFilter(request, response); + } catch (URISyntaxException | InterruptedException | JSONException e) { + //TODO: Define error message and add exception type to it + apiAuthenticationEntryPoint.commence(request, response, null); + return; + } + } + + private OrcidBearerTokenAuthentication validateTokenData(String accessTokenValue, JSONObject tokenInfo) { + try { + if(tokenInfo == null) { + throw new AccessControlException("Invalid access token: Unable to obtain information from the authorization server"); + } + + boolean isTokenActive = tokenInfo.getBoolean("active"); + if(isTokenActive) { + // If the token is user revoked it might be used for DELETE requests + return buildAuthentication(accessTokenValue, tokenInfo); + } else { + ServletRequestAttributes attr = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); + if(RequestMethod.DELETE.name().equals(attr.getRequest().getMethod())) { + if(tokenInfo.has("USER_REVOKED") && tokenInfo.getBoolean("USER_REVOKED") == true) { + return buildAuthentication(accessTokenValue, tokenInfo); + } else { + throw new AccessControlException("Invalid access token: " + accessTokenValue); + } + } else { + throw new AccessControlException("Invalid access token: " + accessTokenValue); + } + } + } catch(AccessControlException i) { + throw i; + } catch(Exception e) { + logger.error("Exception validating token from authorization server", e); + throw new RuntimeException("Exception validating token from authorization server", e); + } + } + + private OrcidBearerTokenAuthentication buildAuthentication(String accessTokenValue, JSONObject tokenInfo) throws JSONException { + String clientId = tokenInfo.getString("client_id"); + String userOrcid = tokenInfo.getString("username"); + + OrcidBearerTokenAuthentication.Builder builder = OrcidBearerTokenAuthentication.builder(clientId, userOrcid, accessTokenValue); + + Set scopes = Arrays.stream(tokenInfo.getString("scope").split("[\\s,]+")) + .collect(Collectors.toSet()); + builder.scopes(scopes); + + // Set granted authorities + if(tokenInfo.has("clientGrantedAuthority")) { + builder.authorities(Sets.newHashSet(new SimpleGrantedAuthority(tokenInfo.getString("clientGrantedAuthority")))); + } + + if(tokenInfo.has("OBO_CLIENT_ID")) { + String oboClientId = tokenInfo.getString("OBO_CLIENT_ID"); + builder.oboClientId(oboClientId); + } + builder.authenticated(true); + return builder.build(); + } + + private String extractToken(HttpServletRequest request) { + // first check the header... + String token = extractHeaderToken(request); + + // bearer type allows a request parameter as well + if (token == null) { + logger.debug("Token not found in headers. Trying request parameters."); + token = request.getParameter("access_token"); + if (token == null) { + logger.debug("Token not found in request parameters. Not an OAuth2 request."); + } + } + + return token; + } + + private String extractHeaderToken(HttpServletRequest request) { + Enumeration headers = request.getHeaders("Authorization"); + while (headers.hasMoreElements()) { // typically there is only one (most servers enforce that) + String value = headers.nextElement(); + if ((value.toLowerCase().startsWith("bearer"))) { + String authHeaderValue = value.substring("bearer".length()).trim(); + int commaIndex = authHeaderValue.indexOf(','); + if (commaIndex > 0) { + authHeaderValue = authHeaderValue.substring(0, commaIndex); + } + return authHeaderValue; + } + } + + return null; + } +} diff --git a/orcid-api-common/src/main/resources/orcid-oauth2-api-common-config.xml b/orcid-api-common/src/main/resources/orcid-oauth2-api-common-config.xml index e68aefde292..03e8c14c50b 100644 --- a/orcid-api-common/src/main/resources/orcid-oauth2-api-common-config.xml +++ b/orcid-api-common/src/main/resources/orcid-oauth2-api-common-config.xml @@ -72,4 +72,6 @@ + + \ No newline at end of file diff --git a/orcid-api-web/src/main/resources/orcid-api-security-context.xml b/orcid-api-web/src/main/resources/orcid-api-security-context.xml index afd87b43516..d187ed7b203 100644 --- a/orcid-api-web/src/main/resources/orcid-api-security-context.xml +++ b/orcid-api-web/src/main/resources/orcid-api-security-context.xml @@ -31,7 +31,8 @@ - + + diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/OrcidSecurityManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/OrcidSecurityManagerImpl.java index bfd0e746e89..a66c6ef0b6f 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/OrcidSecurityManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/OrcidSecurityManagerImpl.java @@ -777,6 +777,7 @@ private void checkVisibility(VisibilityType element, ScopePathType requiredScope } } + //TODO: this method is doing exactly the same that the TokenTargetFilter does, so, lets review it and leave only one. private void isMyToken(String orcid) { Authentication authentication = getAuthentication(); if (authentication == null) { diff --git a/orcid-core/src/main/java/org/orcid/core/oauth/OrcidBearerTokenAuthentication.java b/orcid-core/src/main/java/org/orcid/core/oauth/OrcidBearerTokenAuthentication.java index 5ac29a59814..fe23c616974 100644 --- a/orcid-core/src/main/java/org/orcid/core/oauth/OrcidBearerTokenAuthentication.java +++ b/orcid-core/src/main/java/org/orcid/core/oauth/OrcidBearerTokenAuthentication.java @@ -50,7 +50,7 @@ private OrcidBearerTokenAuthentication(Builder builder) { */ @Override public Collection getAuthorities() { - return this.getAuthorities(); + return this.authorities; } /** From ec8be95fc4a765a31ab6a7fe313e231579a30535 Mon Sep 17 00:00:00 2001 From: amontenegro Date: Tue, 31 Mar 2026 18:54:51 -0600 Subject: [PATCH 15/77] Public API workinggit status! --- .../api/common/filter/TokenTargetFilter.java | 2 +- .../oauth/OrcidBearerTokenFilter.java | 4 +- .../orcid-oauth2-api-common-config.xml | 2 + .../resources/orcid-api-security-context.xml | 4 +- orcid-api-web/src/main/webapp/WEB-INF/web.xml | 1 - .../OrcidRandomValueTokenServicesImpl.java | 120 ------------------ .../orcid-internal-api-security-context.xml | 15 +-- .../src/main/webapp/WEB-INF/web.xml | 10 -- .../impl/PublicV2ApiServiceDelegatorImpl.java | 12 -- ...licV2ApiServiceVersionedDelegatorImpl.java | 8 +- .../impl/PublicV3ApiServiceDelegatorImpl.java | 12 -- .../resources/orcid-t1-security-context.xml | 76 ++--------- .../main/resources/orcid-t1-web-context.xml | 3 +- orcid-pub-web/src/main/webapp/WEB-INF/web.xml | 11 -- .../resources/orcid-frontend-security.xml | 15 --- orcid-web/src/main/webapp/WEB-INF/web.xml | 10 -- 16 files changed, 20 insertions(+), 285 deletions(-) delete mode 100644 orcid-core/src/main/java/org/orcid/core/oauth/service/OrcidRandomValueTokenServicesImpl.java diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/filter/TokenTargetFilter.java b/orcid-api-common/src/main/java/org/orcid/api/common/filter/TokenTargetFilter.java index 4d632d73b1c..3c0a5c7f558 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/filter/TokenTargetFilter.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/filter/TokenTargetFilter.java @@ -17,7 +17,7 @@ public class TokenTargetFilter implements ContainerRequestFilter { //TODO: this method is doing exactly the same that the OrcidSecutiryManagerImpl.isMyToken does, so, lets review it and leave only one. - + @Override public void filter(ContainerRequestContext request) { Matcher m = OrcidStringUtils.orcidPattern.matcher(request.getUriInfo().getPath()); diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidBearerTokenFilter.java b/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidBearerTokenFilter.java index 0ba3e2d9bd8..18728a5c4cd 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidBearerTokenFilter.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidBearerTokenFilter.java @@ -43,8 +43,8 @@ public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) String tokenValue = extractToken(request); if(StringUtils.isBlank(tokenValue)) { - apiAuthenticationEntryPoint.commence(request, response, null); - return; + // If the token is not present, continue the chain + chain.doFilter(request, response); } try { diff --git a/orcid-api-common/src/main/resources/orcid-oauth2-api-common-config.xml b/orcid-api-common/src/main/resources/orcid-oauth2-api-common-config.xml index 03e8c14c50b..00e6f07ad83 100644 --- a/orcid-api-common/src/main/resources/orcid-oauth2-api-common-config.xml +++ b/orcid-api-common/src/main/resources/orcid-oauth2-api-common-config.xml @@ -74,4 +74,6 @@ + + \ No newline at end of file diff --git a/orcid-api-web/src/main/resources/orcid-api-security-context.xml b/orcid-api-web/src/main/resources/orcid-api-security-context.xml index d187ed7b203..0978cb354e7 100644 --- a/orcid-api-web/src/main/resources/orcid-api-security-context.xml +++ b/orcid-api-web/src/main/resources/orcid-api-security-context.xml @@ -52,7 +52,5 @@ - - - + \ No newline at end of file diff --git a/orcid-api-web/src/main/webapp/WEB-INF/web.xml b/orcid-api-web/src/main/webapp/WEB-INF/web.xml index 50980d05d16..2c59261c3b0 100644 --- a/orcid-api-web/src/main/webapp/WEB-INF/web.xml +++ b/orcid-api-web/src/main/webapp/WEB-INF/web.xml @@ -128,7 +128,6 @@ clientIdAttributeFilter * - jersey diff --git a/orcid-core/src/main/java/org/orcid/core/oauth/service/OrcidRandomValueTokenServicesImpl.java b/orcid-core/src/main/java/org/orcid/core/oauth/service/OrcidRandomValueTokenServicesImpl.java deleted file mode 100644 index 65389872441..00000000000 --- a/orcid-core/src/main/java/org/orcid/core/oauth/service/OrcidRandomValueTokenServicesImpl.java +++ /dev/null @@ -1,120 +0,0 @@ -package org.orcid.core.oauth.service; - -import java.util.*; -import java.util.stream.Collectors; - -import javax.annotation.Resource; -import javax.persistence.PersistenceException; - -import javassist.compiler.SyntaxError; -import org.apache.commons.lang3.StringUtils; -import org.codehaus.jettison.json.JSONException; -import org.codehaus.jettison.json.JSONObject; -import org.hibernate.exception.ConstraintViolationException; -import org.orcid.core.constants.OrcidOauth2Constants; -import org.orcid.core.constants.RevokeReason; -import org.orcid.core.exception.ClientDeactivatedException; -import org.orcid.core.exception.InvalidTokenException; -import org.orcid.core.exception.LockedException; -import org.orcid.core.manager.ClientDetailsEntityCacheManager; -import org.orcid.core.manager.ProfileEntityManager; -import org.orcid.core.oauth.*; -import org.orcid.core.oauth.authorizationServer.AuthorizationServerUtil; -import org.orcid.core.togglz.Features; -import org.orcid.core.utils.JsonUtils; -import org.orcid.core.utils.cache.redis.RedisClient; -import org.orcid.jaxb.model.message.ScopePathType; -import org.orcid.persistence.dao.OrcidOauth2AuthoriziationCodeDetailDao; -import org.orcid.persistence.dao.OrcidOauth2TokenDetailDao; -import org.orcid.persistence.jpa.entities.ClientDetailsEntity; -import org.orcid.persistence.jpa.entities.OrcidOauth2TokenDetail; -import org.orcid.persistence.jpa.entities.ProfileEntity; -import org.orcid.pojo.ajaxForm.PojoUtil; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.AuthenticationException; -import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.core.authority.SimpleGrantedAuthority; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.context.request.RequestContextHolder; -import org.springframework.web.context.request.ServletRequestAttributes; -import org.orcid.core.exception.OrcidInvalidScopeException; -import com.google.common.collect.Sets; - -/** - * @author Declan Newman (declan) Date: 11/05/2012 - */ -@Deprecated -//TODO: This have to be removed, just a placeholder to remember where we validate the tokens!!!! -public class OrcidRandomValueTokenServicesImpl { - private static final Logger LOGGER = LoggerFactory.getLogger(OrcidRandomValueTokenServicesImpl.class); - - @Value("${org.orcid.core.token.write_validity_seconds:3600}") - private int writeValiditySeconds; - @Value("${org.orcid.core.token.read_validity_seconds:631138519}") - private int readValiditySeconds; - @Value("${org.orcid.core.token.implicit_validity_seconds:600}") - private int implicitValiditySeconds; - @Value("${org.orcid.core.token.write_validity_seconds:3600}") - private int ietfTokenExchangeValiditySeconds; - - @Resource - private AuthorizationServerUtil authorizationServerUtil; - - public OrcidBearerTokenAuthentication loadAuthentication(String accessTokenValue) throws AuthenticationException { - try { - JSONObject tokenInfo = authorizationServerUtil.tokenIntrospection(accessTokenValue); - if(tokenInfo == null) { - throw new InvalidTokenException("Invalid access token: Unable to obtain information from the authorization server"); - } - - boolean isTokenActive = tokenInfo.getBoolean("active"); - if(isTokenActive) { - // If the token is user revoked it might be used for DELETE requests - return buildAuthentication(accessTokenValue, tokenInfo); - } else { - ServletRequestAttributes attr = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); - if(RequestMethod.DELETE.name().equals(attr.getRequest().getMethod())) { - if(tokenInfo.has("USER_REVOKED") && tokenInfo.getBoolean("USER_REVOKED") == true) { - return buildAuthentication(accessTokenValue, tokenInfo); - } else { - throw new InvalidTokenException("Invalid access token: " + accessTokenValue); - } - } else { - throw new InvalidTokenException("Invalid access token: " + accessTokenValue); - } - } - } catch(InvalidTokenException i) { - throw i; - } catch(Exception e) { - LOGGER.error("Exception validating token from authorization server", e); - throw new RuntimeException("Exception validating token from authorization server", e); - } - } - - private OrcidBearerTokenAuthentication buildAuthentication(String accessTokenValue, JSONObject tokenInfo) throws JSONException { - String clientId = tokenInfo.getString("client_id"); - String userOrcid = tokenInfo.getString("username"); - - OrcidBearerTokenAuthentication.Builder builder = OrcidBearerTokenAuthentication.builder(clientId, userOrcid, accessTokenValue); - - Set scopes = Arrays.stream(tokenInfo.getString("scope").split("[\\s,]+")) - .collect(Collectors.toSet()); - builder.scopes(scopes); - - // Set granted authorities - if(tokenInfo.has("clientGrantedAuthority")) { - builder.authorities(Sets.newHashSet(new SimpleGrantedAuthority(tokenInfo.getString("clientGrantedAuthority")))); - } - - if(tokenInfo.has("OBO_CLIENT_ID")) { - String oboClientId = tokenInfo.getString("OBO_CLIENT_ID"); - builder.oboClientId(oboClientId); - } - - return builder.build(); - } -} diff --git a/orcid-internal-api/src/main/resources/orcid-internal-api-security-context.xml b/orcid-internal-api/src/main/resources/orcid-internal-api-security-context.xml index 08ec77e2ea4..d73bb9b047a 100644 --- a/orcid-internal-api/src/main/resources/orcid-internal-api-security-context.xml +++ b/orcid-internal-api/src/main/resources/orcid-internal-api-security-context.xml @@ -63,20 +63,7 @@ - - - - - - - - - - - - - - + diff --git a/orcid-internal-api/src/main/webapp/WEB-INF/web.xml b/orcid-internal-api/src/main/webapp/WEB-INF/web.xml index 77461f9016c..c880a1f7026 100644 --- a/orcid-internal-api/src/main/webapp/WEB-INF/web.xml +++ b/orcid-internal-api/src/main/webapp/WEB-INF/web.xml @@ -74,16 +74,6 @@ /* - - clientCredentialsTokenEndpointFilter - org.springframework.web.filter.DelegatingFilterProxy - - - - clientCredentialsTokenEndpointFilter - /oauth/token - - springSecurityFilterChain org.springframework.web.filter.DelegatingFilterProxy diff --git a/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/delegator/impl/PublicV2ApiServiceDelegatorImpl.java b/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/delegator/impl/PublicV2ApiServiceDelegatorImpl.java index 3bb95275b73..3181c490f2e 100644 --- a/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/delegator/impl/PublicV2ApiServiceDelegatorImpl.java +++ b/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/delegator/impl/PublicV2ApiServiceDelegatorImpl.java @@ -150,9 +150,6 @@ public class PublicV2ApiServiceDelegatorImpl @Resource private ContributorUtils contributorUtilsReadOnly; - @Resource - private RecordManager recordManager; - @Resource private SourceUtils sourceUtils; @@ -168,9 +165,6 @@ public class PublicV2ApiServiceDelegatorImpl @Resource private LocaleManager localeManager; - @Resource - private OpenIDConnectKeyService openIDConnectKeyService; - @Resource private ClientManagerReadOnly clientManagerReadOnly; @@ -180,12 +174,6 @@ public class PublicV2ApiServiceDelegatorImpl @Resource private EventManager eventManager; - @Resource - private EmailDomainManager emailDomainManager; - - @Value("${org.orcid.core.baseUri}") - private String baseUrl; - @Override public Response viewStatusText() { return Response.ok(STATUS_OK_MESSAGE).build(); diff --git a/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/delegator/impl/PublicV2ApiServiceVersionedDelegatorImpl.java b/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/delegator/impl/PublicV2ApiServiceVersionedDelegatorImpl.java index 37f2da1489a..82698b5fcfb 100644 --- a/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/delegator/impl/PublicV2ApiServiceVersionedDelegatorImpl.java +++ b/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/delegator/impl/PublicV2ApiServiceVersionedDelegatorImpl.java @@ -27,16 +27,10 @@ public class PublicV2ApiServiceVersionedDelegatorImpl implements PublicV2ApiServ @Resource private V2VersionConverterChain v2_1VersionConverterChain; - - @Resource - private ProfileEntityCacheManager profileEntityCacheManager; @Resource private OrcidSecurityManager orcidSecurityManager; - - @Resource - private EventManager eventManager; - + @Override public Response viewStatusText() { return publicV2ApiServiceDelegator.viewStatusText(); diff --git a/orcid-pub-web/src/main/java/org/orcid/api/publicV3/server/delegator/impl/PublicV3ApiServiceDelegatorImpl.java b/orcid-pub-web/src/main/java/org/orcid/api/publicV3/server/delegator/impl/PublicV3ApiServiceDelegatorImpl.java index 4b19fed80f3..972391ca771 100644 --- a/orcid-pub-web/src/main/java/org/orcid/api/publicV3/server/delegator/impl/PublicV3ApiServiceDelegatorImpl.java +++ b/orcid-pub-web/src/main/java/org/orcid/api/publicV3/server/delegator/impl/PublicV3ApiServiceDelegatorImpl.java @@ -181,9 +181,6 @@ public class PublicV3ApiServiceDelegatorImpl implements @Resource(name = "clientDetailsManagerReadOnlyV3") private ClientDetailsManagerReadOnly clientDetailsManagerReadOnly; - @Resource - private OpenIDConnectKeyService openIDConnectKeyService; - @Resource private StatusManager statusManager; @@ -193,15 +190,6 @@ public class PublicV3ApiServiceDelegatorImpl implements @Resource private EventManager eventManager; - @Resource - private EmailDomainManager emailDomainManager; - - @Resource - private SourceEntityUtils sourceEntityUtils; - - @Value("${org.orcid.core.baseUri}") - private String baseUrl; - private Boolean filterVersionOfIdentifiers = false; public Boolean getFilterVersionOfIdentifiers() { diff --git a/orcid-pub-web/src/main/resources/orcid-t1-security-context.xml b/orcid-pub-web/src/main/resources/orcid-t1-security-context.xml index ba149e70628..7f0374fe4e8 100644 --- a/orcid-pub-web/src/main/resources/orcid-t1-security-context.xml +++ b/orcid-pub-web/src/main/resources/orcid-t1-security-context.xml @@ -2,12 +2,8 @@ + http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-5.6.xsd"> @@ -15,77 +11,27 @@ - - - - - - - - - + - - + + - - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - + + diff --git a/orcid-pub-web/src/main/resources/orcid-t1-web-context.xml b/orcid-pub-web/src/main/resources/orcid-t1-web-context.xml index 4189a06e33c..73ca81c1a98 100644 --- a/orcid-pub-web/src/main/resources/orcid-t1-web-context.xml +++ b/orcid-pub-web/src/main/resources/orcid-t1-web-context.xml @@ -12,7 +12,7 @@ - + @@ -30,7 +30,6 @@ - diff --git a/orcid-pub-web/src/main/webapp/WEB-INF/web.xml b/orcid-pub-web/src/main/webapp/WEB-INF/web.xml index 2d6ae77b317..1fdd778917a 100644 --- a/orcid-pub-web/src/main/webapp/WEB-INF/web.xml +++ b/orcid-pub-web/src/main/webapp/WEB-INF/web.xml @@ -136,16 +136,6 @@ /* - - clientCredentialsTokenEndpointFilter - org.springframework.web.filter.DelegatingFilterProxy - - - - clientCredentialsTokenEndpointFilter - /oauth/token - - rateLimitingFilter org.springframework.web.filter.DelegatingFilterProxy @@ -179,7 +169,6 @@ clientIdAttributeFilter * - jersey diff --git a/orcid-web/src/main/resources/orcid-frontend-security.xml b/orcid-web/src/main/resources/orcid-frontend-security.xml index a6df4fa3525..d78c36bddfa 100644 --- a/orcid-web/src/main/resources/orcid-frontend-security.xml +++ b/orcid-web/src/main/resources/orcid-frontend-security.xml @@ -453,23 +453,8 @@ - - - - - - - - - - - - - - - diff --git a/orcid-web/src/main/webapp/WEB-INF/web.xml b/orcid-web/src/main/webapp/WEB-INF/web.xml index 7edb221dfb9..7281f48a729 100644 --- a/orcid-web/src/main/webapp/WEB-INF/web.xml +++ b/orcid-web/src/main/webapp/WEB-INF/web.xml @@ -82,16 +82,6 @@ org.springframework.web.filter.DelegatingFilterProxy - - clientCredentialsTokenEndpointFilter - org.springframework.web.filter.DelegatingFilterProxy - - - - clientCredentialsTokenEndpointFilter - /oauth/token - - springSecurityFilterChain /* From 54c1105c0137d60bc1465d0e0c668834df6ef170 Mon Sep 17 00:00:00 2001 From: amontenegro Date: Tue, 31 Mar 2026 19:20:51 -0600 Subject: [PATCH 16/77] Working on the internal API --- .../resources/orcid-internal-api-context.xml | 2 +- .../orcid-internal-api-security-context.xml | 60 +++---------------- .../resources/orcid-t1-security-context.xml | 3 +- 3 files changed, 10 insertions(+), 55 deletions(-) diff --git a/orcid-internal-api/src/main/resources/orcid-internal-api-context.xml b/orcid-internal-api/src/main/resources/orcid-internal-api-context.xml index 7b24cf1c971..a7d4519e761 100644 --- a/orcid-internal-api/src/main/resources/orcid-internal-api-context.xml +++ b/orcid-internal-api/src/main/resources/orcid-internal-api-context.xml @@ -10,7 +10,7 @@ - + diff --git a/orcid-internal-api/src/main/resources/orcid-internal-api-security-context.xml b/orcid-internal-api/src/main/resources/orcid-internal-api-security-context.xml index d73bb9b047a..786b72f79da 100644 --- a/orcid-internal-api/src/main/resources/orcid-internal-api-security-context.xml +++ b/orcid-internal-api/src/main/resources/orcid-internal-api-security-context.xml @@ -2,72 +2,28 @@ + http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-5.6.xsd"> - - - - - - - - - + - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + - - - - - - - - - - \ No newline at end of file diff --git a/orcid-pub-web/src/main/resources/orcid-t1-security-context.xml b/orcid-pub-web/src/main/resources/orcid-t1-security-context.xml index 7f0374fe4e8..361c36c5934 100644 --- a/orcid-pub-web/src/main/resources/orcid-t1-security-context.xml +++ b/orcid-pub-web/src/main/resources/orcid-t1-security-context.xml @@ -13,8 +13,7 @@ - - + From e3abde613d2c8e13fecb0afc22ec1f231efcb1a5 Mon Sep 17 00:00:00 2001 From: Camelia Dumitru Date: Tue, 7 Apr 2026 15:50:07 +0100 Subject: [PATCH 17/77] PD-5132 Compiling registry with jdk17 --- .../impl/MemberV3ApiServiceDelegatorImpl.java | 1 + .../impl/PublicV2ApiServiceDelegatorImpl.java | 1 + .../impl/PublicV3ApiServiceDelegatorImpl.java | 1 + pom.xml | 20 +++++++++++++++++++ 4 files changed, 23 insertions(+) diff --git a/orcid-api-web/src/main/java/org/orcid/api/memberV3/server/delegator/impl/MemberV3ApiServiceDelegatorImpl.java b/orcid-api-web/src/main/java/org/orcid/api/memberV3/server/delegator/impl/MemberV3ApiServiceDelegatorImpl.java index 4401417ffcd..8a1ead2773e 100644 --- a/orcid-api-web/src/main/java/org/orcid/api/memberV3/server/delegator/impl/MemberV3ApiServiceDelegatorImpl.java +++ b/orcid-api-web/src/main/java/org/orcid/api/memberV3/server/delegator/impl/MemberV3ApiServiceDelegatorImpl.java @@ -29,6 +29,7 @@ import org.orcid.jaxb.model.v3.release.record.summary.Educations; import org.orcid.jaxb.model.v3.release.record.summary.Employments; import org.orcid.jaxb.model.v3.release.record.summary.Works; +import org.orcid.jaxb.model.v3.release.record.Record; import org.orcid.jaxb.model.v3.release.search.Search; import org.orcid.jaxb.model.v3.release.search.expanded.ExpandedSearch; import org.slf4j.Logger; diff --git a/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/delegator/impl/PublicV2ApiServiceDelegatorImpl.java b/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/delegator/impl/PublicV2ApiServiceDelegatorImpl.java index 3181c490f2e..9f1cf8c8df6 100644 --- a/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/delegator/impl/PublicV2ApiServiceDelegatorImpl.java +++ b/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/delegator/impl/PublicV2ApiServiceDelegatorImpl.java @@ -68,6 +68,7 @@ import org.orcid.jaxb.model.record.summary_v2.Works; import org.orcid.jaxb.model.record_v2.*; import org.orcid.jaxb.model.search_v2.Search; +import org.orcid.jaxb.model.record_v2.Record; import org.orcid.persistence.jpa.entities.EmailDomainEntity; import org.orcid.persistence.jpa.entities.ProfileEntity; import org.springframework.beans.factory.annotation.Value; diff --git a/orcid-pub-web/src/main/java/org/orcid/api/publicV3/server/delegator/impl/PublicV3ApiServiceDelegatorImpl.java b/orcid-pub-web/src/main/java/org/orcid/api/publicV3/server/delegator/impl/PublicV3ApiServiceDelegatorImpl.java index 972391ca771..f4ee683082d 100644 --- a/orcid-pub-web/src/main/java/org/orcid/api/publicV3/server/delegator/impl/PublicV3ApiServiceDelegatorImpl.java +++ b/orcid-pub-web/src/main/java/org/orcid/api/publicV3/server/delegator/impl/PublicV3ApiServiceDelegatorImpl.java @@ -84,6 +84,7 @@ import org.orcid.jaxb.model.v3.release.record.summary.Works; import org.orcid.jaxb.model.v3.release.search.Search; import org.orcid.jaxb.model.v3.release.search.expanded.ExpandedSearch; +import org.orcid.jaxb.model.v3.release.record.Record; import org.orcid.persistence.jpa.entities.EmailDomainEntity; import org.orcid.persistence.jpa.entities.ProfileEntity; import org.springframework.beans.factory.annotation.Value; diff --git a/pom.xml b/pom.xml index ff319996d1f..c77d8ff8be3 100644 --- a/pom.xml +++ b/pom.xml @@ -180,6 +180,25 @@ the software. com.mycila.maven-license-plugin maven-license-plugin + + org.openrewrite.maven + rewrite-maven-plugin + 5.43.0 + + org.openrewrite.java.migrate.UpgradeToJava17 + + + + + + org.openrewrite.recipe + rewrite-migrate-java + 2.20.0 + + + + @@ -302,6 +321,7 @@ the software. build-helper-maven-plugin 1.10 + From d7658ac28f023c591962fe3c2493c8aea28c4959 Mon Sep 17 00:00:00 2001 From: Camelia Dumitru Date: Tue, 7 Apr 2026 16:07:09 +0100 Subject: [PATCH 18/77] Upgraded to spring6 --- orcid-api-common/pom.xml | 5 ---- ...3ApiServiceDelegator_DistinctionsTest.java | 2 +- ...rV3ApiServiceDelegator_EducationsTest.java | 2 +- ...V3ApiServiceDelegator_EmploymentsTest.java | 2 +- ...ServiceDelegator_InvitedPositionsTest.java | 2 +- ...V3ApiServiceDelegator_MembershipsTest.java | 2 +- ...piServiceDelegator_QualificationsTest.java | 2 +- ...berV3ApiServiceDelegator_ServicesTest.java | 2 +- orcid-core/pom.xml | 11 +++----- .../v3/impl/OrcidSearchManagerImpl.java | 2 +- .../org/orcid/core/solr/CSVSolrClient.java | 17 ++++++------ .../org/orcid/core/solr/SolrBeanFactory.java | 1 - orcid-persistence/pom.xml | 6 ----- .../dao/impl/OtherNameDaoImpl.java | 2 +- orcid-test/pom.xml | 2 +- .../utils/jersey/JerseyClientHelper.java | 2 +- .../ResourceHandlersConfiguration.java | 4 +-- .../servlet/i18n/LocaleChangeInterceptor.java | 4 +-- pom.xml | 27 +++++++++---------- 19 files changed, 40 insertions(+), 57 deletions(-) diff --git a/orcid-api-common/pom.xml b/orcid-api-common/pom.xml index a32f06f3e90..6a879986df1 100644 --- a/orcid-api-common/pom.xml +++ b/orcid-api-common/pom.xml @@ -92,11 +92,6 @@ javax.servlet-api provided - - - org.aspectj - aspectjrt - org.aspectj aspectjweaver diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_DistinctionsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_DistinctionsTest.java index 159560a73a8..1d7b918b648 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_DistinctionsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_DistinctionsTest.java @@ -14,7 +14,7 @@ import javax.persistence.NoResultException; import javax.ws.rs.core.Response; -import org.apache.http.HttpStatus; +import org.apache.hc.core5.http.HttpStatus; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_EducationsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_EducationsTest.java index 041f43dc0c9..f429a640af0 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_EducationsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_EducationsTest.java @@ -14,7 +14,7 @@ import javax.persistence.NoResultException; import javax.ws.rs.core.Response; -import org.apache.http.HttpStatus; +import org.apache.hc.core5.http.HttpStatus; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_EmploymentsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_EmploymentsTest.java index 501ddde13b6..35b788e599b 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_EmploymentsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_EmploymentsTest.java @@ -14,7 +14,7 @@ import javax.persistence.NoResultException; import javax.ws.rs.core.Response; -import org.apache.http.HttpStatus; +import org.apache.hc.core5.http.HttpStatus; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_InvitedPositionsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_InvitedPositionsTest.java index 0977148be11..de02d7fc2ce 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_InvitedPositionsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_InvitedPositionsTest.java @@ -14,7 +14,7 @@ import javax.persistence.NoResultException; import javax.ws.rs.core.Response; -import org.apache.http.HttpStatus; +import org.apache.hc.core5.http.HttpStatus; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_MembershipsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_MembershipsTest.java index c39ab1fc53c..78b313df906 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_MembershipsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_MembershipsTest.java @@ -14,7 +14,7 @@ import javax.persistence.NoResultException; import javax.ws.rs.core.Response; -import org.apache.http.HttpStatus; +import org.apache.hc.core5.http.HttpStatus; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_QualificationsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_QualificationsTest.java index b697e26daff..151c37418fc 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_QualificationsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_QualificationsTest.java @@ -14,7 +14,7 @@ import javax.persistence.NoResultException; import javax.ws.rs.core.Response; -import org.apache.http.HttpStatus; +import org.apache.hc.core5.http.HttpStatus; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ServicesTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ServicesTest.java index f0308a4dff1..ee7c5ce6295 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ServicesTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ServicesTest.java @@ -14,7 +14,7 @@ import javax.persistence.NoResultException; import javax.ws.rs.core.Response; -import org.apache.http.HttpStatus; +import org.apache.hc.core5.http.HttpStatus; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; diff --git a/orcid-core/pom.xml b/orcid-core/pom.xml index 85eb46b76fd..15ba410cd89 100644 --- a/orcid-core/pom.xml +++ b/orcid-core/pom.xml @@ -82,7 +82,7 @@ org.springframework spring-web - 5.3.20 + 6.0.23 org.springframework.security @@ -145,17 +145,14 @@ 1.5.4 - org.apache.httpcomponents - httpclient + org.apache.httpcomponents.client5 + httpclient5 + 5.3.1 args4j args4j - - org.aspectj - aspectjrt - org.aspectj aspectjweaver diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/OrcidSearchManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/OrcidSearchManagerImpl.java index cbffaa57bd9..07f8998edbd 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/OrcidSearchManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/OrcidSearchManagerImpl.java @@ -9,7 +9,7 @@ import javax.annotation.Resource; -import org.apache.http.client.ClientProtocolException; +import org.apache.hc.client5.http.ClientProtocolException; import org.orcid.core.exception.ApplicationException; import org.orcid.core.manager.v3.OrcidSearchManager; import org.orcid.core.manager.v3.OrcidSecurityManager; diff --git a/orcid-core/src/main/java/org/orcid/core/solr/CSVSolrClient.java b/orcid-core/src/main/java/org/orcid/core/solr/CSVSolrClient.java index 67ad8612b1f..56149edbfb8 100644 --- a/orcid-core/src/main/java/org/orcid/core/solr/CSVSolrClient.java +++ b/orcid-core/src/main/java/org/orcid/core/solr/CSVSolrClient.java @@ -4,15 +4,14 @@ import java.net.URISyntaxException; import java.util.List; import java.util.Map; - -import org.apache.http.HttpEntity; -import org.apache.http.client.ClientProtocolException; -import org.apache.http.client.methods.CloseableHttpResponse; -import org.apache.http.client.methods.HttpGet; -import org.apache.http.client.utils.URIBuilder; -import org.apache.http.impl.client.CloseableHttpClient; -import org.apache.http.impl.client.HttpClients; -import org.apache.http.util.EntityUtils; +import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse; +import org.apache.hc.core5.http.io.entity.EntityUtils; +import org.apache.hc.core5.net.URIBuilder; +import org.apache.hc.core5.http.HttpEntity; +import org.apache.hc.client5.http.ClientProtocolException; +import org.apache.hc.client5.http.classic.methods.HttpGet; +import org.apache.hc.client5.http.impl.classic.CloseableHttpClient; +import org.apache.hc.client5.http.impl.classic.HttpClients; public class CSVSolrClient extends OrcidSolrClient { diff --git a/orcid-core/src/main/java/org/orcid/core/solr/SolrBeanFactory.java b/orcid-core/src/main/java/org/orcid/core/solr/SolrBeanFactory.java index fd8152ccf19..09a3b5dec0e 100644 --- a/orcid-core/src/main/java/org/orcid/core/solr/SolrBeanFactory.java +++ b/orcid-core/src/main/java/org/orcid/core/solr/SolrBeanFactory.java @@ -2,7 +2,6 @@ import javax.annotation.Resource; -import org.apache.http.client.HttpClient; import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.impl.HttpSolrClient; import org.apache.solr.client.solrj.impl.XMLResponseParser; diff --git a/orcid-persistence/pom.xml b/orcid-persistence/pom.xml index 3be4e120a5d..8f63213decf 100644 --- a/orcid-persistence/pom.xml +++ b/orcid-persistence/pom.xml @@ -103,12 +103,6 @@ org.springframework.security spring-security-core - - - - org.aspectj - aspectjrt - org.aspectj aspectjweaver diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OtherNameDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OtherNameDaoImpl.java index 02feec5da5c..d00546c153a 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OtherNameDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OtherNameDaoImpl.java @@ -91,7 +91,7 @@ public boolean addOtherName(String orcid, String displayName) { @Transactional @UpdateProfileLastModifiedAndIndexingStatus public boolean deleteOtherName(OtherNameEntity otherName) { - Assert.notNull(otherName); + Assert.notNull(otherName, "must not be null"); Query query = entityManager.createQuery("DELETE FROM OtherNameEntity WHERE id=:id"); query.setParameter("id", otherName.getId()); return query.executeUpdate() > 0 ? true : false; diff --git a/orcid-test/pom.xml b/orcid-test/pom.xml index 3bb77dc75fa..46f0daebd53 100644 --- a/orcid-test/pom.xml +++ b/orcid-test/pom.xml @@ -9,7 +9,7 @@ Test utilities that can be brought in to other modules with the test scope - 5.3.19 + 6.0.23 5.6.2 4.13.2 ${project.basedir} diff --git a/orcid-utils/src/main/java/org/orcid/utils/jersey/JerseyClientHelper.java b/orcid-utils/src/main/java/org/orcid/utils/jersey/JerseyClientHelper.java index 599b53bbc98..c357c6e889a 100644 --- a/orcid-utils/src/main/java/org/orcid/utils/jersey/JerseyClientHelper.java +++ b/orcid-utils/src/main/java/org/orcid/utils/jersey/JerseyClientHelper.java @@ -7,7 +7,7 @@ import java.util.Map.Entry; import org.apache.commons.lang3.StringUtils; -import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; +import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager; import org.glassfish.jersey.client.ClientProperties; import org.glassfish.jersey.client.authentication.HttpAuthenticationFeature; import org.springframework.beans.factory.DisposableBean; diff --git a/orcid-web/src/main/java/org/orcid/frontend/spring/configuration/ResourceHandlersConfiguration.java b/orcid-web/src/main/java/org/orcid/frontend/spring/configuration/ResourceHandlersConfiguration.java index b5797b95e70..084259f77e8 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/spring/configuration/ResourceHandlersConfiguration.java +++ b/orcid-web/src/main/java/org/orcid/frontend/spring/configuration/ResourceHandlersConfiguration.java @@ -5,13 +5,13 @@ import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import org.springframework.web.servlet.resource.FixedVersionStrategy; import org.springframework.web.servlet.resource.VersionResourceResolver; @Configuration @EnableWebMvc -public class ResourceHandlersConfiguration extends WebMvcConfigurerAdapter { +public class ResourceHandlersConfiguration implements WebMvcConfigurer { @Value("${org.orcid.frontend.static.resource.cache.enabled:true}") private boolean cacheResources; diff --git a/orcid-web/src/main/java/org/orcid/frontend/spring/web/servlet/i18n/LocaleChangeInterceptor.java b/orcid-web/src/main/java/org/orcid/frontend/spring/web/servlet/i18n/LocaleChangeInterceptor.java index 835c1591994..09f18eb5091 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/spring/web/servlet/i18n/LocaleChangeInterceptor.java +++ b/orcid-web/src/main/java/org/orcid/frontend/spring/web/servlet/i18n/LocaleChangeInterceptor.java @@ -10,8 +10,8 @@ import org.springframework.security.web.savedrequest.HttpSessionRequestCache; import org.springframework.security.web.savedrequest.SavedRequest; import org.springframework.util.StringUtils; +import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.LocaleResolver; -import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; import org.springframework.web.servlet.support.RequestContextUtils; /** @@ -22,7 +22,7 @@ * @since 20.06.2003 * @see org.springframework.web.servlet.LocaleResolver */ -public class LocaleChangeInterceptor extends HandlerInterceptorAdapter { +public class LocaleChangeInterceptor implements HandlerInterceptor { /** * Default name of the locale specification parameter: "locale". diff --git a/pom.xml b/pom.xml index c77d8ff8be3..6ae16f1fa04 100644 --- a/pom.xml +++ b/pom.xml @@ -25,7 +25,7 @@ the software. The parent ORCID pom that all sub-projects reside under - 5.3.20 + 6.0.23 5.6.2 4.9.1 2.27 @@ -185,17 +185,17 @@ the software. rewrite-maven-plugin 5.43.0 - org.openrewrite.java.migrate.UpgradeToJava17 - + org.openrewrite.java.spring.framework.UpgradeSpringFramework_6_0 + org.openrewrite.recipe - rewrite-migrate-java - 2.20.0 - + rewrite-spring + 5.18.0 + @@ -381,7 +381,6 @@ the software. junit junit - ${junit.version} test @@ -673,15 +672,15 @@ the software. ${jackson.version} - org.apache.httpcomponents - httpclient - 4.5.13 + org.apache.httpcomponents.client5 + httpclient5 + 5.3.1 compile - org.apache.httpcomponents - httpcore - 4.4.4 + org.apache.httpcomponents.core5 + httpcore5 + 5.3.6 compile From 80c1ad622bee5ccedcdc8f7d29e7f2a10a7833e6 Mon Sep 17 00:00:00 2001 From: Camelia Dumitru Date: Tue, 7 Apr 2026 16:25:03 +0100 Subject: [PATCH 19/77] fixed the httpclient missing library --- orcid-utils/pom.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/orcid-utils/pom.xml b/orcid-utils/pom.xml index fd121b239c3..65f758cea72 100644 --- a/orcid-utils/pom.xml +++ b/orcid-utils/pom.xml @@ -65,6 +65,10 @@ solr-solrj ${solr.version} + + org.apache.httpcomponents.client5 + httpclient5 + From 163655e12eba745dc19085c8d701c2d1aad9a07b Mon Sep 17 00:00:00 2001 From: Camelia Dumitru Date: Tue, 7 Apr 2026 18:17:39 +0100 Subject: [PATCH 20/77] Upgrade to jakarta ...work in progress --- orcid-api-common/pom.xml | 4 +- .../common/filter/ApiVersionCheckFilter.java | 2 +- .../api/common/filter/ApiVersionFilter.java | 8 +- .../filter/ClientIdAttributeFilter.java | 8 +- .../filter/DefaultApiVersionFilter.java | 8 +- .../api/common/jaxb/OrcidExceptionMapper.java | 2 +- .../oauth/APIAuthenticationEntryPoint.java | 6 +- .../oauth/OrcidAPIAccessDeniedHandler.java | 6 +- .../oauth/OrcidBearerTokenFilter.java | 6 +- .../oauth/RevokeTokenEndpointFilter.java | 12 +-- .../filter/ApiVersionCheckFilterTest.java | 4 +- .../orcid/api/filters/AnalyticsFilter.java | 2 +- .../server/MemberV3ApiServiceImplV3_0.java | 2 +- orcid-core/pom.xml | 14 ++-- .../core/common/manager/EventManager.java | 2 +- .../common/manager/impl/EventManagerImpl.java | 2 +- .../core/exception/OrcidApiException.java | 2 +- .../exception/OrcidBadRequestException.java | 2 +- .../exception/OrcidForbiddenException.java | 2 +- .../exception/OrcidUnauthorizedException.java | 2 +- ...hStartParameterLimitExceededException.java | 2 +- .../org/orcid/core/filters/PingFilter.java | 8 +- .../core/manager/OrcidSearchManager.java | 4 +- .../manager/impl/EncryptionManagerImpl.java | 5 -- .../manager/impl/NotificationManagerImpl.java | 2 - .../manager/impl/OrcidSearchManagerImpl.java | 3 +- .../core/manager/impl/OrcidUrlManager.java | 6 +- .../manager/impl/RegistrationManagerImpl.java | 2 - .../orcid/core/manager/v3/EmailManager.java | 2 +- .../core/manager/v3/OrcidSearchManager.java | 9 ++- .../manager/v3/impl/EmailManagerImpl.java | 2 +- .../v3/impl/NotificationManagerImpl.java | 5 +- .../v3/impl/OrcidSearchManagerImpl.java | 9 ++- .../org/orcid/core/solr/CSVSolrClient.java | 3 +- .../orcid/core/utils/OrcidRequestUtil.java | 2 +- .../orcid/core/web/filters/AcceptFilter.java | 10 +-- .../filters/AcceptHeaderRequestWrapper.java | 4 +- .../orcid/core/web/filters/CorsFilter.java | 8 +- .../orcid/core/web/filters/CorsFilterWeb.java | 8 +- .../web/filters/CrossDomainWebManger.java | 2 +- .../filters/FilterServletOutputStream.java | 4 +- .../web/filters/GenericResponseWrapper.java | 6 +- .../core/web/filters/JsonpCallbackFilter.java | 10 +-- .../web/filters/JsonpCallbackFilterWeb.java | 10 +-- .../filters/SanitizeAuthenticationFilter.java | 10 +-- .../core/web/filters/StaticContentFilter.java | 8 +- .../manager/impl/OrcidUrlManagerTest.java | 4 +- orcid-internal-api/pom.xml | 4 +- orcid-persistence/pom.xml | 8 +- .../spring/OrcidEntityManagerFactory.java | 4 +- .../orcid/api/filters/AnalyticsFilter.java | 2 +- .../orcid/api/filters/ApiRateLimitFilter.java | 8 +- .../api/filters/PutAuthTokenActionFilter.java | 8 +- .../server/PublicV2ApiServiceImplV2_0.java | 2 +- .../server/PublicV2ApiServiceImplV2_1.java | 2 +- .../PublicV2ApiServiceDelegator.java | 2 +- .../impl/PublicV2ApiServiceDelegatorImpl.java | 2 +- ...licV2ApiServiceVersionedDelegatorImpl.java | 2 +- .../server/PublicV3ApiServiceImplV3_0.java | 2 +- .../PublicV3ApiServiceDelegator.java | 2 +- .../impl/PublicV3ApiServiceDelegatorImpl.java | 2 +- .../api/filters/ApiRateLimitFilterTest.java | 4 +- orcid-utils/pom.xml | 4 +- orcid-web/pom.xml | 4 +- .../MFAAuthenticationDetailsSource.java | 2 +- .../MFAWebAuthenticationDetails.java | 4 +- .../frontend/oauth2/RevokeController.java | 2 +- .../AjaxAuthenticationFailureHandler.java | 6 +- .../AjaxAuthenticationSuccessHandler.java | 6 +- .../AjaxAuthenticationSuccessHandlerBase.java | 4 +- .../spring/LoggingStrictHttpFirewall.java | 4 +- .../spring/OrcidAccessDeniedHandler.java | 6 +- ...olethAjaxAuthenticationSuccessHandler.java | 6 +- ...ocialAjaxAuthenticationSuccessHandler.java | 6 +- .../configuration/OrcidRequestCache.java | 4 +- .../i18n/OrcidCookieLocaleResolver.java | 4 +- .../OrcidRedisIndexedSessionRepository.java | 2 +- .../servlet/i18n/LocaleChangeInterceptor.java | 6 +- .../web/social/config/SocialSignInUtils.java | 4 +- .../social/config/UserCookieGenerator.java | 6 +- .../web/controllers/AdminController.java | 4 +- .../controllers/AffiliationsController.java | 2 +- .../web/controllers/BaseController.java | 4 +- .../controllers/BaseWorkspaceController.java | 4 +- .../web/controllers/ClaimController.java | 4 +- .../controllers/DeveloperToolsController.java | 2 +- .../web/controllers/FundingsController.java | 2 +- .../web/controllers/GetMyDataController.java | 2 +- .../web/controllers/HomeController.java | 6 +- .../web/controllers/LoginController.java | 4 +- .../controllers/ManageProfileController.java | 4 +- .../controllers/NotificationController.java | 2 +- .../OauthGenericCallsController.java | 2 +- .../web/controllers/OpenIDController.java | 2 +- .../controllers/PasswordResetController.java | 4 +- .../controllers/PeerReviewsController.java | 2 +- .../controllers/PublicProfileController.java | 4 +- .../controllers/RegistrationController.java | 4 +- .../web/controllers/ShibbolethController.java | 4 +- .../web/controllers/SocialController.java | 4 +- .../web/controllers/StatusController.java | 2 +- .../TwoFactorAuthenticationController.java | 4 +- .../web/controllers/WorksController.java | 2 +- .../web/controllers/WorkspaceController.java | 6 +- .../web/filter/OrcidSwitchUserFilter.java | 2 +- .../frontend/oauth2/RevokeControllerTest.java | 2 +- .../AdminControllerLegacyTest.java | 6 +- .../web/controllers/AdminControllerTest.java | 4 +- .../web/controllers/ClaimControllerTest.java | 4 +- .../controllers/FundingsControllerTest.java | 4 +- .../web/controllers/OrgControllerTest.java | 2 +- .../PasswordResetControllerTest.java | 4 +- .../PeerReviewsControllerTest.java | 2 +- .../PublicProfileControllerTest.java | 4 +- .../PublicRecordControllerLegacyTest.java | 4 +- .../PublicRecordControllerTest.java | 4 +- .../RegistrationControllerTest.java | 6 +- .../ResearchResourceControllerTest.java | 4 +- .../controllers/ShibbolethControllerTest.java | 6 +- .../web/controllers/SpamControllerTest.java | 4 +- ...TwoFactorAuthenticationControllerTest.java | 4 +- .../web/controllers/WorksControllerTest.java | 4 +- pom.xml | 81 ++++++++++--------- 123 files changed, 309 insertions(+), 300 deletions(-) diff --git a/orcid-api-common/pom.xml b/orcid-api-common/pom.xml index 6a879986df1..48cbdbed5dd 100644 --- a/orcid-api-common/pom.xml +++ b/orcid-api-common/pom.xml @@ -88,8 +88,8 @@ - javax.servlet - javax.servlet-api + jakarta.servlet + jakarta.servlet-api provided diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/filter/ApiVersionCheckFilter.java b/orcid-api-common/src/main/java/org/orcid/api/common/filter/ApiVersionCheckFilter.java index dd04afa2a40..0ff3deb3b47 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/filter/ApiVersionCheckFilter.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/filter/ApiVersionCheckFilter.java @@ -3,7 +3,7 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import javax.ws.rs.container.ContainerRequestContext; import javax.ws.rs.container.ContainerRequestFilter; import javax.ws.rs.core.Context; diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/filter/ApiVersionFilter.java b/orcid-api-common/src/main/java/org/orcid/api/common/filter/ApiVersionFilter.java index 921a50f7283..00fe971dff2 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/filter/ApiVersionFilter.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/filter/ApiVersionFilter.java @@ -4,10 +4,10 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.orcid.core.version.ApiSection; import org.slf4j.Logger; diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/filter/ClientIdAttributeFilter.java b/orcid-api-common/src/main/java/org/orcid/api/common/filter/ClientIdAttributeFilter.java index e078a4fbec5..7272e138eee 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/filter/ClientIdAttributeFilter.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/filter/ClientIdAttributeFilter.java @@ -3,10 +3,10 @@ import java.io.IOException; import javax.annotation.Resource; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.orcid.core.manager.v3.SourceManager; import org.springframework.web.filter.OncePerRequestFilter; diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/filter/DefaultApiVersionFilter.java b/orcid-api-common/src/main/java/org/orcid/api/common/filter/DefaultApiVersionFilter.java index bd7538716d8..c4c95b65542 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/filter/DefaultApiVersionFilter.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/filter/DefaultApiVersionFilter.java @@ -8,10 +8,10 @@ import java.util.regex.Pattern; import javax.annotation.Resource; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/jaxb/OrcidExceptionMapper.java b/orcid-api-common/src/main/java/org/orcid/api/common/jaxb/OrcidExceptionMapper.java index ee9f3285b6e..5333f685a30 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/jaxb/OrcidExceptionMapper.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/jaxb/OrcidExceptionMapper.java @@ -4,7 +4,7 @@ import javax.annotation.Resource; import javax.persistence.NoResultException; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import javax.ws.rs.*; import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/APIAuthenticationEntryPoint.java b/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/APIAuthenticationEntryPoint.java index 45579cb450f..58369f28cfc 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/APIAuthenticationEntryPoint.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/APIAuthenticationEntryPoint.java @@ -5,9 +5,9 @@ import org.springframework.security.core.AuthenticationException; import org.springframework.security.web.AuthenticationEntryPoint; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; public class APIAuthenticationEntryPoint implements AuthenticationEntryPoint { diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidAPIAccessDeniedHandler.java b/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidAPIAccessDeniedHandler.java index fd73e4d0157..106c4d7b4ae 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidAPIAccessDeniedHandler.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidAPIAccessDeniedHandler.java @@ -5,9 +5,9 @@ import org.springframework.security.access.AccessDeniedException; import org.springframework.security.web.access.AccessDeniedHandler; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; public class OrcidAPIAccessDeniedHandler implements AccessDeniedHandler { diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidBearerTokenFilter.java b/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidBearerTokenFilter.java index 18728a5c4cd..93b4debfc24 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidBearerTokenFilter.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidBearerTokenFilter.java @@ -16,9 +16,9 @@ import org.springframework.web.context.request.ServletRequestAttributes; import javax.annotation.Resource; -import javax.servlet.*; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.*; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.net.URISyntaxException; import java.security.AccessControlException; diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/RevokeTokenEndpointFilter.java b/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/RevokeTokenEndpointFilter.java index be3f6fae8a4..a8446b9c3b8 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/RevokeTokenEndpointFilter.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/RevokeTokenEndpointFilter.java @@ -3,12 +3,12 @@ import java.io.IOException; import javax.annotation.Resource; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.orcid.core.locale.LocaleManager; import org.orcid.utils.OrcidStringUtils; diff --git a/orcid-api-common/src/test/java/org/orcid/api/common/filter/ApiVersionCheckFilterTest.java b/orcid-api-common/src/test/java/org/orcid/api/common/filter/ApiVersionCheckFilterTest.java index da1d4145c64..e27bfb840ac 100644 --- a/orcid-api-common/src/test/java/org/orcid/api/common/filter/ApiVersionCheckFilterTest.java +++ b/orcid-api-common/src/test/java/org/orcid/api/common/filter/ApiVersionCheckFilterTest.java @@ -8,8 +8,8 @@ import java.util.Enumeration; import java.util.List; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletRequestWrapper; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequestWrapper; import javax.ws.rs.core.SecurityContext; import org.junit.Before; diff --git a/orcid-api-web/src/main/java/org/orcid/api/filters/AnalyticsFilter.java b/orcid-api-web/src/main/java/org/orcid/api/filters/AnalyticsFilter.java index 0dc3be5d1ea..ba1333c62e5 100644 --- a/orcid-api-web/src/main/java/org/orcid/api/filters/AnalyticsFilter.java +++ b/orcid-api-web/src/main/java/org/orcid/api/filters/AnalyticsFilter.java @@ -1,7 +1,7 @@ package org.orcid.api.filters; import javax.inject.Inject; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import javax.ws.rs.core.Context; import javax.ws.rs.ext.Provider; diff --git a/orcid-api-web/src/main/java/org/orcid/api/memberV3/server/MemberV3ApiServiceImplV3_0.java b/orcid-api-web/src/main/java/org/orcid/api/memberV3/server/MemberV3ApiServiceImplV3_0.java index 4f0244c32e5..c8f2cfe3991 100644 --- a/orcid-api-web/src/main/java/org/orcid/api/memberV3/server/MemberV3ApiServiceImplV3_0.java +++ b/orcid-api-web/src/main/java/org/orcid/api/memberV3/server/MemberV3ApiServiceImplV3_0.java @@ -67,7 +67,7 @@ import java.util.Map; import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import javax.ws.rs.Consumes; import javax.ws.rs.DELETE; import javax.ws.rs.DefaultValue; diff --git a/orcid-core/pom.xml b/orcid-core/pom.xml index 15ba410cd89..c9f515b05f4 100644 --- a/orcid-core/pom.xml +++ b/orcid-core/pom.xml @@ -163,8 +163,8 @@ compile - javax.servlet - javax.servlet-api + jakarta.servlet + jakarta.servlet-api compile @@ -290,11 +290,11 @@ 3.6 - - javax.jms - javax.jms-api - 2.0.1 - + + jakarta.jms + jakarta.jms-api + 3.1.0 + diff --git a/orcid-core/src/main/java/org/orcid/core/common/manager/EventManager.java b/orcid-core/src/main/java/org/orcid/core/common/manager/EventManager.java index 5772b4db982..495b5f71ba9 100644 --- a/orcid-core/src/main/java/org/orcid/core/common/manager/EventManager.java +++ b/orcid-core/src/main/java/org/orcid/core/common/manager/EventManager.java @@ -1,6 +1,6 @@ package org.orcid.core.common.manager; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.orcid.persistence.jpa.entities.EventType; diff --git a/orcid-core/src/main/java/org/orcid/core/common/manager/impl/EventManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/common/manager/impl/EventManagerImpl.java index daf630de743..a72e2dceccb 100644 --- a/orcid-core/src/main/java/org/orcid/core/common/manager/impl/EventManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/common/manager/impl/EventManagerImpl.java @@ -6,7 +6,7 @@ import java.util.Date; import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.apache.commons.lang.StringUtils; import org.orcid.core.common.manager.EventManager; diff --git a/orcid-core/src/main/java/org/orcid/core/exception/OrcidApiException.java b/orcid-core/src/main/java/org/orcid/core/exception/OrcidApiException.java index 0d66b3fda16..d60f8d61ffc 100644 --- a/orcid-core/src/main/java/org/orcid/core/exception/OrcidApiException.java +++ b/orcid-core/src/main/java/org/orcid/core/exception/OrcidApiException.java @@ -1,6 +1,6 @@ package org.orcid.core.exception; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletResponse; import org.orcid.jaxb.model.message.ErrorDesc; import org.orcid.jaxb.model.message.OrcidMessage; diff --git a/orcid-core/src/main/java/org/orcid/core/exception/OrcidBadRequestException.java b/orcid-core/src/main/java/org/orcid/core/exception/OrcidBadRequestException.java index 192afe57ec5..b0674a7e678 100644 --- a/orcid-core/src/main/java/org/orcid/core/exception/OrcidBadRequestException.java +++ b/orcid-core/src/main/java/org/orcid/core/exception/OrcidBadRequestException.java @@ -1,6 +1,6 @@ package org.orcid.core.exception; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletResponse; /** * @author Declan Newman (declan) Date: 01/03/2012 diff --git a/orcid-core/src/main/java/org/orcid/core/exception/OrcidForbiddenException.java b/orcid-core/src/main/java/org/orcid/core/exception/OrcidForbiddenException.java index 31d9abfe13e..8b091b0bcd9 100644 --- a/orcid-core/src/main/java/org/orcid/core/exception/OrcidForbiddenException.java +++ b/orcid-core/src/main/java/org/orcid/core/exception/OrcidForbiddenException.java @@ -1,6 +1,6 @@ package org.orcid.core.exception; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletResponse; public class OrcidForbiddenException extends OrcidApiException { /** diff --git a/orcid-core/src/main/java/org/orcid/core/exception/OrcidUnauthorizedException.java b/orcid-core/src/main/java/org/orcid/core/exception/OrcidUnauthorizedException.java index 0f6eed0a5e8..18291ab1183 100644 --- a/orcid-core/src/main/java/org/orcid/core/exception/OrcidUnauthorizedException.java +++ b/orcid-core/src/main/java/org/orcid/core/exception/OrcidUnauthorizedException.java @@ -1,6 +1,6 @@ package org.orcid.core.exception; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletResponse; /** * @author Declan Newman (declan) Date: 01/03/2012 diff --git a/orcid-core/src/main/java/org/orcid/core/exception/SearchStartParameterLimitExceededException.java b/orcid-core/src/main/java/org/orcid/core/exception/SearchStartParameterLimitExceededException.java index f6c53ef69a8..4bca5758eb1 100644 --- a/orcid-core/src/main/java/org/orcid/core/exception/SearchStartParameterLimitExceededException.java +++ b/orcid-core/src/main/java/org/orcid/core/exception/SearchStartParameterLimitExceededException.java @@ -1,6 +1,6 @@ package org.orcid.core.exception; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletResponse; public class SearchStartParameterLimitExceededException extends OrcidApiException { diff --git a/orcid-core/src/main/java/org/orcid/core/filters/PingFilter.java b/orcid-core/src/main/java/org/orcid/core/filters/PingFilter.java index bfca76903dd..30e525ecab0 100644 --- a/orcid-core/src/main/java/org/orcid/core/filters/PingFilter.java +++ b/orcid-core/src/main/java/org/orcid/core/filters/PingFilter.java @@ -1,9 +1,9 @@ package org.orcid.core.filters; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.web.filter.OncePerRequestFilter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/OrcidSearchManager.java b/orcid-core/src/main/java/org/orcid/core/manager/OrcidSearchManager.java index 1d4aa684e99..1294fc581ac 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/OrcidSearchManager.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/OrcidSearchManager.java @@ -4,6 +4,8 @@ import java.util.Map; import org.orcid.jaxb.model.search_v2.Search; +import org.apache.hc.core5.http.ParseException; + /** * Class to retrieve OrcidMessage objects (with nested Search Results) relating @@ -24,5 +26,5 @@ public interface OrcidSearchManager { static final int MAX_SEARCH_ROWS = 200; - Search findOrcidIds(Map> queryParameters); + Search findOrcidIds(Map> queryParameters) throws ParseException; } \ No newline at end of file diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/EncryptionManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/EncryptionManagerImpl.java index 5288c614584..153ff50b6f2 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/EncryptionManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/EncryptionManagerImpl.java @@ -15,7 +15,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.InitializingBean; -import org.springframework.beans.factory.annotation.Required; import org.springframework.security.crypto.password.PasswordEncoder; public class EncryptionManagerImpl implements EncryptionManager,PasswordEncoder, InitializingBean { @@ -46,22 +45,18 @@ public void setIterationCountForInternalEncryption(int iterationCountForInternal this.iterationCountForInternalEncyrption = iterationCountForInternalEncyrption; } - @Required public void setInternalEncryptor(PBEStringEncryptor internalEncryptor) { this.internalEncryptor = internalEncryptor; } - @Required public void setLegacyExternalEncryptor(PBEStringEncryptor legacyExternalEncryptor) { this.legacyExternalEncryptor = legacyExternalEncryptor; } - @Required public void setExternalEncryptor(PBEStringEncryptor externalEncryptor) { this.externalEncryptor = externalEncryptor; } - @Required public void setPasswordEncryptor(StringDigester passwordEncryptor) { this.passwordEncryptor = passwordEncryptor; } diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/NotificationManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/NotificationManagerImpl.java index 7c61b3aace1..a57583b3f86 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/NotificationManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/NotificationManagerImpl.java @@ -58,7 +58,6 @@ import org.orcid.persistence.jpa.entities.SourceEntity; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Required; import org.springframework.context.MessageSource; import org.springframework.transaction.annotation.Transactional; @@ -122,7 +121,6 @@ public class NotificationManagerImpl extends ManagerReadOnlyBaseImpl implements private static final Logger LOGGER = LoggerFactory.getLogger(NotificationManagerImpl.class); - @Required public void setEncryptionManager(EncryptionManager encryptionManager) { this.encryptionManager = encryptionManager; } diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/OrcidSearchManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/OrcidSearchManagerImpl.java index 19278d47e48..8d777333aa2 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/OrcidSearchManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/OrcidSearchManagerImpl.java @@ -14,6 +14,7 @@ import org.orcid.jaxb.model.common_v2.OrcidIdentifier; import org.orcid.jaxb.model.search_v2.Result; import org.orcid.jaxb.model.search_v2.Search; +import org.apache.hc.core5.http.ParseException; public class OrcidSearchManagerImpl implements OrcidSearchManager { @@ -27,7 +28,7 @@ public class OrcidSearchManagerImpl implements OrcidSearchManager { private OrcidSolrProfileClient orcidSolrProfileClient; @Override - public Search findOrcidIds(Map> queryParameters) { + public Search findOrcidIds(Map> queryParameters) throws ParseException{ Search search = new Search(); OrcidSolrResults orcidSolrResults = orcidSolrProfileClient.findByDocumentCriteria(queryParameters); if (orcidSolrResults != null && orcidSolrResults.getResults() != null) { diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/OrcidUrlManager.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/OrcidUrlManager.java index 705c302a8d6..2a00a0f3815 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/OrcidUrlManager.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/OrcidUrlManager.java @@ -5,9 +5,9 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; -import javax.servlet.ServletContext; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletContext; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.orcid.core.constants.OrcidOauth2Constants; import org.slf4j.Logger; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/RegistrationManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/RegistrationManagerImpl.java index af8aeb5cf9b..0510caf19f6 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/RegistrationManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/RegistrationManagerImpl.java @@ -46,7 +46,6 @@ import org.orcid.pojo.ajaxForm.Text; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Required; import org.springframework.transaction.TransactionStatus; import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.support.TransactionCallback; @@ -102,7 +101,6 @@ public class RegistrationManagerImpl implements RegistrationManager { @Resource private OrgDisambiguatedManager orgDisambiguatedManager; - @Required public void setEncryptionManager(EncryptionManager encryptionManager) { this.encryptionManager = encryptionManager; } diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/EmailManager.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/EmailManager.java index 9779888603f..02a6dd480f8 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/EmailManager.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/EmailManager.java @@ -3,7 +3,7 @@ import java.util.List; import java.util.Map; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.orcid.core.manager.v3.read_only.EmailManagerReadOnly; import org.orcid.jaxb.model.v3.release.common.Visibility; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/OrcidSearchManager.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/OrcidSearchManager.java index 6396623fbaf..c3ad9d9c1dd 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/OrcidSearchManager.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/OrcidSearchManager.java @@ -6,6 +6,9 @@ import org.orcid.jaxb.model.v3.release.search.Search; import org.orcid.jaxb.model.v3.release.search.expanded.ExpandedSearch; +import org.apache.hc.core5.http.ParseException; + + /** * Class to retrieve OrcidMessage objects (with nested Search Results) relating * to all the information that could be found given the search criteria found. @@ -25,11 +28,11 @@ public interface OrcidSearchManager { static final int MAX_SEARCH_ROWS = 1000; - Search findOrcidIds(Map> queryParameters); + Search findOrcidIds(Map> queryParameters) throws ParseException; - Search findOrcidsByQuery(String query, Integer start, Integer rows); + Search findOrcidsByQuery(String query, Integer start, Integer rows) throws ParseException; - String findOrcidIdsAsCSV(Map> solrParams); + String findOrcidIdsAsCSV(Map> solrParams) throws ParseException; ExpandedSearch expandedSearch(Map> solrParams); } \ No newline at end of file diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/EmailManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/EmailManagerImpl.java index 5b59dd67221..f4f5c38448f 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/EmailManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/EmailManagerImpl.java @@ -6,7 +6,7 @@ import java.util.Map; import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.apache.commons.lang3.StringUtils; import org.orcid.core.manager.v3.EmailManager; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/NotificationManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/NotificationManagerImpl.java index f469065dd23..58b5ea012dd 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/NotificationManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/NotificationManagerImpl.java @@ -42,7 +42,6 @@ import org.orcid.persistence.jpa.entities.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Required; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.MessageSource; import org.springframework.transaction.annotation.Transactional; @@ -141,12 +140,12 @@ public class NotificationManagerImpl extends ManagerReadOnlyBaseImpl implements @Value("${org.orcid.notifications.auto.delete.batchsize:25000}") private Integer autoDeleteBatchSize; - @Required + public void setTemplateManager(TemplateManager templateManager) { this.templateManager = templateManager; } - @Required + public void setEncryptionManager(EncryptionManager encryptionManager) { this.encryptionManager = encryptionManager; } diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/OrcidSearchManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/OrcidSearchManagerImpl.java index 07f8998edbd..f17594b743c 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/OrcidSearchManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/OrcidSearchManagerImpl.java @@ -25,6 +25,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.apache.hc.core5.http.ParseException; + + public class OrcidSearchManagerImpl implements OrcidSearchManager { private static final Logger LOGGER = LoggerFactory.getLogger(OrcidSearchManagerImpl.class); @@ -42,7 +45,7 @@ public class OrcidSearchManagerImpl implements OrcidSearchManager { private CSVSolrClient csvSolrClient; @Override - public Search findOrcidIds(Map> queryParameters) { + public Search findOrcidIds(Map> queryParameters) throws ParseException { Search search = new Search(); OrcidSolrResults orcidSolrResults = orcidSolrProfileClient.findByDocumentCriteria(queryParameters); setSearchResults(orcidSolrResults, search); @@ -50,7 +53,7 @@ public Search findOrcidIds(Map> queryParameters) { } @Override - public Search findOrcidsByQuery(String query, Integer start, Integer rows) { + public Search findOrcidsByQuery(String query, Integer start, Integer rows) throws ParseException { Search search = new Search(); OrcidSolrResults orcidSolrResults = orcidSolrProfileClient.findByDocumentCriteria(query, start, rows); setSearchResults(orcidSolrResults, search); @@ -71,7 +74,7 @@ private void setSearchResults(OrcidSolrResults solrResults, Search searchResults } @Override - public String findOrcidIdsAsCSV(Map> solrParams) { + public String findOrcidIdsAsCSV(Map> solrParams) throws ParseException { try { return csvSolrClient.findCSVByDocumentCriteria(solrParams); } catch (ClientProtocolException e) { diff --git a/orcid-core/src/main/java/org/orcid/core/solr/CSVSolrClient.java b/orcid-core/src/main/java/org/orcid/core/solr/CSVSolrClient.java index 56149edbfb8..04e8909da01 100644 --- a/orcid-core/src/main/java/org/orcid/core/solr/CSVSolrClient.java +++ b/orcid-core/src/main/java/org/orcid/core/solr/CSVSolrClient.java @@ -12,6 +12,7 @@ import org.apache.hc.client5.http.classic.methods.HttpGet; import org.apache.hc.client5.http.impl.classic.CloseableHttpClient; import org.apache.hc.client5.http.impl.classic.HttpClients; +import org.apache.hc.core5.http.ParseException; public class CSVSolrClient extends OrcidSolrClient { @@ -21,7 +22,7 @@ public CSVSolrClient(String url) { this.baseUrl = url; } - public String findCSVByDocumentCriteria(Map> queryMap) throws URISyntaxException, ClientProtocolException, IOException { + public String findCSVByDocumentCriteria(Map> queryMap) throws URISyntaxException, ClientProtocolException, IOException, ParseException { CloseableHttpClient httpClient = HttpClients.createDefault(); try { diff --git a/orcid-core/src/main/java/org/orcid/core/utils/OrcidRequestUtil.java b/orcid-core/src/main/java/org/orcid/core/utils/OrcidRequestUtil.java index d7ed179f8cc..761627e9227 100644 --- a/orcid-core/src/main/java/org/orcid/core/utils/OrcidRequestUtil.java +++ b/orcid-core/src/main/java/org/orcid/core/utils/OrcidRequestUtil.java @@ -1,6 +1,6 @@ package org.orcid.core.utils; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; /** * @author Shobhit Tyagi diff --git a/orcid-core/src/main/java/org/orcid/core/web/filters/AcceptFilter.java b/orcid-core/src/main/java/org/orcid/core/web/filters/AcceptFilter.java index 9b63e74fe3c..b26935445d4 100644 --- a/orcid-core/src/main/java/org/orcid/core/web/filters/AcceptFilter.java +++ b/orcid-core/src/main/java/org/orcid/core/web/filters/AcceptFilter.java @@ -12,11 +12,11 @@ import java.io.IOException; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletRequestWrapper; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequestWrapper; +import jakarta.servlet.http.HttpServletResponse; import javax.ws.rs.core.MediaType; import org.orcid.core.manager.impl.OrcidUrlManager; diff --git a/orcid-core/src/main/java/org/orcid/core/web/filters/AcceptHeaderRequestWrapper.java b/orcid-core/src/main/java/org/orcid/core/web/filters/AcceptHeaderRequestWrapper.java index f0ebb55c6d8..8523a67a8a4 100644 --- a/orcid-core/src/main/java/org/orcid/core/web/filters/AcceptHeaderRequestWrapper.java +++ b/orcid-core/src/main/java/org/orcid/core/web/filters/AcceptHeaderRequestWrapper.java @@ -5,8 +5,8 @@ import java.util.Enumeration; import java.util.List; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletRequestWrapper; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequestWrapper; /** * diff --git a/orcid-core/src/main/java/org/orcid/core/web/filters/CorsFilter.java b/orcid-core/src/main/java/org/orcid/core/web/filters/CorsFilter.java index 176b536481f..0914a6f68f9 100644 --- a/orcid-core/src/main/java/org/orcid/core/web/filters/CorsFilter.java +++ b/orcid-core/src/main/java/org/orcid/core/web/filters/CorsFilter.java @@ -4,10 +4,10 @@ import java.net.URISyntaxException; import javax.annotation.Resource; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/orcid-core/src/main/java/org/orcid/core/web/filters/CorsFilterWeb.java b/orcid-core/src/main/java/org/orcid/core/web/filters/CorsFilterWeb.java index 95b1fc7cb55..c9054d348a8 100644 --- a/orcid-core/src/main/java/org/orcid/core/web/filters/CorsFilterWeb.java +++ b/orcid-core/src/main/java/org/orcid/core/web/filters/CorsFilterWeb.java @@ -6,10 +6,10 @@ import java.util.regex.Pattern; import javax.annotation.Resource; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/orcid-core/src/main/java/org/orcid/core/web/filters/CrossDomainWebManger.java b/orcid-core/src/main/java/org/orcid/core/web/filters/CrossDomainWebManger.java index de4b7a2a739..8c14da08a93 100644 --- a/orcid-core/src/main/java/org/orcid/core/web/filters/CrossDomainWebManger.java +++ b/orcid-core/src/main/java/org/orcid/core/web/filters/CrossDomainWebManger.java @@ -9,7 +9,7 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.orcid.core.manager.impl.OrcidUrlManager; import org.orcid.pojo.ajaxForm.PojoUtil; diff --git a/orcid-core/src/main/java/org/orcid/core/web/filters/FilterServletOutputStream.java b/orcid-core/src/main/java/org/orcid/core/web/filters/FilterServletOutputStream.java index 2fbd9643fef..a47ffc10715 100644 --- a/orcid-core/src/main/java/org/orcid/core/web/filters/FilterServletOutputStream.java +++ b/orcid-core/src/main/java/org/orcid/core/web/filters/FilterServletOutputStream.java @@ -4,8 +4,8 @@ import java.io.IOException; import java.io.OutputStream; -import javax.servlet.ServletOutputStream; -import javax.servlet.WriteListener; +import jakarta.servlet.ServletOutputStream; +import jakarta.servlet.WriteListener; /** * Extends ServletOutputStream for JsonpCallbackFilter diff --git a/orcid-core/src/main/java/org/orcid/core/web/filters/GenericResponseWrapper.java b/orcid-core/src/main/java/org/orcid/core/web/filters/GenericResponseWrapper.java index 4eac420d12e..d1ae9d1c69d 100644 --- a/orcid-core/src/main/java/org/orcid/core/web/filters/GenericResponseWrapper.java +++ b/orcid-core/src/main/java/org/orcid/core/web/filters/GenericResponseWrapper.java @@ -3,9 +3,9 @@ import java.io.ByteArrayOutputStream; import java.io.PrintWriter; -import javax.servlet.ServletOutputStream; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpServletResponseWrapper; +import jakarta.servlet.ServletOutputStream; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletResponseWrapper; /** * Extends HttpServletResponseWrapper for JsonpCallbackFilter diff --git a/orcid-core/src/main/java/org/orcid/core/web/filters/JsonpCallbackFilter.java b/orcid-core/src/main/java/org/orcid/core/web/filters/JsonpCallbackFilter.java index 77a09288ff7..0fab5a5b09a 100644 --- a/orcid-core/src/main/java/org/orcid/core/web/filters/JsonpCallbackFilter.java +++ b/orcid-core/src/main/java/org/orcid/core/web/filters/JsonpCallbackFilter.java @@ -5,11 +5,11 @@ import java.util.Map; import javax.annotation.Resource; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletRequestWrapper; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequestWrapper; +import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/orcid-core/src/main/java/org/orcid/core/web/filters/JsonpCallbackFilterWeb.java b/orcid-core/src/main/java/org/orcid/core/web/filters/JsonpCallbackFilterWeb.java index 3e11191a4cd..a000a602728 100644 --- a/orcid-core/src/main/java/org/orcid/core/web/filters/JsonpCallbackFilterWeb.java +++ b/orcid-core/src/main/java/org/orcid/core/web/filters/JsonpCallbackFilterWeb.java @@ -6,11 +6,11 @@ import java.util.Map; import javax.annotation.Resource; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletRequestWrapper; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequestWrapper; +import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/orcid-core/src/main/java/org/orcid/core/web/filters/SanitizeAuthenticationFilter.java b/orcid-core/src/main/java/org/orcid/core/web/filters/SanitizeAuthenticationFilter.java index 8de287c9b15..b02230c84b2 100644 --- a/orcid-core/src/main/java/org/orcid/core/web/filters/SanitizeAuthenticationFilter.java +++ b/orcid-core/src/main/java/org/orcid/core/web/filters/SanitizeAuthenticationFilter.java @@ -6,11 +6,11 @@ import java.util.Enumeration; import java.util.List; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletRequestWrapper; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequestWrapper; +import jakarta.servlet.http.HttpServletResponse; import org.orcid.pojo.ajaxForm.PojoUtil; import org.springframework.web.filter.OncePerRequestFilter; diff --git a/orcid-core/src/main/java/org/orcid/core/web/filters/StaticContentFilter.java b/orcid-core/src/main/java/org/orcid/core/web/filters/StaticContentFilter.java index 22fc17117f7..78579cdf557 100644 --- a/orcid-core/src/main/java/org/orcid/core/web/filters/StaticContentFilter.java +++ b/orcid-core/src/main/java/org/orcid/core/web/filters/StaticContentFilter.java @@ -4,10 +4,10 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.orcid.core.utils.ReleaseNameUtils; import org.springframework.web.filter.OncePerRequestFilter; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/impl/OrcidUrlManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/impl/OrcidUrlManagerTest.java index 67c49744cb3..5af1d7736a8 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/impl/OrcidUrlManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/impl/OrcidUrlManagerTest.java @@ -7,8 +7,8 @@ import java.net.URISyntaxException; import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.commons.lang3.tuple.Pair; diff --git a/orcid-internal-api/pom.xml b/orcid-internal-api/pom.xml index f3cab9d452f..0ae1838e988 100644 --- a/orcid-internal-api/pom.xml +++ b/orcid-internal-api/pom.xml @@ -57,8 +57,8 @@ - javax.servlet - javax.servlet-api + jakarta.servlet + jakarta.servlet-api diff --git a/orcid-persistence/pom.xml b/orcid-persistence/pom.xml index 8f63213decf..4788eb954d7 100644 --- a/orcid-persistence/pom.xml +++ b/orcid-persistence/pom.xml @@ -125,6 +125,10 @@ org.hibernate hibernate-validator + + jakarta.persistence + jakarta.persistence-api + org.liquibase liquibase-core @@ -210,8 +214,8 @@ - javax.servlet - javax.servlet-api + jakarta.servlet + jakarta.servlet-api test diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/spring/OrcidEntityManagerFactory.java b/orcid-persistence/src/main/java/org/orcid/persistence/spring/OrcidEntityManagerFactory.java index 5c40306ca99..e2dd167d322 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/spring/OrcidEntityManagerFactory.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/spring/OrcidEntityManagerFactory.java @@ -1,7 +1,7 @@ package org.orcid.persistence.spring; -import javax.persistence.EntityManager; -import javax.persistence.EntityManagerFactory; +import jakarta.persistence.EntityManager; +import jakarta.persistence.EntityManagerFactory; import org.springframework.beans.BeansException; import org.springframework.beans.factory.FactoryBean; diff --git a/orcid-pub-web/src/main/java/org/orcid/api/filters/AnalyticsFilter.java b/orcid-pub-web/src/main/java/org/orcid/api/filters/AnalyticsFilter.java index 1e990992d6a..954e2825184 100644 --- a/orcid-pub-web/src/main/java/org/orcid/api/filters/AnalyticsFilter.java +++ b/orcid-pub-web/src/main/java/org/orcid/api/filters/AnalyticsFilter.java @@ -2,7 +2,7 @@ import javax.inject.Inject; import javax.inject.Named; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import javax.ws.rs.container.ContainerRequestContext; import javax.ws.rs.container.ContainerResponseContext; import javax.ws.rs.container.ContainerResponseFilter; diff --git a/orcid-pub-web/src/main/java/org/orcid/api/filters/ApiRateLimitFilter.java b/orcid-pub-web/src/main/java/org/orcid/api/filters/ApiRateLimitFilter.java index d412a0019cf..5d9c6e726e9 100644 --- a/orcid-pub-web/src/main/java/org/orcid/api/filters/ApiRateLimitFilter.java +++ b/orcid-pub-web/src/main/java/org/orcid/api/filters/ApiRateLimitFilter.java @@ -6,10 +6,10 @@ import java.util.*; import javax.annotation.Resource; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.lang.LocaleUtils; import org.apache.commons.lang3.StringUtils; diff --git a/orcid-pub-web/src/main/java/org/orcid/api/filters/PutAuthTokenActionFilter.java b/orcid-pub-web/src/main/java/org/orcid/api/filters/PutAuthTokenActionFilter.java index 669b65f1c34..ff9bd9cc977 100644 --- a/orcid-pub-web/src/main/java/org/orcid/api/filters/PutAuthTokenActionFilter.java +++ b/orcid-pub-web/src/main/java/org/orcid/api/filters/PutAuthTokenActionFilter.java @@ -2,10 +2,10 @@ import java.io.IOException; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import javax.ws.rs.core.Context; import javax.ws.rs.ext.Provider; diff --git a/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/PublicV2ApiServiceImplV2_0.java b/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/PublicV2ApiServiceImplV2_0.java index 745509da5c3..4d4971d8bb8 100644 --- a/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/PublicV2ApiServiceImplV2_0.java +++ b/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/PublicV2ApiServiceImplV2_0.java @@ -41,7 +41,7 @@ import java.util.Map; import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import javax.ws.rs.DefaultValue; import javax.ws.rs.GET; import javax.ws.rs.Path; diff --git a/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/PublicV2ApiServiceImplV2_1.java b/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/PublicV2ApiServiceImplV2_1.java index d9c8799689a..55f03d9cfe3 100644 --- a/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/PublicV2ApiServiceImplV2_1.java +++ b/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/PublicV2ApiServiceImplV2_1.java @@ -41,7 +41,7 @@ import java.util.Map; import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import javax.ws.rs.DefaultValue; import javax.ws.rs.GET; import javax.ws.rs.Path; diff --git a/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/delegator/PublicV2ApiServiceDelegator.java b/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/delegator/PublicV2ApiServiceDelegator.java index b51e80e01e6..f8076144521 100644 --- a/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/delegator/PublicV2ApiServiceDelegator.java +++ b/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/delegator/PublicV2ApiServiceDelegator.java @@ -3,7 +3,7 @@ import java.util.List; import java.util.Map; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import javax.ws.rs.core.Response; /** diff --git a/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/delegator/impl/PublicV2ApiServiceDelegatorImpl.java b/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/delegator/impl/PublicV2ApiServiceDelegatorImpl.java index 9f1cf8c8df6..8f0d014ae75 100644 --- a/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/delegator/impl/PublicV2ApiServiceDelegatorImpl.java +++ b/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/delegator/impl/PublicV2ApiServiceDelegatorImpl.java @@ -7,7 +7,7 @@ import java.util.Map; import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import javax.ws.rs.core.Response; import org.orcid.api.common.util.ActivityUtils; diff --git a/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/delegator/impl/PublicV2ApiServiceVersionedDelegatorImpl.java b/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/delegator/impl/PublicV2ApiServiceVersionedDelegatorImpl.java index 82698b5fcfb..e9a23b4df56 100644 --- a/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/delegator/impl/PublicV2ApiServiceVersionedDelegatorImpl.java +++ b/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/delegator/impl/PublicV2ApiServiceVersionedDelegatorImpl.java @@ -4,7 +4,7 @@ import java.util.Map; import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import javax.ws.rs.core.Response; import org.orcid.api.publicV2.server.delegator.PublicV2ApiServiceDelegator; diff --git a/orcid-pub-web/src/main/java/org/orcid/api/publicV3/server/PublicV3ApiServiceImplV3_0.java b/orcid-pub-web/src/main/java/org/orcid/api/publicV3/server/PublicV3ApiServiceImplV3_0.java index 7581c577c7b..14a5e3c101f 100644 --- a/orcid-pub-web/src/main/java/org/orcid/api/publicV3/server/PublicV3ApiServiceImplV3_0.java +++ b/orcid-pub-web/src/main/java/org/orcid/api/publicV3/server/PublicV3ApiServiceImplV3_0.java @@ -63,7 +63,7 @@ import java.util.Map; import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import javax.ws.rs.DefaultValue; import javax.ws.rs.GET; import javax.ws.rs.Path; diff --git a/orcid-pub-web/src/main/java/org/orcid/api/publicV3/server/delegator/PublicV3ApiServiceDelegator.java b/orcid-pub-web/src/main/java/org/orcid/api/publicV3/server/delegator/PublicV3ApiServiceDelegator.java index a96e8649e0d..e9631afde92 100644 --- a/orcid-pub-web/src/main/java/org/orcid/api/publicV3/server/delegator/PublicV3ApiServiceDelegator.java +++ b/orcid-pub-web/src/main/java/org/orcid/api/publicV3/server/delegator/PublicV3ApiServiceDelegator.java @@ -3,7 +3,7 @@ import java.util.List; import java.util.Map; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import javax.ws.rs.core.Response; /** diff --git a/orcid-pub-web/src/main/java/org/orcid/api/publicV3/server/delegator/impl/PublicV3ApiServiceDelegatorImpl.java b/orcid-pub-web/src/main/java/org/orcid/api/publicV3/server/delegator/impl/PublicV3ApiServiceDelegatorImpl.java index f4ee683082d..2c6426856d1 100644 --- a/orcid-pub-web/src/main/java/org/orcid/api/publicV3/server/delegator/impl/PublicV3ApiServiceDelegatorImpl.java +++ b/orcid-pub-web/src/main/java/org/orcid/api/publicV3/server/delegator/impl/PublicV3ApiServiceDelegatorImpl.java @@ -7,7 +7,7 @@ import java.util.Map; import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.Status; diff --git a/orcid-pub-web/src/test/java/org/orcid/api/filters/ApiRateLimitFilterTest.java b/orcid-pub-web/src/test/java/org/orcid/api/filters/ApiRateLimitFilterTest.java index f3ab254adb5..c71aff12298 100644 --- a/orcid-pub-web/src/test/java/org/orcid/api/filters/ApiRateLimitFilterTest.java +++ b/orcid-pub-web/src/test/java/org/orcid/api/filters/ApiRateLimitFilterTest.java @@ -13,8 +13,8 @@ import org.springframework.mock.web.MockHttpServletResponse; import org.springframework.test.context.ContextConfiguration; import javax.annotation.Resource; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; import java.io.IOException; import java.time.LocalDate; diff --git a/orcid-utils/pom.xml b/orcid-utils/pom.xml index 65f758cea72..620bc8aeeb7 100644 --- a/orcid-utils/pom.xml +++ b/orcid-utils/pom.xml @@ -146,8 +146,8 @@ - javax.servlet - javax.servlet-api + jakarta.servlet + jakarta.servlet-api diff --git a/orcid-web/pom.xml b/orcid-web/pom.xml index 233d25b585d..1cb911c2e89 100644 --- a/orcid-web/pom.xml +++ b/orcid-web/pom.xml @@ -149,8 +149,8 @@ ehcache - javax.servlet - javax.servlet-api + jakarta.servlet + jakarta.servlet-api compile diff --git a/orcid-web/src/main/java/org/orcid/authorization/authentication/MFAAuthenticationDetailsSource.java b/orcid-web/src/main/java/org/orcid/authorization/authentication/MFAAuthenticationDetailsSource.java index 3a08a9f6b08..4de90e56af0 100644 --- a/orcid-web/src/main/java/org/orcid/authorization/authentication/MFAAuthenticationDetailsSource.java +++ b/orcid-web/src/main/java/org/orcid/authorization/authentication/MFAAuthenticationDetailsSource.java @@ -1,6 +1,6 @@ package org.orcid.authorization.authentication; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.security.authentication.AuthenticationDetailsSource; import org.springframework.security.web.authentication.WebAuthenticationDetails; diff --git a/orcid-web/src/main/java/org/orcid/authorization/authentication/MFAWebAuthenticationDetails.java b/orcid-web/src/main/java/org/orcid/authorization/authentication/MFAWebAuthenticationDetails.java index 1f52f588be4..1b67d1f4fba 100644 --- a/orcid-web/src/main/java/org/orcid/authorization/authentication/MFAWebAuthenticationDetails.java +++ b/orcid-web/src/main/java/org/orcid/authorization/authentication/MFAWebAuthenticationDetails.java @@ -1,7 +1,7 @@ package org.orcid.authorization.authentication; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpSession; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpSession; import org.apache.thrift.TSerializable; import org.springframework.security.web.authentication.WebAuthenticationDetails; diff --git a/orcid-web/src/main/java/org/orcid/frontend/oauth2/RevokeController.java b/orcid-web/src/main/java/org/orcid/frontend/oauth2/RevokeController.java index 5d437a6710c..60a610f88b5 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/oauth2/RevokeController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/oauth2/RevokeController.java @@ -1,7 +1,7 @@ package org.orcid.frontend.oauth2; import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; diff --git a/orcid-web/src/main/java/org/orcid/frontend/spring/AjaxAuthenticationFailureHandler.java b/orcid-web/src/main/java/org/orcid/frontend/spring/AjaxAuthenticationFailureHandler.java index 60f7329f68a..07de5a122cb 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/spring/AjaxAuthenticationFailureHandler.java +++ b/orcid-web/src/main/java/org/orcid/frontend/spring/AjaxAuthenticationFailureHandler.java @@ -3,9 +3,9 @@ import java.io.IOException; import java.io.PrintWriter; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.orcid.core.security.DeprecatedProfileException; import org.orcid.core.security.InvalidUserTypeException; diff --git a/orcid-web/src/main/java/org/orcid/frontend/spring/AjaxAuthenticationSuccessHandler.java b/orcid-web/src/main/java/org/orcid/frontend/spring/AjaxAuthenticationSuccessHandler.java index 46236b48987..0eac509f644 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/spring/AjaxAuthenticationSuccessHandler.java +++ b/orcid-web/src/main/java/org/orcid/frontend/spring/AjaxAuthenticationSuccessHandler.java @@ -2,9 +2,9 @@ import java.io.IOException; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.orcid.core.common.manager.EventManager; import org.orcid.core.togglz.Features; diff --git a/orcid-web/src/main/java/org/orcid/frontend/spring/AjaxAuthenticationSuccessHandlerBase.java b/orcid-web/src/main/java/org/orcid/frontend/spring/AjaxAuthenticationSuccessHandlerBase.java index f4d8d78bb1b..da7bc9b403f 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/spring/AjaxAuthenticationSuccessHandlerBase.java +++ b/orcid-web/src/main/java/org/orcid/frontend/spring/AjaxAuthenticationSuccessHandlerBase.java @@ -1,8 +1,8 @@ package org.orcid.frontend.spring; import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.lang3.LocaleUtils; import org.orcid.core.manager.SourceManager; diff --git a/orcid-web/src/main/java/org/orcid/frontend/spring/LoggingStrictHttpFirewall.java b/orcid-web/src/main/java/org/orcid/frontend/spring/LoggingStrictHttpFirewall.java index edb9dd49725..83c4109e3e7 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/spring/LoggingStrictHttpFirewall.java +++ b/orcid-web/src/main/java/org/orcid/frontend/spring/LoggingStrictHttpFirewall.java @@ -1,7 +1,7 @@ package org.orcid.frontend.spring; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.security.web.firewall.FirewalledRequest; diff --git a/orcid-web/src/main/java/org/orcid/frontend/spring/OrcidAccessDeniedHandler.java b/orcid-web/src/main/java/org/orcid/frontend/spring/OrcidAccessDeniedHandler.java index 70f9e6f2e6a..ee153d2727d 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/spring/OrcidAccessDeniedHandler.java +++ b/orcid-web/src/main/java/org/orcid/frontend/spring/OrcidAccessDeniedHandler.java @@ -3,9 +3,9 @@ import java.io.IOException; import javax.annotation.Resource; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.orcid.core.manager.impl.OrcidUrlManager; import org.slf4j.Logger; diff --git a/orcid-web/src/main/java/org/orcid/frontend/spring/ShibbolethAjaxAuthenticationSuccessHandler.java b/orcid-web/src/main/java/org/orcid/frontend/spring/ShibbolethAjaxAuthenticationSuccessHandler.java index 767072bb6b5..85860479711 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/spring/ShibbolethAjaxAuthenticationSuccessHandler.java +++ b/orcid-web/src/main/java/org/orcid/frontend/spring/ShibbolethAjaxAuthenticationSuccessHandler.java @@ -7,9 +7,9 @@ import java.util.Map; import javax.annotation.Resource; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.orcid.core.common.manager.EventManager; import org.orcid.core.manager.InstitutionalSignInManager; diff --git a/orcid-web/src/main/java/org/orcid/frontend/spring/SocialAjaxAuthenticationSuccessHandler.java b/orcid-web/src/main/java/org/orcid/frontend/spring/SocialAjaxAuthenticationSuccessHandler.java index 3e050919e0d..62d6605a7c6 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/spring/SocialAjaxAuthenticationSuccessHandler.java +++ b/orcid-web/src/main/java/org/orcid/frontend/spring/SocialAjaxAuthenticationSuccessHandler.java @@ -4,9 +4,9 @@ import java.util.Map; import javax.annotation.Resource; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.orcid.core.constants.OrcidOauth2Constants; import org.orcid.core.manager.UserConnectionManager; diff --git a/orcid-web/src/main/java/org/orcid/frontend/spring/configuration/OrcidRequestCache.java b/orcid-web/src/main/java/org/orcid/frontend/spring/configuration/OrcidRequestCache.java index 1e23c7d598d..f9056f75130 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/spring/configuration/OrcidRequestCache.java +++ b/orcid-web/src/main/java/org/orcid/frontend/spring/configuration/OrcidRequestCache.java @@ -4,8 +4,8 @@ import org.springframework.security.web.savedrequest.HttpSessionRequestCache; import org.springframework.stereotype.Service; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; @Service("orcidRequestCache") public class OrcidRequestCache extends HttpSessionRequestCache { diff --git a/orcid-web/src/main/java/org/orcid/frontend/spring/i18n/OrcidCookieLocaleResolver.java b/orcid-web/src/main/java/org/orcid/frontend/spring/i18n/OrcidCookieLocaleResolver.java index 3077b13187c..67841763ae5 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/spring/i18n/OrcidCookieLocaleResolver.java +++ b/orcid-web/src/main/java/org/orcid/frontend/spring/i18n/OrcidCookieLocaleResolver.java @@ -5,8 +5,8 @@ import java.util.Locale; import java.util.TimeZone; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.context.i18n.LocaleContext; import org.springframework.context.i18n.TimeZoneAwareLocaleContext; diff --git a/orcid-web/src/main/java/org/orcid/frontend/spring/session/redis/OrcidRedisIndexedSessionRepository.java b/orcid-web/src/main/java/org/orcid/frontend/spring/session/redis/OrcidRedisIndexedSessionRepository.java index a6574ed3e7b..4193f7d6925 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/spring/session/redis/OrcidRedisIndexedSessionRepository.java +++ b/orcid-web/src/main/java/org/orcid/frontend/spring/session/redis/OrcidRedisIndexedSessionRepository.java @@ -24,7 +24,7 @@ import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import java.time.Duration; import java.time.Instant; import java.util.*; diff --git a/orcid-web/src/main/java/org/orcid/frontend/spring/web/servlet/i18n/LocaleChangeInterceptor.java b/orcid-web/src/main/java/org/orcid/frontend/spring/web/servlet/i18n/LocaleChangeInterceptor.java index 09f18eb5091..d0e80cb1c3e 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/spring/web/servlet/i18n/LocaleChangeInterceptor.java +++ b/orcid-web/src/main/java/org/orcid/frontend/spring/web/servlet/i18n/LocaleChangeInterceptor.java @@ -3,9 +3,9 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.security.web.savedrequest.HttpSessionRequestCache; import org.springframework.security.web.savedrequest.SavedRequest; diff --git a/orcid-web/src/main/java/org/orcid/frontend/spring/web/social/config/SocialSignInUtils.java b/orcid-web/src/main/java/org/orcid/frontend/spring/web/social/config/SocialSignInUtils.java index aabe75edbb5..3c93a77cdd0 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/spring/web/social/config/SocialSignInUtils.java +++ b/orcid-web/src/main/java/org/orcid/frontend/spring/web/social/config/SocialSignInUtils.java @@ -11,8 +11,8 @@ import java.util.Map; import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.codec.binary.Base64; import org.apache.commons.lang3.StringUtils; diff --git a/orcid-web/src/main/java/org/orcid/frontend/spring/web/social/config/UserCookieGenerator.java b/orcid-web/src/main/java/org/orcid/frontend/spring/web/social/config/UserCookieGenerator.java index e37cc599605..191cd17a3e0 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/spring/web/social/config/UserCookieGenerator.java +++ b/orcid-web/src/main/java/org/orcid/frontend/spring/web/social/config/UserCookieGenerator.java @@ -1,8 +1,8 @@ package org.orcid.frontend.spring.web.social.config; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.web.util.CookieGenerator; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/AdminController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/AdminController.java index 47d9b9d88e2..78f7dd0b7c5 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/AdminController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/AdminController.java @@ -15,8 +15,8 @@ import javax.annotation.Resource; import javax.persistence.NoResultException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/AffiliationsController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/AffiliationsController.java index 2eac5a47f8c..6f6e2c12a38 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/AffiliationsController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/AffiliationsController.java @@ -7,7 +7,7 @@ import java.util.stream.IntStream; import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.orcid.api.common.util.v3.ActivityUtils; import org.orcid.core.manager.OrgDisambiguatedManager; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/BaseController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/BaseController.java index 7f06d4ea1fd..7875fa079d5 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/BaseController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/BaseController.java @@ -19,8 +19,8 @@ import java.util.stream.Collectors; import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import javax.ws.rs.core.UriBuilder; import org.apache.commons.lang.StringUtils; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/BaseWorkspaceController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/BaseWorkspaceController.java index b44002aa3bc..4afca8e6f40 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/BaseWorkspaceController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/BaseWorkspaceController.java @@ -11,8 +11,8 @@ import java.util.Map; import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpSession; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpSession; import org.apache.commons.lang.StringUtils; import org.orcid.core.aop.ProfileLastModifiedAspect; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/ClaimController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/ClaimController.java index 1d360f8bf79..fc5e0cc6ca1 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/ClaimController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/ClaimController.java @@ -7,8 +7,8 @@ import javax.annotation.Resource; import javax.persistence.NoResultException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.codec.binary.Base64; import org.apache.jena.sparql.function.library.e; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/DeveloperToolsController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/DeveloperToolsController.java index 3334936b164..7b487ebc0c1 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/DeveloperToolsController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/DeveloperToolsController.java @@ -6,7 +6,7 @@ import java.util.Set; import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.orcid.core.manager.ProfileEntityCacheManager; import org.orcid.core.manager.v3.ClientManager; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/FundingsController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/FundingsController.java index 4646516bc42..f5fd8ff764b 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/FundingsController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/FundingsController.java @@ -16,7 +16,7 @@ import java.util.stream.Stream; import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.apache.commons.lang3.StringUtils; import org.orcid.core.locale.LocaleManager; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/GetMyDataController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/GetMyDataController.java index 309b033a62b..898cef71b5e 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/GetMyDataController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/GetMyDataController.java @@ -23,7 +23,7 @@ import java.util.zip.ZipOutputStream; import javax.annotation.Resource; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletResponse; import javax.ws.rs.core.MediaType; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/HomeController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/HomeController.java index 9522ecd8a53..47a800e27fb 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/HomeController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/HomeController.java @@ -8,9 +8,9 @@ import java.util.ResourceBundle; import javax.annotation.Resource; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/LoginController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/LoginController.java index 989c5f3dc1e..fed7beaedb9 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/LoginController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/LoginController.java @@ -3,8 +3,8 @@ import java.io.UnsupportedEncodingException; import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.orcid.core.constants.OrcidOauth2Constants; import org.orcid.core.manager.v3.read_only.RecordNameManagerReadOnly; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/ManageProfileController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/ManageProfileController.java index fb637186deb..4c856d9cea4 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/ManageProfileController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/ManageProfileController.java @@ -11,8 +11,8 @@ import javax.annotation.Resource; import javax.persistence.NoResultException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.codec.binary.Base64; import org.apache.commons.lang.StringUtils; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/NotificationController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/NotificationController.java index 48c1432a716..94f0a6e22d0 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/NotificationController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/NotificationController.java @@ -5,7 +5,7 @@ import java.util.Map; import javax.annotation.Resource; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.codec.binary.Base64; import org.apache.commons.lang3.StringUtils; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/OauthGenericCallsController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/OauthGenericCallsController.java index 79f0b20c5cc..bc6ed9fe2ad 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/OauthGenericCallsController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/OauthGenericCallsController.java @@ -6,7 +6,7 @@ import java.util.stream.Collectors; import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/OpenIDController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/OpenIDController.java index 4a2f930831e..88e0919a006 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/OpenIDController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/OpenIDController.java @@ -8,7 +8,7 @@ import java.util.stream.Collectors; import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/PasswordResetController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/PasswordResetController.java index 248ec8286ca..99466eb6611 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/PasswordResetController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/PasswordResetController.java @@ -12,8 +12,8 @@ import javax.annotation.Resource; import javax.persistence.NoResultException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import javax.ws.rs.core.MediaType; import org.apache.commons.codec.binary.Base64; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/PeerReviewsController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/PeerReviewsController.java index 23a24095afc..fd9c7576075 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/PeerReviewsController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/PeerReviewsController.java @@ -8,7 +8,7 @@ import java.util.Optional; import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.orcid.core.exception.GroupIdRecordNotFoundException; import org.orcid.core.groupIds.issn.IssnGroupIdPatternMatcher; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/PublicProfileController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/PublicProfileController.java index c276b7ca94c..5ef8ccbf161 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/PublicProfileController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/PublicProfileController.java @@ -11,8 +11,8 @@ import java.util.stream.IntStream; import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.lang3.StringUtils; import org.orcid.core.exception.DeactivatedException; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/RegistrationController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/RegistrationController.java index d99e2fe8fc9..f0ae01ccf40 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/RegistrationController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/RegistrationController.java @@ -15,8 +15,8 @@ import java.util.stream.Collectors; import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.codec.binary.Base64; import org.apache.commons.lang.StringUtils; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/ShibbolethController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/ShibbolethController.java index cca24b951d5..f4b02c97c72 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/ShibbolethController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/ShibbolethController.java @@ -7,8 +7,8 @@ import java.util.Map; import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.orcid.core.common.manager.EventManager; import org.orcid.core.constants.OrcidOauth2Constants; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/SocialController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/SocialController.java index 5270d5cc264..199b2e2c982 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/SocialController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/SocialController.java @@ -4,8 +4,8 @@ import java.util.Map; import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.orcid.core.constants.OrcidOauth2Constants; import org.orcid.core.manager.BackupCodeManager; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/StatusController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/StatusController.java index dd1fa6fff6b..8c92a6ecd65 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/StatusController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/StatusController.java @@ -3,7 +3,7 @@ import java.util.Map; import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/TwoFactorAuthenticationController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/TwoFactorAuthenticationController.java index afd6538686b..9153e9ff0d6 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/TwoFactorAuthenticationController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/TwoFactorAuthenticationController.java @@ -1,8 +1,8 @@ package org.orcid.frontend.web.controllers; import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.orcid.core.manager.BackupCodeManager; import org.orcid.core.manager.EncryptionManager; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/WorksController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/WorksController.java index 5073e3cb529..3e503cc75e6 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/WorksController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/WorksController.java @@ -39,7 +39,7 @@ import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import java.util.*; import java.util.regex.Pattern; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/WorkspaceController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/WorkspaceController.java index 776b18bacca..af20d00e845 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/WorkspaceController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/WorkspaceController.java @@ -15,9 +15,9 @@ import java.util.stream.Collectors; import javax.annotation.Resource; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.orcid.core.locale.LocaleManager; import org.orcid.core.manager.IdentifierTypeManager; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/filter/OrcidSwitchUserFilter.java b/orcid-web/src/main/java/org/orcid/frontend/web/filter/OrcidSwitchUserFilter.java index 41cdcc7b29d..bf850d0892e 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/filter/OrcidSwitchUserFilter.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/filter/OrcidSwitchUserFilter.java @@ -5,7 +5,7 @@ import java.util.List; import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.orcid.core.locale.LocaleManager; import org.orcid.core.manager.v3.SourceManager; diff --git a/orcid-web/src/test/java/org/orcid/frontend/oauth2/RevokeControllerTest.java b/orcid-web/src/test/java/org/orcid/frontend/oauth2/RevokeControllerTest.java index f2cd808a240..96a808b23b9 100644 --- a/orcid-web/src/test/java/org/orcid/frontend/oauth2/RevokeControllerTest.java +++ b/orcid-web/src/test/java/org/orcid/frontend/oauth2/RevokeControllerTest.java @@ -7,7 +7,7 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import javax.ws.rs.core.Response; import org.junit.Before; diff --git a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/AdminControllerLegacyTest.java b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/AdminControllerLegacyTest.java index 1c27daad6ee..0440a52131e 100644 --- a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/AdminControllerLegacyTest.java +++ b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/AdminControllerLegacyTest.java @@ -57,9 +57,9 @@ import org.springframework.test.util.ReflectionTestUtils; import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpSession; import javax.xml.datatype.XMLGregorianCalendar; import java.io.UnsupportedEncodingException; import java.util.*; diff --git a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/AdminControllerTest.java b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/AdminControllerTest.java index 7ad391cf018..8cab34226aa 100644 --- a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/AdminControllerTest.java +++ b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/AdminControllerTest.java @@ -21,8 +21,8 @@ import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.util.ArrayList; import java.util.Arrays; import java.util.List; diff --git a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/ClaimControllerTest.java b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/ClaimControllerTest.java index ead24a0f570..181b817d24b 100644 --- a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/ClaimControllerTest.java +++ b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/ClaimControllerTest.java @@ -12,8 +12,8 @@ import java.io.UnsupportedEncodingException; import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.junit.Before; import org.junit.Test; diff --git a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/FundingsControllerTest.java b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/FundingsControllerTest.java index 67322dd95e1..d681654d6ed 100644 --- a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/FundingsControllerTest.java +++ b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/FundingsControllerTest.java @@ -15,8 +15,8 @@ import java.util.Map; import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpSession; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpSession; import org.junit.AfterClass; import org.junit.Before; diff --git a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/OrgControllerTest.java b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/OrgControllerTest.java index b631f48457f..eb95ede947f 100644 --- a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/OrgControllerTest.java +++ b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/OrgControllerTest.java @@ -6,7 +6,7 @@ import java.util.List; import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.junit.AfterClass; import org.junit.Before; diff --git a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/PasswordResetControllerTest.java b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/PasswordResetControllerTest.java index 9b490f500ed..a33e324a9e9 100644 --- a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/PasswordResetControllerTest.java +++ b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/PasswordResetControllerTest.java @@ -15,8 +15,8 @@ import java.util.List; import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import javax.xml.datatype.DatatypeConfigurationException; import org.junit.AfterClass; diff --git a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/PeerReviewsControllerTest.java b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/PeerReviewsControllerTest.java index 4989e46cffd..73346027e63 100644 --- a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/PeerReviewsControllerTest.java +++ b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/PeerReviewsControllerTest.java @@ -9,7 +9,7 @@ import java.util.Map; import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.junit.AfterClass; import org.junit.BeforeClass; diff --git a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/PublicProfileControllerTest.java b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/PublicProfileControllerTest.java index 3a4f673aae3..e7c453c0cba 100644 --- a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/PublicProfileControllerTest.java +++ b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/PublicProfileControllerTest.java @@ -14,8 +14,8 @@ import java.util.Map; import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.lang.time.DateUtils; import org.junit.AfterClass; diff --git a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/PublicRecordControllerLegacyTest.java b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/PublicRecordControllerLegacyTest.java index f7d23d22630..4d2faaaab11 100644 --- a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/PublicRecordControllerLegacyTest.java +++ b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/PublicRecordControllerLegacyTest.java @@ -19,8 +19,8 @@ import org.springframework.test.context.web.WebAppConfiguration; import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.util.Arrays; import java.util.Collections; import java.util.List; diff --git a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/PublicRecordControllerTest.java b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/PublicRecordControllerTest.java index 56cf17f5ed1..082001d8afc 100644 --- a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/PublicRecordControllerTest.java +++ b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/PublicRecordControllerTest.java @@ -21,8 +21,8 @@ import org.springframework.mock.web.MockHttpSession; import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.util.Collections; import static org.junit.Assert.*; diff --git a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/RegistrationControllerTest.java b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/RegistrationControllerTest.java index a5ea591ce92..3382ea32e50 100644 --- a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/RegistrationControllerTest.java +++ b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/RegistrationControllerTest.java @@ -19,9 +19,9 @@ import java.util.Locale; import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpSession; import org.apache.commons.codec.binary.Base64; import org.jasypt.exceptions.EncryptionOperationNotPossibleException; diff --git a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/ResearchResourceControllerTest.java b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/ResearchResourceControllerTest.java index 049a0f9160b..7d0516c70fc 100644 --- a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/ResearchResourceControllerTest.java +++ b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/ResearchResourceControllerTest.java @@ -12,8 +12,8 @@ import javax.annotation.Resource; import javax.persistence.NoResultException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpSession; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpSession; import org.junit.AfterClass; import org.junit.BeforeClass; diff --git a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/ShibbolethControllerTest.java b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/ShibbolethControllerTest.java index 91fdf4e1001..9f92c00af78 100644 --- a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/ShibbolethControllerTest.java +++ b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/ShibbolethControllerTest.java @@ -10,9 +10,9 @@ import java.util.Map; import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpSession; import org.junit.Before; import org.junit.Test; diff --git a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/SpamControllerTest.java b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/SpamControllerTest.java index 9979ef113e9..44167706a8d 100644 --- a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/SpamControllerTest.java +++ b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/SpamControllerTest.java @@ -10,8 +10,8 @@ import java.util.List; import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpSession; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpSession; import org.junit.AfterClass; import org.junit.BeforeClass; diff --git a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/TwoFactorAuthenticationControllerTest.java b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/TwoFactorAuthenticationControllerTest.java index d316b41a942..a849d05417a 100644 --- a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/TwoFactorAuthenticationControllerTest.java +++ b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/TwoFactorAuthenticationControllerTest.java @@ -15,8 +15,8 @@ import org.orcid.pojo.*; import org.springframework.web.servlet.ModelAndView; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.util.Arrays; import java.util.List; diff --git a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/WorksControllerTest.java b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/WorksControllerTest.java index c838ffccabc..0d7f79eae8b 100644 --- a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/WorksControllerTest.java +++ b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/WorksControllerTest.java @@ -14,8 +14,8 @@ import java.util.List; import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpSession; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpSession; import org.junit.AfterClass; import org.junit.BeforeClass; diff --git a/pom.xml b/pom.xml index 6ae16f1fa04..db0f930e3c0 100644 --- a/pom.xml +++ b/pom.xml @@ -26,7 +26,7 @@ the software. 6.0.23 - 5.6.2 + 6.0.8 4.9.1 2.27 2.13.1 @@ -180,25 +180,44 @@ the software. com.mycila.maven-license-plugin maven-license-plugin - - org.openrewrite.maven - rewrite-maven-plugin - 5.43.0 - - org.openrewrite.java.spring.framework.UpgradeSpringFramework_6_0 - - - - - + + org.openrewrite.maven + rewrite-maven-plugin + 5.43.0 + + + org.openrewrite.java.migrate.UpgradeToJava17 + org.openrewrite.java.migrate.jakarta.JavaxMigrationToJakarta + org.openrewrite.java.spring.framework.UpgradeSpringFramework_6_0 + org.openrewrite.hibernate.MigrateToHibernate62 + org.openrewrite.apache.httpclient5.UpgradeApacheHttpClient_5 + + + + + org.openrewrite.recipe + rewrite-migrate-java + 2.20.0 + + org.openrewrite.recipe rewrite-spring 5.18.0 - - + + org.openrewrite.recipe + rewrite-hibernate + 2.19.1 + + + org.openrewrite.recipe + rewrite-apache + 1.4.2 + + + @@ -651,11 +670,11 @@ the software. compile - javax.servlet - javax.servlet-api - 4.0.1 - compile - + jakarta.servlet + jakarta.servlet-api + 6.0.0 + compile + com.fasterxml.jackson.core jackson-core @@ -723,6 +742,11 @@ the software. hibernate-validator 5.4.3.Final + + jakarta.persistence + jakarta.persistence-api + 3.1.0 + org.liquibase liquibase-core @@ -1000,25 +1024,6 @@ the software. https://jcenter.bintray.com - - - m2.java.net - Java.net Maven 2 Repository - https://download.java.net/maven/2 - default - - - mc-release - Local Maven repository of releases - https://mc-repo.googlecode.com/svn/maven2/releases - - false - - - true - - - From 5b4d3507f833e2972a67dde1404cbbc11f8741ba Mon Sep 17 00:00:00 2001 From: Camelia Dumitru Date: Tue, 7 Apr 2026 22:54:38 +0100 Subject: [PATCH 21/77] orcid-web compiles! --- orcid-core/pom.xml | 2 +- .../core/utils/cache/redis/RedisClient.java | 5 +- orcid-web/pom.xml | 20 ++++---- .../i18n/OrcidCookieLocaleResolver.java | 49 +++++++++++-------- .../redis/OrcidEnableRedisHttpSession.java | 8 +-- .../OrcidRedisHttpSessionConfiguration.java | 18 +------ 6 files changed, 45 insertions(+), 57 deletions(-) diff --git a/orcid-core/pom.xml b/orcid-core/pom.xml index c9f515b05f4..bb5c353b0f4 100644 --- a/orcid-core/pom.xml +++ b/orcid-core/pom.xml @@ -306,7 +306,7 @@ redis.clients jedis - 3.7.1 + 4.3.1 diff --git a/orcid-core/src/main/java/org/orcid/core/utils/cache/redis/RedisClient.java b/orcid-core/src/main/java/org/orcid/core/utils/cache/redis/RedisClient.java index 7e27972aac8..d315f5d8589 100644 --- a/orcid-core/src/main/java/org/orcid/core/utils/cache/redis/RedisClient.java +++ b/orcid-core/src/main/java/org/orcid/core/utils/cache/redis/RedisClient.java @@ -26,9 +26,10 @@ import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisClientConfig; import redis.clients.jedis.JedisPool; -import redis.clients.jedis.ScanParams; import redis.clients.jedis.params.SetParams; -import redis.clients.jedis.ScanResult; +import redis.clients.jedis.params.ScanParams; +import redis.clients.jedis.resps.ScanResult; + public class RedisClient { diff --git a/orcid-web/pom.xml b/orcid-web/pom.xml index 1cb911c2e89..99f63636414 100644 --- a/orcid-web/pom.xml +++ b/orcid-web/pom.xml @@ -120,16 +120,16 @@ - - org.springframework.session - spring-session-core - 2.7.4 - - - org.springframework.session - spring-session-data-redis - 2.7.4 - + + org.springframework.session + spring-session-data-redis + 3.0.3 + + + org.springframework.data + spring-data-redis + 3.0.12 + org.hibernate diff --git a/orcid-web/src/main/java/org/orcid/frontend/spring/i18n/OrcidCookieLocaleResolver.java b/orcid-web/src/main/java/org/orcid/frontend/spring/i18n/OrcidCookieLocaleResolver.java index 67841763ae5..f18e6737d2a 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/spring/i18n/OrcidCookieLocaleResolver.java +++ b/orcid-web/src/main/java/org/orcid/frontend/spring/i18n/OrcidCookieLocaleResolver.java @@ -9,6 +9,7 @@ import jakarta.servlet.http.HttpServletResponse; import org.springframework.context.i18n.LocaleContext; +import org.springframework.context.i18n.SimpleTimeZoneAwareLocaleContext; import org.springframework.context.i18n.TimeZoneAwareLocaleContext; import org.springframework.web.servlet.i18n.CookieLocaleResolver; @@ -20,34 +21,40 @@ public class OrcidCookieLocaleResolver extends CookieLocaleResolver { @Override public void setLocaleContext(HttpServletRequest request, HttpServletResponse response, LocaleContext localeContext) { - Locale locale = null; + // If context is null, pass null to super to handle cookie removal automatically + if (localeContext == null) { + super.setLocaleContext(request, response, null); + return; + } + + Locale locale = localeContext.getLocale(); TimeZone timeZone = null; - if (localeContext != null) { - locale = localeContext.getLocale(); - if (localeContext instanceof TimeZoneAwareLocaleContext) { - timeZone = ((TimeZoneAwareLocaleContext) localeContext).getTimeZone(); - } + + if (localeContext instanceof TimeZoneAwareLocaleContext) { + timeZone = ((TimeZoneAwareLocaleContext) localeContext).getTimeZone(); + } - if (!availableLocales.contains(locale)) { - Locale justLang = new Locale(locale.getLanguage()); - if (availableLocales.contains(justLang) || devLocales.contains(justLang)) { - locale = justLang; - } else { - locale = Locale.ENGLISH; - } + // Run custom Orcid validation + if (locale != null && !availableLocales.contains(locale)) { + Locale justLang = new Locale(locale.getLanguage()); + if (availableLocales.contains(justLang) || devLocales.contains(justLang)) { + locale = justLang; + } else { + locale = Locale.ENGLISH; } - - setCookieSecure(true); - addCookie(response, (locale != null ? toLocaleValue(locale) : "-") + (timeZone != null ? ' ' + timeZone.getID() : "")); - } else { - removeCookie(response); } - request.setAttribute(LOCALE_REQUEST_ATTRIBUTE_NAME, (locale != null ? locale : determineDefaultLocale(request))); - request.setAttribute(TIME_ZONE_REQUEST_ATTRIBUTE_NAME, (timeZone != null ? timeZone : determineDefaultTimeZone(request))); + + setCookieSecure(true); + + // Wrap the validated locale/timezone and pass it to the parent class. + // Spring 6 will automatically build the cookie, add it to the response, + // and set the required LOCALE and TIME_ZONE request attributes for the rest of the request processing. + LocaleContext validatedContext = new SimpleTimeZoneAwareLocaleContext(locale, timeZone); + super.setLocaleContext(request, response, validatedContext); } @Override public void setCookieSecure(boolean cookieSecure) { super.setCookieSecure(cookieSecure); } -} +} \ No newline at end of file diff --git a/orcid-web/src/main/java/org/orcid/frontend/spring/session/redis/OrcidEnableRedisHttpSession.java b/orcid-web/src/main/java/org/orcid/frontend/spring/session/redis/OrcidEnableRedisHttpSession.java index a4f9f702731..52c7ce09d49 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/spring/session/redis/OrcidEnableRedisHttpSession.java +++ b/orcid-web/src/main/java/org/orcid/frontend/spring/session/redis/OrcidEnableRedisHttpSession.java @@ -4,8 +4,6 @@ import org.springframework.context.annotation.Import; import org.springframework.session.FlushMode; import org.springframework.session.SaveMode; -import org.springframework.session.data.redis.RedisFlushMode; -import org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration; import java.lang.annotation.*; @@ -24,11 +22,7 @@ public @interface OrcidEnableRedisHttpSession { String redisNamespace() default "spring:session"; - /** @deprecated */ - @Deprecated - RedisFlushMode redisFlushMode() default RedisFlushMode.ON_SAVE; - FlushMode flushMode() default FlushMode.ON_SAVE; SaveMode saveMode() default SaveMode.ON_SET_ATTRIBUTE; -} +} \ No newline at end of file diff --git a/orcid-web/src/main/java/org/orcid/frontend/spring/session/redis/OrcidRedisHttpSessionConfiguration.java b/orcid-web/src/main/java/org/orcid/frontend/spring/session/redis/OrcidRedisHttpSessionConfiguration.java index 816470a38e3..185a6509cec 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/spring/session/redis/OrcidRedisHttpSessionConfiguration.java +++ b/orcid-web/src/main/java/org/orcid/frontend/spring/session/redis/OrcidRedisHttpSessionConfiguration.java @@ -36,7 +36,6 @@ import org.springframework.session.Session; import org.springframework.session.config.SessionRepositoryCustomizer; import org.springframework.session.config.annotation.web.http.SpringHttpSessionConfiguration; -import org.springframework.session.data.redis.RedisFlushMode; import org.springframework.session.data.redis.RedisIndexedSessionRepository; import org.springframework.session.data.redis.RedisSessionRepository; import org.springframework.session.data.redis.config.ConfigureNotifyKeyspaceEventsAction; @@ -146,13 +145,6 @@ public void setRedisNamespace(String namespace) { this.redisNamespace = namespace; } - /** @deprecated */ - @Deprecated - public void setRedisFlushMode(RedisFlushMode redisFlushMode) { - Assert.notNull(redisFlushMode, "redisFlushMode cannot be null"); - this.setFlushMode(redisFlushMode.getFlushMode()); - } - public void setFlushMode(FlushMode flushMode) { Assert.notNull(flushMode, "flushMode cannot be null"); this.flushMode = flushMode; @@ -238,13 +230,7 @@ public void setImportMetadata(AnnotationMetadata importMetadata) { this.redisNamespace = this.embeddedValueResolver.resolveStringValue(redisNamespaceValue); } - FlushMode flushMode = (FlushMode)attributes.getEnum("flushMode"); - RedisFlushMode redisFlushMode = (RedisFlushMode)attributes.getEnum("redisFlushMode"); - if (flushMode == FlushMode.ON_SAVE && redisFlushMode != RedisFlushMode.ON_SAVE) { - flushMode = redisFlushMode.getFlushMode(); - } - - this.flushMode = flushMode; + this.flushMode = (FlushMode)attributes.getEnum("flushMode"); this.saveMode = (SaveMode)attributes.getEnum("saveMode"); } @@ -316,4 +302,4 @@ public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { taskRegistrar.addCronTask(var10001::cleanupExpiredSessions, OrcidRedisHttpSessionConfiguration.this.cleanupCron); } } -} +} \ No newline at end of file From 37c1f8a87e08576f568141cceb056272dd8b8309 Mon Sep 17 00:00:00 2001 From: Camelia Dumitru Date: Tue, 7 Apr 2026 23:28:57 +0100 Subject: [PATCH 22/77] orcid-pub-web compiles! --- .../api/publicV2/server/PublicV2ApiServiceImplV2_0.java | 4 ++-- .../api/publicV2/server/PublicV2ApiServiceImplV2_1.java | 3 ++- .../server/delegator/PublicV2ApiServiceDelegator.java | 4 +++- .../delegator/impl/PublicV2ApiServiceDelegatorImpl.java | 4 +++- .../impl/PublicV2ApiServiceVersionedDelegatorImpl.java | 4 +++- .../api/publicV3/server/PublicV3ApiServiceImplV3_0.java | 7 ++++--- .../server/delegator/PublicV3ApiServiceDelegator.java | 8 +++++--- .../delegator/impl/PublicV3ApiServiceDelegatorImpl.java | 8 +++++--- 8 files changed, 27 insertions(+), 15 deletions(-) diff --git a/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/PublicV2ApiServiceImplV2_0.java b/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/PublicV2ApiServiceImplV2_0.java index 4d4971d8bb8..fe9be051d58 100644 --- a/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/PublicV2ApiServiceImplV2_0.java +++ b/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/PublicV2ApiServiceImplV2_0.java @@ -67,7 +67,7 @@ import org.orcid.jaxb.model.record_v2.Work; import org.springframework.stereotype.Component; - +import org.apache.hc.core5.http.ParseException; /** * * @author Angel Montenegro @@ -381,7 +381,7 @@ public Response viewRecordRecord(@PathParam("orcid") String orcid) { @GET @Produces(value = { VND_ORCID_XML, ORCID_XML, MediaType.APPLICATION_XML, VND_ORCID_JSON, ORCID_JSON, MediaType.APPLICATION_JSON }) @Path(SEARCH_PATH) - public Response searchByQuery(@QueryParam("q") @DefaultValue("") String query, @Context UriInfo uriInfo) { + public Response searchByQuery(@QueryParam("q") @DefaultValue("") String query, @Context UriInfo uriInfo) throws ParseException { serviceDelegator.trackEvents(httpRequest); Map> solrParams = new HashMap<>(uriInfo.getQueryParameters()); Response jsonQueryResults = serviceDelegator.searchByQuery(solrParams); diff --git a/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/PublicV2ApiServiceImplV2_1.java b/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/PublicV2ApiServiceImplV2_1.java index 55f03d9cfe3..b65a150cf31 100644 --- a/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/PublicV2ApiServiceImplV2_1.java +++ b/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/PublicV2ApiServiceImplV2_1.java @@ -67,6 +67,7 @@ import org.orcid.jaxb.model.record_v2.Work; import org.springframework.stereotype.Component; +import org.apache.hc.core5.http.ParseException; /** * * @author Angel Montenegro @@ -382,7 +383,7 @@ public Response viewRecordRecord(@PathParam("orcid") String orcid) { @GET @Produces(value = { VND_ORCID_XML, ORCID_XML, MediaType.APPLICATION_XML, VND_ORCID_JSON, ORCID_JSON, MediaType.APPLICATION_JSON }) @Path(SEARCH_PATH) - public Response searchByQuery(@QueryParam("q") @DefaultValue("") String query, @Context UriInfo uriInfo) { + public Response searchByQuery(@QueryParam("q") @DefaultValue("") String query, @Context UriInfo uriInfo) throws ParseException { serviceDelegator.trackEvents(httpRequest); Map> solrParams = new HashMap<>(uriInfo.getQueryParameters()); Response jsonQueryResults = serviceDelegator.searchByQuery(solrParams); diff --git a/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/delegator/PublicV2ApiServiceDelegator.java b/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/delegator/PublicV2ApiServiceDelegator.java index f8076144521..70b3d529f63 100644 --- a/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/delegator/PublicV2ApiServiceDelegator.java +++ b/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/delegator/PublicV2ApiServiceDelegator.java @@ -6,6 +6,8 @@ import jakarta.servlet.http.HttpServletRequest; import javax.ws.rs.core.Response; +import org.apache.hc.core5.http.ParseException; + /** * * @author Will Simpson @@ -85,7 +87,7 @@ public interface PublicV2ApiServiceDelegator> solrParams); + Response searchByQuery(Map> solrParams) throws ParseException; Response viewClient(String clientId); diff --git a/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/delegator/impl/PublicV2ApiServiceDelegatorImpl.java b/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/delegator/impl/PublicV2ApiServiceDelegatorImpl.java index 8f0d014ae75..338dfc1d8dc 100644 --- a/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/delegator/impl/PublicV2ApiServiceDelegatorImpl.java +++ b/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/delegator/impl/PublicV2ApiServiceDelegatorImpl.java @@ -77,6 +77,8 @@ import de.undercouch.citeproc.csl.CSLItemData; import liquibase.repackaged.org.apache.commons.lang3.StringUtils; +import org.apache.hc.core5.http.ParseException; + /** *

* The delegator for the tier 2 API. @@ -541,7 +543,7 @@ public Response viewRecord(String orcid) { } @Override - public Response searchByQuery(Map> solrParams) { + public Response searchByQuery(Map> solrParams) throws ParseException { validateSearchParams(solrParams); Search search = orcidSearchManager.findOrcidIds(solrParams); return Response.ok(search).build(); diff --git a/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/delegator/impl/PublicV2ApiServiceVersionedDelegatorImpl.java b/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/delegator/impl/PublicV2ApiServiceVersionedDelegatorImpl.java index e9a23b4df56..e8055e81b94 100644 --- a/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/delegator/impl/PublicV2ApiServiceVersionedDelegatorImpl.java +++ b/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/delegator/impl/PublicV2ApiServiceVersionedDelegatorImpl.java @@ -15,6 +15,8 @@ import org.orcid.core.version.V2Convertible; import org.orcid.core.version.V2VersionConverterChain; +import org.apache.hc.core5.http.ParseException; + public class PublicV2ApiServiceVersionedDelegatorImpl implements PublicV2ApiServiceDelegator { @Resource @@ -243,7 +245,7 @@ public Response viewRecord(String orcid) { } @Override - public Response searchByQuery(Map> solrParams) { + public Response searchByQuery(Map> solrParams) throws ParseException { return processReponse(publicV2ApiServiceDelegator.searchByQuery(solrParams)); } diff --git a/orcid-pub-web/src/main/java/org/orcid/api/publicV3/server/PublicV3ApiServiceImplV3_0.java b/orcid-pub-web/src/main/java/org/orcid/api/publicV3/server/PublicV3ApiServiceImplV3_0.java index 14a5e3c101f..a612f86465c 100644 --- a/orcid-pub-web/src/main/java/org/orcid/api/publicV3/server/PublicV3ApiServiceImplV3_0.java +++ b/orcid-pub-web/src/main/java/org/orcid/api/publicV3/server/PublicV3ApiServiceImplV3_0.java @@ -75,6 +75,7 @@ import javax.ws.rs.core.Response; import javax.ws.rs.core.UriInfo; +import org.apache.hc.core5.http.ParseException; import org.orcid.api.common.swagger.SwaggerUIBuilder; import org.orcid.api.publicV3.server.delegator.PublicV3ApiServiceDelegator; import org.orcid.core.api.OrcidApiConstants; @@ -416,7 +417,7 @@ public Response viewRecordRecord(@PathParam("orcid") String orcid) { @GET @Produces(value = { VND_ORCID_XML, ORCID_XML, MediaType.APPLICATION_XML, VND_ORCID_JSON, ORCID_JSON, MediaType.APPLICATION_JSON }) @Path(SEARCH_PATH) - public Response searchByQuery(@QueryParam("q") @DefaultValue("") String query, @Context UriInfo uriInfo) { + public Response searchByQuery(@QueryParam("q") @DefaultValue("") String query, @Context UriInfo uriInfo) throws ParseException{ serviceDelegator.trackEvents(httpRequest); Map> solrParams = new HashMap<>(uriInfo.getQueryParameters()); Response jsonQueryResults = serviceDelegator.searchByQuery(solrParams); @@ -426,7 +427,7 @@ public Response searchByQuery(@QueryParam("q") @DefaultValue("") String query, @ @GET @Produces(TEXT_CSV) @Path(CSV_SEARCH_PATH) - public Response searchByQueryCSV(@QueryParam("q") @DefaultValue("") String query, @Context UriInfo uriInfo) { + public Response searchByQueryCSV(@QueryParam("q") @DefaultValue("") String query, @Context UriInfo uriInfo) throws ParseException{ serviceDelegator.trackEvents(httpRequest); Map> solrParams = new HashMap<>(uriInfo.getQueryParameters()); Response csvQueryResults = serviceDelegator.searchByQueryCSV(solrParams); @@ -436,7 +437,7 @@ public Response searchByQueryCSV(@QueryParam("q") @DefaultValue("") String query @GET @Produces(value = { VND_ORCID_XML, ORCID_XML, MediaType.APPLICATION_XML, VND_ORCID_JSON, ORCID_JSON, MediaType.APPLICATION_JSON }) @Path(EXPANDED_SEARCH_PATH) - public Response expandedSearchByQuery(@QueryParam("q") @DefaultValue("") String query, @Context UriInfo uriInfo) { + public Response expandedSearchByQuery(@QueryParam("q") @DefaultValue("") String query, @Context UriInfo uriInfo) throws ParseException{ serviceDelegator.trackEvents(httpRequest); Map> solrParams = new HashMap<>(uriInfo.getQueryParameters()); Response queryResults = serviceDelegator.expandedSearchByQuery(solrParams); diff --git a/orcid-pub-web/src/main/java/org/orcid/api/publicV3/server/delegator/PublicV3ApiServiceDelegator.java b/orcid-pub-web/src/main/java/org/orcid/api/publicV3/server/delegator/PublicV3ApiServiceDelegator.java index e9631afde92..e84c8cf63af 100644 --- a/orcid-pub-web/src/main/java/org/orcid/api/publicV3/server/delegator/PublicV3ApiServiceDelegator.java +++ b/orcid-pub-web/src/main/java/org/orcid/api/publicV3/server/delegator/PublicV3ApiServiceDelegator.java @@ -6,6 +6,8 @@ import jakarta.servlet.http.HttpServletRequest; import javax.ws.rs.core.Response; +import org.apache.hc.core5.http.ParseException; + /** * * @author Will Simpson @@ -87,7 +89,7 @@ public interface PublicV3ApiServiceDelegator> solrParams); + Response searchByQuery(Map> solrParams) throws ParseException; Response viewClient(String clientId); @@ -129,9 +131,9 @@ public interface PublicV3ApiServiceDelegator> solrParams); + Response searchByQueryCSV(Map> solrParams) throws ParseException; - Response expandedSearchByQuery(Map> solrParams); + Response expandedSearchByQuery(Map> solrParams)throws ParseException; void trackEvents(HttpServletRequest httpRequest); diff --git a/orcid-pub-web/src/main/java/org/orcid/api/publicV3/server/delegator/impl/PublicV3ApiServiceDelegatorImpl.java b/orcid-pub-web/src/main/java/org/orcid/api/publicV3/server/delegator/impl/PublicV3ApiServiceDelegatorImpl.java index 2c6426856d1..1de29ee01ec 100644 --- a/orcid-pub-web/src/main/java/org/orcid/api/publicV3/server/delegator/impl/PublicV3ApiServiceDelegatorImpl.java +++ b/orcid-pub-web/src/main/java/org/orcid/api/publicV3/server/delegator/impl/PublicV3ApiServiceDelegatorImpl.java @@ -93,6 +93,8 @@ import de.undercouch.citeproc.csl.CSLItemData; import liquibase.repackaged.org.apache.commons.lang3.StringUtils; +import org.apache.hc.core5.http.ParseException; + @Component public class PublicV3ApiServiceDelegatorImpl implements PublicV3ApiServiceDelegator { @@ -624,21 +626,21 @@ public Response viewRecord(String orcid) { } @Override - public Response searchByQuery(Map> solrParams) { + public Response searchByQuery(Map> solrParams) throws ParseException { validateSearchParams(solrParams); Search search = orcidSearchManager.findOrcidIds(solrParams); return Response.ok(search).build(); } @Override - public Response searchByQueryCSV(Map> solrParams) { + public Response searchByQueryCSV(Map> solrParams) throws ParseException{ validateSearchParams(solrParams); String search = orcidSearchManager.findOrcidIdsAsCSV(solrParams); return Response.ok(search).build(); } @Override - public Response expandedSearchByQuery(Map> solrParams) { + public Response expandedSearchByQuery(Map> solrParams) throws ParseException{ validateSearchParams(solrParams); ExpandedSearch search = orcidSearchManager.expandedSearch(solrParams); return Response.ok(search).build(); From efcba3a4698cb99f64f4f31afe54625bc7dc4aab Mon Sep 17 00:00:00 2001 From: Camelia Dumitru Date: Tue, 7 Apr 2026 23:55:43 +0100 Subject: [PATCH 23/77] orcid-api-web compiles! --- .../api/memberV2/server/MemberV2ApiServiceImplV2_0.java | 3 ++- .../api/memberV2/server/MemberV2ApiServiceImplV2_1.java | 4 +++- .../server/delegator/MemberV2ApiServiceDelegator.java | 4 +++- .../delegator/impl/MemberV2ApiServiceDelegatorImpl.java | 4 +++- .../impl/MemberV2ApiServiceVersionedDelegatorImpl.java | 4 +++- .../api/memberV3/server/MemberV3ApiServiceImplV3_0.java | 6 ++++-- .../server/delegator/MemberV3ApiServiceDelegator.java | 6 ++++-- .../delegator/impl/MemberV3ApiServiceDelegatorImpl.java | 6 ++++-- 8 files changed, 26 insertions(+), 11 deletions(-) diff --git a/orcid-api-web/src/main/java/org/orcid/api/memberV2/server/MemberV2ApiServiceImplV2_0.java b/orcid-api-web/src/main/java/org/orcid/api/memberV2/server/MemberV2ApiServiceImplV2_0.java index 46b3909d8d8..6b57e6a98d0 100644 --- a/orcid-api-web/src/main/java/org/orcid/api/memberV2/server/MemberV2ApiServiceImplV2_0.java +++ b/orcid-api-web/src/main/java/org/orcid/api/memberV2/server/MemberV2ApiServiceImplV2_0.java @@ -80,6 +80,7 @@ import org.orcid.jaxb.model.record_v2.WorkBulk; import org.springframework.stereotype.Component; +import org.apache.hc.core5.http.ParseException; /** * * @author Angel Montenegro @@ -709,7 +710,7 @@ public Response viewRecordRecord(@PathParam("orcid") String orcid) { @GET @Produces(value = { VND_ORCID_XML, ORCID_XML, MediaType.APPLICATION_XML, VND_ORCID_JSON, ORCID_JSON, MediaType.APPLICATION_JSON }) @Path(SEARCH_PATH) - public Response searchByQuery(@QueryParam("q") @DefaultValue("") String query, @Context UriInfo uriInfo) { + public Response searchByQuery(@QueryParam("q") @DefaultValue("") String query, @Context UriInfo uriInfo) throws ParseException { Map> solrParams = new HashMap<>(uriInfo.getQueryParameters()); Response xmlQueryResults = serviceDelegator.searchByQuery(solrParams); return xmlQueryResults; diff --git a/orcid-api-web/src/main/java/org/orcid/api/memberV2/server/MemberV2ApiServiceImplV2_1.java b/orcid-api-web/src/main/java/org/orcid/api/memberV2/server/MemberV2ApiServiceImplV2_1.java index 60340e62e26..1d83d1cd57d 100644 --- a/orcid-api-web/src/main/java/org/orcid/api/memberV2/server/MemberV2ApiServiceImplV2_1.java +++ b/orcid-api-web/src/main/java/org/orcid/api/memberV2/server/MemberV2ApiServiceImplV2_1.java @@ -80,6 +80,8 @@ import org.orcid.jaxb.model.record_v2.WorkBulk; import org.springframework.stereotype.Component; +import org.apache.hc.core5.http.ParseException; + /** * * @author Angel Montenegro @@ -708,7 +710,7 @@ public Response viewRecordRecord(@PathParam("orcid") String orcid) { @GET @Produces(value = { VND_ORCID_XML, ORCID_XML, MediaType.APPLICATION_XML, VND_ORCID_JSON, ORCID_JSON, MediaType.APPLICATION_JSON }) @Path(SEARCH_PATH) - public Response searchByQuery(@QueryParam("q") @DefaultValue("") String query, @Context UriInfo uriInfo) { + public Response searchByQuery(@QueryParam("q") @DefaultValue("") String query, @Context UriInfo uriInfo) throws ParseException { Map> solrParams = new HashMap<>(uriInfo.getQueryParameters()); Response xmlQueryResults = serviceDelegator.searchByQuery(solrParams); return xmlQueryResults; diff --git a/orcid-api-web/src/main/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator.java b/orcid-api-web/src/main/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator.java index 330ca191a32..bd3382145b7 100644 --- a/orcid-api-web/src/main/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator.java +++ b/orcid-api-web/src/main/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator.java @@ -5,6 +5,8 @@ import javax.ws.rs.core.Response; +import org.apache.hc.core5.http.ParseException; + /** * * @author Will Simpson @@ -148,7 +150,7 @@ public interface MemberV2ApiServiceDelegator> solrParams); + Response searchByQuery(Map> solrParams)throws ParseException; Response viewClient(String clientId); diff --git a/orcid-api-web/src/main/java/org/orcid/api/memberV2/server/delegator/impl/MemberV2ApiServiceDelegatorImpl.java b/orcid-api-web/src/main/java/org/orcid/api/memberV2/server/delegator/impl/MemberV2ApiServiceDelegatorImpl.java index 7e1bb9f878b..ada91ef43e6 100644 --- a/orcid-api-web/src/main/java/org/orcid/api/memberV2/server/delegator/impl/MemberV2ApiServiceDelegatorImpl.java +++ b/orcid-api-web/src/main/java/org/orcid/api/memberV2/server/delegator/impl/MemberV2ApiServiceDelegatorImpl.java @@ -105,6 +105,8 @@ import org.springframework.context.MessageSource; import org.springframework.stereotype.Component; +import org.apache.hc.core5.http.ParseException; + /** *

* The delegator for the tier 2 API. @@ -1070,7 +1072,7 @@ public Response viewPerson(String orcid) { } @Override - public Response searchByQuery(Map> solrParams) { + public Response searchByQuery(Map> solrParams) throws ParseException { orcidSecurityManager.checkScopes(ScopePathType.READ_PUBLIC); validateSearchParams(solrParams); Search search = orcidSearchManager.findOrcidIds(solrParams); diff --git a/orcid-api-web/src/main/java/org/orcid/api/memberV2/server/delegator/impl/MemberV2ApiServiceVersionedDelegatorImpl.java b/orcid-api-web/src/main/java/org/orcid/api/memberV2/server/delegator/impl/MemberV2ApiServiceVersionedDelegatorImpl.java index af564945d77..cef1b05e4ed 100644 --- a/orcid-api-web/src/main/java/org/orcid/api/memberV2/server/delegator/impl/MemberV2ApiServiceVersionedDelegatorImpl.java +++ b/orcid-api-web/src/main/java/org/orcid/api/memberV2/server/delegator/impl/MemberV2ApiServiceVersionedDelegatorImpl.java @@ -19,6 +19,8 @@ import org.orcid.jaxb.model.record.bulk.BulkElement; import org.orcid.jaxb.model.record.bulk.BulkElementContainer; +import org.apache.hc.core5.http.ParseException; + public class MemberV2ApiServiceVersionedDelegatorImpl implements MemberV2ApiServiceDelegator { @@ -531,7 +533,7 @@ public Response viewPerson(String orcid) { } @Override - public Response searchByQuery(Map> solrParams) { + public Response searchByQuery(Map> solrParams) throws ParseException { return processReponse(memberV2ApiServiceDelegator.searchByQuery(solrParams)); } diff --git a/orcid-api-web/src/main/java/org/orcid/api/memberV3/server/MemberV3ApiServiceImplV3_0.java b/orcid-api-web/src/main/java/org/orcid/api/memberV3/server/MemberV3ApiServiceImplV3_0.java index c8f2cfe3991..18580133aba 100644 --- a/orcid-api-web/src/main/java/org/orcid/api/memberV3/server/MemberV3ApiServiceImplV3_0.java +++ b/orcid-api-web/src/main/java/org/orcid/api/memberV3/server/MemberV3ApiServiceImplV3_0.java @@ -111,6 +111,8 @@ import org.orcid.jaxb.model.v3.release.record.WorkBulk; import org.springframework.stereotype.Component; +import org.apache.hc.core5.http.ParseException; + @Component @Path("/v3.0") public class MemberV3ApiServiceImplV3_0 extends MemberApiServiceImplHelper { @@ -749,7 +751,7 @@ public Response viewRecordRecord(@PathParam("orcid") String orcid) { @GET @Produces(value = { VND_ORCID_XML, ORCID_XML, MediaType.APPLICATION_XML, VND_ORCID_JSON, ORCID_JSON, MediaType.APPLICATION_JSON }) @Path(SEARCH_PATH) - public Response searchByQuery(@QueryParam("q") @DefaultValue("") String query, @Context UriInfo uriInfo) { + public Response searchByQuery(@QueryParam("q") @DefaultValue("") String query, @Context UriInfo uriInfo) throws ParseException { Map> solrParams = new HashMap<>(uriInfo.getQueryParameters()); Response xmlQueryResults = serviceDelegator.searchByQuery(solrParams); return xmlQueryResults; @@ -758,7 +760,7 @@ public Response searchByQuery(@QueryParam("q") @DefaultValue("") String query, @ @GET @Produces(TEXT_CSV) @Path(CSV_SEARCH_PATH) - public Response searchByQueryCSV(@QueryParam("q") @DefaultValue("") String query, @Context UriInfo uriInfo) { + public Response searchByQueryCSV(@QueryParam("q") @DefaultValue("") String query, @Context UriInfo uriInfo) throws ParseException { Map> solrParams = new HashMap<>(uriInfo.getQueryParameters()); Response csvQueryResults = serviceDelegator.searchByQueryCSV(solrParams); return csvQueryResults; diff --git a/orcid-api-web/src/main/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator.java b/orcid-api-web/src/main/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator.java index 779a60c4cd2..df5dc1a2d6a 100644 --- a/orcid-api-web/src/main/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator.java +++ b/orcid-api-web/src/main/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator.java @@ -5,6 +5,8 @@ import javax.ws.rs.core.Response; +import org.apache.hc.core5.http.ParseException; + public interface MemberV3ApiServiceDelegator { static final String LATEST_V3_VERSION = "3.0"; @@ -145,7 +147,7 @@ public interface MemberV3ApiServiceDelegator> solrParams); + Response searchByQuery(Map> solrParams) throws ParseException; Response viewClient(String clientId); @@ -217,7 +219,7 @@ public interface MemberV3ApiServiceDelegator> solrParams); + Response searchByQueryCSV(Map> solrParams) throws ParseException; Response expandedSearchByQuery(Map> solrParams); diff --git a/orcid-api-web/src/main/java/org/orcid/api/memberV3/server/delegator/impl/MemberV3ApiServiceDelegatorImpl.java b/orcid-api-web/src/main/java/org/orcid/api/memberV3/server/delegator/impl/MemberV3ApiServiceDelegatorImpl.java index 8a1ead2773e..39ddab4b169 100644 --- a/orcid-api-web/src/main/java/org/orcid/api/memberV3/server/delegator/impl/MemberV3ApiServiceDelegatorImpl.java +++ b/orcid-api-web/src/main/java/org/orcid/api/memberV3/server/delegator/impl/MemberV3ApiServiceDelegatorImpl.java @@ -42,6 +42,8 @@ import javax.ws.rs.core.Response.Status; import java.util.*; +import org.apache.hc.core5.http.ParseException; + @Component public class MemberV3ApiServiceDelegatorImpl implements MemberV3ApiServiceDelegator { @@ -1078,7 +1080,7 @@ public Response viewPerson(String orcid) { } @Override - public Response searchByQuery(Map> solrParams) { + public Response searchByQuery(Map> solrParams) throws ParseException { orcidSecurityManager.checkScopes(ScopePathType.READ_PUBLIC); validateSearchParams(solrParams); Search search = orcidSearchManager.findOrcidIds(solrParams); @@ -1086,7 +1088,7 @@ public Response searchByQuery(Map> solrParams) { } @Override - public Response searchByQueryCSV(Map> solrParams) { + public Response searchByQueryCSV(Map> solrParams) throws ParseException { validateSearchParams(solrParams); String search = orcidSearchManager.findOrcidIdsAsCSV(solrParams); return Response.ok(search).build(); From 4c99d234b0d78ffc0502602e3c72dcc88a9445a1 Mon Sep 17 00:00:00 2001 From: Camelia Dumitru Date: Wed, 8 Apr 2026 00:04:08 +0100 Subject: [PATCH 24/77] message listener compiles --- orcid-message-listener/pom.xml | 7 ++++++- .../persistence/spring/OrcidEntityManagerFactory.java | 4 ++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/orcid-message-listener/pom.xml b/orcid-message-listener/pom.xml index 0c75a54dd66..0d314448d13 100644 --- a/orcid-message-listener/pom.xml +++ b/orcid-message-listener/pom.xml @@ -62,7 +62,12 @@ org.apache.activemq activemq-spring 5.13.3 - + + + + jakarta.persistence + jakarta.persistence-api + diff --git a/orcid-message-listener/src/main/java/org/orcid/listener/persistence/spring/OrcidEntityManagerFactory.java b/orcid-message-listener/src/main/java/org/orcid/listener/persistence/spring/OrcidEntityManagerFactory.java index 88e0eeceaa2..948a6c7a294 100644 --- a/orcid-message-listener/src/main/java/org/orcid/listener/persistence/spring/OrcidEntityManagerFactory.java +++ b/orcid-message-listener/src/main/java/org/orcid/listener/persistence/spring/OrcidEntityManagerFactory.java @@ -1,7 +1,7 @@ package org.orcid.listener.persistence.spring; -import javax.persistence.EntityManager; -import javax.persistence.EntityManagerFactory; +import jakarta.persistence.EntityManager; +import jakarta.persistence.EntityManagerFactory; import org.springframework.beans.BeansException; import org.springframework.beans.factory.FactoryBean; From c8441751dcdf4547229505ff122d34b4506cfd9e Mon Sep 17 00:00:00 2001 From: Camelia Dumitru Date: Wed, 8 Apr 2026 15:11:10 +0100 Subject: [PATCH 25/77] More jakarta persistence changes doesn't compile yet --- .../persistence/dao/ActivitiesStatusDao.java | 8 +-- .../entities/ActivitiesStatusEntity.java | 8 +-- .../spring/OrcidEntityManagerFactory.java | 4 +- .../api/common/jaxb/OrcidExceptionMapper.java | 2 +- ...erV2ApiServiceDelegator_AddressesTest.java | 2 +- ...rV2ApiServiceDelegator_EducationsTest.java | 2 +- ...V2ApiServiceDelegator_EmploymentsTest.java | 2 +- ...viceDelegator_ExternalIdentifiersTest.java | 2 +- ...mberV2ApiServiceDelegator_FundingTest.java | 2 +- ...mberV2ApiServiceDelegator_GeneralTest.java | 2 +- ...mberV2ApiServiceDelegator_GroupIdTest.java | 2 +- ...berV2ApiServiceDelegator_KeywordsTest.java | 2 +- ...rV2ApiServiceDelegator_OtherNamesTest.java | 2 +- ...V2ApiServiceDelegator_PeerReviewsTest.java | 2 +- ...piServiceDelegator_ResearcherUrlsTest.java | 2 +- ...MemberV2ApiServiceDelegator_WorksTest.java | 2 +- ...berV2ApiServiceVersionedDelegatorTest.java | 2 +- ...MemberV3ApiServiceDelegatorErrorsTest.java | 2 +- ...erV3ApiServiceDelegator_AddressesTest.java | 2 +- ...3ApiServiceDelegator_DistinctionsTest.java | 2 +- ...rV3ApiServiceDelegator_EducationsTest.java | 2 +- ...V3ApiServiceDelegator_EmploymentsTest.java | 2 +- ...viceDelegator_ExternalIdentifiersTest.java | 2 +- ...mberV3ApiServiceDelegator_FundingTest.java | 2 +- ...mberV3ApiServiceDelegator_GeneralTest.java | 2 +- ...mberV3ApiServiceDelegator_GroupIdTest.java | 2 +- ...ServiceDelegator_InvitedPositionsTest.java | 2 +- ...berV3ApiServiceDelegator_KeywordsTest.java | 2 +- ...V3ApiServiceDelegator_MembershipsTest.java | 2 +- ...rV3ApiServiceDelegator_OtherNamesTest.java | 2 +- ...V3ApiServiceDelegator_PeerReviewsTest.java | 2 +- ...piServiceDelegator_QualificationsTest.java | 2 +- ...piServiceDelegator_ResearcherUrlsTest.java | 2 +- ...berV3ApiServiceDelegator_ServicesTest.java | 2 +- ...MemberV3ApiServiceDelegator_WorksTest.java | 2 +- .../core/cli/logs/ApiAccessLogsAnalyser.java | 2 +- .../impl/EmailFrequencyManagerImpl.java | 2 +- .../exception/OrcidCoreExceptionMapper.java | 2 +- .../core/manager/OrcidSecurityManager.java | 2 +- .../impl/OrcidSecurityManagerImpl.java | 2 +- .../core/manager/impl/StatusManagerImpl.java | 2 +- .../ClientDetailsManagerReadOnlyImpl.java | 2 +- .../GroupIdRecordManagerReadOnlyImpl.java | 2 +- .../core/manager/v3/OrcidSecurityManager.java | 2 +- .../manager/v3/impl/BibtexManagerImpl.java | 2 +- .../v3/impl/OrcidSecurityManagerImpl.java | 2 +- .../ClientDetailsManagerReadOnlyImpl.java | 2 +- .../GroupIdRecordManagerReadOnlyImpl.java | 2 +- .../cli/logs/ApiAccessLogsAnalyserTest.java | 2 +- .../manager/OrcidSecurityManagerTest.java | 2 +- .../manager/v3/EmailManagerReadOnlyTest.java | 2 +- .../manager/v3/OrcidSecurityManagerTest.java | 2 +- .../security/OrcidUserDetailsServiceTest.java | 4 +- .../impl/InternalApiServiceDelegatorImpl.java | 2 +- .../persistence/dao/Api20RecordStatusDao.java | 10 ++-- .../persistence/dao/Api30RecordStatusDao.java | 10 ++-- .../dao/SearchEngineRecordStatusDao.java | 10 ++-- .../entities/Api20RecordStatusEntity.java | 8 +-- .../entities/Api30RecordStatusEntity.java | 8 +-- .../SearchEngineRecordStatusEntity.java | 8 +-- .../managers/Api20RecordStatusManager.java | 2 +- .../managers/Api30RecordStatusManager.java | 2 +- .../dao/Api20RecordStatusDaoTest.java | 4 +- .../dao/Api30RecordStatusDaoTest.java | 4 +- orcid-persistence/pom.xml | 33 ++++++++----- .../persistence/dao/impl/AddressDaoImpl.java | 2 +- .../dao/impl/BackupCodeDaoImpl.java | 2 +- .../dao/impl/BiographyDaoImpl.java | 2 +- .../ClientAuthorizedGrantTypeDaoImpl.java | 2 +- .../dao/impl/ClientDetailsDaoImpl.java | 8 +-- .../dao/impl/ClientRedirectDaoImpl.java | 2 +- .../dao/impl/ClientScopeDaoImpl.java | 2 +- .../dao/impl/ClientSecretDaoImpl.java | 4 +- .../dao/impl/CustomEmailDaoImpl.java | 6 +-- .../persistence/dao/impl/EmailDaoImpl.java | 4 +- .../dao/impl/EmailDomainDaoImpl.java | 6 +-- .../dao/impl/EmailFrequencyDaoImpl.java | 2 +- .../dao/impl/EmailScheduleDaoImpl.java | 2 +- .../persistence/dao/impl/EventDaoImpl.java | 6 +-- .../dao/impl/EventStatsDaoImpl.java | 6 +-- .../dao/impl/ExternalIdentifierDaoImpl.java | 2 +- .../dao/impl/FindMyStuffHistoryDaoImpl.java | 4 +- .../persistence/dao/impl/GenericDaoImpl.java | 4 +- .../dao/impl/GivenPermissionToDaoImpl.java | 6 +-- .../dao/impl/GroupIdRecordDaoImpl.java | 4 +- .../dao/impl/IdentifierTypeDaoImpl.java | 2 +- .../dao/impl/IdentityProviderDaoImpl.java | 4 +- .../impl/InvalidRecordDataChangeDaoImpl.java | 6 +-- .../MemberChosenOrgDisambiguatedDaoImpl.java | 2 +- .../MemberOBOWhitelistedClientDaoImpl.java | 2 +- .../persistence/dao/impl/MiscDaoImpl.java | 4 +- .../dao/impl/NotificationDaoImpl.java | 4 +- ...Oauth2AuthoriziationCodeDetailDaoImpl.java | 6 +-- .../impl/OrcidOauth2TokenDetailDaoImpl.java | 6 +-- .../dao/impl/OrcidPropsDaoImpl.java | 6 +-- .../impl/OrgAffiliationRelationDaoImpl.java | 4 +- .../persistence/dao/impl/OrgDaoImpl.java | 4 +- .../dao/impl/OrgDisambiguatedDaoImpl.java | 4 +- ...isambiguatedExternalIdentifierDaoImpl.java | 6 +-- .../dao/impl/OrgImportLogDaoImpl.java | 2 +- .../dao/impl/OtherNameDaoImpl.java | 2 +- .../dao/impl/PeerReviewDaoImpl.java | 4 +- .../persistence/dao/impl/ProfileDaoImpl.java | 6 +-- .../dao/impl/ProfileEmailDomainDaoImpl.java | 6 +-- .../dao/impl/ProfileEventDaoImpl.java | 2 +- .../dao/impl/ProfileFundingDaoImpl.java | 4 +- .../dao/impl/ProfileHistoryEventDaoImpl.java | 2 +- .../impl/ProfileInterstitialFlagDaoImpl.java | 4 +- .../dao/impl/ProfileKeywordDaoImpl.java | 2 +- .../dao/impl/ProfileLastModifiedDaoImpl.java | 4 +- .../impl/PublicApiDailyRateLimitDaoImpl.java | 2 +- .../dao/impl/RecordNameDaoImpl.java | 4 +- .../RejectedGroupingSuggestionDaoImpl.java | 2 +- .../dao/impl/ResearchResourceDaoImpl.java | 4 +- .../dao/impl/ResearcherUrlDaoImpl.java | 4 +- .../dao/impl/SalesForceConnectionDaoImpl.java | 2 +- .../dao/impl/ShibbolethAccountDaoImpl.java | 4 +- .../persistence/dao/impl/SpamDaoImpl.java | 2 +- .../dao/impl/StatisticsDaoImpl.java | 4 +- .../dao/impl/UserConnectionDaoImpl.java | 4 +- .../impl/ValidatedPublicProfileDaoImpl.java | 2 +- .../persistence/dao/impl/WebhookDaoImpl.java | 4 +- .../persistence/dao/impl/WorkDaoImpl.java | 49 +++++++++---------- .../jpa/entities/AddressEntity.java | 22 ++++----- .../jpa/entities/AmbiguousOrgEntity.java | 16 +++--- .../jpa/entities/BackupCodeEntity.java | 14 +++--- .../jpa/entities/BaseContributorEntity.java | 12 ++--- .../persistence/jpa/entities/BaseEntity.java | 10 ++-- .../jpa/entities/BiographyEntity.java | 18 +++---- .../ClientAuthorisedGrantTypeEntity.java | 2 +- .../jpa/entities/ClientDetailsEntity.java | 28 +++++------ .../ClientGrantedAuthorityEntity.java | 2 +- .../jpa/entities/ClientRedirectUriEntity.java | 2 +- .../jpa/entities/ClientResourceIdEntity.java | 2 +- .../jpa/entities/ClientScopeEntity.java | 2 +- .../jpa/entities/ClientSecretEntity.java | 2 +- .../jpa/entities/CompletionDateEntity.java | 4 +- .../jpa/entities/CountryIsoEntity.java | 10 ++-- .../jpa/entities/CustomEmailEntity.java | 22 ++++----- .../jpa/entities/EmailDomainEntity.java | 18 +++---- .../entities/EmailDomainToOrgIdEntity.java | 20 ++++---- .../persistence/jpa/entities/EmailEntity.java | 8 +-- .../jpa/entities/EmailEventEntity.java | 20 ++++---- .../jpa/entities/EmailFrequencyEntity.java | 8 +-- .../jpa/entities/EmailScheduleEntity.java | 14 +++--- .../jpa/entities/EndDateEntity.java | 4 +- .../persistence/jpa/entities/EventEntity.java | 14 +++--- .../jpa/entities/EventStatsEntity.java | 14 +++--- .../entities/ExternalIdentifierEntity.java | 22 ++++----- .../entities/FindMyStuffHistoryEntity.java | 18 +++---- .../jpa/entities/FuzzyDateEntity.java | 4 +- .../jpa/entities/GivenPermissionByEntity.java | 14 +++--- .../jpa/entities/GivenPermissionToEntity.java | 16 +++--- .../jpa/entities/GroupIdRecordEntity.java | 14 +++--- .../jpa/entities/IdentifierTypeEntity.java | 20 ++++---- .../jpa/entities/IdentityProviderEntity.java | 20 ++++---- .../entities/IdentityProviderNameEntity.java | 20 ++++---- .../InvalidRecordDataChangeEntity.java | 14 +++--- .../MemberChosenOrgDisambiguatedEntity.java | 8 +-- .../MemberOBOWhitelistedClientEntity.java | 12 ++--- .../entities/MinimizedExtendedWorkEntity.java | 6 +-- .../jpa/entities/MinimizedWorkEntity.java | 6 +-- .../entities/NotificationAddItemsEntity.java | 14 +++--- .../NotificationAdministrativeEntity.java | 6 +-- .../entities/NotificationAmendedEntity.java | 14 +++--- .../entities/NotificationCustomEntity.java | 6 +-- .../jpa/entities/NotificationEntity.java | 24 ++++----- .../NotificationFindMyStuffEntity.java | 6 +-- ...ficationInstitutionalConnectionEntity.java | 6 +-- .../jpa/entities/NotificationItemEntity.java | 14 +++--- ...NotificationServiceAnnouncementEntity.java | 6 +-- .../jpa/entities/NotificationTipEntity.java | 6 +-- .../jpa/entities/NotificationWorkEntity.java | 18 +++---- .../jpa/entities/OrcidGrantedAuthority.java | 18 +++---- .../OrcidOauth2AuthoriziationCodeDetail.java | 16 +++--- .../jpa/entities/OrcidOauth2TokenDetail.java | 14 +++--- .../jpa/entities/OrcidPropsEntity.java | 8 +-- .../OrgAffiliationRelationEntity.java | 22 ++++----- .../jpa/entities/OrgDisambiguatedEntity.java | 32 ++++++------ ...DisambiguatedExternalIdentifierEntity.java | 18 +++---- .../persistence/jpa/entities/OrgEntity.java | 18 +++---- .../jpa/entities/OrgImportLogEntity.java | 14 +++--- .../jpa/entities/OtherNameEntity.java | 20 ++++---- .../jpa/entities/PeerReviewEntity.java | 22 ++++----- .../entities/ProfileEmailDomainEntity.java | 2 +- .../jpa/entities/ProfileEntity.java | 26 +++++----- .../jpa/entities/ProfileEventEntity.java | 20 ++++---- .../jpa/entities/ProfileFundingEntity.java | 24 ++++----- .../entities/ProfileHistoryEventEntity.java | 14 +++--- .../ProfileInterstitialFlagEntity.java | 2 +- .../jpa/entities/ProfileKeywordEntity.java | 20 ++++---- .../PublicApiDailyRateLimitEntity.java | 20 ++++---- .../jpa/entities/PublicationDateEntity.java | 4 +- .../jpa/entities/RecordNameEntity.java | 14 +++--- .../jpa/entities/RefDataEntity.java | 14 +++--- .../RejectedGroupingSuggestionEntity.java | 8 +-- .../jpa/entities/ResearchResourceEntity.java | 26 +++++----- .../entities/ResearchResourceItemEntity.java | 26 +++++----- .../jpa/entities/ResearcherUrlEntity.java | 14 +++--- .../entities/SalesForceConnectionEntity.java | 14 +++--- .../jpa/entities/ShibbolethAccountEntity.java | 14 +++--- .../jpa/entities/SourceAwareEntity.java | 6 +-- .../jpa/entities/SourceEntity.java | 8 +-- .../persistence/jpa/entities/SpamEntity.java | 20 ++++---- .../jpa/entities/StartDateEntity.java | 4 +- .../jpa/entities/SubjectEntity.java | 10 ++-- .../jpa/entities/UserconnectionEntity.java | 14 +++--- .../jpa/entities/UserconnectionPK.java | 2 +- .../ValidatedPublicProfileEntity.java | 8 +-- .../jpa/entities/WebhookEntity.java | 20 ++++---- .../jpa/entities/WorkBaseEntity.java | 14 +++--- .../persistence/jpa/entities/WorkEntity.java | 6 +-- .../jpa/entities/WorkLastModifiedEntity.java | 14 +++--- .../jpa/entities/keys/AuthorWorkEntityPk.java | 2 +- .../keys/ClientAuthorisedGrantTypePk.java | 4 +- .../keys/ClientGrantedAuthorityPk.java | 4 +- .../entities/keys/ClientRedirectUriPk.java | 6 +-- .../jpa/entities/keys/ClientResourceIdPk.java | 4 +- .../jpa/entities/keys/ClientScopePk.java | 4 +- .../jpa/entities/keys/ClientSecretPk.java | 4 +- .../keys/ElectronicResourceNumEntityPk.java | 2 +- .../keys/OrcidGrantedAuthorityPk.java | 2 +- .../keys/SecondaryAuthorWorkEntityPk.java | 2 +- .../keys/WorkExternalIdentifierEntityPk.java | 2 +- .../jpa/entities/StatisticKeyEntity.java | 14 +++--- .../jpa/entities/StatisticValuesEntity.java | 22 ++++----- .../orcid/persistence/dao/EventDaoTest.java | 2 +- .../dao/ExternalIdentifierDaoTest.java | 2 +- .../dao/OrcidOauth2TokenDetailDaoTest.java | 2 +- .../persistence/dao/OtherNameDaoTest.java | 2 +- .../orcid/persistence/dao/ProfileDaoTest.java | 4 +- .../persistence/dao/ResearcherUrlDaoTest.java | 4 +- .../orcid/persistence/dao/SpamDaoTest.java | 2 +- .../orcid/persistence/dao/WebhookDaoTest.java | 6 +-- .../PublicV2ApiServiceDelegatorTest.java | 2 +- ...licV2ApiServiceVersionedDelegatorTest.java | 2 +- .../PublicV3ApiServiceDelegatorTest.java | 2 +- .../web/controllers/AdminController.java | 2 +- .../web/controllers/ClaimController.java | 2 +- .../controllers/ManageProfileController.java | 2 +- .../controllers/PasswordResetController.java | 2 +- .../ResearchResourceControllerTest.java | 2 +- pom.xml | 22 ++++++--- 243 files changed, 912 insertions(+), 898 deletions(-) diff --git a/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/listener/persistence/dao/ActivitiesStatusDao.java b/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/listener/persistence/dao/ActivitiesStatusDao.java index 821299578c2..199d631d5ee 100644 --- a/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/listener/persistence/dao/ActivitiesStatusDao.java +++ b/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/listener/persistence/dao/ActivitiesStatusDao.java @@ -20,10 +20,10 @@ import java.util.Date; import java.util.List; -import javax.persistence.EntityManager; -import javax.persistence.PersistenceContext; -import javax.persistence.Query; -import javax.persistence.TypedQuery; +import jakarta.persistence.EntityManager; +import jakarta.persistence.PersistenceContext; +import jakarta.persistence.Query; +import jakarta.persistence.TypedQuery; import org.orcid.activitiesindexer.persistence.entities.ActivitiesStatusEntity; import org.orcid.activitiesindexer.persistence.util.ActivityType; diff --git a/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/persistence/entities/ActivitiesStatusEntity.java b/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/persistence/entities/ActivitiesStatusEntity.java index cacfe1a1d8c..826c0aa0a46 100644 --- a/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/persistence/entities/ActivitiesStatusEntity.java +++ b/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/persistence/entities/ActivitiesStatusEntity.java @@ -18,10 +18,10 @@ import java.util.Date; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.Table; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; @Entity @Table(name = "activities_status") diff --git a/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/persistence/spring/OrcidEntityManagerFactory.java b/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/persistence/spring/OrcidEntityManagerFactory.java index d094cb83a5b..7081713bc26 100644 --- a/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/persistence/spring/OrcidEntityManagerFactory.java +++ b/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/persistence/spring/OrcidEntityManagerFactory.java @@ -16,8 +16,8 @@ */ package org.orcid.activitiesindexer.persistence.spring; -import javax.persistence.EntityManager; -import javax.persistence.EntityManagerFactory; +import jakarta.persistence.EntityManager; +import jakarta.persistence.EntityManagerFactory; import org.springframework.beans.BeansException; import org.springframework.beans.factory.FactoryBean; diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/jaxb/OrcidExceptionMapper.java b/orcid-api-common/src/main/java/org/orcid/api/common/jaxb/OrcidExceptionMapper.java index 5333f685a30..2cce15bcbd4 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/jaxb/OrcidExceptionMapper.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/jaxb/OrcidExceptionMapper.java @@ -3,7 +3,7 @@ import java.util.Map; import javax.annotation.Resource; -import javax.persistence.NoResultException; +import jakarta.persistence.NoResultException; import jakarta.servlet.http.HttpServletRequest; import javax.ws.rs.*; import javax.ws.rs.core.Context; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_AddressesTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_AddressesTest.java index d9cba2d5b71..3aeab6a2169 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_AddressesTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_AddressesTest.java @@ -14,7 +14,7 @@ import java.util.Map; import javax.annotation.Resource; -import javax.persistence.NoResultException; +import jakarta.persistence.NoResultException; import javax.ws.rs.core.Response; import org.junit.AfterClass; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_EducationsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_EducationsTest.java index afabd7f6ca6..34408cb7682 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_EducationsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_EducationsTest.java @@ -14,7 +14,7 @@ import java.util.Map; import javax.annotation.Resource; -import javax.persistence.NoResultException; +import jakarta.persistence.NoResultException; import javax.ws.rs.core.Response; import org.junit.After; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_EmploymentsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_EmploymentsTest.java index 7f24e226825..24bc173e79e 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_EmploymentsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_EmploymentsTest.java @@ -17,7 +17,7 @@ import java.util.Map; import javax.annotation.Resource; -import javax.persistence.NoResultException; +import jakarta.persistence.NoResultException; import javax.ws.rs.core.Response; import org.junit.After; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ExternalIdentifiersTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ExternalIdentifiersTest.java index 87f4fdda96e..c42f600b660 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ExternalIdentifiersTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ExternalIdentifiersTest.java @@ -13,7 +13,7 @@ import java.util.List; import javax.annotation.Resource; -import javax.persistence.NoResultException; +import jakarta.persistence.NoResultException; import javax.ws.rs.core.Response; import org.junit.AfterClass; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_FundingTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_FundingTest.java index a9f3437ca1d..54f44971a6f 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_FundingTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_FundingTest.java @@ -15,7 +15,7 @@ import java.util.Map; import javax.annotation.Resource; -import javax.persistence.NoResultException; +import jakarta.persistence.NoResultException; import javax.ws.rs.core.Response; import org.orcid.test.DBUnitTest; import org.orcid.test.helper.Utils; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_GeneralTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_GeneralTest.java index 12be925f9b8..0bdab217fea 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_GeneralTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_GeneralTest.java @@ -15,7 +15,7 @@ import java.util.Map; import javax.annotation.Resource; -import javax.persistence.NoResultException; +import jakarta.persistence.NoResultException; import javax.ws.rs.core.Response; import org.junit.After; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_GroupIdTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_GroupIdTest.java index 7287af89772..06f7c9d4a90 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_GroupIdTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_GroupIdTest.java @@ -11,7 +11,7 @@ import java.util.List; import javax.annotation.Resource; -import javax.persistence.NoResultException; +import jakarta.persistence.NoResultException; import javax.ws.rs.core.Response; import org.junit.AfterClass; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_KeywordsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_KeywordsTest.java index 2fc47fe4ba5..511d3cf92d7 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_KeywordsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_KeywordsTest.java @@ -14,7 +14,7 @@ import java.util.Map; import javax.annotation.Resource; -import javax.persistence.NoResultException; +import jakarta.persistence.NoResultException; import javax.ws.rs.core.Response; import org.junit.AfterClass; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_OtherNamesTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_OtherNamesTest.java index 0310cff5d3b..3fff08654b1 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_OtherNamesTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_OtherNamesTest.java @@ -14,7 +14,7 @@ import java.util.Map; import javax.annotation.Resource; -import javax.persistence.NoResultException; +import jakarta.persistence.NoResultException; import javax.ws.rs.core.Response; import org.orcid.test.DBUnitTest; import org.orcid.test.helper.Utils; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_PeerReviewsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_PeerReviewsTest.java index 91b34708d7c..d4f20636150 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_PeerReviewsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_PeerReviewsTest.java @@ -14,7 +14,7 @@ import java.util.Map; import javax.annotation.Resource; -import javax.persistence.NoResultException; +import jakarta.persistence.NoResultException; import javax.ws.rs.core.Response; import org.junit.After; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ResearcherUrlsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ResearcherUrlsTest.java index ba36d60ebbc..11974818f92 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ResearcherUrlsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ResearcherUrlsTest.java @@ -15,7 +15,7 @@ import java.util.Map; import javax.annotation.Resource; -import javax.persistence.NoResultException; +import jakarta.persistence.NoResultException; import javax.ws.rs.core.Response; import org.junit.AfterClass; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_WorksTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_WorksTest.java index 21e931b1012..76bcf1d7e8a 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_WorksTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_WorksTest.java @@ -15,7 +15,7 @@ import java.util.Map; import javax.annotation.Resource; -import javax.persistence.NoResultException; +import jakarta.persistence.NoResultException; import javax.ws.rs.core.Response; import org.junit.After; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceVersionedDelegatorTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceVersionedDelegatorTest.java index ec1d8c2b01c..385797cae29 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceVersionedDelegatorTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceVersionedDelegatorTest.java @@ -13,7 +13,7 @@ import java.util.Map; import javax.annotation.Resource; -import javax.persistence.NoResultException; +import jakarta.persistence.NoResultException; import javax.ws.rs.core.Response; import org.apache.commons.lang.time.DateUtils; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegatorErrorsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegatorErrorsTest.java index e4cc59146fd..2334548d1c4 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegatorErrorsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegatorErrorsTest.java @@ -11,7 +11,7 @@ import java.util.List; import javax.annotation.Resource; -import javax.persistence.NoResultException; +import jakarta.persistence.NoResultException; import javax.ws.rs.core.Response; import org.apache.commons.lang.time.DateUtils; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_AddressesTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_AddressesTest.java index 6a0e7d3d366..bc009ad332c 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_AddressesTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_AddressesTest.java @@ -14,7 +14,7 @@ import java.util.Map; import javax.annotation.Resource; -import javax.persistence.NoResultException; +import jakarta.persistence.NoResultException; import javax.ws.rs.core.Response; import org.junit.AfterClass; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_DistinctionsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_DistinctionsTest.java index 1d7b918b648..d9738dbc665 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_DistinctionsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_DistinctionsTest.java @@ -11,7 +11,7 @@ import java.util.Map; import javax.annotation.Resource; -import javax.persistence.NoResultException; +import jakarta.persistence.NoResultException; import javax.ws.rs.core.Response; import org.apache.hc.core5.http.HttpStatus; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_EducationsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_EducationsTest.java index f429a640af0..eab4c66665e 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_EducationsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_EducationsTest.java @@ -11,7 +11,7 @@ import java.util.Map; import javax.annotation.Resource; -import javax.persistence.NoResultException; +import jakarta.persistence.NoResultException; import javax.ws.rs.core.Response; import org.apache.hc.core5.http.HttpStatus; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_EmploymentsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_EmploymentsTest.java index 35b788e599b..a0fd279b70c 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_EmploymentsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_EmploymentsTest.java @@ -11,7 +11,7 @@ import java.util.Map; import javax.annotation.Resource; -import javax.persistence.NoResultException; +import jakarta.persistence.NoResultException; import javax.ws.rs.core.Response; import org.apache.hc.core5.http.HttpStatus; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ExternalIdentifiersTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ExternalIdentifiersTest.java index bc9e95cef52..de064b12217 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ExternalIdentifiersTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ExternalIdentifiersTest.java @@ -13,7 +13,7 @@ import java.util.List; import javax.annotation.Resource; -import javax.persistence.NoResultException; +import jakarta.persistence.NoResultException; import javax.ws.rs.core.Response; import org.junit.AfterClass; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_FundingTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_FundingTest.java index 3818f6d2c1f..94a0d4de27a 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_FundingTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_FundingTest.java @@ -15,7 +15,7 @@ import java.util.Map; import javax.annotation.Resource; -import javax.persistence.NoResultException; +import jakarta.persistence.NoResultException; import javax.ws.rs.core.Response; import org.junit.After; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_GeneralTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_GeneralTest.java index a9962ccb336..09599a134ac 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_GeneralTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_GeneralTest.java @@ -16,7 +16,7 @@ import java.util.Map; import javax.annotation.Resource; -import javax.persistence.NoResultException; +import jakarta.persistence.NoResultException; import javax.ws.rs.core.Response; import org.junit.After; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_GroupIdTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_GroupIdTest.java index bdeb4db805f..15dfc30eb7e 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_GroupIdTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_GroupIdTest.java @@ -11,7 +11,7 @@ import java.util.List; import javax.annotation.Resource; -import javax.persistence.NoResultException; +import jakarta.persistence.NoResultException; import javax.ws.rs.core.Response; import org.junit.AfterClass; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_InvitedPositionsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_InvitedPositionsTest.java index de02d7fc2ce..f6541f565d6 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_InvitedPositionsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_InvitedPositionsTest.java @@ -11,7 +11,7 @@ import java.util.Map; import javax.annotation.Resource; -import javax.persistence.NoResultException; +import jakarta.persistence.NoResultException; import javax.ws.rs.core.Response; import org.apache.hc.core5.http.HttpStatus; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_KeywordsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_KeywordsTest.java index e763d7d6e39..e85906319b6 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_KeywordsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_KeywordsTest.java @@ -14,7 +14,7 @@ import java.util.Map; import javax.annotation.Resource; -import javax.persistence.NoResultException; +import jakarta.persistence.NoResultException; import javax.ws.rs.core.Response; import org.junit.AfterClass; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_MembershipsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_MembershipsTest.java index 78b313df906..cd3a1a87f96 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_MembershipsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_MembershipsTest.java @@ -11,7 +11,7 @@ import java.util.Map; import javax.annotation.Resource; -import javax.persistence.NoResultException; +import jakarta.persistence.NoResultException; import javax.ws.rs.core.Response; import org.apache.hc.core5.http.HttpStatus; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_OtherNamesTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_OtherNamesTest.java index c72598d875e..c98735c78b2 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_OtherNamesTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_OtherNamesTest.java @@ -14,7 +14,7 @@ import java.util.Map; import javax.annotation.Resource; -import javax.persistence.NoResultException; +import jakarta.persistence.NoResultException; import javax.ws.rs.core.Response; import org.junit.AfterClass; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_PeerReviewsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_PeerReviewsTest.java index ad055ea6f69..ad8f46faa77 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_PeerReviewsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_PeerReviewsTest.java @@ -14,7 +14,7 @@ import java.util.Map; import javax.annotation.Resource; -import javax.persistence.NoResultException; +import jakarta.persistence.NoResultException; import javax.ws.rs.core.Response; import org.junit.After; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_QualificationsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_QualificationsTest.java index 151c37418fc..f17d81661f5 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_QualificationsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_QualificationsTest.java @@ -11,7 +11,7 @@ import java.util.Map; import javax.annotation.Resource; -import javax.persistence.NoResultException; +import jakarta.persistence.NoResultException; import javax.ws.rs.core.Response; import org.apache.hc.core5.http.HttpStatus; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ResearcherUrlsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ResearcherUrlsTest.java index b430009c7b4..34a8e741dec 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ResearcherUrlsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ResearcherUrlsTest.java @@ -15,7 +15,7 @@ import java.util.Map; import javax.annotation.Resource; -import javax.persistence.NoResultException; +import jakarta.persistence.NoResultException; import javax.ws.rs.core.Response; import org.junit.AfterClass; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ServicesTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ServicesTest.java index ee7c5ce6295..bcfe6404bb8 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ServicesTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ServicesTest.java @@ -11,7 +11,7 @@ import java.util.Map; import javax.annotation.Resource; -import javax.persistence.NoResultException; +import jakarta.persistence.NoResultException; import javax.ws.rs.core.Response; import org.apache.hc.core5.http.HttpStatus; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_WorksTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_WorksTest.java index aa34513bd26..f4ff706a911 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_WorksTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_WorksTest.java @@ -15,7 +15,7 @@ import java.util.Map; import javax.annotation.Resource; -import javax.persistence.NoResultException; +import jakarta.persistence.NoResultException; import javax.ws.rs.core.Response; import org.junit.After; diff --git a/orcid-core/src/main/java/org/orcid/core/cli/logs/ApiAccessLogsAnalyser.java b/orcid-core/src/main/java/org/orcid/core/cli/logs/ApiAccessLogsAnalyser.java index 59cb42985b3..d6e2973a3cd 100644 --- a/orcid-core/src/main/java/org/orcid/core/cli/logs/ApiAccessLogsAnalyser.java +++ b/orcid-core/src/main/java/org/orcid/core/cli/logs/ApiAccessLogsAnalyser.java @@ -12,7 +12,7 @@ import java.util.List; import java.util.Map; -import javax.persistence.NoResultException; +import jakarta.persistence.NoResultException; import org.kohsuke.args4j.CmdLineException; import org.kohsuke.args4j.CmdLineParser; diff --git a/orcid-core/src/main/java/org/orcid/core/common/manager/impl/EmailFrequencyManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/common/manager/impl/EmailFrequencyManagerImpl.java index 3214056bf86..32abb8847b8 100644 --- a/orcid-core/src/main/java/org/orcid/core/common/manager/impl/EmailFrequencyManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/common/manager/impl/EmailFrequencyManagerImpl.java @@ -5,7 +5,7 @@ import java.util.UUID; import javax.annotation.Resource; -import javax.persistence.NoResultException; +import jakarta.persistence.NoResultException; import org.orcid.core.common.manager.EmailFrequencyManager; import org.orcid.core.manager.ProfileEntityCacheManager; diff --git a/orcid-core/src/main/java/org/orcid/core/exception/OrcidCoreExceptionMapper.java b/orcid-core/src/main/java/org/orcid/core/exception/OrcidCoreExceptionMapper.java index 69b63df304d..7600b6a6451 100644 --- a/orcid-core/src/main/java/org/orcid/core/exception/OrcidCoreExceptionMapper.java +++ b/orcid-core/src/main/java/org/orcid/core/exception/OrcidCoreExceptionMapper.java @@ -5,7 +5,7 @@ import java.util.Map; import javax.annotation.Resource; -import javax.persistence.NoResultException; +import jakarta.persistence.NoResultException; import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.Status; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/OrcidSecurityManager.java b/orcid-core/src/main/java/org/orcid/core/manager/OrcidSecurityManager.java index 9528669359d..eefd492405f 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/OrcidSecurityManager.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/OrcidSecurityManager.java @@ -2,7 +2,7 @@ import java.util.Collection; -import javax.persistence.NoResultException; +import jakarta.persistence.NoResultException; import org.orcid.core.exception.DeactivatedException; import org.orcid.core.exception.LockedException; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/OrcidSecurityManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/OrcidSecurityManagerImpl.java index f62ab3d6403..9979a0990ca 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/OrcidSecurityManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/OrcidSecurityManagerImpl.java @@ -10,7 +10,7 @@ import java.util.Set; import javax.annotation.Resource; -import javax.persistence.NoResultException; +import jakarta.persistence.NoResultException; import javax.xml.datatype.XMLGregorianCalendar; import org.orcid.core.exception.DeactivatedException; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/StatusManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/StatusManagerImpl.java index f7898b9c925..f5cb3c093bd 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/StatusManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/StatusManagerImpl.java @@ -5,7 +5,7 @@ import java.util.Map; import javax.annotation.Resource; -import javax.persistence.PersistenceException; +import jakarta.persistence.PersistenceException; import org.orcid.core.manager.StatusManager; import org.orcid.persistence.dao.MiscDao; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/ClientDetailsManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/ClientDetailsManagerReadOnlyImpl.java index 10029e48d82..b5caefcbf60 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/ClientDetailsManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/ClientDetailsManagerReadOnlyImpl.java @@ -6,7 +6,7 @@ import java.util.Set; import javax.annotation.Resource; -import javax.persistence.NoResultException; +import jakarta.persistence.NoResultException; import org.orcid.core.adapter.JpaJaxbClientAdapter; import org.orcid.core.manager.EncryptionManager; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/GroupIdRecordManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/GroupIdRecordManagerReadOnlyImpl.java index 8240a5164b1..b248cc3f429 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/GroupIdRecordManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/GroupIdRecordManagerReadOnlyImpl.java @@ -4,7 +4,7 @@ import java.util.Optional; import javax.annotation.Resource; -import javax.persistence.NoResultException; +import jakarta.persistence.NoResultException; import org.orcid.core.adapter.JpaJaxbGroupIdRecordAdapter; import org.orcid.core.exception.GroupIdRecordNotFoundException; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/OrcidSecurityManager.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/OrcidSecurityManager.java index d5d8f510c2c..fb2721cdb90 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/OrcidSecurityManager.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/OrcidSecurityManager.java @@ -2,7 +2,7 @@ import java.util.Collection; -import javax.persistence.NoResultException; +import jakarta.persistence.NoResultException; import org.orcid.core.exception.DeactivatedException; import org.orcid.core.exception.LockedException; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/BibtexManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/BibtexManagerImpl.java index 6f0d30623c8..9d6ebf076e5 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/BibtexManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/BibtexManagerImpl.java @@ -4,7 +4,7 @@ import java.util.List; import javax.annotation.Resource; -import javax.persistence.NoResultException; +import jakarta.persistence.NoResultException; import org.orcid.core.manager.DOIManager; import org.orcid.core.manager.v3.ActivitiesSummaryManager; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/OrcidSecurityManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/OrcidSecurityManagerImpl.java index a66c6ef0b6f..4269651662a 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/OrcidSecurityManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/OrcidSecurityManagerImpl.java @@ -10,7 +10,7 @@ import java.util.Set; import javax.annotation.Resource; -import javax.persistence.NoResultException; +import jakarta.persistence.NoResultException; import javax.xml.datatype.XMLGregorianCalendar; import org.orcid.core.exception.DeactivatedException; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ClientDetailsManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ClientDetailsManagerReadOnlyImpl.java index ee5a83f73c5..288031c9ade 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ClientDetailsManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ClientDetailsManagerReadOnlyImpl.java @@ -3,7 +3,7 @@ import java.util.*; import javax.annotation.Resource; -import javax.persistence.NoResultException; +import jakarta.persistence.NoResultException; import org.orcid.core.adapter.v3.JpaJaxbClientAdapter; import org.orcid.core.manager.EncryptionManager; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/GroupIdRecordManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/GroupIdRecordManagerReadOnlyImpl.java index 9c1ce37467d..62aa039015b 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/GroupIdRecordManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/GroupIdRecordManagerReadOnlyImpl.java @@ -4,7 +4,7 @@ import java.util.Optional; import javax.annotation.Resource; -import javax.persistence.NoResultException; +import jakarta.persistence.NoResultException; import org.orcid.core.adapter.v3.JpaJaxbGroupIdRecordAdapter; import org.orcid.core.exception.GroupIdRecordNotFoundException; diff --git a/orcid-core/src/test/java/org/orcid/core/cli/logs/ApiAccessLogsAnalyserTest.java b/orcid-core/src/test/java/org/orcid/core/cli/logs/ApiAccessLogsAnalyserTest.java index cc1ca7b0caa..d3abb6b3a12 100644 --- a/orcid-core/src/test/java/org/orcid/core/cli/logs/ApiAccessLogsAnalyserTest.java +++ b/orcid-core/src/test/java/org/orcid/core/cli/logs/ApiAccessLogsAnalyserTest.java @@ -9,7 +9,7 @@ import java.io.IOException; import java.util.Arrays; -import javax.persistence.NoResultException; +import jakarta.persistence.NoResultException; import org.junit.Before; import org.junit.Test; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/OrcidSecurityManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/OrcidSecurityManagerTest.java index 240163053b0..b53e50f1370 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/OrcidSecurityManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/OrcidSecurityManagerTest.java @@ -6,7 +6,7 @@ import java.util.Date; import javax.annotation.Resource; -import javax.persistence.NoResultException; +import jakarta.persistence.NoResultException; import org.junit.After; import org.junit.Before; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/v3/EmailManagerReadOnlyTest.java b/orcid-core/src/test/java/org/orcid/core/manager/v3/EmailManagerReadOnlyTest.java index 37947008c9c..c2f1000bc7e 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/v3/EmailManagerReadOnlyTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/v3/EmailManagerReadOnlyTest.java @@ -13,7 +13,7 @@ import java.util.List; import javax.annotation.Resource; -import javax.persistence.NoResultException; +import jakarta.persistence.NoResultException; import org.junit.AfterClass; import org.junit.BeforeClass; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/v3/OrcidSecurityManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/v3/OrcidSecurityManagerTest.java index 0ed846142a0..16ec9ce5e3a 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/v3/OrcidSecurityManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/v3/OrcidSecurityManagerTest.java @@ -6,7 +6,7 @@ import java.util.Date; import javax.annotation.Resource; -import javax.persistence.NoResultException; +import jakarta.persistence.NoResultException; import org.junit.After; import org.junit.Before; diff --git a/orcid-core/src/test/java/org/orcid/core/security/OrcidUserDetailsServiceTest.java b/orcid-core/src/test/java/org/orcid/core/security/OrcidUserDetailsServiceTest.java index c7b958e03db..652710ae51a 100644 --- a/orcid-core/src/test/java/org/orcid/core/security/OrcidUserDetailsServiceTest.java +++ b/orcid-core/src/test/java/org/orcid/core/security/OrcidUserDetailsServiceTest.java @@ -9,8 +9,8 @@ import java.util.Date; -import javax.persistence.NoResultException; -import javax.persistence.NonUniqueResultException; +import jakarta.persistence.NoResultException; +import jakarta.persistence.NonUniqueResultException; import org.junit.Before; import org.junit.Test; diff --git a/orcid-internal-api/src/main/java/org/orcid/internal/server/delegator/impl/InternalApiServiceDelegatorImpl.java b/orcid-internal-api/src/main/java/org/orcid/internal/server/delegator/impl/InternalApiServiceDelegatorImpl.java index 46450c1a9eb..ee4c86c2f1b 100644 --- a/orcid-internal-api/src/main/java/org/orcid/internal/server/delegator/impl/InternalApiServiceDelegatorImpl.java +++ b/orcid-internal-api/src/main/java/org/orcid/internal/server/delegator/impl/InternalApiServiceDelegatorImpl.java @@ -7,7 +7,7 @@ import java.util.Map; import javax.annotation.Resource; -import javax.persistence.NoResultException; +import jakarta.persistence.NoResultException; import javax.ws.rs.core.Response; import org.orcid.core.exception.DeactivatedException; diff --git a/orcid-message-listener/src/main/java/org/orcid/listener/persistence/dao/Api20RecordStatusDao.java b/orcid-message-listener/src/main/java/org/orcid/listener/persistence/dao/Api20RecordStatusDao.java index 5a7e2a68ba9..cf171385880 100644 --- a/orcid-message-listener/src/main/java/org/orcid/listener/persistence/dao/Api20RecordStatusDao.java +++ b/orcid-message-listener/src/main/java/org/orcid/listener/persistence/dao/Api20RecordStatusDao.java @@ -4,11 +4,11 @@ import java.util.Date; import java.util.List; -import javax.persistence.EntityExistsException; -import javax.persistence.EntityManager; -import javax.persistence.PersistenceContext; -import javax.persistence.Query; -import javax.persistence.TypedQuery; +import jakarta.persistence.EntityExistsException; +import jakarta.persistence.EntityManager; +import jakarta.persistence.PersistenceContext; +import jakarta.persistence.Query; +import jakarta.persistence.TypedQuery; import org.orcid.listener.persistence.entities.Api20RecordStatusEntity; import org.orcid.listener.persistence.util.ActivityType; diff --git a/orcid-message-listener/src/main/java/org/orcid/listener/persistence/dao/Api30RecordStatusDao.java b/orcid-message-listener/src/main/java/org/orcid/listener/persistence/dao/Api30RecordStatusDao.java index 8bd22c3be32..516fc08bdec 100644 --- a/orcid-message-listener/src/main/java/org/orcid/listener/persistence/dao/Api30RecordStatusDao.java +++ b/orcid-message-listener/src/main/java/org/orcid/listener/persistence/dao/Api30RecordStatusDao.java @@ -4,11 +4,11 @@ import java.util.Date; import java.util.List; -import javax.persistence.EntityExistsException; -import javax.persistence.EntityManager; -import javax.persistence.PersistenceContext; -import javax.persistence.Query; -import javax.persistence.TypedQuery; +import jakarta.persistence.EntityExistsException; +import jakarta.persistence.EntityManager; +import jakarta.persistence.PersistenceContext; +import jakarta.persistence.Query; +import jakarta.persistence.TypedQuery; import org.orcid.listener.persistence.entities.Api30RecordStatusEntity; import org.orcid.listener.persistence.util.ActivityType; diff --git a/orcid-message-listener/src/main/java/org/orcid/listener/persistence/dao/SearchEngineRecordStatusDao.java b/orcid-message-listener/src/main/java/org/orcid/listener/persistence/dao/SearchEngineRecordStatusDao.java index 0ceb0cc9915..6c32a7d3faa 100644 --- a/orcid-message-listener/src/main/java/org/orcid/listener/persistence/dao/SearchEngineRecordStatusDao.java +++ b/orcid-message-listener/src/main/java/org/orcid/listener/persistence/dao/SearchEngineRecordStatusDao.java @@ -4,11 +4,11 @@ import java.util.Date; import java.util.List; -import javax.persistence.EntityExistsException; -import javax.persistence.EntityManager; -import javax.persistence.PersistenceContext; -import javax.persistence.Query; -import javax.persistence.TypedQuery; +import jakarta.persistence.EntityExistsException; +import jakarta.persistence.EntityManager; +import jakarta.persistence.PersistenceContext; +import jakarta.persistence.Query; +import jakarta.persistence.TypedQuery; import org.orcid.listener.persistence.entities.Api30RecordStatusEntity; import org.orcid.listener.persistence.entities.SearchEngineRecordStatusEntity; diff --git a/orcid-message-listener/src/main/java/org/orcid/listener/persistence/entities/Api20RecordStatusEntity.java b/orcid-message-listener/src/main/java/org/orcid/listener/persistence/entities/Api20RecordStatusEntity.java index a1c11454131..a3d0e3f9b71 100644 --- a/orcid-message-listener/src/main/java/org/orcid/listener/persistence/entities/Api20RecordStatusEntity.java +++ b/orcid-message-listener/src/main/java/org/orcid/listener/persistence/entities/Api20RecordStatusEntity.java @@ -2,10 +2,10 @@ import java.util.Date; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.Table; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; @Entity @Table(name = "api_2_0_record_status") diff --git a/orcid-message-listener/src/main/java/org/orcid/listener/persistence/entities/Api30RecordStatusEntity.java b/orcid-message-listener/src/main/java/org/orcid/listener/persistence/entities/Api30RecordStatusEntity.java index c40f34a5c01..3ab1efe3252 100644 --- a/orcid-message-listener/src/main/java/org/orcid/listener/persistence/entities/Api30RecordStatusEntity.java +++ b/orcid-message-listener/src/main/java/org/orcid/listener/persistence/entities/Api30RecordStatusEntity.java @@ -2,10 +2,10 @@ import java.util.Date; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.Table; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; @Entity @Table(name = "api_3_0_record_status") diff --git a/orcid-message-listener/src/main/java/org/orcid/listener/persistence/entities/SearchEngineRecordStatusEntity.java b/orcid-message-listener/src/main/java/org/orcid/listener/persistence/entities/SearchEngineRecordStatusEntity.java index d128ad35a52..8f20986bc87 100644 --- a/orcid-message-listener/src/main/java/org/orcid/listener/persistence/entities/SearchEngineRecordStatusEntity.java +++ b/orcid-message-listener/src/main/java/org/orcid/listener/persistence/entities/SearchEngineRecordStatusEntity.java @@ -3,10 +3,10 @@ import java.util.Date; import java.util.Objects; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.Table; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; @Entity @Table(name = "search_engine_record_status") diff --git a/orcid-message-listener/src/main/java/org/orcid/listener/persistence/managers/Api20RecordStatusManager.java b/orcid-message-listener/src/main/java/org/orcid/listener/persistence/managers/Api20RecordStatusManager.java index 00eefc97049..7983a8539b9 100644 --- a/orcid-message-listener/src/main/java/org/orcid/listener/persistence/managers/Api20RecordStatusManager.java +++ b/orcid-message-listener/src/main/java/org/orcid/listener/persistence/managers/Api20RecordStatusManager.java @@ -3,7 +3,7 @@ import java.util.Arrays; import java.util.List; -import javax.persistence.EntityExistsException; +import jakarta.persistence.EntityExistsException; import org.orcid.listener.persistence.dao.Api20RecordStatusDao; import org.orcid.listener.persistence.entities.Api20RecordStatusEntity; diff --git a/orcid-message-listener/src/main/java/org/orcid/listener/persistence/managers/Api30RecordStatusManager.java b/orcid-message-listener/src/main/java/org/orcid/listener/persistence/managers/Api30RecordStatusManager.java index 47d6c3d8ac5..bbafc6ad184 100644 --- a/orcid-message-listener/src/main/java/org/orcid/listener/persistence/managers/Api30RecordStatusManager.java +++ b/orcid-message-listener/src/main/java/org/orcid/listener/persistence/managers/Api30RecordStatusManager.java @@ -3,7 +3,7 @@ import java.util.Arrays; import java.util.List; -import javax.persistence.EntityExistsException; +import jakarta.persistence.EntityExistsException; import org.orcid.listener.persistence.dao.Api30RecordStatusDao; import org.orcid.listener.persistence.entities.Api30RecordStatusEntity; diff --git a/orcid-message-listener/src/test/java/org/orcid/listener/persistence/dao/Api20RecordStatusDaoTest.java b/orcid-message-listener/src/test/java/org/orcid/listener/persistence/dao/Api20RecordStatusDaoTest.java index 72a6438edf1..c19e28195ba 100644 --- a/orcid-message-listener/src/test/java/org/orcid/listener/persistence/dao/Api20RecordStatusDaoTest.java +++ b/orcid-message-listener/src/test/java/org/orcid/listener/persistence/dao/Api20RecordStatusDaoTest.java @@ -11,8 +11,8 @@ import java.util.List; import javax.annotation.Resource; -import javax.persistence.EntityManager; -import javax.persistence.PersistenceContext; +import jakarta.persistence.EntityManager; +import jakarta.persistence.PersistenceContext; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/orcid-message-listener/src/test/java/org/orcid/listener/persistence/dao/Api30RecordStatusDaoTest.java b/orcid-message-listener/src/test/java/org/orcid/listener/persistence/dao/Api30RecordStatusDaoTest.java index cb051133e98..de8a4233d39 100644 --- a/orcid-message-listener/src/test/java/org/orcid/listener/persistence/dao/Api30RecordStatusDaoTest.java +++ b/orcid-message-listener/src/test/java/org/orcid/listener/persistence/dao/Api30RecordStatusDaoTest.java @@ -11,8 +11,8 @@ import java.util.List; import javax.annotation.Resource; -import javax.persistence.EntityManager; -import javax.persistence.PersistenceContext; +import jakarta.persistence.EntityManager; +import jakarta.persistence.PersistenceContext; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/orcid-persistence/pom.xml b/orcid-persistence/pom.xml index 4788eb954d7..311c20d6981 100644 --- a/orcid-persistence/pom.xml +++ b/orcid-persistence/pom.xml @@ -113,22 +113,31 @@ org.postgresql postgresql - - org.hibernate - hibernate-agroal - - - org.hibernate - hibernate-c3p0 - - - org.hibernate - hibernate-validator - + + org.hibernate.orm + hibernate-core + + + org.hibernate.orm + hibernate-agroal + + + org.hibernate.orm + hibernate-c3p0 + + + org.hibernate.validator + hibernate-validator + jakarta.persistence jakarta.persistence-api + + jakarta.transaction + jakarta.transaction-api + 2.0.1 + org.liquibase liquibase-core diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/AddressDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/AddressDaoImpl.java index 0308d5a8ebf..f2d894ae118 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/AddressDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/AddressDaoImpl.java @@ -3,7 +3,7 @@ import java.math.BigInteger; import java.util.List; -import javax.persistence.Query; +import jakarta.persistence.Query; import org.orcid.jaxb.model.v3.release.common.Visibility; import org.orcid.persistence.aop.UpdateProfileLastModified; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/BackupCodeDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/BackupCodeDaoImpl.java index 40c752217e1..ab390fe319a 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/BackupCodeDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/BackupCodeDaoImpl.java @@ -2,7 +2,7 @@ import java.util.List; -import javax.persistence.Query; +import jakarta.persistence.Query; import org.orcid.persistence.dao.BackupCodeDao; import org.orcid.persistence.jpa.entities.BackupCodeEntity; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/BiographyDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/BiographyDaoImpl.java index d5ca09b932f..baaee21e014 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/BiographyDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/BiographyDaoImpl.java @@ -2,7 +2,7 @@ import java.math.BigInteger; -import javax.persistence.Query; +import jakarta.persistence.Query; import org.apache.commons.lang.StringUtils; import org.orcid.persistence.aop.UpdateProfileLastModifiedAndIndexingStatus; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ClientAuthorizedGrantTypeDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ClientAuthorizedGrantTypeDaoImpl.java index dea2522512c..ba532be692f 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ClientAuthorizedGrantTypeDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ClientAuthorizedGrantTypeDaoImpl.java @@ -1,6 +1,6 @@ package org.orcid.persistence.dao.impl; -import javax.persistence.Query; +import jakarta.persistence.Query; import org.orcid.persistence.dao.ClientAuthorizedGrantTypeDao; import org.orcid.persistence.jpa.entities.ClientAuthorisedGrantTypeEntity; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ClientDetailsDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ClientDetailsDaoImpl.java index a1db541f4d8..2aa80fde2bf 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ClientDetailsDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ClientDetailsDaoImpl.java @@ -3,10 +3,10 @@ import java.util.Date; import java.util.List; -import javax.persistence.NoResultException; -import javax.persistence.PersistenceContext; -import javax.persistence.Query; -import javax.persistence.TypedQuery; +import jakarta.persistence.NoResultException; +import jakarta.persistence.PersistenceContext; +import jakarta.persistence.Query; +import jakarta.persistence.TypedQuery; import org.orcid.jaxb.model.clientgroup.ClientType; import org.orcid.persistence.dao.ClientDetailsDao; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ClientRedirectDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ClientRedirectDaoImpl.java index 1ee009daa4c..53b6d33eee5 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ClientRedirectDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ClientRedirectDaoImpl.java @@ -2,7 +2,7 @@ import java.util.List; -import javax.persistence.Query; +import jakarta.persistence.Query; import org.orcid.persistence.dao.ClientRedirectDao; import org.orcid.persistence.jpa.entities.ClientRedirectUriEntity; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ClientScopeDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ClientScopeDaoImpl.java index 49bbc1adfa6..d4e3a5b879c 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ClientScopeDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ClientScopeDaoImpl.java @@ -2,7 +2,7 @@ import java.util.List; -import javax.persistence.Query; +import jakarta.persistence.Query; import org.orcid.persistence.dao.ClientScopeDao; import org.orcid.persistence.jpa.entities.ClientScopeEntity; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ClientSecretDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ClientSecretDaoImpl.java index 507162d8324..16187fa97ab 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ClientSecretDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ClientSecretDaoImpl.java @@ -2,8 +2,8 @@ import java.util.List; -import javax.persistence.Query; -import javax.persistence.TypedQuery; +import jakarta.persistence.Query; +import jakarta.persistence.TypedQuery; import org.joda.time.DateTime; import org.orcid.persistence.dao.ClientSecretDao; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/CustomEmailDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/CustomEmailDaoImpl.java index af8d2ea511b..7ca6fe566ae 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/CustomEmailDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/CustomEmailDaoImpl.java @@ -3,9 +3,9 @@ import java.util.Date; import java.util.List; -import javax.persistence.NoResultException; -import javax.persistence.Query; -import javax.persistence.TypedQuery; +import jakarta.persistence.NoResultException; +import jakarta.persistence.Query; +import jakarta.persistence.TypedQuery; import org.hibernate.NonUniqueResultException; import org.orcid.persistence.dao.CustomEmailDao; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/EmailDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/EmailDaoImpl.java index 3df5afeb243..f102b4aaf99 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/EmailDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/EmailDaoImpl.java @@ -2,8 +2,8 @@ import java.util.List; -import javax.persistence.Query; -import javax.persistence.TypedQuery; +import jakarta.persistence.Query; +import jakarta.persistence.TypedQuery; import org.orcid.persistence.aop.UpdateProfileLastModified; import org.orcid.persistence.aop.UpdateProfileLastModifiedAndIndexingStatus; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/EmailDomainDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/EmailDomainDaoImpl.java index 3ef07af83cc..47f983162fc 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/EmailDomainDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/EmailDomainDaoImpl.java @@ -2,9 +2,9 @@ import java.util.List; -import javax.persistence.NoResultException; -import javax.persistence.Query; -import javax.persistence.TypedQuery; +import jakarta.persistence.NoResultException; +import jakarta.persistence.Query; +import jakarta.persistence.TypedQuery; import org.orcid.persistence.dao.EmailDomainDao; import org.orcid.persistence.jpa.entities.EmailDomainEntity; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/EmailFrequencyDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/EmailFrequencyDaoImpl.java index 7bd542b843c..26445c5deed 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/EmailFrequencyDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/EmailFrequencyDaoImpl.java @@ -1,6 +1,6 @@ package org.orcid.persistence.dao.impl; -import javax.persistence.Query; +import jakarta.persistence.Query; import org.orcid.persistence.aop.UpdateProfileLastModified; import org.orcid.persistence.constants.SendEmailFrequency; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/EmailScheduleDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/EmailScheduleDaoImpl.java index 3f6d170b9bb..1f7ba212526 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/EmailScheduleDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/EmailScheduleDaoImpl.java @@ -4,7 +4,7 @@ import java.util.Date; import java.util.List; -import javax.persistence.Query; +import jakarta.persistence.Query; import javax.transaction.Transactional; import org.orcid.persistence.dao.EmailScheduleDao; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/EventDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/EventDaoImpl.java index ef2b15ce69e..55ea03b506c 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/EventDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/EventDaoImpl.java @@ -1,9 +1,9 @@ package org.orcid.persistence.dao.impl; import javax.annotation.Resource; -import javax.persistence.EntityManager; -import javax.persistence.Query; -import javax.persistence.TypedQuery; +import jakarta.persistence.EntityManager; +import jakarta.persistence.Query; +import jakarta.persistence.TypedQuery; import org.orcid.persistence.dao.EventDao; import org.orcid.persistence.jpa.entities.EventEntity; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/EventStatsDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/EventStatsDaoImpl.java index a81c3687535..e8df8d1672e 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/EventStatsDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/EventStatsDaoImpl.java @@ -6,9 +6,9 @@ import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; -import javax.persistence.EntityManager; -import javax.persistence.Query; -import javax.persistence.TypedQuery; +import jakarta.persistence.EntityManager; +import jakarta.persistence.Query; +import jakarta.persistence.TypedQuery; import java.math.BigInteger; import java.util.ArrayList; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ExternalIdentifierDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ExternalIdentifierDaoImpl.java index 6ddc9e0f520..3c59f08df68 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ExternalIdentifierDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ExternalIdentifierDaoImpl.java @@ -2,7 +2,7 @@ import java.util.List; -import javax.persistence.Query; +import jakarta.persistence.Query; import org.orcid.jaxb.model.v3.release.common.Visibility; import org.orcid.persistence.aop.UpdateProfileLastModifiedAndIndexingStatus; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/FindMyStuffHistoryDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/FindMyStuffHistoryDaoImpl.java index 181429b9c85..db9238bed64 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/FindMyStuffHistoryDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/FindMyStuffHistoryDaoImpl.java @@ -2,8 +2,8 @@ import java.util.List; -import javax.persistence.Query; -import javax.persistence.TypedQuery; +import jakarta.persistence.Query; +import jakarta.persistence.TypedQuery; import javax.transaction.Transactional; import org.orcid.persistence.dao.FindMyStuffHistoryDao; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/GenericDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/GenericDaoImpl.java index 992cc2a21ad..6cf64324ec6 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/GenericDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/GenericDaoImpl.java @@ -5,8 +5,8 @@ import java.util.List; import javax.annotation.Resource; -import javax.persistence.EntityManager; -import javax.persistence.Query; +import jakarta.persistence.EntityManager; +import jakarta.persistence.Query; import org.orcid.persistence.dao.GenericDao; import org.orcid.persistence.jpa.entities.OrcidEntity; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/GivenPermissionToDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/GivenPermissionToDaoImpl.java index bc20af89735..8beba02cd8d 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/GivenPermissionToDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/GivenPermissionToDaoImpl.java @@ -2,9 +2,9 @@ import java.util.List; -import javax.persistence.PersistenceContext; -import javax.persistence.Query; -import javax.persistence.TypedQuery; +import jakarta.persistence.PersistenceContext; +import jakarta.persistence.Query; +import jakarta.persistence.TypedQuery; import org.orcid.persistence.aop.UpdateProfileLastModified; import org.orcid.persistence.dao.GivenPermissionToDao; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/GroupIdRecordDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/GroupIdRecordDaoImpl.java index 332011883f9..76f961caf4e 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/GroupIdRecordDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/GroupIdRecordDaoImpl.java @@ -3,8 +3,8 @@ import java.util.Date; import java.util.List; -import javax.persistence.Query; -import javax.persistence.TypedQuery; +import jakarta.persistence.Query; +import jakarta.persistence.TypedQuery; import org.orcid.persistence.dao.GroupIdRecordDao; import org.orcid.persistence.jpa.entities.GroupIdRecordEntity; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/IdentifierTypeDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/IdentifierTypeDaoImpl.java index 0eacbee8a78..23803b9cc1c 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/IdentifierTypeDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/IdentifierTypeDaoImpl.java @@ -2,7 +2,7 @@ import java.util.List; -import javax.persistence.TypedQuery; +import jakarta.persistence.TypedQuery; import org.orcid.persistence.dao.IdentifierTypeDao; import org.orcid.persistence.jpa.entities.IdentifierTypeEntity; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/IdentityProviderDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/IdentityProviderDaoImpl.java index 0c8d23a4ceb..45d05636047 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/IdentityProviderDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/IdentityProviderDaoImpl.java @@ -2,8 +2,8 @@ import java.util.List; -import javax.persistence.Query; -import javax.persistence.TypedQuery; +import jakarta.persistence.Query; +import jakarta.persistence.TypedQuery; import javax.transaction.Transactional; import org.orcid.persistence.dao.IdentityProviderDao; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/InvalidRecordDataChangeDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/InvalidRecordDataChangeDaoImpl.java index fa5aeef9999..e021e6e4bd5 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/InvalidRecordDataChangeDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/InvalidRecordDataChangeDaoImpl.java @@ -3,9 +3,9 @@ import java.util.List; import javax.annotation.Resource; -import javax.persistence.EntityManager; -import javax.persistence.Query; -import javax.persistence.TypedQuery; +import jakarta.persistence.EntityManager; +import jakarta.persistence.Query; +import jakarta.persistence.TypedQuery; import org.orcid.persistence.dao.InvalidRecordDataChangeDao; import org.orcid.persistence.jpa.entities.InvalidRecordDataChangeEntity; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/MemberChosenOrgDisambiguatedDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/MemberChosenOrgDisambiguatedDaoImpl.java index 395f1a0f943..e7fe152e467 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/MemberChosenOrgDisambiguatedDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/MemberChosenOrgDisambiguatedDaoImpl.java @@ -3,7 +3,7 @@ import java.util.List; import javax.annotation.Resource; -import javax.persistence.EntityManager; +import jakarta.persistence.EntityManager; import javax.transaction.Transactional; import org.orcid.persistence.dao.MemberChosenOrgDisambiguatedDao; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/MemberOBOWhitelistedClientDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/MemberOBOWhitelistedClientDaoImpl.java index 03229b8c4b1..0fce90816e1 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/MemberOBOWhitelistedClientDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/MemberOBOWhitelistedClientDaoImpl.java @@ -2,7 +2,7 @@ import java.util.List; -import javax.persistence.TypedQuery; +import jakarta.persistence.TypedQuery; import org.orcid.persistence.dao.MemberOBOWhitelistedClientDao; import org.orcid.persistence.jpa.entities.MemberOBOWhitelistedClientEntity; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/MiscDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/MiscDaoImpl.java index f37a1a5f5be..f8a41a40176 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/MiscDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/MiscDaoImpl.java @@ -3,8 +3,8 @@ import java.util.Date; import javax.annotation.Resource; -import javax.persistence.EntityManager; -import javax.persistence.Query; +import jakarta.persistence.EntityManager; +import jakarta.persistence.Query; import org.orcid.persistence.dao.MiscDao; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/NotificationDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/NotificationDaoImpl.java index 656086be7de..50bc2b6f43f 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/NotificationDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/NotificationDaoImpl.java @@ -7,8 +7,8 @@ import java.util.List; import java.util.Properties; -import javax.persistence.Query; -import javax.persistence.TypedQuery; +import jakarta.persistence.Query; +import jakarta.persistence.TypedQuery; import org.orcid.persistence.aop.UpdateProfileLastModified; import org.orcid.persistence.dao.NotificationDao; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrcidOauth2AuthoriziationCodeDetailDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrcidOauth2AuthoriziationCodeDetailDaoImpl.java index e011f3cf711..b590c69cdcc 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrcidOauth2AuthoriziationCodeDetailDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrcidOauth2AuthoriziationCodeDetailDaoImpl.java @@ -1,8 +1,8 @@ package org.orcid.persistence.dao.impl; -import javax.persistence.PersistenceContext; -import javax.persistence.Query; -import javax.persistence.TypedQuery; +import jakarta.persistence.PersistenceContext; +import jakarta.persistence.Query; +import jakarta.persistence.TypedQuery; import org.orcid.persistence.aop.UpdateProfileLastModified; import org.orcid.persistence.dao.OrcidOauth2AuthoriziationCodeDetailDao; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrcidOauth2TokenDetailDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrcidOauth2TokenDetailDaoImpl.java index 239a167488d..e3576185914 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrcidOauth2TokenDetailDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrcidOauth2TokenDetailDaoImpl.java @@ -3,9 +3,9 @@ import java.util.Date; import java.util.List; -import javax.persistence.NoResultException; -import javax.persistence.Query; -import javax.persistence.TypedQuery; +import jakarta.persistence.NoResultException; +import jakarta.persistence.Query; +import jakarta.persistence.TypedQuery; import org.orcid.persistence.aop.UpdateProfileLastModified; import org.orcid.persistence.dao.OrcidOauth2TokenDetailDao; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrcidPropsDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrcidPropsDaoImpl.java index 7238018b372..7106b035524 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrcidPropsDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrcidPropsDaoImpl.java @@ -1,8 +1,8 @@ package org.orcid.persistence.dao.impl; -import javax.persistence.NoResultException; -import javax.persistence.NonUniqueResultException; -import javax.persistence.Query; +import jakarta.persistence.NoResultException; +import jakarta.persistence.NonUniqueResultException; +import jakarta.persistence.Query; import org.orcid.persistence.dao.OrcidPropsDao; import org.orcid.persistence.jpa.entities.OrcidPropsEntity; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgAffiliationRelationDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgAffiliationRelationDaoImpl.java index 64d1578c1bb..0edb345e599 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgAffiliationRelationDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgAffiliationRelationDaoImpl.java @@ -6,8 +6,8 @@ import java.util.concurrent.CompletableFuture; import javax.annotation.Resource; -import javax.persistence.Query; -import javax.persistence.TypedQuery; +import jakarta.persistence.Query; +import jakarta.persistence.TypedQuery; import org.orcid.utils.panoply.PanoplyDeletedItem; import org.orcid.utils.panoply.PanoplyRedshiftClient; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgDaoImpl.java index 898a1d39f05..cf0764ee10a 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgDaoImpl.java @@ -3,8 +3,8 @@ import java.math.BigInteger; import java.util.List; -import javax.persistence.Query; -import javax.persistence.TypedQuery; +import jakarta.persistence.Query; +import jakarta.persistence.TypedQuery; import org.orcid.persistence.dao.OrgDao; import org.orcid.persistence.jpa.entities.AmbiguousOrgEntity; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgDisambiguatedDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgDisambiguatedDaoImpl.java index f4713c35836..658026a8a99 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgDisambiguatedDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgDisambiguatedDaoImpl.java @@ -4,8 +4,8 @@ import java.util.ArrayList; import java.util.List; -import javax.persistence.Query; -import javax.persistence.TypedQuery; +import jakarta.persistence.Query; +import jakarta.persistence.TypedQuery; import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.commons.lang3.tuple.Pair; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgDisambiguatedExternalIdentifierDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgDisambiguatedExternalIdentifierDaoImpl.java index 2c8c2e509d9..7eef4d302de 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgDisambiguatedExternalIdentifierDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgDisambiguatedExternalIdentifierDaoImpl.java @@ -2,9 +2,9 @@ import java.util.List; -import javax.persistence.NoResultException; -import javax.persistence.Query; -import javax.persistence.TypedQuery; +import jakarta.persistence.NoResultException; +import jakarta.persistence.Query; +import jakarta.persistence.TypedQuery; import org.orcid.persistence.dao.OrgDisambiguatedExternalIdentifierDao; import org.orcid.persistence.jpa.entities.OrgDisambiguatedExternalIdentifierEntity; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgImportLogDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgImportLogDaoImpl.java index 05edf531082..5c4f052e5ae 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgImportLogDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgImportLogDaoImpl.java @@ -2,7 +2,7 @@ import java.util.List; -import javax.persistence.Query; +import jakarta.persistence.Query; import org.orcid.persistence.dao.OrgImportLogDao; import org.orcid.persistence.jpa.entities.OrgImportLogEntity; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OtherNameDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OtherNameDaoImpl.java index d00546c153a..1bedcd7acc9 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OtherNameDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OtherNameDaoImpl.java @@ -3,7 +3,7 @@ import java.math.BigInteger; import java.util.List; -import javax.persistence.Query; +import jakarta.persistence.Query; import org.orcid.jaxb.model.v3.release.common.Visibility; import org.orcid.persistence.aop.UpdateProfileLastModifiedAndIndexingStatus; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/PeerReviewDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/PeerReviewDaoImpl.java index c183df3d254..4f0b2e997ef 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/PeerReviewDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/PeerReviewDaoImpl.java @@ -4,8 +4,8 @@ import java.util.ArrayList; import java.util.List; -import javax.persistence.Query; -import javax.persistence.TypedQuery; +import jakarta.persistence.Query; +import jakarta.persistence.TypedQuery; import org.orcid.persistence.aop.UpdateProfileLastModified; import org.orcid.persistence.aop.UpdateProfileLastModifiedAndIndexingStatus; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileDaoImpl.java index 71c7fbbb3ba..9bf3cb864f8 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileDaoImpl.java @@ -11,9 +11,9 @@ import java.util.Map; import java.util.stream.Collectors; -import javax.persistence.NoResultException; -import javax.persistence.Query; -import javax.persistence.TypedQuery; +import jakarta.persistence.NoResultException; +import jakarta.persistence.Query; +import jakarta.persistence.TypedQuery; import org.apache.commons.lang3.tuple.Pair; import org.apache.commons.lang3.tuple.Triple; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileEmailDomainDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileEmailDomainDaoImpl.java index 8028d472063..e55d6ec67d8 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileEmailDomainDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileEmailDomainDaoImpl.java @@ -8,9 +8,9 @@ import org.springframework.cache.annotation.Cacheable; import org.springframework.transaction.annotation.Transactional; -import javax.persistence.NoResultException; -import javax.persistence.Query; -import javax.persistence.TypedQuery; +import jakarta.persistence.NoResultException; +import jakarta.persistence.Query; +import jakarta.persistence.TypedQuery; import java.util.List; public class ProfileEmailDomainDaoImpl extends GenericDaoImpl implements ProfileEmailDomainDao { diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileEventDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileEventDaoImpl.java index 45d528c3386..b00633e7afe 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileEventDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileEventDaoImpl.java @@ -2,7 +2,7 @@ import java.math.BigInteger; -import javax.persistence.Query; +import jakarta.persistence.Query; import org.orcid.persistence.dao.ProfileEventDao; import org.orcid.persistence.jpa.entities.ProfileEventEntity; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileFundingDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileFundingDaoImpl.java index b87b403f20f..73705281fa7 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileFundingDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileFundingDaoImpl.java @@ -4,8 +4,8 @@ import java.util.ArrayList; import java.util.List; -import javax.persistence.Query; -import javax.persistence.TypedQuery; +import jakarta.persistence.Query; +import jakarta.persistence.TypedQuery; import org.orcid.persistence.aop.UpdateProfileLastModified; import org.orcid.persistence.aop.UpdateProfileLastModifiedAndIndexingStatus; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileHistoryEventDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileHistoryEventDaoImpl.java index d652694fc86..51221fdbda3 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileHistoryEventDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileHistoryEventDaoImpl.java @@ -2,7 +2,7 @@ import java.util.List; -import javax.persistence.Query; +import jakarta.persistence.Query; import org.orcid.persistence.dao.ProfileHistoryEventDao; import org.orcid.persistence.jpa.entities.ProfileHistoryEventEntity; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileInterstitialFlagDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileInterstitialFlagDaoImpl.java index 2de00f7078d..5b62f1cfae6 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileInterstitialFlagDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileInterstitialFlagDaoImpl.java @@ -5,8 +5,8 @@ import org.orcid.persistence.jpa.entities.ProfileInterstitialFlagEntity; import org.springframework.transaction.annotation.Transactional; -import javax.persistence.Query; -import javax.persistence.TypedQuery; +import jakarta.persistence.Query; +import jakarta.persistence.TypedQuery; import java.math.BigInteger; import java.util.List; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileKeywordDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileKeywordDaoImpl.java index 8b8d11da630..e9223653940 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileKeywordDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileKeywordDaoImpl.java @@ -3,7 +3,7 @@ import java.math.BigInteger; import java.util.List; -import javax.persistence.Query; +import jakarta.persistence.Query; import org.apache.commons.lang.StringUtils; import org.orcid.jaxb.model.v3.release.common.Visibility; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileLastModifiedDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileLastModifiedDaoImpl.java index 78acb59e77c..fd33cb15915 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileLastModifiedDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileLastModifiedDaoImpl.java @@ -4,8 +4,8 @@ import java.util.Date; import java.util.List; -import javax.persistence.EntityManager; -import javax.persistence.Query; +import jakarta.persistence.EntityManager; +import jakarta.persistence.Query; import org.orcid.persistence.dao.ProfileLastModifiedDao; import org.orcid.persistence.jpa.entities.IndexingStatus; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/PublicApiDailyRateLimitDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/PublicApiDailyRateLimitDaoImpl.java index 5bb647500b1..602d72bdee1 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/PublicApiDailyRateLimitDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/PublicApiDailyRateLimitDaoImpl.java @@ -6,7 +6,7 @@ import java.util.List; import java.util.Map; -import javax.persistence.Query; +import jakarta.persistence.Query; import org.orcid.persistence.dao.PublicApiDailyRateLimitDao; import org.orcid.persistence.jpa.entities.PublicApiDailyRateLimitEntity; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/RecordNameDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/RecordNameDaoImpl.java index 5762b377a09..0a8bc42b587 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/RecordNameDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/RecordNameDaoImpl.java @@ -4,8 +4,8 @@ import java.util.Date; import java.util.List; -import javax.persistence.Query; -import javax.persistence.TypedQuery; +import jakarta.persistence.Query; +import jakarta.persistence.TypedQuery; import org.apache.commons.lang.StringUtils; import org.orcid.persistence.aop.UpdateProfileLastModifiedAndIndexingStatus; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/RejectedGroupingSuggestionDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/RejectedGroupingSuggestionDaoImpl.java index 0fab05cc604..e65a4053b7f 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/RejectedGroupingSuggestionDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/RejectedGroupingSuggestionDaoImpl.java @@ -2,7 +2,7 @@ import java.util.List; -import javax.persistence.Query; +import jakarta.persistence.Query; import org.orcid.persistence.dao.RejectedGroupingSuggestionDao; import org.orcid.persistence.jpa.entities.RejectedGroupingSuggestionEntity; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ResearchResourceDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ResearchResourceDaoImpl.java index 49e209f4257..c8ecfede062 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ResearchResourceDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ResearchResourceDaoImpl.java @@ -4,8 +4,8 @@ import java.util.ArrayList; import java.util.List; -import javax.persistence.Query; -import javax.persistence.TypedQuery; +import jakarta.persistence.Query; +import jakarta.persistence.TypedQuery; import org.orcid.persistence.aop.UpdateProfileLastModified; import org.orcid.persistence.aop.UpdateProfileLastModifiedAndIndexingStatus; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ResearcherUrlDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ResearcherUrlDaoImpl.java index d55ee45e198..d8cefe47809 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ResearcherUrlDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ResearcherUrlDaoImpl.java @@ -3,8 +3,8 @@ import java.math.BigInteger; import java.util.List; -import javax.persistence.Query; -import javax.persistence.TypedQuery; +import jakarta.persistence.Query; +import jakarta.persistence.TypedQuery; import org.orcid.jaxb.model.v3.release.common.Visibility; import org.orcid.persistence.aop.UpdateProfileLastModified; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/SalesForceConnectionDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/SalesForceConnectionDaoImpl.java index 7883ff44e12..78ec2026dbc 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/SalesForceConnectionDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/SalesForceConnectionDaoImpl.java @@ -2,7 +2,7 @@ import java.util.List; -import javax.persistence.TypedQuery; +import jakarta.persistence.TypedQuery; import org.orcid.persistence.dao.SalesForceConnectionDao; import org.orcid.persistence.jpa.entities.SalesForceConnectionEntity; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ShibbolethAccountDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ShibbolethAccountDaoImpl.java index fed55bad32c..321071cea56 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ShibbolethAccountDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ShibbolethAccountDaoImpl.java @@ -2,8 +2,8 @@ import java.util.List; -import javax.persistence.Query; -import javax.persistence.TypedQuery; +import jakarta.persistence.Query; +import jakarta.persistence.TypedQuery; import org.orcid.persistence.dao.ShibbolethAccountDao; import org.orcid.persistence.jpa.entities.ShibbolethAccountEntity; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/SpamDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/SpamDaoImpl.java index b00d4d828e9..ae315638fa6 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/SpamDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/SpamDaoImpl.java @@ -2,7 +2,7 @@ import java.math.BigInteger; -import javax.persistence.Query; +import jakarta.persistence.Query; import org.orcid.persistence.aop.UpdateProfileLastModified; import org.orcid.persistence.dao.SpamDao; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/StatisticsDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/StatisticsDaoImpl.java index aadd182d4c9..6871d276038 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/StatisticsDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/StatisticsDaoImpl.java @@ -3,8 +3,8 @@ import java.math.BigInteger; import java.util.Date; -import javax.persistence.EntityManager; -import javax.persistence.Query; +import jakarta.persistence.EntityManager; +import jakarta.persistence.Query; import org.orcid.persistence.dao.StatisticsDao; import org.orcid.statistics.jpa.entities.StatisticKeyEntity; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/UserConnectionDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/UserConnectionDaoImpl.java index 295b85137c7..a8f85cfd559 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/UserConnectionDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/UserConnectionDaoImpl.java @@ -4,8 +4,8 @@ import java.util.Date; import java.util.List; -import javax.persistence.Query; -import javax.persistence.TypedQuery; +import jakarta.persistence.Query; +import jakarta.persistence.TypedQuery; import org.orcid.persistence.dao.UserConnectionDao; import org.orcid.persistence.jpa.entities.UserconnectionEntity; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ValidatedPublicProfileDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ValidatedPublicProfileDaoImpl.java index 754d5a9d591..f996ad2c924 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ValidatedPublicProfileDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ValidatedPublicProfileDaoImpl.java @@ -3,7 +3,7 @@ import java.util.Date; import java.util.List; -import javax.persistence.Query; +import jakarta.persistence.Query; import javax.transaction.Transactional; import org.orcid.persistence.dao.ValidatedPublicProfileDao; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/WebhookDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/WebhookDaoImpl.java index cbe95ea2cd6..585983a199a 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/WebhookDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/WebhookDaoImpl.java @@ -5,8 +5,8 @@ import java.util.List; import java.util.Set; -import javax.persistence.Query; -import javax.persistence.TypedQuery; +import jakarta.persistence.Query; +import jakarta.persistence.TypedQuery; import org.orcid.persistence.dao.WebhookDao; import org.orcid.persistence.jpa.entities.WebhookEntity; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/WorkDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/WorkDaoImpl.java index 0bf5cc96df2..222f63c178a 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/WorkDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/WorkDaoImpl.java @@ -5,13 +5,10 @@ import java.util.List; import java.util.stream.Collectors; -import javax.persistence.Query; -import javax.persistence.TypedQuery; +import jakarta.persistence.Query; +import jakarta.persistence.TypedQuery; -import org.hibernate.type.BigIntegerType; -import org.hibernate.type.IntegerType; -import org.hibernate.type.StringType; -import org.hibernate.type.TimestampType; +import org.hibernate.type.StandardBasicTypes; import org.orcid.persistence.aop.UpdateProfileLastModified; import org.orcid.persistence.aop.UpdateProfileLastModifiedAndIndexingStatus; import org.orcid.persistence.dao.WorkDao; @@ -391,24 +388,24 @@ public List getWorksByOrcid(String orcid, boolean featuredOnly) { Query query = entityManager.createNativeQuery(queryText); query.setParameter("orcid", orcid) .unwrap(org.hibernate.query.NativeQuery.class) - .addScalar("work_id", BigIntegerType.INSTANCE) - .addScalar("work_type", StringType.INSTANCE) - .addScalar("title", StringType.INSTANCE) - .addScalar("journal_title", StringType.INSTANCE) - .addScalar("external_ids_json", StringType.INSTANCE) - .addScalar("publication_year", IntegerType.INSTANCE) - .addScalar("publication_month", IntegerType.INSTANCE) - .addScalar("publication_day", IntegerType.INSTANCE) - .addScalar("visibility", StringType.INSTANCE) - .addScalar("display_index", BigIntegerType.INSTANCE) - .addScalar("source_id", StringType.INSTANCE) - .addScalar("client_source_id", StringType.INSTANCE) - .addScalar("assertion_origin_source_id", StringType.INSTANCE) - .addScalar("assertion_origin_client_source_id", StringType.INSTANCE) - .addScalar("date_created", TimestampType.INSTANCE) - .addScalar("last_modified", TimestampType.INSTANCE) - .addScalar("contributors", StringType.INSTANCE) - .addScalar("featured_display_index", IntegerType.INSTANCE); + .addScalar("work_id", StandardBasicTypes.BIG_INTEGER) + .addScalar("work_type", StandardBasicTypes.STRING) + .addScalar("title", StandardBasicTypes.STRING) + .addScalar("journal_title", StandardBasicTypes.STRING) + .addScalar("external_ids_json", StandardBasicTypes.STRING) + .addScalar("publication_year", StandardBasicTypes.INTEGER) + .addScalar("publication_month", StandardBasicTypes.INTEGER) + .addScalar("publication_day", StandardBasicTypes.INTEGER) + .addScalar("visibility", StandardBasicTypes.STRING) + .addScalar("display_index", StandardBasicTypes.BIG_INTEGER) + .addScalar("source_id", StandardBasicTypes.STRING) + .addScalar("client_source_id", StandardBasicTypes.STRING) + .addScalar("assertion_origin_source_id", StandardBasicTypes.STRING) + .addScalar("assertion_origin_client_source_id", StandardBasicTypes.STRING) + .addScalar("date_created", StandardBasicTypes.TIMESTAMP) + .addScalar("last_modified", StandardBasicTypes.TIMESTAMP) + .addScalar("contributors", StandardBasicTypes.STRING) + .addScalar("featured_display_index", StandardBasicTypes.INTEGER); return query.getResultList(); } @@ -423,8 +420,8 @@ public List getWorksStartingFromWorkId(Long workId, int numberOfWorks) query.setParameter("workId", workId); query.setParameter("numberOfWorks", numberOfWorks) .unwrap(org.hibernate.query.NativeQuery.class) - .addScalar("work_id", BigIntegerType.INSTANCE) - .addScalar("contributors_json", StringType.INSTANCE); + .addScalar("work_id", StandardBasicTypes.BIG_INTEGER) + .addScalar("contributors_json", StandardBasicTypes.STRING); return query.getResultList(); } diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/AddressEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/AddressEntity.java index ff82b5763a5..778d8ae06b1 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/AddressEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/AddressEntity.java @@ -1,16 +1,16 @@ package org.orcid.persistence.jpa.entities; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.SequenceGenerator; -import javax.persistence.Table; -import javax.persistence.Transient; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.SequenceGenerator; +import jakarta.persistence.Table; +import jakarta.persistence.Transient; /** * diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/AmbiguousOrgEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/AmbiguousOrgEntity.java index a33942aeed1..ea82d5622fc 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/AmbiguousOrgEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/AmbiguousOrgEntity.java @@ -2,14 +2,14 @@ import java.io.Serializable; -import javax.persistence.Basic; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.SequenceGenerator; -import javax.persistence.Table; +import jakarta.persistence.Basic; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.SequenceGenerator; +import jakarta.persistence.Table; /** * diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/BackupCodeEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/BackupCodeEntity.java index c16999ae2e0..dfb05a56a0c 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/BackupCodeEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/BackupCodeEntity.java @@ -3,13 +3,13 @@ import java.io.Serializable; import java.util.Date; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.SequenceGenerator; -import javax.persistence.Table; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.SequenceGenerator; +import jakarta.persistence.Table; @Entity @Table(name = "backup_code") diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/BaseContributorEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/BaseContributorEntity.java index 4edaf75d8cd..e6a212c9a2e 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/BaseContributorEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/BaseContributorEntity.java @@ -1,11 +1,11 @@ package org.orcid.persistence.jpa.entities; -import javax.persistence.CascadeType; -import javax.persistence.Column; -import javax.persistence.FetchType; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.MappedSuperclass; +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.FetchType; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.MappedSuperclass; import org.orcid.utils.NullUtils; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/BaseEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/BaseEntity.java index 9adf43cf6bb..0b38bca1c75 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/BaseEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/BaseEntity.java @@ -1,10 +1,10 @@ package org.orcid.persistence.jpa.entities; -import javax.persistence.Column; -import javax.persistence.EntityManager; -import javax.persistence.MappedSuperclass; -import javax.persistence.PrePersist; -import javax.persistence.PreUpdate; +import jakarta.persistence.Column; +import jakarta.persistence.EntityManager; +import jakarta.persistence.MappedSuperclass; +import jakarta.persistence.PrePersist; +import jakarta.persistence.PreUpdate; import java.io.Serializable; import java.util.Collection; import java.util.Date; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/BiographyEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/BiographyEntity.java index b50d7c4548e..f7cb01530ff 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/BiographyEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/BiographyEntity.java @@ -1,14 +1,14 @@ package org.orcid.persistence.jpa.entities; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.OneToOne; -import javax.persistence.SequenceGenerator; -import javax.persistence.Table; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.OneToOne; +import jakarta.persistence.SequenceGenerator; +import jakarta.persistence.Table; /** * The persistent class for the name database table. diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ClientAuthorisedGrantTypeEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ClientAuthorisedGrantTypeEntity.java index 52a787eb4ab..20d9a503b31 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ClientAuthorisedGrantTypeEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ClientAuthorisedGrantTypeEntity.java @@ -5,7 +5,7 @@ import java.util.Date; import java.util.Objects; -import javax.persistence.*; +import jakarta.persistence.*; /** * @author Declan Newman (declan) Date: 12/03/2012 diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ClientDetailsEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ClientDetailsEntity.java index edb52480e83..4b60eb5f042 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ClientDetailsEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ClientDetailsEntity.java @@ -12,21 +12,21 @@ import java.util.SortedSet; import java.util.TreeSet; -import javax.persistence.CascadeType; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.OneToMany; -import javax.persistence.Table; -import javax.persistence.Transient; - -import org.hibernate.annotations.Sort; -import org.hibernate.annotations.SortType; +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.OneToMany; +import jakarta.persistence.Table; +import jakarta.persistence.Transient; + import org.springframework.security.core.GrantedAuthority; import org.springframework.util.StringUtils; +import org.hibernate.annotations.SortNatural; + /** * @author Declan Newman */ @@ -159,7 +159,7 @@ public void setClientAuthorizedGrantTypes(Set c } @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, mappedBy = "clientId", orphanRemoval = true) - @Sort(type = SortType.NATURAL) + @SortNatural public SortedSet getClientRegisteredRedirectUris() { return clientRegisteredRedirectUris; } @@ -236,7 +236,7 @@ public String getClientSecret() { } @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, mappedBy = "clientId", orphanRemoval = true) - @Sort(type = SortType.NATURAL) + @SortNatural public Set getClientSecrets() { return clientSecrets; } diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ClientGrantedAuthorityEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ClientGrantedAuthorityEntity.java index 1d34a930372..e2bb8db67c0 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ClientGrantedAuthorityEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ClientGrantedAuthorityEntity.java @@ -3,7 +3,7 @@ import org.orcid.persistence.jpa.entities.keys.ClientGrantedAuthorityPk; import org.springframework.security.core.GrantedAuthority; -import javax.persistence.*; +import jakarta.persistence.*; import java.util.Objects; /** diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ClientRedirectUriEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ClientRedirectUriEntity.java index de35a5e7ae1..59c326a2319 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ClientRedirectUriEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ClientRedirectUriEntity.java @@ -5,7 +5,7 @@ import java.util.Objects; import java.util.Set; -import javax.persistence.*; +import jakarta.persistence.*; import org.orcid.persistence.jpa.entities.keys.ClientRedirectUriPk; import org.orcid.utils.NullUtils; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ClientResourceIdEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ClientResourceIdEntity.java index f2989acd11e..1deea2ccefc 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ClientResourceIdEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ClientResourceIdEntity.java @@ -2,7 +2,7 @@ import org.orcid.persistence.jpa.entities.keys.ClientResourceIdPk; -import javax.persistence.*; +import jakarta.persistence.*; import java.util.Objects; /** diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ClientScopeEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ClientScopeEntity.java index 9289acbaed7..5f91c5c7108 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ClientScopeEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ClientScopeEntity.java @@ -1,6 +1,6 @@ package org.orcid.persistence.jpa.entities; -import javax.persistence.*; +import jakarta.persistence.*; import org.orcid.persistence.jpa.entities.keys.ClientScopePk; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ClientSecretEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ClientSecretEntity.java index 178811b01ec..3ff15bc3fc0 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ClientSecretEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ClientSecretEntity.java @@ -3,7 +3,7 @@ import java.util.Date; import java.util.Objects; -import javax.persistence.*; +import jakarta.persistence.*; import org.orcid.persistence.jpa.entities.keys.ClientSecretPk; import org.orcid.utils.NullUtils; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/CompletionDateEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/CompletionDateEntity.java index 8d2b11779ce..da9cbfec3db 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/CompletionDateEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/CompletionDateEntity.java @@ -2,8 +2,8 @@ import java.io.Serializable; -import javax.persistence.Column; -import javax.persistence.Embeddable; +import jakarta.persistence.Column; +import jakarta.persistence.Embeddable; @Embeddable public class CompletionDateEntity extends FuzzyDateEntity implements Serializable { diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/CountryIsoEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/CountryIsoEntity.java index 122e393f86c..4a3950c7e9d 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/CountryIsoEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/CountryIsoEntity.java @@ -1,10 +1,10 @@ package org.orcid.persistence.jpa.entities; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.Table; -import javax.persistence.Transient; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import jakarta.persistence.Transient; @Entity @Table(name = "country_reference_data") diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/CustomEmailEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/CustomEmailEntity.java index da152ad29e0..2af4ee8cbae 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/CustomEmailEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/CustomEmailEntity.java @@ -1,16 +1,16 @@ package org.orcid.persistence.jpa.entities; -import javax.persistence.CascadeType; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.EnumType; -import javax.persistence.Enumerated; -import javax.persistence.FetchType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.Table; -import javax.persistence.Transient; +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; +import jakarta.persistence.FetchType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.Table; +import jakarta.persistence.Transient; import org.orcid.persistence.jpa.entities.keys.CustomEmailPk; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/EmailDomainEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/EmailDomainEntity.java index c676f19cea8..edece179766 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/EmailDomainEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/EmailDomainEntity.java @@ -2,15 +2,15 @@ import java.util.Objects; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.EnumType; -import javax.persistence.Enumerated; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.SequenceGenerator; -import javax.persistence.Table; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.SequenceGenerator; +import jakarta.persistence.Table; /** * diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/EmailDomainToOrgIdEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/EmailDomainToOrgIdEntity.java index 09596b84f6e..c012486f7d3 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/EmailDomainToOrgIdEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/EmailDomainToOrgIdEntity.java @@ -2,16 +2,16 @@ import java.util.Objects; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.SequenceGenerator; -import javax.persistence.Table; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.SequenceGenerator; +import jakarta.persistence.Table; /** * diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/EmailEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/EmailEntity.java index 6977ec86502..5294d0fbedf 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/EmailEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/EmailEntity.java @@ -5,10 +5,10 @@ import java.util.Map; import java.util.Date; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.Table; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; /** * @author Will Simpson diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/EmailEventEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/EmailEventEntity.java index 554bbe53e6e..a5af027e620 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/EmailEventEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/EmailEventEntity.java @@ -1,15 +1,15 @@ package org.orcid.persistence.jpa.entities; -import javax.persistence.Basic; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.EnumType; -import javax.persistence.Enumerated; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.SequenceGenerator; -import javax.persistence.Table; +import jakarta.persistence.Basic; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.SequenceGenerator; +import jakarta.persistence.Table; /** * diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/EmailFrequencyEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/EmailFrequencyEntity.java index 76953dc65a7..3e34e9080e3 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/EmailFrequencyEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/EmailFrequencyEntity.java @@ -1,9 +1,9 @@ package org.orcid.persistence.jpa.entities; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.Table; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; @Entity @Table(name = "email_frequency") diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/EmailScheduleEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/EmailScheduleEntity.java index c28ffb94fdb..d556eeaa9bc 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/EmailScheduleEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/EmailScheduleEntity.java @@ -2,13 +2,13 @@ import java.util.Date; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.SequenceGenerator; -import javax.persistence.Table; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.SequenceGenerator; +import jakarta.persistence.Table; @Entity @Table(name = "email_schedule") diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/EndDateEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/EndDateEntity.java index cf79923b627..55d5efd9ae1 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/EndDateEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/EndDateEntity.java @@ -1,7 +1,7 @@ package org.orcid.persistence.jpa.entities; -import javax.persistence.Column; -import javax.persistence.Embeddable; +import jakarta.persistence.Column; +import jakarta.persistence.Embeddable; @Embeddable public class EndDateEntity extends FuzzyDateEntity { diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/EventEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/EventEntity.java index bce397fbd89..59d39e48b81 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/EventEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/EventEntity.java @@ -3,13 +3,13 @@ import java.util.Date; import java.util.Objects; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.SequenceGenerator; -import javax.persistence.Table; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.SequenceGenerator; +import jakarta.persistence.Table; /** * diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/EventStatsEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/EventStatsEntity.java index 2e0dd7cdd11..96eb40e70cc 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/EventStatsEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/EventStatsEntity.java @@ -3,13 +3,13 @@ import java.util.Date; import java.util.Objects; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.SequenceGenerator; -import javax.persistence.Table; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.SequenceGenerator; +import jakarta.persistence.Table; /** * diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ExternalIdentifierEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ExternalIdentifierEntity.java index c340507c915..0a29321c1b3 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ExternalIdentifierEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ExternalIdentifierEntity.java @@ -1,16 +1,16 @@ package org.orcid.persistence.jpa.entities; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.SequenceGenerator; -import javax.persistence.Table; -import javax.persistence.Transient; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.SequenceGenerator; +import jakarta.persistence.Table; +import jakarta.persistence.Transient; /** * orcid-entities - Dec 6, 2011 - ExternalIdentifierEntity diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/FindMyStuffHistoryEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/FindMyStuffHistoryEntity.java index 4680f9a0e62..2e85afdfb58 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/FindMyStuffHistoryEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/FindMyStuffHistoryEntity.java @@ -1,14 +1,14 @@ package org.orcid.persistence.jpa.entities; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.Id; -import javax.persistence.IdClass; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.Table; -import javax.persistence.Transient; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.Id; +import jakarta.persistence.IdClass; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.Table; +import jakarta.persistence.Transient; import org.orcid.persistence.jpa.entities.keys.FindMyStuffHistoryEntityPk; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/FuzzyDateEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/FuzzyDateEntity.java index 93fa907e51b..d7d25ead9a9 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/FuzzyDateEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/FuzzyDateEntity.java @@ -2,8 +2,8 @@ import java.io.Serializable; -import javax.persistence.Column; -import javax.persistence.Embeddable; +import jakarta.persistence.Column; +import jakarta.persistence.Embeddable; @Embeddable public class FuzzyDateEntity implements Comparable, Serializable { diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/GivenPermissionByEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/GivenPermissionByEntity.java index 54d83bfb87a..faf83fcd6ef 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/GivenPermissionByEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/GivenPermissionByEntity.java @@ -2,13 +2,13 @@ import java.util.Date; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.SequenceGenerator; -import javax.persistence.Table; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.SequenceGenerator; +import jakarta.persistence.Table; /** * diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/GivenPermissionToEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/GivenPermissionToEntity.java index 444677a21d7..90ec4acc9b1 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/GivenPermissionToEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/GivenPermissionToEntity.java @@ -2,14 +2,14 @@ import java.util.Date; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.SequenceGenerator; -import javax.persistence.Table; -import javax.persistence.Transient; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.SequenceGenerator; +import jakarta.persistence.Table; +import jakarta.persistence.Transient; /** * diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/GroupIdRecordEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/GroupIdRecordEntity.java index 12720bd5fb8..623c22fb17c 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/GroupIdRecordEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/GroupIdRecordEntity.java @@ -1,12 +1,12 @@ package org.orcid.persistence.jpa.entities; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.SequenceGenerator; -import javax.persistence.Table; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.SequenceGenerator; +import jakarta.persistence.Table; import java.util.Date; /** diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/IdentifierTypeEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/IdentifierTypeEntity.java index cd22fbd6ee5..39c3cc302d0 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/IdentifierTypeEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/IdentifierTypeEntity.java @@ -1,15 +1,15 @@ package org.orcid.persistence.jpa.entities; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.SequenceGenerator; -import javax.persistence.Table; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.SequenceGenerator; +import jakarta.persistence.Table; @Entity @Table(name = "identifier_type") diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/IdentityProviderEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/IdentityProviderEntity.java index 7fa7c04f308..970a498ede8 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/IdentityProviderEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/IdentityProviderEntity.java @@ -3,16 +3,16 @@ import java.util.Date; import java.util.List; -import javax.persistence.CascadeType; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.OneToMany; -import javax.persistence.SequenceGenerator; -import javax.persistence.Table; +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.OneToMany; +import jakarta.persistence.SequenceGenerator; +import jakarta.persistence.Table; /** * @author Will Simpson diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/IdentityProviderNameEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/IdentityProviderNameEntity.java index 11297527d74..f5270c3d527 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/IdentityProviderNameEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/IdentityProviderNameEntity.java @@ -1,15 +1,15 @@ package org.orcid.persistence.jpa.entities; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.SequenceGenerator; -import javax.persistence.Table; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.SequenceGenerator; +import jakarta.persistence.Table; /** * @author Will Simpson diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/InvalidRecordDataChangeEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/InvalidRecordDataChangeEntity.java index fea2b78bc4a..83bb67dbc71 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/InvalidRecordDataChangeEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/InvalidRecordDataChangeEntity.java @@ -1,12 +1,12 @@ package org.orcid.persistence.jpa.entities; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.SequenceGenerator; -import javax.persistence.Table; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.SequenceGenerator; +import jakarta.persistence.Table; @Entity @Table(name = "invalid_record_data_changes") diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/MemberChosenOrgDisambiguatedEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/MemberChosenOrgDisambiguatedEntity.java index 7aaa370613a..f0f9eecb93f 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/MemberChosenOrgDisambiguatedEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/MemberChosenOrgDisambiguatedEntity.java @@ -2,10 +2,10 @@ import java.io.Serializable; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.Table; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; @Entity @Table(name = "member_chosen_org_disambiguated") diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/MemberOBOWhitelistedClientEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/MemberOBOWhitelistedClientEntity.java index 47ba8a133f7..9c18f830e84 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/MemberOBOWhitelistedClientEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/MemberOBOWhitelistedClientEntity.java @@ -1,11 +1,11 @@ package org.orcid.persistence.jpa.entities; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.Table; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.Table; @Entity @Table(name = "member_obo_whitelisted_client") diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/MinimizedExtendedWorkEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/MinimizedExtendedWorkEntity.java index b741fa3f8a3..b4657d8dc29 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/MinimizedExtendedWorkEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/MinimizedExtendedWorkEntity.java @@ -1,8 +1,8 @@ package org.orcid.persistence.jpa.entities; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Table; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Table; @Entity @Table(name = "work") diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/MinimizedWorkEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/MinimizedWorkEntity.java index 0e9cf54b92f..f511bccc8b4 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/MinimizedWorkEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/MinimizedWorkEntity.java @@ -1,8 +1,8 @@ package org.orcid.persistence.jpa.entities; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Table; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Table; /** * An object that will contain the minimum work information needed to display diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationAddItemsEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationAddItemsEntity.java index a5ff92ecd42..3249bb307a2 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationAddItemsEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationAddItemsEntity.java @@ -2,13 +2,13 @@ import java.util.Set; -import javax.persistence.CascadeType; -import javax.persistence.Column; -import javax.persistence.DiscriminatorValue; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.JoinColumn; -import javax.persistence.OneToMany; +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.DiscriminatorValue; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.OneToMany; /** * diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationAdministrativeEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationAdministrativeEntity.java index 1375ed2ae1e..a343c92ef56 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationAdministrativeEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationAdministrativeEntity.java @@ -1,8 +1,8 @@ package org.orcid.persistence.jpa.entities; -import javax.persistence.Column; -import javax.persistence.DiscriminatorValue; -import javax.persistence.Entity; +import jakarta.persistence.Column; +import jakarta.persistence.DiscriminatorValue; +import jakarta.persistence.Entity; @Entity @DiscriminatorValue("ADMINISTRATIVE") diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationAmendedEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationAmendedEntity.java index 39eda945d24..2de7a12938a 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationAmendedEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationAmendedEntity.java @@ -2,13 +2,13 @@ import java.util.Set; -import javax.persistence.CascadeType; -import javax.persistence.Column; -import javax.persistence.DiscriminatorValue; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.JoinColumn; -import javax.persistence.OneToMany; +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.DiscriminatorValue; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.OneToMany; /** * diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationCustomEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationCustomEntity.java index 78c8798c9aa..8160c41c66c 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationCustomEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationCustomEntity.java @@ -1,8 +1,8 @@ package org.orcid.persistence.jpa.entities; -import javax.persistence.Column; -import javax.persistence.DiscriminatorValue; -import javax.persistence.Entity; +import jakarta.persistence.Column; +import jakarta.persistence.DiscriminatorValue; +import jakarta.persistence.Entity; @Entity @DiscriminatorValue("CUSTOM") diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationEntity.java index d7641928968..8b058a06985 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationEntity.java @@ -2,18 +2,18 @@ import java.util.Date; -import javax.persistence.Column; -import javax.persistence.DiscriminatorColumn; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.Inheritance; -import javax.persistence.InheritanceType; -import javax.persistence.NamedNativeQueries; -import javax.persistence.NamedNativeQuery; -import javax.persistence.SequenceGenerator; -import javax.persistence.Table; +import jakarta.persistence.Column; +import jakarta.persistence.DiscriminatorColumn; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.Inheritance; +import jakarta.persistence.InheritanceType; +import jakarta.persistence.NamedNativeQueries; +import jakarta.persistence.NamedNativeQuery; +import jakarta.persistence.SequenceGenerator; +import jakarta.persistence.Table; /** * @author Will Simpson diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationFindMyStuffEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationFindMyStuffEntity.java index 0f8eb24521f..1a5475b9542 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationFindMyStuffEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationFindMyStuffEntity.java @@ -1,8 +1,8 @@ package org.orcid.persistence.jpa.entities; -import javax.persistence.Column; -import javax.persistence.DiscriminatorValue; -import javax.persistence.Entity; +import jakarta.persistence.Column; +import jakarta.persistence.DiscriminatorValue; +import jakarta.persistence.Entity; @Entity @DiscriminatorValue("FIND_MY_STUFF") diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationInstitutionalConnectionEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationInstitutionalConnectionEntity.java index 1d87bc75af9..3c6bfa5048b 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationInstitutionalConnectionEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationInstitutionalConnectionEntity.java @@ -1,8 +1,8 @@ package org.orcid.persistence.jpa.entities; -import javax.persistence.Column; -import javax.persistence.DiscriminatorValue; -import javax.persistence.Entity; +import jakarta.persistence.Column; +import jakarta.persistence.DiscriminatorValue; +import jakarta.persistence.Entity; @Entity @DiscriminatorValue("INSTITUTIONAL_CONNECTION") diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationItemEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationItemEntity.java index 94e9fc20c63..22291579eed 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationItemEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationItemEntity.java @@ -1,12 +1,12 @@ package org.orcid.persistence.jpa.entities; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.SequenceGenerator; -import javax.persistence.Table; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.SequenceGenerator; +import jakarta.persistence.Table; /** * diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationServiceAnnouncementEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationServiceAnnouncementEntity.java index 473308adaec..9dcfa2cb75e 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationServiceAnnouncementEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationServiceAnnouncementEntity.java @@ -1,8 +1,8 @@ package org.orcid.persistence.jpa.entities; -import javax.persistence.Column; -import javax.persistence.DiscriminatorValue; -import javax.persistence.Entity; +import jakarta.persistence.Column; +import jakarta.persistence.DiscriminatorValue; +import jakarta.persistence.Entity; @Entity @DiscriminatorValue("SERVICE_ANNOUNCEMENT") diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationTipEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationTipEntity.java index 958dce23ffa..a193523a1ab 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationTipEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationTipEntity.java @@ -1,8 +1,8 @@ package org.orcid.persistence.jpa.entities; -import javax.persistence.Column; -import javax.persistence.DiscriminatorValue; -import javax.persistence.Entity; +import jakarta.persistence.Column; +import jakarta.persistence.DiscriminatorValue; +import jakarta.persistence.Entity; @Entity @DiscriminatorValue("TIP") diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationWorkEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationWorkEntity.java index 658a3249386..f255798f04a 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationWorkEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationWorkEntity.java @@ -3,15 +3,15 @@ import java.io.Serializable; import java.util.Comparator; -import javax.persistence.CascadeType; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.Id; -import javax.persistence.IdClass; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.Table; -import javax.persistence.Transient; +import jakarta.persistence.CascadeType; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.Id; +import jakarta.persistence.IdClass; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.Table; +import jakarta.persistence.Transient; import org.orcid.persistence.jpa.entities.keys.NotificationWorkEntityPk; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrcidGrantedAuthority.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrcidGrantedAuthority.java index c0f6933510c..28c78ccbd27 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrcidGrantedAuthority.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrcidGrantedAuthority.java @@ -3,15 +3,15 @@ import org.orcid.persistence.jpa.entities.keys.OrcidGrantedAuthorityPk; import org.springframework.security.core.GrantedAuthority; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.Id; -import javax.persistence.IdClass; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.Table; -import javax.persistence.Transient; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.Id; +import jakarta.persistence.IdClass; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.Table; +import jakarta.persistence.Transient; /** * Simplistic implementation of {@link GrantedAuthority}. This will need to be diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrcidOauth2AuthoriziationCodeDetail.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrcidOauth2AuthoriziationCodeDetail.java index 58ec1822c7d..b2dd52acef1 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrcidOauth2AuthoriziationCodeDetail.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrcidOauth2AuthoriziationCodeDetail.java @@ -2,14 +2,14 @@ import java.util.Set; -import javax.persistence.Column; -import javax.persistence.ElementCollection; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.Table; +import jakarta.persistence.Column; +import jakarta.persistence.ElementCollection; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.Table; import org.hibernate.annotations.LazyCollection; import org.hibernate.annotations.LazyCollectionOption; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrcidOauth2TokenDetail.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrcidOauth2TokenDetail.java index a3d008574f8..152f350a4cc 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrcidOauth2TokenDetail.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrcidOauth2TokenDetail.java @@ -2,13 +2,13 @@ import java.util.Date; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.SequenceGenerator; -import javax.persistence.Table; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.SequenceGenerator; +import jakarta.persistence.Table; import org.apache.commons.lang3.StringUtils; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrcidPropsEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrcidPropsEntity.java index d476942153d..9940586ab2b 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrcidPropsEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrcidPropsEntity.java @@ -1,9 +1,9 @@ package org.orcid.persistence.jpa.entities; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.Table; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; /** * @author Will Simpson diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrgAffiliationRelationEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrgAffiliationRelationEntity.java index 4029d2ef316..b5744997173 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrgAffiliationRelationEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrgAffiliationRelationEntity.java @@ -1,16 +1,16 @@ package org.orcid.persistence.jpa.entities; -import javax.persistence.CascadeType; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.SequenceGenerator; -import javax.persistence.Table; +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.SequenceGenerator; +import jakarta.persistence.Table; import org.orcid.utils.NullUtils; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrgDisambiguatedEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrgDisambiguatedEntity.java index b61b63b5666..98b29707a4d 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrgDisambiguatedEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrgDisambiguatedEntity.java @@ -3,22 +3,22 @@ import java.util.Date; import java.util.Set; -import javax.persistence.Basic; -import javax.persistence.CascadeType; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.EnumType; -import javax.persistence.Enumerated; -import javax.persistence.FetchType; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.NamedNativeQuery; -import javax.persistence.OneToMany; -import javax.persistence.OneToOne; -import javax.persistence.SequenceGenerator; -import javax.persistence.Table; +import jakarta.persistence.Basic; +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.NamedNativeQuery; +import jakarta.persistence.OneToMany; +import jakarta.persistence.OneToOne; +import jakarta.persistence.SequenceGenerator; +import jakarta.persistence.Table; import org.hibernate.annotations.Fetch; import org.hibernate.annotations.FetchMode; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrgDisambiguatedExternalIdentifierEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrgDisambiguatedExternalIdentifierEntity.java index 3723ae27373..3acac7be1c9 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrgDisambiguatedExternalIdentifierEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrgDisambiguatedExternalIdentifierEntity.java @@ -1,14 +1,14 @@ package org.orcid.persistence.jpa.entities; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.SequenceGenerator; -import javax.persistence.Table; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.SequenceGenerator; +import jakarta.persistence.Table; /** * diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrgEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrgEntity.java index e7d5c418e5b..ef555612b98 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrgEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrgEntity.java @@ -2,15 +2,15 @@ import java.io.Serializable; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.SequenceGenerator; -import javax.persistence.Table; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.SequenceGenerator; +import jakarta.persistence.Table; /** * diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrgImportLogEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrgImportLogEntity.java index 21fccf9fae1..bfbb495147a 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrgImportLogEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrgImportLogEntity.java @@ -3,13 +3,13 @@ import java.io.Serializable; import java.util.Date; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.SequenceGenerator; -import javax.persistence.Table; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.SequenceGenerator; +import jakarta.persistence.Table; @Entity @Table(name = "org_import_log") diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OtherNameEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OtherNameEntity.java index 035af17c75b..d1e86ca2f96 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OtherNameEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OtherNameEntity.java @@ -1,15 +1,15 @@ package org.orcid.persistence.jpa.entities; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.SequenceGenerator; -import javax.persistence.Table; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.SequenceGenerator; +import jakarta.persistence.Table; /** *

diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/PeerReviewEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/PeerReviewEntity.java index 6326a794194..1bbb69920f3 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/PeerReviewEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/PeerReviewEntity.java @@ -1,16 +1,16 @@ package org.orcid.persistence.jpa.entities; -import javax.persistence.CascadeType; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.SequenceGenerator; -import javax.persistence.Table; +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.SequenceGenerator; +import jakarta.persistence.Table; import org.apache.commons.lang3.StringUtils; import org.orcid.utils.OrcidStringUtils; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ProfileEmailDomainEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ProfileEmailDomainEntity.java index 56123e104be..b12cc363fe6 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ProfileEmailDomainEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ProfileEmailDomainEntity.java @@ -1,6 +1,6 @@ package org.orcid.persistence.jpa.entities; -import javax.persistence.*; +import jakarta.persistence.*; import java.util.Objects; /** diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ProfileEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ProfileEntity.java index 359f80b8c8e..31167279957 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ProfileEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ProfileEntity.java @@ -4,19 +4,19 @@ import java.util.Collection; import java.util.Date; -import javax.persistence.Basic; -import javax.persistence.CascadeType; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.EnumType; -import javax.persistence.Enumerated; -import javax.persistence.FetchType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.OneToMany; -import javax.persistence.Table; -import javax.persistence.Transient; +import jakarta.persistence.Basic; +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; +import jakarta.persistence.FetchType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.OneToMany; +import jakarta.persistence.Table; +import jakarta.persistence.Transient; import org.springframework.security.core.userdetails.UserDetails; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ProfileEventEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ProfileEventEntity.java index fcf404d2cb8..79a5fc44df3 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ProfileEventEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ProfileEventEntity.java @@ -1,15 +1,15 @@ package org.orcid.persistence.jpa.entities; -import javax.persistence.Basic; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.EnumType; -import javax.persistence.Enumerated; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.SequenceGenerator; -import javax.persistence.Table; +import jakarta.persistence.Basic; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.SequenceGenerator; +import jakarta.persistence.Table; /** * diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ProfileFundingEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ProfileFundingEntity.java index 30c9eb46906..ee787583dcb 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ProfileFundingEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ProfileFundingEntity.java @@ -2,18 +2,18 @@ import java.math.BigDecimal; -import javax.persistence.Basic; -import javax.persistence.CascadeType; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.SequenceGenerator; -import javax.persistence.Table; +import jakarta.persistence.Basic; +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.SequenceGenerator; +import jakarta.persistence.Table; import org.orcid.utils.OrcidStringUtils; import org.orcid.utils.NullUtils; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ProfileHistoryEventEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ProfileHistoryEventEntity.java index 3c33d942b65..1f425fc62cb 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ProfileHistoryEventEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ProfileHistoryEventEntity.java @@ -2,13 +2,13 @@ import java.io.Serializable; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.SequenceGenerator; -import javax.persistence.Table; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.SequenceGenerator; +import jakarta.persistence.Table; @Entity @Table(name = "profile_history_event") diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ProfileInterstitialFlagEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ProfileInterstitialFlagEntity.java index 5c0ef0cc858..519e21f7d83 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ProfileInterstitialFlagEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ProfileInterstitialFlagEntity.java @@ -1,6 +1,6 @@ package org.orcid.persistence.jpa.entities; -import javax.persistence.*; +import jakarta.persistence.*; import java.util.Objects; /** diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ProfileKeywordEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ProfileKeywordEntity.java index 713e175f3d3..364ece29baa 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ProfileKeywordEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ProfileKeywordEntity.java @@ -1,15 +1,15 @@ package org.orcid.persistence.jpa.entities; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.SequenceGenerator; -import javax.persistence.Table; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.SequenceGenerator; +import jakarta.persistence.Table; /** * orcid-entities - Dec 6, 2011 - ProfileInstitutionEntity diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/PublicApiDailyRateLimitEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/PublicApiDailyRateLimitEntity.java index 0a3758f5653..8737408f7e0 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/PublicApiDailyRateLimitEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/PublicApiDailyRateLimitEntity.java @@ -7,16 +7,16 @@ import java.util.HashMap; import java.util.Map; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.EntityManager; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.PrePersist; -import javax.persistence.PreUpdate; -import javax.persistence.SequenceGenerator; -import javax.persistence.Table; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.EntityManager; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.PrePersist; +import jakarta.persistence.PreUpdate; +import jakarta.persistence.SequenceGenerator; +import jakarta.persistence.Table; @Entity diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/PublicationDateEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/PublicationDateEntity.java index 05a5c545117..17e32c8fa69 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/PublicationDateEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/PublicationDateEntity.java @@ -1,7 +1,7 @@ package org.orcid.persistence.jpa.entities; -import javax.persistence.Column; -import javax.persistence.Embeddable; +import jakarta.persistence.Column; +import jakarta.persistence.Embeddable; @Embeddable public class PublicationDateEntity extends FuzzyDateEntity { diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/RecordNameEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/RecordNameEntity.java index 6a3e463a384..940283dac42 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/RecordNameEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/RecordNameEntity.java @@ -1,12 +1,12 @@ package org.orcid.persistence.jpa.entities; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.SequenceGenerator; -import javax.persistence.Table; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.SequenceGenerator; +import jakarta.persistence.Table; /** * The persistent class for the name database table. diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/RefDataEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/RefDataEntity.java index 989748d5617..ef4a4754cbb 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/RefDataEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/RefDataEntity.java @@ -1,12 +1,12 @@ package org.orcid.persistence.jpa.entities; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.SequenceGenerator; -import javax.persistence.Table; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.SequenceGenerator; +import jakarta.persistence.Table; @Table(name = "reference_data") @Entity diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/RejectedGroupingSuggestionEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/RejectedGroupingSuggestionEntity.java index 9fa48a3fd56..6c47a9e58c9 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/RejectedGroupingSuggestionEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/RejectedGroupingSuggestionEntity.java @@ -2,10 +2,10 @@ import java.io.Serializable; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.Table; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; @Entity @Table(name = "rejected_grouping_suggestion") diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ResearchResourceEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ResearchResourceEntity.java index 25f59a21bdd..b76480177ff 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ResearchResourceEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ResearchResourceEntity.java @@ -2,19 +2,19 @@ import java.util.List; -import javax.persistence.CascadeType; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.JoinTable; -import javax.persistence.OneToMany; -import javax.persistence.OrderColumn; -import javax.persistence.SequenceGenerator; -import javax.persistence.Table; +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.JoinTable; +import jakarta.persistence.OneToMany; +import jakarta.persistence.OrderColumn; +import jakarta.persistence.SequenceGenerator; +import jakarta.persistence.Table; /** Represents a research resource. * diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ResearchResourceItemEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ResearchResourceItemEntity.java index 0b8d41c60db..baa309cdc28 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ResearchResourceItemEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ResearchResourceItemEntity.java @@ -2,19 +2,19 @@ import java.util.List; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.JoinTable; -import javax.persistence.ManyToOne; -import javax.persistence.OneToMany; -import javax.persistence.OrderColumn; -import javax.persistence.SequenceGenerator; -import javax.persistence.Table; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.JoinTable; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.OneToMany; +import jakarta.persistence.OrderColumn; +import jakarta.persistence.SequenceGenerator; +import jakarta.persistence.Table; @Entity @Table(name = "research_resource_item") diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ResearcherUrlEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ResearcherUrlEntity.java index f0162391314..0ab7c3596ec 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ResearcherUrlEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ResearcherUrlEntity.java @@ -1,12 +1,12 @@ package org.orcid.persistence.jpa.entities; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.SequenceGenerator; -import javax.persistence.Table; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.SequenceGenerator; +import jakarta.persistence.Table; import org.orcid.persistence.constants.SiteConstants; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/SalesForceConnectionEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/SalesForceConnectionEntity.java index f73dc975d0a..00c950eef24 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/SalesForceConnectionEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/SalesForceConnectionEntity.java @@ -1,12 +1,12 @@ package org.orcid.persistence.jpa.entities; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.SequenceGenerator; -import javax.persistence.Table; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.SequenceGenerator; +import jakarta.persistence.Table; /** * The persistent class for the salesforce database table. diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ShibbolethAccountEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ShibbolethAccountEntity.java index 934f67a2a77..a35a83b5a77 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ShibbolethAccountEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ShibbolethAccountEntity.java @@ -1,12 +1,12 @@ package org.orcid.persistence.jpa.entities; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.SequenceGenerator; -import javax.persistence.Table; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.SequenceGenerator; +import jakarta.persistence.Table; import com.fasterxml.jackson.annotation.JsonIgnore; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/SourceAwareEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/SourceAwareEntity.java index b873d931c0c..4656cdaba8e 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/SourceAwareEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/SourceAwareEntity.java @@ -2,9 +2,9 @@ import java.io.Serializable; -import javax.persistence.Column; -import javax.persistence.MappedSuperclass; -import javax.persistence.Transient; +import jakarta.persistence.Column; +import jakarta.persistence.MappedSuperclass; +import jakarta.persistence.Transient; import org.apache.commons.lang3.StringUtils; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/SourceEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/SourceEntity.java index 38d4c3058d7..b35d4d7d20a 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/SourceEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/SourceEntity.java @@ -2,10 +2,10 @@ import java.io.Serializable; -import javax.persistence.Embeddable; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.Transient; +import jakarta.persistence.Embeddable; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.Transient; /** * diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/SpamEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/SpamEntity.java index a0450117c40..31626fd0240 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/SpamEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/SpamEntity.java @@ -2,16 +2,16 @@ import java.util.Date; -import javax.persistence.Basic; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.EnumType; -import javax.persistence.Enumerated; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.SequenceGenerator; -import javax.persistence.Table; +import jakarta.persistence.Basic; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.SequenceGenerator; +import jakarta.persistence.Table; /** * diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/StartDateEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/StartDateEntity.java index b3a24bf9f42..a1376ea0d44 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/StartDateEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/StartDateEntity.java @@ -2,8 +2,8 @@ import java.io.Serializable; -import javax.persistence.Column; -import javax.persistence.Embeddable; +import jakarta.persistence.Column; +import jakarta.persistence.Embeddable; @Embeddable public class StartDateEntity extends FuzzyDateEntity implements Serializable { diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/SubjectEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/SubjectEntity.java index 6ddce6adcd8..9bd09955be3 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/SubjectEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/SubjectEntity.java @@ -1,10 +1,10 @@ package org.orcid.persistence.jpa.entities; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.Table; -import javax.persistence.Transient; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import jakarta.persistence.Transient; /** * diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/UserconnectionEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/UserconnectionEntity.java index 4fb4d13312b..df4f611eae7 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/UserconnectionEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/UserconnectionEntity.java @@ -1,13 +1,13 @@ package org.orcid.persistence.jpa.entities; import java.util.Date; -import javax.persistence.Column; -import javax.persistence.EmbeddedId; -import javax.persistence.Entity; -import javax.persistence.EnumType; -import javax.persistence.Enumerated; -import javax.persistence.Table; -import javax.persistence.Transient; +import jakarta.persistence.Column; +import jakarta.persistence.EmbeddedId; +import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; +import jakarta.persistence.Table; +import jakarta.persistence.Transient; /** * The persistent class for the userconnection database table. diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/UserconnectionPK.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/UserconnectionPK.java index 46289f22034..ca194c968d6 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/UserconnectionPK.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/UserconnectionPK.java @@ -1,7 +1,7 @@ package org.orcid.persistence.jpa.entities; import java.io.Serializable; -import javax.persistence.*; +import jakarta.persistence.*; /** * The primary key class for the userconnection database table. diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ValidatedPublicProfileEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ValidatedPublicProfileEntity.java index 45bb1511dce..cd8c91ada40 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ValidatedPublicProfileEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ValidatedPublicProfileEntity.java @@ -2,10 +2,10 @@ import java.io.Serializable; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.Table; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; @Entity @Table(name = "validated_public_profile") diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/WebhookEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/WebhookEntity.java index fb92f4dc4c5..92b3ab3daf2 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/WebhookEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/WebhookEntity.java @@ -2,16 +2,16 @@ import java.util.Date; -import javax.persistence.Column; -import javax.persistence.ColumnResult; -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.IdClass; -import javax.persistence.NamedNativeQueries; -import javax.persistence.NamedNativeQuery; -import javax.persistence.SqlResultSetMapping; -import javax.persistence.Table; -import javax.persistence.Transient; +import jakarta.persistence.Column; +import jakarta.persistence.ColumnResult; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.IdClass; +import jakarta.persistence.NamedNativeQueries; +import jakarta.persistence.NamedNativeQuery; +import jakarta.persistence.SqlResultSetMapping; +import jakarta.persistence.Table; +import jakarta.persistence.Transient; import org.orcid.persistence.jpa.entities.keys.WebhookEntityPk; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/WorkBaseEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/WorkBaseEntity.java index 2be773a06e5..0e03081d972 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/WorkBaseEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/WorkBaseEntity.java @@ -1,12 +1,12 @@ package org.orcid.persistence.jpa.entities; -import javax.persistence.Column; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.MappedSuperclass; -import javax.persistence.SequenceGenerator; -import javax.persistence.Transient; +import jakarta.persistence.Column; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.MappedSuperclass; +import jakarta.persistence.SequenceGenerator; +import jakarta.persistence.Transient; /** * An object that will contain the minimum work information needed to display diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/WorkEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/WorkEntity.java index 474374c3308..3d7290fa9bd 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/WorkEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/WorkEntity.java @@ -4,9 +4,9 @@ import java.util.Comparator; import java.util.Date; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Table; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Table; @Entity @Table(name = "work") diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/WorkLastModifiedEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/WorkLastModifiedEntity.java index f0fc8e62772..19118b36782 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/WorkLastModifiedEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/WorkLastModifiedEntity.java @@ -1,12 +1,12 @@ package org.orcid.persistence.jpa.entities; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.SequenceGenerator; -import javax.persistence.Table; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.SequenceGenerator; +import jakarta.persistence.Table; /** * diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/keys/AuthorWorkEntityPk.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/keys/AuthorWorkEntityPk.java index 03686e9ddc1..eb841e489bb 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/keys/AuthorWorkEntityPk.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/keys/AuthorWorkEntityPk.java @@ -1,6 +1,6 @@ package org.orcid.persistence.jpa.entities.keys; -import javax.persistence.Embeddable; +import jakarta.persistence.Embeddable; import java.io.Serializable; /** diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/keys/ClientAuthorisedGrantTypePk.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/keys/ClientAuthorisedGrantTypePk.java index 96328572ea6..1fb8c006d8d 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/keys/ClientAuthorisedGrantTypePk.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/keys/ClientAuthorisedGrantTypePk.java @@ -1,7 +1,7 @@ package org.orcid.persistence.jpa.entities.keys; -import javax.persistence.Column; -import javax.persistence.Embeddable; +import jakarta.persistence.Column; +import jakarta.persistence.Embeddable; import java.io.Serializable; /** diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/keys/ClientGrantedAuthorityPk.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/keys/ClientGrantedAuthorityPk.java index c39e58d7c8b..ce6f8502ca3 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/keys/ClientGrantedAuthorityPk.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/keys/ClientGrantedAuthorityPk.java @@ -1,7 +1,7 @@ package org.orcid.persistence.jpa.entities.keys; -import javax.persistence.Column; -import javax.persistence.Embeddable; +import jakarta.persistence.Column; +import jakarta.persistence.Embeddable; import java.io.Serializable; /** diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/keys/ClientRedirectUriPk.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/keys/ClientRedirectUriPk.java index 779caf30f00..31933124e9c 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/keys/ClientRedirectUriPk.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/keys/ClientRedirectUriPk.java @@ -1,8 +1,8 @@ package org.orcid.persistence.jpa.entities.keys; -import javax.persistence.Column; -import javax.persistence.Embeddable; -import javax.persistence.JoinColumn; +import jakarta.persistence.Column; +import jakarta.persistence.Embeddable; +import jakarta.persistence.JoinColumn; import java.io.Serializable; /** diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/keys/ClientResourceIdPk.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/keys/ClientResourceIdPk.java index 1be5590cc5d..f8470f3905a 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/keys/ClientResourceIdPk.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/keys/ClientResourceIdPk.java @@ -1,7 +1,7 @@ package org.orcid.persistence.jpa.entities.keys; -import javax.persistence.Column; -import javax.persistence.Embeddable; +import jakarta.persistence.Column; +import jakarta.persistence.Embeddable; import java.io.Serializable; /** diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/keys/ClientScopePk.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/keys/ClientScopePk.java index 5d0ed2bdbcf..72125186a0a 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/keys/ClientScopePk.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/keys/ClientScopePk.java @@ -1,7 +1,7 @@ package org.orcid.persistence.jpa.entities.keys; -import javax.persistence.Column; -import javax.persistence.Embeddable; +import jakarta.persistence.Column; +import jakarta.persistence.Embeddable; import java.io.Serializable; /** diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/keys/ClientSecretPk.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/keys/ClientSecretPk.java index d576be3665e..338a36c34f0 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/keys/ClientSecretPk.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/keys/ClientSecretPk.java @@ -1,7 +1,7 @@ package org.orcid.persistence.jpa.entities.keys; -import javax.persistence.Column; -import javax.persistence.Embeddable; +import jakarta.persistence.Column; +import jakarta.persistence.Embeddable; import java.io.Serializable; /** diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/keys/ElectronicResourceNumEntityPk.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/keys/ElectronicResourceNumEntityPk.java index 27e1c0bb3a9..85b5e597d84 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/keys/ElectronicResourceNumEntityPk.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/keys/ElectronicResourceNumEntityPk.java @@ -1,6 +1,6 @@ package org.orcid.persistence.jpa.entities.keys; -import javax.persistence.Embeddable; +import jakarta.persistence.Embeddable; import java.io.Serializable; /** diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/keys/OrcidGrantedAuthorityPk.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/keys/OrcidGrantedAuthorityPk.java index c6f0fac0ff1..d685a350ce2 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/keys/OrcidGrantedAuthorityPk.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/keys/OrcidGrantedAuthorityPk.java @@ -1,6 +1,6 @@ package org.orcid.persistence.jpa.entities.keys; -import javax.persistence.Embeddable; +import jakarta.persistence.Embeddable; import java.io.Serializable; /** diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/keys/SecondaryAuthorWorkEntityPk.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/keys/SecondaryAuthorWorkEntityPk.java index ec083afad88..8302680d695 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/keys/SecondaryAuthorWorkEntityPk.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/keys/SecondaryAuthorWorkEntityPk.java @@ -1,6 +1,6 @@ package org.orcid.persistence.jpa.entities.keys; -import javax.persistence.Embeddable; +import jakarta.persistence.Embeddable; import java.io.Serializable; /** diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/keys/WorkExternalIdentifierEntityPk.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/keys/WorkExternalIdentifierEntityPk.java index e32a3dac420..7801737a5d0 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/keys/WorkExternalIdentifierEntityPk.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/keys/WorkExternalIdentifierEntityPk.java @@ -2,7 +2,7 @@ import java.io.Serializable; -import javax.persistence.Embeddable; +import jakarta.persistence.Embeddable; /** * @author Declan Newman (declan) Date: 07/08/2012 diff --git a/orcid-persistence/src/main/java/org/orcid/statistics/jpa/entities/StatisticKeyEntity.java b/orcid-persistence/src/main/java/org/orcid/statistics/jpa/entities/StatisticKeyEntity.java index 047625d8807..adc3bf88df3 100644 --- a/orcid-persistence/src/main/java/org/orcid/statistics/jpa/entities/StatisticKeyEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/statistics/jpa/entities/StatisticKeyEntity.java @@ -4,13 +4,13 @@ import java.text.SimpleDateFormat; import java.util.Date; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.SequenceGenerator; -import javax.persistence.Table; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.SequenceGenerator; +import jakarta.persistence.Table; @Entity @Table(name = "statistic_key") diff --git a/orcid-persistence/src/main/java/org/orcid/statistics/jpa/entities/StatisticValuesEntity.java b/orcid-persistence/src/main/java/org/orcid/statistics/jpa/entities/StatisticValuesEntity.java index 10a2deae411..83e0ebc8fa6 100644 --- a/orcid-persistence/src/main/java/org/orcid/statistics/jpa/entities/StatisticValuesEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/statistics/jpa/entities/StatisticValuesEntity.java @@ -2,17 +2,17 @@ import java.io.Serializable; -import javax.persistence.CascadeType; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.SequenceGenerator; -import javax.persistence.Table; +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.SequenceGenerator; +import jakarta.persistence.Table; @Entity @Table(name = "statistic_values") diff --git a/orcid-persistence/src/test/java/org/orcid/persistence/dao/EventDaoTest.java b/orcid-persistence/src/test/java/org/orcid/persistence/dao/EventDaoTest.java index e672c47654a..9c6ef5f0981 100644 --- a/orcid-persistence/src/test/java/org/orcid/persistence/dao/EventDaoTest.java +++ b/orcid-persistence/src/test/java/org/orcid/persistence/dao/EventDaoTest.java @@ -9,7 +9,7 @@ import java.util.List; import javax.annotation.Resource; -import javax.persistence.EntityManager; +import jakarta.persistence.EntityManager; import org.apache.commons.lang3.reflect.FieldUtils; import org.junit.AfterClass; diff --git a/orcid-persistence/src/test/java/org/orcid/persistence/dao/ExternalIdentifierDaoTest.java b/orcid-persistence/src/test/java/org/orcid/persistence/dao/ExternalIdentifierDaoTest.java index 10438cebaba..520064f3b06 100644 --- a/orcid-persistence/src/test/java/org/orcid/persistence/dao/ExternalIdentifierDaoTest.java +++ b/orcid-persistence/src/test/java/org/orcid/persistence/dao/ExternalIdentifierDaoTest.java @@ -14,7 +14,7 @@ import java.util.List; import javax.annotation.Resource; -import javax.persistence.NoResultException; +import jakarta.persistence.NoResultException; import org.junit.AfterClass; import org.junit.BeforeClass; diff --git a/orcid-persistence/src/test/java/org/orcid/persistence/dao/OrcidOauth2TokenDetailDaoTest.java b/orcid-persistence/src/test/java/org/orcid/persistence/dao/OrcidOauth2TokenDetailDaoTest.java index 98aaf1435c5..af7d0997627 100644 --- a/orcid-persistence/src/test/java/org/orcid/persistence/dao/OrcidOauth2TokenDetailDaoTest.java +++ b/orcid-persistence/src/test/java/org/orcid/persistence/dao/OrcidOauth2TokenDetailDaoTest.java @@ -15,7 +15,7 @@ import java.util.Locale; import javax.annotation.Resource; -import javax.persistence.NoResultException; +import jakarta.persistence.NoResultException; import org.junit.AfterClass; import org.junit.BeforeClass; diff --git a/orcid-persistence/src/test/java/org/orcid/persistence/dao/OtherNameDaoTest.java b/orcid-persistence/src/test/java/org/orcid/persistence/dao/OtherNameDaoTest.java index d7dda3a3bbd..e6f4d3cbdee 100644 --- a/orcid-persistence/src/test/java/org/orcid/persistence/dao/OtherNameDaoTest.java +++ b/orcid-persistence/src/test/java/org/orcid/persistence/dao/OtherNameDaoTest.java @@ -10,7 +10,7 @@ import java.util.List; import javax.annotation.Resource; -import javax.persistence.NoResultException; +import jakarta.persistence.NoResultException; import org.junit.AfterClass; import org.junit.BeforeClass; diff --git a/orcid-persistence/src/test/java/org/orcid/persistence/dao/ProfileDaoTest.java b/orcid-persistence/src/test/java/org/orcid/persistence/dao/ProfileDaoTest.java index 66d117b9404..3440ec6f53b 100644 --- a/orcid-persistence/src/test/java/org/orcid/persistence/dao/ProfileDaoTest.java +++ b/orcid-persistence/src/test/java/org/orcid/persistence/dao/ProfileDaoTest.java @@ -14,8 +14,8 @@ import java.util.Map; import javax.annotation.Resource; -import javax.persistence.EntityManager; -import javax.persistence.Query; +import jakarta.persistence.EntityManager; +import jakarta.persistence.Query; import org.apache.commons.lang3.tuple.Pair; import org.apache.commons.lang3.tuple.Pair; diff --git a/orcid-persistence/src/test/java/org/orcid/persistence/dao/ResearcherUrlDaoTest.java b/orcid-persistence/src/test/java/org/orcid/persistence/dao/ResearcherUrlDaoTest.java index 6bafb7e3df7..4f3634b107c 100644 --- a/orcid-persistence/src/test/java/org/orcid/persistence/dao/ResearcherUrlDaoTest.java +++ b/orcid-persistence/src/test/java/org/orcid/persistence/dao/ResearcherUrlDaoTest.java @@ -10,8 +10,8 @@ import java.util.List; import javax.annotation.Resource; -import javax.persistence.NoResultException; -import javax.persistence.PersistenceException; +import jakarta.persistence.NoResultException; +import jakarta.persistence.PersistenceException; import org.apache.commons.lang3.reflect.FieldUtils; import org.junit.AfterClass; diff --git a/orcid-persistence/src/test/java/org/orcid/persistence/dao/SpamDaoTest.java b/orcid-persistence/src/test/java/org/orcid/persistence/dao/SpamDaoTest.java index df1cfc1edaa..9af4e6ac228 100644 --- a/orcid-persistence/src/test/java/org/orcid/persistence/dao/SpamDaoTest.java +++ b/orcid-persistence/src/test/java/org/orcid/persistence/dao/SpamDaoTest.java @@ -9,7 +9,7 @@ import java.util.Date; import javax.annotation.Resource; -import javax.persistence.NoResultException; +import jakarta.persistence.NoResultException; import javax.transaction.Transactional; import org.apache.commons.lang3.reflect.FieldUtils; diff --git a/orcid-persistence/src/test/java/org/orcid/persistence/dao/WebhookDaoTest.java b/orcid-persistence/src/test/java/org/orcid/persistence/dao/WebhookDaoTest.java index a9c8dc7eec2..498e3cf54df 100644 --- a/orcid-persistence/src/test/java/org/orcid/persistence/dao/WebhookDaoTest.java +++ b/orcid-persistence/src/test/java/org/orcid/persistence/dao/WebhookDaoTest.java @@ -15,9 +15,9 @@ import java.util.List; import java.util.Set; -import javax.persistence.EntityManager; -import javax.persistence.Query; -import javax.persistence.TypedQuery; +import jakarta.persistence.EntityManager; +import jakarta.persistence.Query; +import jakarta.persistence.TypedQuery; import org.junit.Before; import org.junit.Test; diff --git a/orcid-pub-web/src/test/java/org/orcid/api/publicV2/server/PublicV2ApiServiceDelegatorTest.java b/orcid-pub-web/src/test/java/org/orcid/api/publicV2/server/PublicV2ApiServiceDelegatorTest.java index f7c3ced1132..6fbd8129595 100644 --- a/orcid-pub-web/src/test/java/org/orcid/api/publicV2/server/PublicV2ApiServiceDelegatorTest.java +++ b/orcid-pub-web/src/test/java/org/orcid/api/publicV2/server/PublicV2ApiServiceDelegatorTest.java @@ -11,7 +11,7 @@ import java.util.Set; import javax.annotation.Resource; -import javax.persistence.NoResultException; +import jakarta.persistence.NoResultException; import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.Response; diff --git a/orcid-pub-web/src/test/java/org/orcid/api/publicV2/server/PublicV2ApiServiceVersionedDelegatorTest.java b/orcid-pub-web/src/test/java/org/orcid/api/publicV2/server/PublicV2ApiServiceVersionedDelegatorTest.java index 2557b64cd25..4a01024d767 100644 --- a/orcid-pub-web/src/test/java/org/orcid/api/publicV2/server/PublicV2ApiServiceVersionedDelegatorTest.java +++ b/orcid-pub-web/src/test/java/org/orcid/api/publicV2/server/PublicV2ApiServiceVersionedDelegatorTest.java @@ -14,7 +14,7 @@ import java.util.Map; import javax.annotation.Resource; -import javax.persistence.NoResultException; +import jakarta.persistence.NoResultException; import javax.ws.rs.core.Response; import org.apache.commons.lang.time.DateUtils; diff --git a/orcid-pub-web/src/test/java/org/orcid/api/publicV3/server/PublicV3ApiServiceDelegatorTest.java b/orcid-pub-web/src/test/java/org/orcid/api/publicV3/server/PublicV3ApiServiceDelegatorTest.java index 97f02c1e6e1..a1ed7a2d917 100644 --- a/orcid-pub-web/src/test/java/org/orcid/api/publicV3/server/PublicV3ApiServiceDelegatorTest.java +++ b/orcid-pub-web/src/test/java/org/orcid/api/publicV3/server/PublicV3ApiServiceDelegatorTest.java @@ -18,7 +18,7 @@ import java.util.Set; import javax.annotation.Resource; -import javax.persistence.NoResultException; +import jakarta.persistence.NoResultException; import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.Response; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/AdminController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/AdminController.java index 78f7dd0b7c5..60356f873c9 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/AdminController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/AdminController.java @@ -14,7 +14,7 @@ import java.util.stream.Collectors; import javax.annotation.Resource; -import javax.persistence.NoResultException; +import jakarta.persistence.NoResultException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import javax.ws.rs.Produces; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/ClaimController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/ClaimController.java index fc5e0cc6ca1..5c8c087d05d 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/ClaimController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/ClaimController.java @@ -6,7 +6,7 @@ import java.util.Locale; import javax.annotation.Resource; -import javax.persistence.NoResultException; +import jakarta.persistence.NoResultException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/ManageProfileController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/ManageProfileController.java index 4c856d9cea4..86047ba8953 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/ManageProfileController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/ManageProfileController.java @@ -10,7 +10,7 @@ import java.util.stream.Collectors; import javax.annotation.Resource; -import javax.persistence.NoResultException; +import jakarta.persistence.NoResultException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/PasswordResetController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/PasswordResetController.java index 99466eb6611..37ca3b309a2 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/PasswordResetController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/PasswordResetController.java @@ -11,7 +11,7 @@ import java.util.Map; import javax.annotation.Resource; -import javax.persistence.NoResultException; +import jakarta.persistence.NoResultException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import javax.ws.rs.core.MediaType; diff --git a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/ResearchResourceControllerTest.java b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/ResearchResourceControllerTest.java index 7d0516c70fc..3ad4d225900 100644 --- a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/ResearchResourceControllerTest.java +++ b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/ResearchResourceControllerTest.java @@ -11,7 +11,7 @@ import java.util.List; import javax.annotation.Resource; -import javax.persistence.NoResultException; +import jakarta.persistence.NoResultException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpSession; diff --git a/pom.xml b/pom.xml index db0f930e3c0..113df2398da 100644 --- a/pom.xml +++ b/pom.xml @@ -727,20 +727,28 @@ the software. postgresql 42.7.2 + + + + + org.hibernate.orm + hibernate-core + 6.4.4.Final + - org.hibernate - hibernate-agroal - 5.4.27.Final + org.hibernate.orm + hibernate-agroal + 6.4.4.Final - org.hibernate + org.hibernate.orm hibernate-c3p0 - 5.3.6.Final + 6.4.4.Final - org.hibernate + org.hibernate.validator hibernate-validator - 5.4.3.Final + 8.0.1.Final jakarta.persistence From 3f40dd9dfc97b2a540bd4880591d410b7df76434 Mon Sep 17 00:00:00 2001 From: Camelia Dumitru Date: Wed, 8 Apr 2026 17:51:40 +0100 Subject: [PATCH 26/77] More jakarta changes --- orcid-activemq/pom.xml | 6 +-- .../activemq/AppContextActiveMQTest.java | 2 +- orcid-activities-indexer/pom.xml | 33 ++++++++------- .../cron/RetryFailedRecords.java | 2 +- .../listener/BaseListener.java | 4 +- .../listener/ReIndexListener.java | 8 ++-- .../listener/UpdatedOrcidListener.java | 6 +-- .../listener/UpdatedOrcidWorker.java | 2 +- .../orcid/Orcid20APIClient.java | 4 +- .../s3/ExceptionHandler.java | 4 +- .../orcid/activitiesindexer/s3/S3Manager.java | 10 ++--- .../s3/S3MessageProcessor.java | 2 +- .../s3/S3MessagingService.java | 2 +- .../dao/ActivitiesStatusDaoTest.java | 2 +- .../managers/ActivitiesStatusManagerTest.java | 2 +- .../activitiesindexer/s3/S3UpdaterTest.java | 2 +- orcid-api-common/pom.xml | 36 ++++++++++------ .../api/common/OrcidApiCommonEndpoints.java | 24 +++++------ .../org/orcid/api/common/OrcidApiService.java | 8 ++-- .../orcid/api/common/T2OrcidApiService.java | 16 ++++---- .../common/analytics/APIEndpointParser.java | 2 +- .../common/analytics/AnalyticsProcess.java | 2 +- .../google/UniversalAnalyticsClient.java | 2 +- .../common/exception/JSONInputValidator.java | 6 +-- .../common/filter/ApiVersionCheckFilter.java | 8 ++-- .../filter/ClientIdAttributeFilter.java | 2 +- .../filter/DefaultApiVersionFilter.java | 8 ++-- .../filter/OboApiVersionCheckFilter.java | 6 +-- .../api/common/filter/TokenTargetFilter.java | 6 +-- .../NotificationJsonMessageBodyWriter.java | 14 +++---- .../jaxb/OrcidErrorJsonMessageBodyWriter.java | 14 +++---- .../api/common/jaxb/OrcidExceptionMapper.java | 14 +++---- .../jaxb/OrcidJacksonJaxbJsonProvider.java | 10 ++--- .../OrcidJacksonJaxbJsonProviderPretty.java | 10 ++--- .../jaxb/OrcidMarshallerContextResolver.java | 20 ++++----- .../common/jaxb/OrcidMarshallerWrapper.java | 14 +++---- .../OrcidValidationJaxbContextResolver.java | 32 +++++++-------- .../ClientDetailsUserDetailsService.java | 2 +- .../oauth/OrcidBearerTokenFilter.java | 2 +- ...rcidMultiSecretAuthenticationProvider.java | 2 +- .../oauth/RevokeTokenEndpointFilter.java | 2 +- .../org/orcid/api/common/util/ApiUtils.java | 4 +- .../api/common/util/v3/PublicRecordUtils.java | 2 +- .../common/writer/HtmlMessageBodyWriter.java | 22 +++++----- .../citeproc/CSLItemDataListMBWriter.java | 12 +++--- .../writer/citeproc/CSLItemDataMBWriter.java | 12 +++--- .../writer/rdf/RDFMessageBodyWriterV2.java | 16 ++++---- .../writer/schemaorg/SchemaOrgMBWriterV2.java | 14 +++---- .../writer/schemaorg/SchemaOrgMBWriterV3.java | 14 +++---- .../stats/StatisticsTimelineListMBWriter.java | 12 +++--- .../impl/PublicAPISecurityManagerV3Impl.java | 2 +- .../analytics/APIEndpointParserTest.java | 4 +- .../analytics/AnalyticsProcessTest.java | 8 ++-- .../filter/ApiVersionCheckFilterTest.java | 2 +- .../api/common/writer/rdf/RDFWriterTest.java | 4 +- .../api/common/swagger/SwaggerUIBuilder.java | 2 +- .../orcid/api/filters/AnalyticsFilter.java | 12 +++--- .../api/member/common/WebhooksService.java | 22 +++++----- .../delegator/WebhooksServiceDelegator.java | 2 +- .../impl/WebhooksServiceDelegatorImpl.java | 4 +- .../server/MemberV2ApiServiceImplV2_0.java | 30 +++++++------- .../server/MemberV2ApiServiceImplV2_1.java | 30 +++++++------- .../MemberV2ApiServiceDelegator.java | 2 +- .../impl/MemberV2ApiServiceDelegatorImpl.java | 4 +- ...berV2ApiServiceVersionedDelegatorImpl.java | 6 +-- .../server/MemberV3ApiServiceImplV3_0.java | 30 +++++++------- .../MemberV3ApiServiceDelegator.java | 2 +- .../impl/MemberV3ApiServiceDelegatorImpl.java | 6 +-- .../NotificationsApiServiceDelegator.java | 4 +- .../NotificationsApiServiceDelegatorImpl.java | 6 +-- ...tionsApiServiceVersionedDelegatorImpl.java | 6 +-- .../NotificationsApiServiceDelegator.java | 4 +- .../NotificationsApiServiceDelegatorImpl.java | 6 +-- .../api/swagger/MemberSwaggerResource.java | 8 ++-- .../validator/JSONInputValidatorTest.java | 2 +- ...erviceDelegator_ActivitiesSummaryTest.java | 4 +- ...erV2ApiServiceDelegator_AddressesTest.java | 4 +- ...berV2ApiServiceDelegator_BiogrphyTest.java | 4 +- ...rV2ApiServiceDelegator_EducationsTest.java | 4 +- ...emberV2ApiServiceDelegator_EmailsTest.java | 4 +- ...V2ApiServiceDelegator_EmploymentsTest.java | 4 +- ...viceDelegator_ExternalIdentifiersTest.java | 4 +- ...mberV2ApiServiceDelegator_FundingTest.java | 4 +- ...mberV2ApiServiceDelegator_GeneralTest.java | 4 +- ...mberV2ApiServiceDelegator_GroupIdTest.java | 4 +- ...berV2ApiServiceDelegator_KeywordsTest.java | 4 +- ...rV2ApiServiceDelegator_OtherNamesTest.java | 4 +- ...V2ApiServiceDelegator_PeerReviewsTest.java | 4 +- ...iServiceDelegator_PersonalDetailsTest.java | 4 +- ...rV2ApiServiceDelegator_ReadPersonTest.java | 4 +- ...rV2ApiServiceDelegator_ReadRecordTest.java | 4 +- ...piServiceDelegator_ResearcherUrlsTest.java | 4 +- ...MemberV2ApiServiceDelegator_WorksTest.java | 4 +- ...berV2ApiServiceVersionedDelegatorTest.java | 4 +- ...MemberV3ApiServiceDelegatorErrorsTest.java | 4 +- ...erviceDelegator_ActivitiesSummaryTest.java | 4 +- ...erV3ApiServiceDelegator_AddressesTest.java | 4 +- ...berV3ApiServiceDelegator_BiogrphyTest.java | 4 +- ...3ApiServiceDelegator_DistinctionsTest.java | 4 +- ...rV3ApiServiceDelegator_EducationsTest.java | 4 +- ...emberV3ApiServiceDelegator_EmailsTest.java | 4 +- ...V3ApiServiceDelegator_EmploymentsTest.java | 4 +- ...viceDelegator_ExternalIdentifiersTest.java | 4 +- ...mberV3ApiServiceDelegator_FundingTest.java | 4 +- ...mberV3ApiServiceDelegator_GeneralTest.java | 4 +- ...mberV3ApiServiceDelegator_GroupIdTest.java | 4 +- ...ServiceDelegator_InvitedPositionsTest.java | 4 +- ...berV3ApiServiceDelegator_KeywordsTest.java | 4 +- ...V3ApiServiceDelegator_MembershipsTest.java | 4 +- ...rV3ApiServiceDelegator_OtherNamesTest.java | 4 +- ...V3ApiServiceDelegator_PeerReviewsTest.java | 4 +- ...iServiceDelegator_PersonalDetailsTest.java | 4 +- ...piServiceDelegator_QualificationsTest.java | 4 +- ...rV3ApiServiceDelegator_ReadPersonTest.java | 4 +- ...rV3ApiServiceDelegator_ReadRecordTest.java | 4 +- ...piServiceDelegator_ResearcherUrlsTest.java | 4 +- ...berV3ApiServiceDelegator_ServicesTest.java | 4 +- ...MemberV3ApiServiceDelegator_WorksTest.java | 4 +- .../orcid/api/t2/OAuthOrcidApiService.java | 10 ++--- .../NotificationsApiServiceDelegatorTest.java | 2 +- .../java/org/orcid/api/util/ApiUtilsTest.java | 4 +- .../java/org/orcid/test/helper/Utils.java | 2 +- .../java/org/orcid/test/helper/v3/Utils.java | 2 +- orcid-core/pom.xml | 10 ++--- .../adapter/impl/MapperFacadeFactory.java | 2 +- .../adapter/v3/impl/MapperFacadeFactory.java | 2 +- .../core/aop/ProfileLastModifiedAspect.java | 2 +- .../rate_limit/PapiRateLimitRedisClient.java | 2 +- .../org/orcid/core/cache/OrcidString.java | 2 +- ...FeaturedGroupedWorksExtendedRetriever.java | 2 +- .../impl/GroupedWorksExtendedRetriever.java | 4 +- .../cache/impl/GroupedWorksRetriever.java | 4 +- .../cache/impl/ProfileEntityRetriever.java | 2 +- .../SalesForceConnectionEntityRetriever.java | 2 +- .../core/cache/impl/WorksTitleRetriever.java | 2 +- .../orcid/core/cli/AnonymizeWorksFromCSV.java | 2 +- .../core/cli/AnonymizeWorksFromGetMyData.java | 2 +- .../core/cli/CorrectBadClientSourceData.java | 2 +- .../org/orcid/core/cli/CorrectBadOrgData.java | 2 +- ...orrectClientProfileSourceIdReferences.java | 2 +- .../orcid/core/cli/DeleteActiveMQQueue.java | 6 +-- .../org/orcid/core/cli/LoadFundRefData.java | 2 +- .../org/orcid/core/cli/NormalizeISNIs.java | 2 +- .../org/orcid/core/cli/ViewMQStatistics.java | 18 ++++---- .../core/cli/anonymize/XMLDeserializer.java | 8 ++-- .../manager/impl/EmailDomainManagerImpl.java | 2 +- .../impl/EmailFrequencyManagerImpl.java | 2 +- .../common/manager/impl/EventManagerImpl.java | 2 +- .../manager/impl/SummaryManagerImpl.java | 2 +- .../core/cron/CleanOldClientKeysCronJob.java | 2 +- .../orcid/core/crossref/CrossRefMetadata.java | 2 +- .../exception/OrcidCoreExceptionMapper.java | 6 +-- .../orcid/core/groupIds/issn/IssnClient.java | 2 +- .../orcid/core/locale/LocaleManagerImpl.java | 2 +- .../manager/impl/ActivityManagerImpl.java | 2 +- .../core/manager/impl/AddressManagerImpl.java | 4 +- .../core/manager/impl/AdminManagerImpl.java | 2 +- .../manager/impl/AffiliationsManagerImpl.java | 2 +- .../manager/impl/BackupCodeManagerImpl.java | 2 +- .../core/manager/impl/BibtexManagerImpl.java | 2 +- .../manager/impl/BiographyManagerImpl.java | 2 +- .../ClientDetailsEntityCacheManagerImpl.java | 2 +- .../impl/ClientDetailsManagerImpl.java | 2 +- .../core/manager/impl/CountryManagerImpl.java | 2 +- .../core/manager/impl/DOIManagerImpl.java | 2 +- .../impl/DoiBibtexCacheEntryFactory.java | 2 +- .../impl/ExternalIdentifierManagerImpl.java | 2 +- .../impl/GroupIdRecordManagerImpl.java | 2 +- .../impl/IdentifierTypeManagerImpl.java | 2 +- .../impl/IdentityProviderManagerImpl.java | 4 +- ...IdentityProviderNameCacheEntryFactory.java | 2 +- .../impl/InstitutionalSignInManagerImpl.java | 2 +- .../manager/impl/NotificationManagerImpl.java | 2 +- .../NotificationValidationManagerImpl.java | 2 +- .../impl/OrcidGenerationManagerImpl.java | 2 +- .../manager/impl/OrcidSearchManagerImpl.java | 2 +- .../impl/OrcidSecurityManagerImpl.java | 2 +- .../impl/OrgDisambiguatedManagerImpl.java | 4 +- .../core/manager/impl/OrgManagerImpl.java | 2 +- .../manager/impl/OtherNameManagerImpl.java | 2 +- .../manager/impl/PeerReviewManagerImpl.java | 2 +- .../manager/impl/PreferenceManagerImpl.java | 2 +- .../impl/ProfileEntityCacheManagerImpl.java | 2 +- .../impl/ProfileEntityManagerImpl.java | 2 +- .../impl/ProfileFundingManagerImpl.java | 2 +- .../impl/ProfileKeywordManagerImpl.java | 4 +- .../manager/impl/RecordNameManagerImpl.java | 2 +- .../impl/ReferenceDataManagerImpl.java | 2 +- .../manager/impl/RegistrationManagerImpl.java | 2 +- .../impl/ResearcherUrlManagerImpl.java | 2 +- .../core/manager/impl/SourceManagerImpl.java | 2 +- .../impl/SourceNameCacheManagerImpl.java | 2 +- .../core/manager/impl/StatusManagerImpl.java | 2 +- .../core/manager/impl/SubjectManagerImpl.java | 2 +- .../manager/impl/TemplateManagerImpl.java | 2 +- .../TwoFactorAuthenticationManagerImpl.java | 2 +- .../impl/UserConnectionManagerImpl.java | 2 +- .../core/manager/impl/WebhookManagerImpl.java | 2 +- .../impl/WorkEntityCacheManagerImpl.java | 2 +- .../core/manager/impl/WorkManagerImpl.java | 2 +- .../impl/AddressManagerReadOnlyImpl.java | 2 +- .../impl/AffiliationsManagerReadOnlyImpl.java | 2 +- .../ClientDetailsManagerReadOnlyImpl.java | 2 +- .../impl/ClientManagerReadOnlyImpl.java | 2 +- .../impl/EmailManagerReadOnlyImpl.java | 2 +- ...ExternalIdentifierManagerReadOnlyImpl.java | 2 +- .../GroupIdRecordManagerReadOnlyImpl.java | 2 +- .../impl/OtherNameManagerReadOnlyImpl.java | 2 +- .../impl/PeerReviewManagerReadOnlyImpl.java | 2 +- .../PersonDetailsManagerReadOnlyImpl.java | 2 +- .../ProfileFundingManagerReadOnlyImpl.java | 2 +- .../ProfileKeywordManagerReadOnlyImpl.java | 2 +- .../RecordCorrectionsManagerReadOnlyImpl.java | 2 +- .../impl/RecordManagerReadOnlyImpl.java | 2 +- .../impl/RecordNameManagerReadOnlyImpl.java | 2 +- .../ResearcherUrlManagerReadOnlyImpl.java | 2 +- .../impl/WorkManagerReadOnlyImpl.java | 2 +- .../manager/v3/impl/ActivityManagerImpl.java | 2 +- .../manager/v3/impl/AddressManagerImpl.java | 4 +- .../v3/impl/AffiliationsManagerImpl.java | 4 +- .../manager/v3/impl/BibtexManagerImpl.java | 2 +- .../manager/v3/impl/BiographyManagerImpl.java | 2 +- .../v3/impl/ClientDetailsManagerImpl.java | 2 +- .../manager/v3/impl/ClientManagerImpl.java | 4 +- .../manager/v3/impl/EmailManagerImpl.java | 2 +- .../impl/ExternalIdentifierManagerImpl.java | 2 +- .../v3/impl/FindMyStuffManagerImpl.java | 2 +- .../v3/impl/GivenPermissionToManagerImpl.java | 2 +- .../v3/impl/GroupIdRecordManagerImpl.java | 2 +- .../impl/GroupingSuggestionManagerImpl.java | 2 +- .../GroupingSuggestionsCacheManagerImpl.java | 2 +- .../manager/v3/impl/MembersManagerImpl.java | 2 +- .../v3/impl/NotificationManagerImpl.java | 2 +- .../NotificationValidationManagerImpl.java | 2 +- .../v3/impl/OrcidSearchManagerImpl.java | 2 +- .../v3/impl/OrcidSecurityManagerImpl.java | 2 +- ...liationRelationEntityCacheManagerImpl.java | 2 +- .../core/manager/v3/impl/OrgManagerImpl.java | 2 +- .../manager/v3/impl/OtherNameManagerImpl.java | 2 +- .../v3/impl/PeerReviewManagerImpl.java | 2 +- .../impl/ProfileEmailDomainManagerImpl.java | 2 +- .../v3/impl/ProfileEntityManagerImpl.java | 2 +- .../v3/impl/ProfileFundingManagerImpl.java | 2 +- .../impl/ProfileHistoryEventManagerImpl.java | 2 +- .../ProfileInterstitialFlagManagerImpl.java | 2 +- .../v3/impl/ProfileKeywordManagerImpl.java | 4 +- .../v3/impl/RecordNameManagerImpl.java | 2 +- .../v3/impl/ResearchResourceManagerImpl.java | 4 +- .../v3/impl/ResearcherUrlManagerImpl.java | 2 +- .../manager/v3/impl/SourceManagerImpl.java | 2 +- .../core/manager/v3/impl/SpamManagerImpl.java | 2 +- .../core/manager/v3/impl/WorkManagerImpl.java | 2 +- .../v3/impl/WorksCacheManagerImpl.java | 2 +- .../impl/WorksExtendedCacheManagerImpl.java | 2 +- .../impl/AddressManagerReadOnlyImpl.java | 2 +- .../impl/AffiliationsManagerReadOnlyImpl.java | 2 +- .../ClientDetailsManagerReadOnlyImpl.java | 2 +- .../impl/ClientManagerReadOnlyImpl.java | 2 +- .../impl/EmailManagerReadOnlyImpl.java | 2 +- ...ExternalIdentifierManagerReadOnlyImpl.java | 2 +- .../GivenPermissionToManagerReadOnlyImpl.java | 2 +- .../GroupIdRecordManagerReadOnlyImpl.java | 2 +- ...GroupingSuggestionManagerReadOnlyImpl.java | 2 +- .../impl/OtherNameManagerReadOnlyImpl.java | 2 +- .../impl/PeerReviewManagerReadOnlyImpl.java | 2 +- .../PersonDetailsManagerReadOnlyImpl.java | 2 +- ...ProfileEmailDomainManagerReadOnlyImpl.java | 2 +- .../ProfileEntityManagerReadOnlyImpl.java | 2 +- .../ProfileFundingManagerReadOnlyImpl.java | 2 +- ...leInterstitialFlagManagerReadOnlyImpl.java | 2 +- .../ProfileKeywordManagerReadOnlyImpl.java | 2 +- .../impl/RecordManagerReadOnlyImpl.java | 2 +- .../impl/RecordNameManagerReadOnlyImpl.java | 2 +- .../ResearchResourceManagerReadOnlyImpl.java | 4 +- .../ResearcherUrlManagerReadOnlyImpl.java | 2 +- .../impl/SpamManagerReadOnlyImpl.java | 2 +- .../impl/WorkManagerReadOnlyImpl.java | 4 +- .../v3/validator/ActivityValidator.java | 2 +- .../v3/validator/ExternalIDValidator.java | 2 +- .../manager/validator/ActivityValidator.java | 2 +- .../validator/ExternalIDValidator.java | 2 +- .../core/messaging/JmsMessageSender.java | 2 +- .../core/model/EducationQualification.java | 10 ++--- .../core/model/EducationQualifications.java | 10 ++--- .../org/orcid/core/model/EmailDomain.java | 12 +++--- .../org/orcid/core/model/EmailDomains.java | 10 ++--- .../java/org/orcid/core/model/Employment.java | 10 ++--- .../org/orcid/core/model/Employments.java | 10 ++--- .../orcid/core/model/ExternalIdentifier.java | 10 ++--- .../orcid/core/model/ExternalIdentifiers.java | 10 ++--- .../java/org/orcid/core/model/Fundings.java | 2 +- .../java/org/orcid/core/model/ItemsCount.java | 8 ++-- .../org/orcid/core/model/PeerReviews.java | 10 ++--- .../core/model/ProfessionalActivities.java | 10 ++--- .../core/model/ProfessionalActivity.java | 10 ++--- .../org/orcid/core/model/RecordSummary.java | 14 +++---- .../orcid/core/model/ResearchResources.java | 2 +- .../main/java/org/orcid/core/model/Works.java | 2 +- .../org/orcid/core/model/package-info.java | 10 ++--- .../java/org/orcid/core/oauth/OAuthError.java | 2 +- .../org/orcid/core/oauth/OAuthErrorUtils.java | 2 +- .../core/oauth/OrcidUserAuthentication.java | 2 +- .../AuthorizationServerUtil.java | 6 +-- .../orcid/core/orgs/grouping/OrgGrouping.java | 2 +- .../profileEvent/ProfileEventManager.java | 2 +- .../security/OrcidUserDetailsServiceImpl.java | 2 +- .../orcid/core/solr/OrcidSolrOrgsClient.java | 2 +- .../core/solr/OrcidSolrProfileClient.java | 2 +- .../org/orcid/core/solr/SolrBeanFactory.java | 2 +- .../stats/impl/StatisticsManagerImpl.java | 2 +- .../core/togglz/OrcidTogglzConfiguration.java | 2 +- .../core/utils/FunderIdentifierType.java | 6 +-- .../utils/OrcidEhCacheManagerFactoryBean.java | 2 +- .../orcid/core/utils/OrcidMessageUtil.java | 2 +- .../orcid/core/utils/SourceEntityUtils.java | 2 +- .../orcid/core/utils/VerifyEmailUtils.java | 2 +- .../core/utils/cache/redis/RedisClient.java | 4 +- .../identifiers/PIDNormalizationService.java | 4 +- .../v3/identifiers/PIDResolverService.java | 4 +- .../identifiers/finders/CrossrefFinder.java | 2 +- .../identifiers/finders/DataciteFinder.java | 2 +- .../normalizers/CaseSensitiveNormalizer.java | 4 +- .../identifiers/resolvers/ArXivResolver.java | 4 +- .../v3/identifiers/resolvers/DOIResolver.java | 2 +- .../resolvers/Http200Resolver.java | 4 +- .../resolvers/ISBNOCLCResolver.java | 2 +- .../identifiers/resolvers/PubMedResolver.java | 4 +- .../resolvers/UnresolvableResolver.java | 4 +- .../impl/VersionConverterImplV2_0ToV2_1.java | 2 +- .../orcid/core/web/filters/AcceptFilter.java | 2 +- .../orcid/core/web/filters/CorsFilter.java | 2 +- .../orcid/core/web/filters/CorsFilterWeb.java | 2 +- .../core/web/filters/JsonpCallbackFilter.java | 2 +- .../web/filters/JsonpCallbackFilterWeb.java | 2 +- .../java/org/orcid/pojo/IdentifierType.java | 4 +- .../org/orcid/pojo/WorkGroupExtended.java | 2 +- .../org/orcid/pojo/WorkSummaryExtended.java | 2 +- .../java/org/orcid/pojo/WorksExtended.java | 2 +- .../org/orcid/pojo/grouping/WorkGroup.java | 2 +- .../orcid/pojo/summary/RecordSummaryPojo.java | 2 +- .../orcid/core/SourceInActivitiesTest.java | 2 +- .../adapter/JpaJaxbClientAdapterTest.java | 2 +- .../core/adapter/MockSourceNameCache.java | 2 +- ...SONExternalIdentifiersConverterV3Test.java | 6 +-- ...ingExternalIdentifiersConverterV1Test.java | 2 +- ...ingExternalIdentifiersConverterV2Test.java | 6 +-- ...ingExternalIdentifiersConverterV3Test.java | 6 +-- ...WorkExternalIdentifierConverterV2Test.java | 6 +-- ...WorkExternalIdentifierConverterV3Test.java | 6 +-- ...orkExternalIdentifiersConverterV1Test.java | 2 +- ...orkExternalIdentifiersConverterV2Test.java | 6 +-- ...orkExternalIdentifiersConverterV3Test.java | 8 ++-- .../v2/latest/JpaJaxbAddressAdapterTest.java | 8 ++-- .../latest/JpaJaxbEducationAdapterTest.java | 8 ++-- .../v2/latest/JpaJaxbEmailAdapterTest.java | 8 ++-- .../latest/JpaJaxbEmploymentAdapterTest.java | 8 ++-- .../JpaJaxbExternalIdentifierAdapterTest.java | 8 ++-- .../v2/latest/JpaJaxbFundingAdapterTest.java | 8 ++-- ...axbInvalidRecordDataChangeAdapterTest.java | 2 +- .../v2/latest/JpaJaxbKeywordAdapterTest.java | 8 ++-- .../v2/latest/JpaJaxbNameAdapterTest.java | 4 +- .../JpaJaxbNotificationAdapterTest.java | 2 +- .../latest/JpaJaxbOtherNameAdapterTest.java | 8 ++-- .../latest/JpaJaxbPeerReviewAdapterTest.java | 8 ++-- .../JpaJaxbResearcherUrlAdapterTest.java | 8 ++-- .../v2/latest/JpaJaxbWorkAdapterTest.java | 8 ++-- .../adapter/v3/JpaJaxbAddressAdapterTest.java | 8 ++-- .../adapter/v3/JpaJaxbClientAdapterTest.java | 2 +- .../v3/JpaJaxbDistinctionAdapterTest.java | 8 ++-- .../v3/JpaJaxbEducationAdapterTest.java | 8 ++-- .../adapter/v3/JpaJaxbEmailAdapterTest.java | 8 ++-- .../v3/JpaJaxbEmploymentAdapterTest.java | 10 ++--- .../JpaJaxbExternalIdentifierAdapterTest.java | 8 ++-- .../adapter/v3/JpaJaxbFundingAdapterTest.java | 8 ++-- .../v3/JpaJaxbInvitedPositionAdapterTest.java | 8 ++-- .../adapter/v3/JpaJaxbKeywordAdapterTest.java | 8 ++-- .../v3/JpaJaxbMembershipAdapterTest.java | 8 ++-- .../adapter/v3/JpaJaxbNameAdapterTest.java | 4 +- .../v3/JpaJaxbNotificationAdapterTest.java | 2 +- .../v3/JpaJaxbOtherNameAdapterTest.java | 8 ++-- .../v3/JpaJaxbPeerReviewAdapterTest.java | 8 ++-- .../v3/JpaJaxbQualificationAdapterTest.java | 8 ++-- .../JpaJaxbResearchResourceAdapterTest.java | 8 ++-- .../v3/JpaJaxbResearcherUrlAdapterTest.java | 8 ++-- .../adapter/v3/JpaJaxbServiceAdapterTest.java | 8 ++-- .../adapter/v3/JpaJaxbWorkAdapterTest.java | 8 ++-- .../common/manager/SummaryManagerTest.java | 2 +- .../manager/ActivitiesSummaryManagerTest.java | 2 +- .../core/manager/AddressManagerTest.java | 2 +- .../core/manager/AffiliationsManagerTest.java | 2 +- .../manager/AppIdGenerationManagerTest.java | 2 +- .../core/manager/BiographyManagerTest.java | 2 +- .../manager/ClientManagerReadOnlyTest.java | 2 +- .../ExternalIdentifierManagerTest.java | 2 +- .../manager/GroupIdRecordManagerTest.java | 2 +- .../manager/IdentifierTypeManagerTest.java | 2 +- .../InstitutionalSignInManagerTest.java | 2 +- .../core/manager/NotificationManagerTest.java | 4 +- .../manager/OrcidGenerationManagerTest.java | 2 +- .../manager/OrcidSearchManagerImplTest.java | 2 +- .../manager/OrcidSecurityManagerTest.java | 2 +- .../manager/OrcidSecurityManagerTestBase.java | 2 +- .../manager/OrgDisambiguatedManagerTest.java | 2 +- .../orcid/core/manager/OrgManagerTest.java | 2 +- .../core/manager/OtherNameManagerTest.java | 2 +- .../core/manager/PeerReviewManagerTest.java | 2 +- .../manager/PersonDetailsManagerTest.java | 2 +- .../manager/PersonalDetailsManagerTest.java | 2 +- .../manager/ProfileFundingManagerTest.java | 2 +- .../manager/ProfileKeywordManagerTest.java | 2 +- .../RecordCorrectionsManagerReadOnlyTest.java | 2 +- .../orcid/core/manager/RecordManagerTest.java | 2 +- .../core/manager/RecordNameManagerTest.java | 2 +- .../manager/ResearcherUrlManagerTest.java | 2 +- .../manager/SourceNameCacheManagerTest.java | 2 +- .../core/manager/TemplateManagerTest.java | 2 +- .../orcid/core/manager/WorkManagerTest.java | 2 +- .../core/manager/impl/BibtexManagerTest.java | 2 +- .../manager/impl/OrcidUrlManagerTest.java | 2 +- .../PasswordGenerationManagerImplTest.java | 2 +- .../impl/ProfileEntityManagerImplTest.java | 2 +- .../impl/RegistrationManagerImplTest.java | 2 +- .../v3/ActivitiesSummaryManagerTest.java | 2 +- .../core/manager/v3/AddressManagerTest.java | 2 +- .../manager/v3/AffiliationsManagerTest.java | 2 +- .../core/manager/v3/BiographyManagerTest.java | 2 +- .../manager/v3/ClientManagerReadOnlyTest.java | 2 +- .../core/manager/v3/ClientManagerTest.java | 4 +- .../manager/v3/EmailManagerReadOnlyTest.java | 2 +- .../core/manager/v3/EmailManagerTest.java | 4 +- .../v3/ExternalIdentifierManagerTest.java | 2 +- .../manager/v3/FindMyStuffManagerTest.java | 2 +- .../v3/GivenPermissionToManagerTest.java | 2 +- .../manager/v3/GroupIdRecordManagerTest.java | 2 +- .../core/manager/v3/MembersManagerTest.java | 2 +- .../manager/v3/NotificationManagerTest.java | 4 +- ...ficationManager_autoArchiveOffsetTest.java | 2 +- ...ificationManager_autoDeleteOffsetTest.java | 2 +- .../manager/v3/OrcidSearchManagerTest.java | 2 +- .../manager/v3/OrcidSecurityManagerTest.java | 2 +- .../v3/OrcidSecurityManagerTestBase.java | 2 +- .../orcid/core/manager/v3/OrgManagerTest.java | 2 +- .../core/manager/v3/OtherNameManagerTest.java | 2 +- .../manager/v3/PeerReviewManagerTest.java | 2 +- .../manager/v3/PersonDetailsManagerTest.java | 2 +- .../v3/PersonalDetailsManagerTest.java | 2 +- .../manager/v3/ProfileFundingManagerTest.java | 2 +- .../manager/v3/ProfileKeywordManagerTest.java | 2 +- .../core/manager/v3/RecordManagerTest.java | 2 +- .../manager/v3/RecordNameManagerV3Test.java | 2 +- .../v3/ResearchResourceManagerTest.java | 2 +- .../manager/v3/ResearcherUrlManagerTest.java | 2 +- .../core/manager/v3/SpamManagerTest.java | 2 +- .../core/manager/v3/WorkManagerTest.java | 2 +- .../manager/v3/impl/BibtexManagerTest.java | 2 +- .../v3/impl/OrcidSearchManagerImplTest.java | 2 +- .../v3/impl/ProfileEntityManagerImplTest.java | 2 +- .../v3/validator/ActivityValidatorTest.java | 2 +- .../v3/validator/ExternalIDValidatorTest.java | 2 +- .../validator/ActivityValidatorTest.java | 2 +- .../validator/ExternalIDValidatorTest.java | 2 +- .../model/RecordSummaryMarshallingTest.java | 6 +-- .../orcid/core/oauth/OAuthErrorUtilsTest.java | 2 +- .../service/ClientDetailsManagerTest.java | 2 +- .../core/solr/OrcidSolrOrgsClientTest.java | 2 +- .../core/solr/OrcidSolrProfileClientTest.java | 2 +- .../orcid/core/utils/ArXivResolverTest.java | 2 +- .../orcid/core/utils/PubMedResolverTest.java | 2 +- .../PIDNormalizationServiceTest.java | 2 +- .../identifiers/PIDResolverServiceTest.java | 2 +- .../finders/CrossrefFinderTest.java | 2 +- .../finders/DataciteFinderTest.java | 2 +- .../web/filters/CrossDomainWebMangerTest.java | 2 +- .../orcid/record_2_0/ConvertV2ToV2_1Test.java | 8 ++-- .../server/InternalApiServiceImplBase.java | 14 +++---- .../InternalApiServiceDelegator.java | 2 +- .../impl/InternalApiServiceDelegatorImpl.java | 4 +- .../org/orcid/internal/util/ClientInfo.java | 2 +- .../orcid/internal/util/EmailResponse.java | 2 +- .../internal/util/LastModifiedResponse.java | 2 +- .../org/orcid/internal/util/MemberInfo.java | 2 +- .../InternalApiServiceDelegatorTest.java | 4 +- orcid-message-listener/pom.xml | 36 +++++++++------- .../orcid/cron/ResendSolrFailedMessages.java | 4 +- .../orcid/cron/ResendV2FailedMessages.java | 4 +- .../orcid/cron/ResendV3FailedMessages.java | 4 +- .../java/org/orcid/listener/BaseListener.java | 6 +-- .../orcid/listener/OrgIndexerListener.java | 6 +-- .../orcid/listener/http/OrcidAPIClient.java | 2 +- .../listener/orcid/Orcid20ManagerImpl.java | 4 +- .../listener/orcid/Orcid30ManagerImpl.java | 4 +- .../java/org/orcid/listener/s3/S3Manager.java | 6 +-- .../listener/s3/S3MessageProcessorAPIV2.java | 4 +- .../listener/s3/S3MessageProcessorAPIV3.java | 4 +- .../orcid/listener/s3/S3MessagingService.java | 2 +- .../orcid/listener/s3/S3V2RecordConsumer.java | 2 +- .../orcid/listener/s3/S3V3RecordConsumer.java | 2 +- .../solr/OrcidRecordToSolrDocument.java | 4 +- .../orcid/listener/solr/SolrBeanFactory.java | 2 +- .../orcid/listener/solr/SolrIndexUpdater.java | 2 +- .../listener/solr/SolrMessageProcessor.java | 4 +- .../solr/SolrOrgsMessageProcessor.java | 6 +-- .../orcid/listener/clients/S3ManagerTest.java | 4 +- .../common/S3MessageProcessorAPIV2Test.java | 4 +- .../common/S3MessageProcessorAPIV3Test.java | 4 +- .../OrcidRecordToSolrDocumentTest.java | 6 +-- .../dao/Api20RecordStatusDaoTest.java | 2 +- .../dao/Api30RecordStatusDaoTest.java | 2 +- .../listener/s3/S3MessagingServiceTest.java | 2 +- orcid-persistence/pom.xml | 7 ++-- .../dao/impl/EmailScheduleDaoImpl.java | 2 +- .../persistence/dao/impl/EventDaoImpl.java | 2 +- .../dao/impl/EventStatsDaoImpl.java | 2 +- .../dao/impl/FindMyStuffHistoryDaoImpl.java | 2 +- .../persistence/dao/impl/GenericDaoImpl.java | 2 +- .../dao/impl/IdentityProviderDaoImpl.java | 2 +- .../impl/InvalidRecordDataChangeDaoImpl.java | 2 +- .../MemberChosenOrgDisambiguatedDaoImpl.java | 4 +- .../persistence/dao/impl/MiscDaoImpl.java | 2 +- .../impl/OrgAffiliationRelationDaoImpl.java | 2 +- .../impl/ValidatedPublicProfileDaoImpl.java | 2 +- .../jpa/entities/package-info.java | 8 +--- .../type/EncryptedStringTypeContributor.java | 41 +++++++++++++++++++ .../org.hibernate.boot.model.TypeContributor | 1 + .../resources/orcid-persistence-context.xml | 4 +- .../orcid/persistence/dao/AddressDaoTest.java | 2 +- .../persistence/dao/BackupCodesDaoTest.java | 2 +- .../persistence/dao/BiographyDaoTest.java | 2 +- .../persistence/dao/ClientDetailsDaoTest.java | 2 +- .../persistence/dao/ClientSecretDaoTest.java | 2 +- .../orcid/persistence/dao/EmailDaoTest.java | 2 +- .../dao/EmailFrequencyDaoTest.java | 2 +- .../orcid/persistence/dao/EventDaoTest.java | 2 +- .../persistence/dao/EventStatsDaoTest.java | 2 +- .../dao/ExternalIdentifierDaoTest.java | 2 +- .../persistence/dao/FindMyStuffDaoTest.java | 2 +- .../dao/IdentifierTypeDaoTest.java | 2 +- .../dao/InvalidRecordDataChangeDaoTest.java | 2 +- .../persistence/dao/NotificationDaoTest.java | 2 +- .../dao/NotificationDao_NoDBPrefillTest.java | 2 +- ...Oauth2AuthoriziationCodeDetailDaoTest.java | 2 +- .../dao/OrcidOauth2TokenDetailDaoTest.java | 2 +- .../dao/OrgAffiliationRelationDaoTest.java | 2 +- .../dao/OrgDisambiguatedDaoTest.java | 4 +- .../persistence/dao/OrgImportLogDaoTest.java | 2 +- .../persistence/dao/OtherNameDaoTest.java | 2 +- .../persistence/dao/PeerReviewDaoTest.java | 2 +- .../orcid/persistence/dao/ProfileDaoTest.java | 2 +- .../dao/ProfileFundingDaoTest.java | 2 +- .../dao/ProfileHistoryEventDaoTest.java | 2 +- .../dao/ProfileKeywordDaoTest.java | 2 +- .../persistence/dao/RecordNameDaoTest.java | 2 +- .../dao/ResearchResourceDaoTest.java | 4 +- .../persistence/dao/ResearcherUrlDaoTest.java | 2 +- .../orcid/persistence/dao/SpamDaoTest.java | 4 +- .../orcid/persistence/dao/WorkDaoTest.java | 2 +- .../api/common/swagger/SwaggerUIBuilder.java | 2 +- .../orcid/api/filters/AnalyticsFilter.java | 14 +++---- .../orcid/api/filters/ApiRateLimitFilter.java | 2 +- .../api/filters/PutAuthTokenActionFilter.java | 4 +- .../identifiers/IdentifierApiServiceImpl.java | 12 +++--- .../IdentifierApiServiceDelegator.java | 2 +- .../IdentifierApiServiceDelegatorImpl.java | 6 +-- .../api/lod/ExperimentalRDFResource.java | 10 ++--- .../server/PublicV2ApiServiceImplV2_0.java | 22 +++++----- .../server/PublicV2ApiServiceImplV2_1.java | 22 +++++----- .../PublicV2ApiServiceDelegator.java | 2 +- .../impl/PublicV2ApiServiceDelegatorImpl.java | 8 ++-- ...licV2ApiServiceVersionedDelegatorImpl.java | 4 +- .../impl/PublicAPISecurityManagerV2Impl.java | 2 +- .../server/PublicV3ApiServiceImplV3_0.java | 22 +++++----- .../PublicV3ApiServiceDelegator.java | 2 +- .../impl/PublicV3ApiServiceDelegatorImpl.java | 10 ++--- .../api/swagger/PublicSwaggerResource.java | 8 ++-- .../api/filters/ApiRateLimitFilterTest.java | 2 +- .../IdentifierApiServiceDelegatorTest.java | 6 +-- .../PublicV2ApiServiceDelegatorTest.java | 6 +-- ...licV2ApiServiceVersionedDelegatorTest.java | 4 +- .../PublicAPISecurityManagerV2Test.java | 2 +- .../PublicV3ApiServiceDelegatorTest.java | 6 +-- .../PublicAPISecurityManagerV3Test.java | 2 +- orcid-scheduler-web/pom.xml | 6 +-- .../autospam/AutospamEmailSender.java | 2 +- .../autospam/cli/AutoLockSpamRecords.java | 2 +- .../AuthorizationCodeCleanerCronJobImpl.java | 2 +- .../cli/manager/EmailMessageSenderImpl.java | 2 +- .../manager/impl/TrickleManagerImpl.java | 2 +- .../indexer/impl/OrcidRecordIndexerImpl.java | 2 +- .../jersey/ZenodoRecordsJsonBodyReader.java | 14 +++---- .../scheduler/loader/io/OrgDataClient.java | 4 +- .../manager/impl/IssnLoadManagerImpl.java | 2 +- .../manager/impl/OrgLoadManagerImpl.java | 2 +- .../source/cli/LoadDataForIssnSource.java | 2 +- .../cli/LoadDataForOrganizationSource.java | 2 +- ...ionAsPartOfGroupForDisambiguatedOrgId.java | 2 +- .../cli/RorToRinggoldFundrefCSVMapping.java | 2 +- .../source/fundref/FundrefOrgLoadSource.java | 2 +- .../loader/source/issn/IssnLoadSource.java | 2 +- .../loader/source/ror/RorOrgLoadSource.java | 6 +-- .../mvp/OrcidIntegrationMVPNotifications.java | 2 +- .../report/PapiDailyLimitReport.java | 2 +- .../impl/IdentityProviderLoaderImpl.java | 4 +- .../validation/PublicProfileValidator.java | 10 ++--- .../web/event/impl/EventStatsImpl.java | 2 +- .../cli/manager/EmailMessageSenderTest.java | 2 +- .../crossref/qrschema/_3/ArticleTitle.java | 10 ++--- .../java/org/crossref/qrschema/_3/Author.java | 16 ++++---- .../java/org/crossref/qrschema/_3/Body.java | 10 ++--- .../org/crossref/qrschema/_3/BookCite.java | 12 +++--- .../org/crossref/qrschema/_3/Component.java | 16 ++++---- .../crossref/qrschema/_3/ComponentList.java | 8 ++-- .../crossref/qrschema/_3/ComponentNumber.java | 16 ++++---- .../org/crossref/qrschema/_3/ConfCite.java | 12 +++--- .../org/crossref/qrschema/_3/Contributor.java | 16 ++++---- .../crossref/qrschema/_3/Contributors.java | 10 ++--- .../org/crossref/qrschema/_3/CrmItem.java | 16 ++++---- .../qrschema/_3/CrossrefMetadata.java | 10 ++--- .../crossref/qrschema/_3/CrossrefResult.java | 12 +++--- .../crossref/qrschema/_3/DatabaseCite.java | 12 +++--- .../org/crossref/qrschema/_3/Description.java | 10 ++--- .../qrschema/_3/DissertationCite.java | 12 +++--- .../java/org/crossref/qrschema/_3/Doi.java | 16 ++++---- .../org/crossref/qrschema/_3/DoiRecord.java | 10 ++--- .../crossref/qrschema/_3/EditionNumber.java | 16 ++++---- .../org/crossref/qrschema/_3/FirstPage.java | 16 ++++---- .../java/org/crossref/qrschema/_3/Format.java | 10 ++--- .../org/crossref/qrschema/_3/ForwardLink.java | 12 +++--- .../org/crossref/qrschema/_3/GivenName.java | 10 ++--- .../java/org/crossref/qrschema/_3/Head.java | 10 ++--- .../org/crossref/qrschema/_3/Identifier.java | 16 ++++---- .../crossref/qrschema/_3/InstitutionName.java | 16 ++++---- .../java/org/crossref/qrschema/_3/Isbn.java | 16 ++++---- .../java/org/crossref/qrschema/_3/Issn.java | 16 ++++---- .../java/org/crossref/qrschema/_3/Issue.java | 16 ++++---- .../org/crossref/qrschema/_3/ItemNumber.java | 12 +++--- .../qrschema/_3/JournalAbbreviation.java | 10 ++--- .../org/crossref/qrschema/_3/JournalCite.java | 12 +++--- .../crossref/qrschema/_3/JournalTitle.java | 16 ++++---- .../org/crossref/qrschema/_3/LastPage.java | 16 ++++---- .../crossref/qrschema/_3/ObjectFactory.java | 6 +-- .../crossref/qrschema/_3/Organization.java | 16 ++++---- .../org/crossref/qrschema/_3/PaperTitle.java | 10 ++--- .../qrschema/_3/PostedcontentCite.java | 12 +++--- .../org/crossref/qrschema/_3/PubType.java | 6 +-- .../crossref/qrschema/_3/PublicationType.java | 10 ++--- .../java/org/crossref/qrschema/_3/Query.java | 16 ++++---- .../org/crossref/qrschema/_3/QueryResult.java | 10 ++--- .../org/crossref/qrschema/_3/ReportCite.java | 12 +++--- .../org/crossref/qrschema/_3/SeriesTitle.java | 16 ++++---- .../crossref/qrschema/_3/StandardCite.java | 12 +++--- .../org/crossref/qrschema/_3/Surname.java | 10 ++--- .../java/org/crossref/qrschema/_3/Title.java | 10 ++--- .../java/org/crossref/qrschema/_3/Volume.java | 16 ++++---- .../org/crossref/qrschema/_3/VolumeTitle.java | 16 ++++---- .../java/org/crossref/qrschema/_3/Year.java | 16 ++++---- .../crossref/qrschema/_3/package-info.java | 2 +- .../org/datacite/schema/kernel_4/Box.java | 6 +-- .../schema/kernel_4/ContributorType.java | 6 +-- .../datacite/schema/kernel_4/DateType.java | 6 +-- .../schema/kernel_4/DescriptionType.java | 6 +-- .../schema/kernel_4/FunderIdentifierType.java | 6 +-- .../schema/kernel_4/ObjectFactory.java | 6 +-- .../org/datacite/schema/kernel_4/Point.java | 6 +-- .../kernel_4/RelatedIdentifierType.java | 6 +-- .../schema/kernel_4/RelationType.java | 6 +-- .../datacite/schema/kernel_4/Resource.java | 26 ++++++------ .../schema/kernel_4/ResourceType.java | 6 +-- .../datacite/schema/kernel_4/TitleType.java | 6 +-- .../schema/kernel_4/package-info.java | 2 +- .../utils/alerting/impl/SlackManagerImpl.java | 4 +- .../org/orcid/utils/email/MailGunManager.java | 6 +-- .../utils/jersey/JerseyClientHelper.java | 14 +++---- .../jersey/OrcidJerseyClientHandler.java | 4 +- .../jersey/marshaller/ORCIDMarshaller.java | 6 +-- .../V2ActivitiesSummaryBodyReader.java | 20 ++++----- .../unmarshaller/V2EducationBodyReader.java | 20 ++++----- .../unmarshaller/V2EmploymentBodyReader.java | 20 ++++----- .../unmarshaller/V2FundingBodyReader.java | 20 ++++----- .../unmarshaller/V2OrcidErrorBodyReader.java | 20 ++++----- .../unmarshaller/V2PeerReviewBodyReader.java | 20 ++++----- .../unmarshaller/V2RecordBodyReader.java | 20 ++++----- .../jersey/unmarshaller/V2WorkBodyReader.java | 20 ++++----- .../V3ActivitiesSummaryBodyReader.java | 20 ++++----- .../unmarshaller/V3DistinctionBodyReader.java | 20 ++++----- .../unmarshaller/V3EducationBodyReader.java | 20 ++++----- .../unmarshaller/V3EmploymentBodyReader.java | 20 ++++----- .../unmarshaller/V3FundingBodyReader.java | 20 ++++----- .../V3InvitedPositionBodyReader.java | 20 ++++----- .../unmarshaller/V3MembershipBodyReader.java | 20 ++++----- .../unmarshaller/V3OrcidErrorBodyReader.java | 20 ++++----- .../unmarshaller/V3PeerReviewBodyReader.java | 20 ++++----- .../V3QualificationBodyReader.java | 20 ++++----- .../unmarshaller/V3RecordBodyReader.java | 20 ++++----- .../V3ResearchResourceBodyReader.java | 20 ++++----- .../V3ResearchResourcesBodyReader.java | 20 ++++----- .../unmarshaller/V3ServiceBodyReader.java | 20 ++++----- .../jersey/unmarshaller/V3WorkBodyReader.java | 20 ++++----- .../unmarshaller/W3CDocumentBodyReader.java | 14 +++---- .../utils/panoply/PanoplyRedshiftClient.java | 2 +- orcid-web/pom.xml | 26 ++++++++---- .../frontend/cli/AutoLockSpamRecords.java | 2 +- .../orcid/frontend/cli/SendWelcomeEmails.java | 2 +- .../frontend/email/RecordEmailSender.java | 2 +- .../frontend/oauth2/RevokeController.java | 6 +-- .../salesforce/adapter/SalesForceAdapter.java | 2 +- .../manager/SalesforceManagerImpl.java | 2 +- .../AjaxAuthenticationSuccessHandlerBase.java | 2 +- .../spring/OrcidAccessDeniedHandler.java | 2 +- .../spring/OrcidAuthenticationProvider.java | 2 +- ...olethAjaxAuthenticationSuccessHandler.java | 2 +- ...ocialAjaxAuthenticationSuccessHandler.java | 2 +- .../OrcidRedisHttpSessionConfiguration.java | 2 +- .../web/social/config/SocialSignInUtils.java | 2 +- .../web/controllers/AdminController.java | 6 +-- .../controllers/AffiliationsController.java | 2 +- .../web/controllers/BaseController.java | 4 +- .../controllers/BaseWorkspaceController.java | 2 +- .../web/controllers/CacheClearController.java | 2 +- .../web/controllers/ClaimController.java | 2 +- .../web/controllers/ClientsController.java | 6 +-- .../web/controllers/CsrfController.java | 4 +- .../controllers/DeveloperToolsController.java | 2 +- .../controllers/EmailDomainController.java | 4 +- .../controllers/FindMyStuffController.java | 2 +- .../web/controllers/FundingsController.java | 2 +- .../web/controllers/GetMyDataController.java | 10 ++--- .../web/controllers/HomeController.java | 6 +-- .../web/controllers/LoginController.java | 2 +- .../ManageDelegatorsController.java | 2 +- .../controllers/ManageMembersController.java | 2 +- .../controllers/ManageProfileController.java | 2 +- .../controllers/MembersListController.java | 2 +- .../controllers/NotificationController.java | 2 +- .../OauthGenericCallsController.java | 10 ++--- .../web/controllers/OpenIDController.java | 2 +- .../web/controllers/OrgController.java | 2 +- .../web/controllers/PIDController.java | 2 +- .../controllers/PasswordResetController.java | 4 +- .../controllers/PeerReviewsController.java | 2 +- .../controllers/PublicProfileController.java | 2 +- .../PublicRecordApiController.java | 2 +- .../PublicRecordApiExceptionHandler.java | 4 +- .../controllers/PublicRecordController.java | 2 +- .../RecordCorrectionsController.java | 2 +- .../controllers/RegistrationController.java | 2 +- .../ResearchResourcesController.java | 2 +- .../web/controllers/ShibbolethController.java | 2 +- .../web/controllers/SocialController.java | 2 +- .../web/controllers/SpamController.java | 2 +- .../web/controllers/StatusController.java | 6 +-- .../TwoFactorAuthenticationController.java | 2 +- .../controllers/UnsubscribeController.java | 2 +- .../web/controllers/WorksController.java | 2 +- .../web/controllers/WorkspaceController.java | 2 +- .../web/filter/OrcidSwitchUserFilter.java | 2 +- .../pagination/ResearchResourcePaginator.java | 2 +- .../web/pagination/WorksPaginator.java | 2 +- .../web/util/ThirdPartyLinkManager.java | 2 +- .../frontend/web/util/UtilEndpoints.java | 2 +- .../frontend/email/RecordEmailSenderTest.java | 4 +- .../frontend/oauth2/RevokeControllerTest.java | 2 +- .../AdminControllerLegacyTest.java | 2 +- .../web/controllers/ClaimControllerTest.java | 2 +- .../controllers/ClientsControllerTest.java | 2 +- .../DeveloperToolsControllerTest.java | 2 +- .../controllers/FundingsControllerTest.java | 2 +- .../controllers/GetMyDataControllerTest.java | 6 +-- .../ManageMembersControllerTest.java | 4 +- .../web/controllers/OrgControllerTest.java | 2 +- .../web/controllers/PIDControllerTest.java | 2 +- .../PasswordResetControllerTest.java | 2 +- .../PeerReviewsControllerTest.java | 2 +- .../PublicProfileControllerTest.java | 2 +- .../PublicRecordControllerLegacyTest.java | 2 +- .../PublicRecordControllerTest.java | 2 +- .../RecordCorrectionsControllerTest.java | 2 +- .../RegistrationControllerTest.java | 2 +- .../ResearchResourceControllerTest.java | 2 +- .../controllers/ShibbolethControllerTest.java | 2 +- .../web/controllers/SpamControllerTest.java | 2 +- .../web/controllers/WorksControllerTest.java | 2 +- .../controllers/WorkspaceControllerTest.java | 2 +- .../validate/AbstractConstraintValidator.java | 2 +- .../security/AuthenticationManagerTest.java | 2 +- .../frontend/web/util/BaseControllerTest.java | 2 +- pom.xml | 12 +++--- 786 files changed, 2072 insertions(+), 2004 deletions(-) create mode 100644 orcid-persistence/src/main/java/org/orcid/persistence/jpa/type/EncryptedStringTypeContributor.java create mode 100644 orcid-persistence/src/main/resources/META-INF/services/org.hibernate.boot.model.TypeContributor diff --git a/orcid-activemq/pom.xml b/orcid-activemq/pom.xml index ee85853f572..e462f92359f 100644 --- a/orcid-activemq/pom.xml +++ b/orcid-activemq/pom.xml @@ -50,9 +50,9 @@ 2.3.3 - javax.annotation - javax.annotation-api - 1.3.2 + jakarta.annotation + jakarta.annotation-api + 2.1.1 diff --git a/orcid-activemq/src/test/java/org/orcid/activemq/AppContextActiveMQTest.java b/orcid-activemq/src/test/java/org/orcid/activemq/AppContextActiveMQTest.java index f01652f1932..88d3ca05be0 100644 --- a/orcid-activemq/src/test/java/org/orcid/activemq/AppContextActiveMQTest.java +++ b/orcid-activemq/src/test/java/org/orcid/activemq/AppContextActiveMQTest.java @@ -2,7 +2,7 @@ import static org.junit.Assert.*; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.activemq.xbean.BrokerFactoryBean; import org.junit.Test; diff --git a/orcid-activities-indexer/pom.xml b/orcid-activities-indexer/pom.xml index 019eae9e3b9..beea9072f95 100644 --- a/orcid-activities-indexer/pom.xml +++ b/orcid-activities-indexer/pom.xml @@ -85,23 +85,22 @@ org.postgresql postgresql - - org.hibernate - hibernate-c3p0 - - - org.hibernate - hibernate-entitymanager - compile - - - org.hibernate - hibernate-core - - - org.hibernate.javax.persistence - hibernate-jpa-2.1-api - + + org.hibernate.orm + hibernate-core + + + org.hibernate.orm + hibernate-agroal + + + org.hibernate.orm + hibernate-c3p0 + + + org.hibernate.validator + hibernate-validator + org.orcid diff --git a/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/cron/RetryFailedRecords.java b/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/cron/RetryFailedRecords.java index 82b93328cab..99cc27ea416 100644 --- a/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/cron/RetryFailedRecords.java +++ b/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/cron/RetryFailedRecords.java @@ -6,7 +6,7 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.commons.lang3.StringUtils; import org.orcid.activitiesindexer.persistence.entities.ActivitiesStatusEntity; diff --git a/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/listener/BaseListener.java b/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/listener/BaseListener.java index d55cbd21acd..afc233ad4e6 100644 --- a/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/listener/BaseListener.java +++ b/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/listener/BaseListener.java @@ -19,8 +19,8 @@ import java.util.HashMap; import java.util.Map; -import javax.jms.JMSException; -import javax.jms.Message; +import jakarta.jms.JMSException; +import jakarta.jms.Message; import org.apache.activemq.command.ActiveMQMapMessage; import org.fusesource.hawtbuf.UTF8Buffer; diff --git a/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/listener/ReIndexListener.java b/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/listener/ReIndexListener.java index 5cefced111d..4fd1feaa465 100644 --- a/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/listener/ReIndexListener.java +++ b/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/listener/ReIndexListener.java @@ -20,10 +20,10 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; -import javax.annotation.Resource; -import javax.jms.Message; -import javax.jms.MessageListener; -import javax.xml.bind.JAXBException; +import jakarta.annotation.Resource; +import jakarta.jms.Message; +import jakarta.jms.MessageListener; +import jakarta.xml.bind.JAXBException; import org.orcid.activitiesindexer.s3.S3MessageProcessor; import org.orcid.utils.listener.LastModifiedMessage; diff --git a/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/listener/UpdatedOrcidListener.java b/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/listener/UpdatedOrcidListener.java index 296f4fbbee2..7fcf783e73a 100644 --- a/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/listener/UpdatedOrcidListener.java +++ b/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/listener/UpdatedOrcidListener.java @@ -18,9 +18,9 @@ import java.util.Map; -import javax.annotation.Resource; -import javax.jms.Message; -import javax.jms.MessageListener; +import jakarta.annotation.Resource; +import jakarta.jms.Message; +import jakarta.jms.MessageListener; import org.orcid.utils.listener.LastModifiedMessage; import org.slf4j.Logger; diff --git a/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/listener/UpdatedOrcidWorker.java b/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/listener/UpdatedOrcidWorker.java index d5651cde53f..cbf0d761b96 100644 --- a/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/listener/UpdatedOrcidWorker.java +++ b/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/listener/UpdatedOrcidWorker.java @@ -16,7 +16,7 @@ */ package org.orcid.activitiesindexer.listener; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.activitiesindexer.s3.S3MessageProcessor; import org.orcid.utils.listener.LastModifiedMessage; diff --git a/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/orcid/Orcid20APIClient.java b/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/orcid/Orcid20APIClient.java index f282c977039..d15e959cd34 100644 --- a/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/orcid/Orcid20APIClient.java +++ b/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/orcid/Orcid20APIClient.java @@ -19,8 +19,8 @@ import java.net.URI; import java.net.URISyntaxException; -import javax.annotation.Resource; -import javax.ws.rs.core.MediaType; +import jakarta.annotation.Resource; +import jakarta.ws.rs.core.MediaType; import org.orcid.activitiesindexer.exception.DeprecatedRecordException; import org.orcid.activitiesindexer.exception.LockedRecordException; diff --git a/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/s3/ExceptionHandler.java b/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/s3/ExceptionHandler.java index b50fcac698f..5b85754011e 100644 --- a/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/s3/ExceptionHandler.java +++ b/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/s3/ExceptionHandler.java @@ -18,8 +18,8 @@ import java.io.IOException; -import javax.annotation.Resource; -import javax.xml.bind.JAXBException; +import jakarta.annotation.Resource; +import jakarta.xml.bind.JAXBException; import org.orcid.jaxb.model.error_v2.OrcidError; import org.orcid.jaxb.model.message.OrcidDeprecated; diff --git a/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/s3/S3Manager.java b/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/s3/S3Manager.java index 48167367abd..8545976681c 100644 --- a/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/s3/S3Manager.java +++ b/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/s3/S3Manager.java @@ -22,11 +22,11 @@ import java.util.HashMap; import java.util.Map; -import javax.annotation.Resource; -import javax.ws.rs.core.MediaType; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Marshaller; +import jakarta.annotation.Resource; +import jakarta.ws.rs.core.MediaType; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Marshaller; import org.orcid.activitiesindexer.persistence.util.ActivityType; import org.orcid.jaxb.model.error_v2.OrcidError; diff --git a/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/s3/S3MessageProcessor.java b/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/s3/S3MessageProcessor.java index 37dae7babb7..ba7604f9c55 100644 --- a/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/s3/S3MessageProcessor.java +++ b/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/s3/S3MessageProcessor.java @@ -22,7 +22,7 @@ import java.util.Map; import java.util.function.Consumer; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.activitiesindexer.exception.DeprecatedRecordException; import org.orcid.activitiesindexer.exception.LockedRecordException; diff --git a/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/s3/S3MessagingService.java b/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/s3/S3MessagingService.java index 300c00d1ced..5fd942b3400 100644 --- a/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/s3/S3MessagingService.java +++ b/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/s3/S3MessagingService.java @@ -20,7 +20,7 @@ import java.io.InputStream; import java.util.Date; -import javax.xml.bind.JAXBException; +import jakarta.xml.bind.JAXBException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/orcid-activities-indexer/src/test/java/org/orcid/activitiesindexer/persistence/dao/ActivitiesStatusDaoTest.java b/orcid-activities-indexer/src/test/java/org/orcid/activitiesindexer/persistence/dao/ActivitiesStatusDaoTest.java index e5e6340452d..6131e1bd02e 100644 --- a/orcid-activities-indexer/src/test/java/org/orcid/activitiesindexer/persistence/dao/ActivitiesStatusDaoTest.java +++ b/orcid-activities-indexer/src/test/java/org/orcid/activitiesindexer/persistence/dao/ActivitiesStatusDaoTest.java @@ -24,7 +24,7 @@ import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/orcid-activities-indexer/src/test/java/org/orcid/activitiesindexer/persistence/managers/ActivitiesStatusManagerTest.java b/orcid-activities-indexer/src/test/java/org/orcid/activitiesindexer/persistence/managers/ActivitiesStatusManagerTest.java index 8386a4bb402..3a9853b00ca 100644 --- a/orcid-activities-indexer/src/test/java/org/orcid/activitiesindexer/persistence/managers/ActivitiesStatusManagerTest.java +++ b/orcid-activities-indexer/src/test/java/org/orcid/activitiesindexer/persistence/managers/ActivitiesStatusManagerTest.java @@ -21,7 +21,7 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/orcid-activities-indexer/src/test/java/org/orcid/activitiesindexer/s3/S3UpdaterTest.java b/orcid-activities-indexer/src/test/java/org/orcid/activitiesindexer/s3/S3UpdaterTest.java index 9e144c07497..b08642f8dd4 100644 --- a/orcid-activities-indexer/src/test/java/org/orcid/activitiesindexer/s3/S3UpdaterTest.java +++ b/orcid-activities-indexer/src/test/java/org/orcid/activitiesindexer/s3/S3UpdaterTest.java @@ -18,7 +18,7 @@ import static org.junit.Assert.assertEquals; -import javax.xml.bind.JAXBException; +import jakarta.xml.bind.JAXBException; import org.junit.Before; import org.junit.Test; diff --git a/orcid-api-common/pom.xml b/orcid-api-common/pom.xml index 48cbdbed5dd..5b5af5b7e4d 100644 --- a/orcid-api-common/pom.xml +++ b/orcid-api-common/pom.xml @@ -77,14 +77,14 @@ - javax.ws.rs - javax.ws.rs-api + jakarta.ws.rs + jakarta.ws.rs-api - javax.inject - javax.inject - 1 + jakarta.inject + jakarta.inject-api + 2.0.1 @@ -95,16 +95,28 @@ org.aspectj aspectjweaver - - + - javax.validation - validation-api + jakarta.validation + jakarta.validation-api + 3.0.2 - org.hibernate - hibernate-agroal - + org.hibernate.orm + hibernate-core + + + org.hibernate.orm + hibernate-agroal + + + org.hibernate.orm + hibernate-c3p0 + + + org.hibernate.validator + hibernate-validator + org.apache.jena jena-core diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/OrcidApiCommonEndpoints.java b/orcid-api-common/src/main/java/org/orcid/api/common/OrcidApiCommonEndpoints.java index 441440b7b4a..605498eb83c 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/OrcidApiCommonEndpoints.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/OrcidApiCommonEndpoints.java @@ -3,18 +3,18 @@ import static org.orcid.core.api.OrcidApiConstants.OAUTH_TOKEN; import static org.orcid.core.constants.OrcidOauth2Constants.*; -import javax.annotation.Resource; -import javax.ws.rs.Consumes; -import javax.ws.rs.DefaultValue; -import javax.ws.rs.FormParam; -import javax.ws.rs.HeaderParam; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.UriInfo; +import jakarta.annotation.Resource; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.DefaultValue; +import jakarta.ws.rs.FormParam; +import jakarta.ws.rs.HeaderParam; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.Context; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.UriInfo; import org.apache.commons.lang.StringUtils; import org.orcid.core.oauth.authorizationServer.AuthorizationServerUtil; import org.orcid.core.constants.OrcidOauth2Constants; diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/OrcidApiService.java b/orcid-api-common/src/main/java/org/orcid/api/common/OrcidApiService.java index bdaac12c6c2..272a6d3f0eb 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/OrcidApiService.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/OrcidApiService.java @@ -3,10 +3,10 @@ import static org.orcid.core.api.OrcidApiConstants.CLIENT_PATH; import static org.orcid.core.api.OrcidApiConstants.STATUS_PATH; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.core.MediaType; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.MediaType; /** * @author Declan Newman (declan) Date: 01/03/2012 diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/T2OrcidApiService.java b/orcid-api-common/src/main/java/org/orcid/api/common/T2OrcidApiService.java index 11f9743e757..575b7d81cda 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/T2OrcidApiService.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/T2OrcidApiService.java @@ -13,14 +13,14 @@ import static org.orcid.core.api.OrcidApiConstants.WEBHOOKS_PATH; import static org.orcid.core.api.OrcidApiConstants.WORKS_PATH; -import javax.ws.rs.Consumes; -import javax.ws.rs.DELETE; -import javax.ws.rs.POST; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.core.MediaType; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.DELETE; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.PUT; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.MediaType; import org.orcid.jaxb.model.message.OrcidMessage; diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/analytics/APIEndpointParser.java b/orcid-api-common/src/main/java/org/orcid/api/common/analytics/APIEndpointParser.java index 4d416661fb8..8a8927f7920 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/analytics/APIEndpointParser.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/analytics/APIEndpointParser.java @@ -5,7 +5,7 @@ import org.glassfish.jersey.server.ContainerRequest; -import javax.ws.rs.core.PathSegment; +import jakarta.ws.rs.core.PathSegment; public class APIEndpointParser { diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/analytics/AnalyticsProcess.java b/orcid-api-common/src/main/java/org/orcid/api/common/analytics/AnalyticsProcess.java index 658f0f5426f..70f1f9c4adf 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/analytics/AnalyticsProcess.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/analytics/AnalyticsProcess.java @@ -1,6 +1,6 @@ package org.orcid.api.common.analytics; -import javax.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.HttpHeaders; import org.orcid.api.common.analytics.client.AnalyticsClient; import org.orcid.core.manager.ClientDetailsEntityCacheManager; diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/analytics/client/google/UniversalAnalyticsClient.java b/orcid-api-common/src/main/java/org/orcid/api/common/analytics/client/google/UniversalAnalyticsClient.java index ca682ea3002..3a67e583cca 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/analytics/client/google/UniversalAnalyticsClient.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/analytics/client/google/UniversalAnalyticsClient.java @@ -6,7 +6,7 @@ import java.net.HttpURLConnection; import java.net.URL; -import javax.ws.rs.HttpMethod; +import jakarta.ws.rs.HttpMethod; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/exception/JSONInputValidator.java b/orcid-api-common/src/main/java/org/orcid/api/common/exception/JSONInputValidator.java index 558f0b4818c..fc328274b10 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/exception/JSONInputValidator.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/exception/JSONInputValidator.java @@ -5,9 +5,9 @@ import java.util.Map; import javax.xml.XMLConstants; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.util.JAXBSource; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.util.JAXBSource; import javax.xml.validation.Schema; import javax.xml.validation.SchemaFactory; import javax.xml.validation.Validator; diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/filter/ApiVersionCheckFilter.java b/orcid-api-common/src/main/java/org/orcid/api/common/filter/ApiVersionCheckFilter.java index 0ff3deb3b47..405bede5915 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/filter/ApiVersionCheckFilter.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/filter/ApiVersionCheckFilter.java @@ -4,10 +4,10 @@ import java.util.regex.Pattern; import jakarta.servlet.http.HttpServletRequest; -import javax.ws.rs.container.ContainerRequestContext; -import javax.ws.rs.container.ContainerRequestFilter; -import javax.ws.rs.core.Context; -import javax.ws.rs.ext.Provider; +import jakarta.ws.rs.container.ContainerRequestContext; +import jakarta.ws.rs.container.ContainerRequestFilter; +import jakarta.ws.rs.core.Context; +import jakarta.ws.rs.ext.Provider; import org.orcid.core.exception.OrcidBadRequestException; import org.orcid.core.locale.LocaleManager; diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/filter/ClientIdAttributeFilter.java b/orcid-api-common/src/main/java/org/orcid/api/common/filter/ClientIdAttributeFilter.java index 7272e138eee..2bb18984b3e 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/filter/ClientIdAttributeFilter.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/filter/ClientIdAttributeFilter.java @@ -2,7 +2,7 @@ import java.io.IOException; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.servlet.FilterChain; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/filter/DefaultApiVersionFilter.java b/orcid-api-common/src/main/java/org/orcid/api/common/filter/DefaultApiVersionFilter.java index c4c95b65542..58ffd52d53d 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/filter/DefaultApiVersionFilter.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/filter/DefaultApiVersionFilter.java @@ -7,14 +7,14 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.servlet.FilterChain; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Marshaller; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Marshaller; import org.eclipse.jetty.http.HttpStatus; import org.orcid.core.api.OrcidApiConstants; diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/filter/OboApiVersionCheckFilter.java b/orcid-api-common/src/main/java/org/orcid/api/common/filter/OboApiVersionCheckFilter.java index 51154f91cf6..594336365b2 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/filter/OboApiVersionCheckFilter.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/filter/OboApiVersionCheckFilter.java @@ -2,9 +2,9 @@ import java.util.regex.Matcher; -import javax.ws.rs.container.ContainerRequestContext; -import javax.ws.rs.container.ContainerRequestFilter; -import javax.ws.rs.ext.Provider; +import jakarta.ws.rs.container.ContainerRequestContext; +import jakarta.ws.rs.container.ContainerRequestFilter; +import jakarta.ws.rs.ext.Provider; import org.apache.commons.lang3.StringUtils; import org.orcid.core.exception.OboNotValidForApiVersionException; diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/filter/TokenTargetFilter.java b/orcid-api-common/src/main/java/org/orcid/api/common/filter/TokenTargetFilter.java index 3c0a5c7f558..ffb9feb3dff 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/filter/TokenTargetFilter.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/filter/TokenTargetFilter.java @@ -3,9 +3,9 @@ import java.security.AccessControlException; import java.util.regex.Matcher; -import javax.ws.rs.container.ContainerRequestContext; -import javax.ws.rs.container.ContainerRequestFilter; -import javax.ws.rs.ext.Provider; +import jakarta.ws.rs.container.ContainerRequestContext; +import jakarta.ws.rs.container.ContainerRequestFilter; +import jakarta.ws.rs.ext.Provider; import org.orcid.core.oauth.OrcidBearerTokenAuthentication; import org.orcid.utils.OrcidStringUtils; diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/jaxb/NotificationJsonMessageBodyWriter.java b/orcid-api-common/src/main/java/org/orcid/api/common/jaxb/NotificationJsonMessageBodyWriter.java index b29972cb9e1..f56beefcbaa 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/jaxb/NotificationJsonMessageBodyWriter.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/jaxb/NotificationJsonMessageBodyWriter.java @@ -6,13 +6,13 @@ import java.lang.annotation.Annotation; import java.lang.reflect.Type; -import javax.annotation.Resource; -import javax.ws.rs.Produces; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.ext.MessageBodyWriter; -import javax.ws.rs.ext.Provider; +import jakarta.annotation.Resource; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.ext.MessageBodyWriter; +import jakarta.ws.rs.ext.Provider; import org.orcid.core.api.OrcidApiConstants; import org.orcid.core.locale.LocaleManager; diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/jaxb/OrcidErrorJsonMessageBodyWriter.java b/orcid-api-common/src/main/java/org/orcid/api/common/jaxb/OrcidErrorJsonMessageBodyWriter.java index 09a626110c2..8a856ab8c36 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/jaxb/OrcidErrorJsonMessageBodyWriter.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/jaxb/OrcidErrorJsonMessageBodyWriter.java @@ -6,13 +6,13 @@ import java.lang.annotation.Annotation; import java.lang.reflect.Type; -import javax.annotation.Resource; -import javax.ws.rs.Produces; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.ext.MessageBodyWriter; -import javax.ws.rs.ext.Provider; +import jakarta.annotation.Resource; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.ext.MessageBodyWriter; +import jakarta.ws.rs.ext.Provider; import org.orcid.core.api.OrcidApiConstants; import org.orcid.core.locale.LocaleManager; diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/jaxb/OrcidExceptionMapper.java b/orcid-api-common/src/main/java/org/orcid/api/common/jaxb/OrcidExceptionMapper.java index 2cce15bcbd4..b6e363413f2 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/jaxb/OrcidExceptionMapper.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/jaxb/OrcidExceptionMapper.java @@ -2,15 +2,15 @@ import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.NoResultException; import jakarta.servlet.http.HttpServletRequest; -import javax.ws.rs.*; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; -import javax.ws.rs.ext.ExceptionMapper; -import javax.ws.rs.ext.Provider; +import jakarta.ws.rs.*; +import jakarta.ws.rs.core.Context; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.ext.ExceptionMapper; +import jakarta.ws.rs.ext.Provider; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang3.exception.ExceptionUtils; diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/jaxb/OrcidJacksonJaxbJsonProvider.java b/orcid-api-common/src/main/java/org/orcid/api/common/jaxb/OrcidJacksonJaxbJsonProvider.java index ec3891de2b9..e3e5042ca0a 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/jaxb/OrcidJacksonJaxbJsonProvider.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/jaxb/OrcidJacksonJaxbJsonProvider.java @@ -7,11 +7,11 @@ import java.util.HashMap; import java.util.Map; -import javax.ws.rs.Consumes; -import javax.ws.rs.Produces; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.ext.Provider; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.ext.Provider; import org.orcid.api.common.exception.JSONInputValidator; import org.orcid.api.common.filter.ApiVersionFilter; diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/jaxb/OrcidJacksonJaxbJsonProviderPretty.java b/orcid-api-common/src/main/java/org/orcid/api/common/jaxb/OrcidJacksonJaxbJsonProviderPretty.java index 5489002c56e..2dc77bc59d1 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/jaxb/OrcidJacksonJaxbJsonProviderPretty.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/jaxb/OrcidJacksonJaxbJsonProviderPretty.java @@ -10,11 +10,11 @@ import java.util.HashMap; import java.util.Map; -import javax.ws.rs.Consumes; -import javax.ws.rs.Produces; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.ext.Provider; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.ext.Provider; import org.orcid.api.common.exception.JSONInputValidator; import org.orcid.api.common.filter.ApiVersionFilter; diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/jaxb/OrcidMarshallerContextResolver.java b/orcid-api-common/src/main/java/org/orcid/api/common/jaxb/OrcidMarshallerContextResolver.java index 0830ec0f0f1..afd92c423da 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/jaxb/OrcidMarshallerContextResolver.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/jaxb/OrcidMarshallerContextResolver.java @@ -1,15 +1,15 @@ package org.orcid.api.common.jaxb; -import javax.ws.rs.Consumes; -import javax.ws.rs.Produces; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; -import javax.ws.rs.ext.ContextResolver; -import javax.ws.rs.ext.Provider; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Marshaller; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.ext.ContextResolver; +import jakarta.ws.rs.ext.Provider; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Marshaller; import org.apache.log4j.Logger; import org.orcid.core.api.OrcidApiConstants; diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/jaxb/OrcidMarshallerWrapper.java b/orcid-api-common/src/main/java/org/orcid/api/common/jaxb/OrcidMarshallerWrapper.java index fe65e940e4a..41dae17f318 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/jaxb/OrcidMarshallerWrapper.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/jaxb/OrcidMarshallerWrapper.java @@ -5,13 +5,13 @@ import java.io.UnsupportedEncodingException; import java.io.Writer; -import javax.annotation.Resource; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Marshaller; -import javax.xml.bind.PropertyException; -import javax.xml.bind.ValidationEventHandler; -import javax.xml.bind.annotation.adapters.XmlAdapter; -import javax.xml.bind.attachment.AttachmentMarshaller; +import jakarta.annotation.Resource; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Marshaller; +import jakarta.xml.bind.PropertyException; +import jakarta.xml.bind.ValidationEventHandler; +import jakarta.xml.bind.annotation.adapters.XmlAdapter; +import jakarta.xml.bind.attachment.AttachmentMarshaller; import javax.xml.stream.XMLEventWriter; import javax.xml.stream.XMLStreamWriter; import javax.xml.transform.Result; diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/jaxb/OrcidValidationJaxbContextResolver.java b/orcid-api-common/src/main/java/org/orcid/api/common/jaxb/OrcidValidationJaxbContextResolver.java index 60ec25b7b01..3f4e4d2b240 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/jaxb/OrcidValidationJaxbContextResolver.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/jaxb/OrcidValidationJaxbContextResolver.java @@ -5,23 +5,23 @@ import java.util.Map; import java.util.concurrent.ConcurrentHashMap; -import javax.annotation.Resource; -import javax.ws.rs.Consumes; -import javax.ws.rs.Produces; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.Response.Status; -import javax.ws.rs.ext.ContextResolver; -import javax.ws.rs.ext.Provider; +import jakarta.annotation.Resource; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.Response.Status; +import jakarta.ws.rs.ext.ContextResolver; +import jakarta.ws.rs.ext.Provider; import javax.xml.XMLConstants; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.MarshalException; -import javax.xml.bind.Unmarshaller; -import javax.xml.bind.ValidationEvent; -import javax.xml.bind.ValidationEventHandler; -import javax.xml.bind.util.JAXBSource; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.MarshalException; +import jakarta.xml.bind.Unmarshaller; +import jakarta.xml.bind.ValidationEvent; +import jakarta.xml.bind.ValidationEventHandler; +import jakarta.xml.bind.util.JAXBSource; import javax.xml.transform.Source; import javax.xml.transform.stream.StreamSource; import javax.xml.validation.Schema; diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/provider/client/ClientDetailsUserDetailsService.java b/orcid-api-common/src/main/java/org/orcid/api/common/provider/client/ClientDetailsUserDetailsService.java index 713341c5af3..8abc3a0d4b2 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/provider/client/ClientDetailsUserDetailsService.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/provider/client/ClientDetailsUserDetailsService.java @@ -9,7 +9,7 @@ import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UsernameNotFoundException; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import java.util.List; import java.util.Set; import java.util.stream.Collectors; diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidBearerTokenFilter.java b/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidBearerTokenFilter.java index 93b4debfc24..3e44aab21c2 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidBearerTokenFilter.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidBearerTokenFilter.java @@ -15,7 +15,7 @@ import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.servlet.*; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidMultiSecretAuthenticationProvider.java b/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidMultiSecretAuthenticationProvider.java index c4b5c32a17f..465cdf2960e 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidMultiSecretAuthenticationProvider.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidMultiSecretAuthenticationProvider.java @@ -1,6 +1,6 @@ package org.orcid.api.common.security.oauth; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.manager.EncryptionManager; import org.orcid.core.userDetails.MultiSecretClient; diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/RevokeTokenEndpointFilter.java b/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/RevokeTokenEndpointFilter.java index a8446b9c3b8..e15084080b5 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/RevokeTokenEndpointFilter.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/RevokeTokenEndpointFilter.java @@ -2,7 +2,7 @@ import java.io.IOException; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.servlet.FilterChain; import jakarta.servlet.ServletException; import jakarta.servlet.ServletRequest; diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/util/ApiUtils.java b/orcid-api-common/src/main/java/org/orcid/api/common/util/ApiUtils.java index f857e342472..f4ef762b5b6 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/util/ApiUtils.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/util/ApiUtils.java @@ -3,8 +3,8 @@ import java.net.URI; import java.net.URISyntaxException; -import javax.annotation.Resource; -import javax.ws.rs.core.Response; +import jakarta.annotation.Resource; +import jakarta.ws.rs.core.Response; import org.orcid.api.common.filter.ApiVersionFilter; import org.orcid.core.locale.LocaleManager; diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/util/v3/PublicRecordUtils.java b/orcid-api-common/src/main/java/org/orcid/api/common/util/v3/PublicRecordUtils.java index d65fafc9ee9..98400849c1a 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/util/v3/PublicRecordUtils.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/util/v3/PublicRecordUtils.java @@ -1,6 +1,6 @@ package org.orcid.api.common.util.v3; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.api.publicV3.server.security.PublicAPISecurityManagerV3; import org.orcid.core.manager.v3.OrcidSecurityManager; diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/writer/HtmlMessageBodyWriter.java b/orcid-api-common/src/main/java/org/orcid/api/common/writer/HtmlMessageBodyWriter.java index 72b120a9226..3f7969766b2 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/writer/HtmlMessageBodyWriter.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/writer/HtmlMessageBodyWriter.java @@ -2,18 +2,18 @@ import org.orcid.jaxb.model.message.OrcidMessage; -import javax.ws.rs.Produces; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.ext.MessageBodyWriter; -import javax.ws.rs.ext.Provider; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.ext.MessageBodyWriter; +import jakarta.ws.rs.ext.Provider; import java.io.IOException; import java.io.OutputStream; import java.lang.annotation.Annotation; import java.lang.reflect.Type; -import static javax.ws.rs.core.MediaType.TEXT_HTML; +import static jakarta.ws.rs.core.MediaType.TEXT_HTML; /** * @author Declan Newman (declan) Date: 02/03/2012 @@ -31,7 +31,7 @@ public class HtmlMessageBodyWriter implements MessageBodyWriter { * the type of object to be written, obtained either by * reflection of a resource method return type or via inspection * of the returned instance. - * {@link javax.ws.rs.core.GenericEntity} provides a way to + * {@link jakarta.ws.rs.core.GenericEntity} provides a way to * specify this information at runtime. * @param annotations * an array of the annotations on the resource method that @@ -58,7 +58,7 @@ public boolean isWriteable(Class type, Type genericType, Annotation[] annotat * the type of object to be written, obtained either by * reflection of a resource method return type or by inspection * of the returned instance. - * {@link javax.ws.rs.core.GenericEntity} provides a way to + * {@link jakarta.ws.rs.core.GenericEntity} provides a way to * specify this information at runtime. * @param annotations * an array of the annotations on the resource method that @@ -86,7 +86,7 @@ public long getSize(OrcidMessage message, Class type, Type genericType, Annot * the type of object to be written, obtained either by * reflection of a resource method return type or by inspection * of the returned instance. - * {@link javax.ws.rs.core.GenericEntity} provides a way to + * {@link jakarta.ws.rs.core.GenericEntity} provides a way to * specify this information at runtime. * @param annotations * an array of the annotations on the resource method that @@ -100,7 +100,7 @@ public long getSize(OrcidMessage message, Class type, Type genericType, Annot * implementation should not close the output stream. * @throws java.io.IOException * if an IO error arises - * @throws javax.ws.rs.WebApplicationException + * @throws jakarta.ws.rs.WebApplicationException * if a specific HTTP error response needs to be produced. Only * effective if thrown prior to the response being committed. */ diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/writer/citeproc/CSLItemDataListMBWriter.java b/orcid-api-common/src/main/java/org/orcid/api/common/writer/citeproc/CSLItemDataListMBWriter.java index 5840c97e35b..d1eca4f966d 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/writer/citeproc/CSLItemDataListMBWriter.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/writer/citeproc/CSLItemDataListMBWriter.java @@ -6,12 +6,12 @@ import java.lang.annotation.Annotation; import java.lang.reflect.Type; -import javax.ws.rs.Produces; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.ext.MessageBodyWriter; -import javax.ws.rs.ext.Provider; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.ext.MessageBodyWriter; +import jakarta.ws.rs.ext.Provider; import org.orcid.core.api.OrcidApiConstants; diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/writer/citeproc/CSLItemDataMBWriter.java b/orcid-api-common/src/main/java/org/orcid/api/common/writer/citeproc/CSLItemDataMBWriter.java index fa23414bdf5..b43a18c19c8 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/writer/citeproc/CSLItemDataMBWriter.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/writer/citeproc/CSLItemDataMBWriter.java @@ -5,12 +5,12 @@ import java.lang.annotation.Annotation; import java.lang.reflect.Type; -import javax.ws.rs.Produces; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.ext.MessageBodyWriter; -import javax.ws.rs.ext.Provider; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.ext.MessageBodyWriter; +import jakarta.ws.rs.ext.Provider; import org.orcid.core.api.OrcidApiConstants; diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/writer/rdf/RDFMessageBodyWriterV2.java b/orcid-api-common/src/main/java/org/orcid/api/common/writer/rdf/RDFMessageBodyWriterV2.java index bfa176e8b69..47520076726 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/writer/rdf/RDFMessageBodyWriterV2.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/writer/rdf/RDFMessageBodyWriterV2.java @@ -13,14 +13,14 @@ import java.util.Arrays; import java.util.List; -import javax.ws.rs.Produces; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.core.UriInfo; -import javax.ws.rs.ext.MessageBodyWriter; -import javax.ws.rs.ext.Provider; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.Context; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.core.UriInfo; +import jakarta.ws.rs.ext.MessageBodyWriter; +import jakarta.ws.rs.ext.Provider; import javax.xml.datatype.XMLGregorianCalendar; import org.apache.jena.datatypes.xsd.XSDDatatype; diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/writer/schemaorg/SchemaOrgMBWriterV2.java b/orcid-api-common/src/main/java/org/orcid/api/common/writer/schemaorg/SchemaOrgMBWriterV2.java index 64a73ea1ed8..ee4096481dd 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/writer/schemaorg/SchemaOrgMBWriterV2.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/writer/schemaorg/SchemaOrgMBWriterV2.java @@ -8,13 +8,13 @@ import java.lang.reflect.Type; import java.util.List; -import javax.annotation.Resource; -import javax.ws.rs.Produces; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.ext.MessageBodyWriter; -import javax.ws.rs.ext.Provider; +import jakarta.annotation.Resource; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.ext.MessageBodyWriter; +import jakarta.ws.rs.ext.Provider; import org.apache.commons.lang3.StringUtils; import org.orcid.api.common.writer.schemaorg.SchemaOrgDocument.SchemaOrgAddress; diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/writer/schemaorg/SchemaOrgMBWriterV3.java b/orcid-api-common/src/main/java/org/orcid/api/common/writer/schemaorg/SchemaOrgMBWriterV3.java index dfc99dc2523..3ec5459a27a 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/writer/schemaorg/SchemaOrgMBWriterV3.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/writer/schemaorg/SchemaOrgMBWriterV3.java @@ -9,13 +9,13 @@ import java.util.ArrayList; import java.util.List; -import javax.annotation.Resource; -import javax.ws.rs.Produces; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.ext.MessageBodyWriter; -import javax.ws.rs.ext.Provider; +import jakarta.annotation.Resource; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.ext.MessageBodyWriter; +import jakarta.ws.rs.ext.Provider; import org.apache.commons.lang3.StringUtils; import org.orcid.api.common.writer.schemaorg.SchemaOrgDocument.SchemaOrgAddress; diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/writer/stats/StatisticsTimelineListMBWriter.java b/orcid-api-common/src/main/java/org/orcid/api/common/writer/stats/StatisticsTimelineListMBWriter.java index 003129ee8cc..94e4929afcc 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/writer/stats/StatisticsTimelineListMBWriter.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/writer/stats/StatisticsTimelineListMBWriter.java @@ -8,12 +8,12 @@ import java.text.SimpleDateFormat; import java.util.Date; -import javax.ws.rs.Produces; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.ext.MessageBodyWriter; -import javax.ws.rs.ext.Provider; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.ext.MessageBodyWriter; +import jakarta.ws.rs.ext.Provider; import org.orcid.core.api.OrcidApiConstants; import org.orcid.jaxb.model.statistics.StatisticsTimeline; diff --git a/orcid-api-common/src/main/java/org/orcid/api/publicV3/server/security/impl/PublicAPISecurityManagerV3Impl.java b/orcid-api-common/src/main/java/org/orcid/api/publicV3/server/security/impl/PublicAPISecurityManagerV3Impl.java index 98f78be111a..52245f93082 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/publicV3/server/security/impl/PublicAPISecurityManagerV3Impl.java +++ b/orcid-api-common/src/main/java/org/orcid/api/publicV3/server/security/impl/PublicAPISecurityManagerV3Impl.java @@ -5,7 +5,7 @@ import java.util.Iterator; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.api.publicV3.server.security.PublicAPISecurityManagerV3; import org.orcid.core.exception.OrcidCoreExceptionMapper; diff --git a/orcid-api-common/src/test/java/org/orcid/api/common/analytics/APIEndpointParserTest.java b/orcid-api-common/src/test/java/org/orcid/api/common/analytics/APIEndpointParserTest.java index f3cdcfdad3c..211c4b955aa 100644 --- a/orcid-api-common/src/test/java/org/orcid/api/common/analytics/APIEndpointParserTest.java +++ b/orcid-api-common/src/test/java/org/orcid/api/common/analytics/APIEndpointParserTest.java @@ -10,8 +10,8 @@ import org.mockito.Mock; import org.mockito.Mockito; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.SecurityContext; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.SecurityContext; import org.glassfish.jersey.internal.PropertiesDelegate; import org.glassfish.jersey.server.ContainerRequest; diff --git a/orcid-api-common/src/test/java/org/orcid/api/common/analytics/AnalyticsProcessTest.java b/orcid-api-common/src/test/java/org/orcid/api/common/analytics/AnalyticsProcessTest.java index 92bf38db7d7..4a68502fa66 100644 --- a/orcid-api-common/src/test/java/org/orcid/api/common/analytics/AnalyticsProcessTest.java +++ b/orcid-api-common/src/test/java/org/orcid/api/common/analytics/AnalyticsProcessTest.java @@ -7,10 +7,10 @@ import java.net.URI; import java.security.NoSuchAlgorithmException; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.SecurityContext; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.SecurityContext; import org.glassfish.jersey.internal.PropertiesDelegate; import org.glassfish.jersey.message.internal.OutboundJaxrsResponse; diff --git a/orcid-api-common/src/test/java/org/orcid/api/common/filter/ApiVersionCheckFilterTest.java b/orcid-api-common/src/test/java/org/orcid/api/common/filter/ApiVersionCheckFilterTest.java index e27bfb840ac..d185ed466c9 100644 --- a/orcid-api-common/src/test/java/org/orcid/api/common/filter/ApiVersionCheckFilterTest.java +++ b/orcid-api-common/src/test/java/org/orcid/api/common/filter/ApiVersionCheckFilterTest.java @@ -10,7 +10,7 @@ import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequestWrapper; -import javax.ws.rs.core.SecurityContext; +import jakarta.ws.rs.core.SecurityContext; import org.junit.Before; import org.junit.Test; diff --git a/orcid-api-common/src/test/java/org/orcid/api/common/writer/rdf/RDFWriterTest.java b/orcid-api-common/src/test/java/org/orcid/api/common/writer/rdf/RDFWriterTest.java index 1412a56546f..7b41e3e6769 100644 --- a/orcid-api-common/src/test/java/org/orcid/api/common/writer/rdf/RDFWriterTest.java +++ b/orcid-api-common/src/test/java/org/orcid/api/common/writer/rdf/RDFWriterTest.java @@ -9,8 +9,8 @@ import java.net.URI; import java.util.ArrayList; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.UriInfo; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.UriInfo; import javax.xml.datatype.DatatypeConfigurationException; import javax.xml.datatype.DatatypeFactory; import javax.xml.datatype.XMLGregorianCalendar; diff --git a/orcid-api-web/src/main/java/org/orcid/api/common/swagger/SwaggerUIBuilder.java b/orcid-api-web/src/main/java/org/orcid/api/common/swagger/SwaggerUIBuilder.java index e77dd97d9db..f242d54a9aa 100644 --- a/orcid-api-web/src/main/java/org/orcid/api/common/swagger/SwaggerUIBuilder.java +++ b/orcid-api-web/src/main/java/org/orcid/api/common/swagger/SwaggerUIBuilder.java @@ -5,7 +5,7 @@ import java.util.HashMap; import java.util.Map; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.core.Response; import org.orcid.core.api.OrcidApiConstants; diff --git a/orcid-api-web/src/main/java/org/orcid/api/filters/AnalyticsFilter.java b/orcid-api-web/src/main/java/org/orcid/api/filters/AnalyticsFilter.java index ba1333c62e5..867df82980a 100644 --- a/orcid-api-web/src/main/java/org/orcid/api/filters/AnalyticsFilter.java +++ b/orcid-api-web/src/main/java/org/orcid/api/filters/AnalyticsFilter.java @@ -1,9 +1,9 @@ package org.orcid.api.filters; -import javax.inject.Inject; +import jakarta.inject.Inject; import jakarta.servlet.http.HttpServletRequest; -import javax.ws.rs.core.Context; -import javax.ws.rs.ext.Provider; +import jakarta.ws.rs.core.Context; +import jakarta.ws.rs.ext.Provider; import org.orcid.api.common.analytics.AnalyticsProcess; import org.orcid.api.common.analytics.client.AnalyticsClient; @@ -20,9 +20,9 @@ import org.springframework.stereotype.Component; -import javax.ws.rs.container.ContainerRequestContext; -import javax.ws.rs.container.ContainerResponseFilter; -import javax.ws.rs.container.ContainerResponseContext; +import jakarta.ws.rs.container.ContainerRequestContext; +import jakarta.ws.rs.container.ContainerResponseFilter; +import jakarta.ws.rs.container.ContainerResponseContext; @Provider @Component diff --git a/orcid-api-web/src/main/java/org/orcid/api/member/common/WebhooksService.java b/orcid-api-web/src/main/java/org/orcid/api/member/common/WebhooksService.java index 884dee81f7e..5fa8310563d 100644 --- a/orcid-api-web/src/main/java/org/orcid/api/member/common/WebhooksService.java +++ b/orcid-api-web/src/main/java/org/orcid/api/member/common/WebhooksService.java @@ -6,17 +6,17 @@ import static org.orcid.core.api.OrcidApiConstants.VND_ORCID_XML; import static org.orcid.core.api.OrcidApiConstants.WEBHOOKS_PATH; -import javax.annotation.Resource; -import javax.ws.rs.Consumes; -import javax.ws.rs.DELETE; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.UriInfo; +import jakarta.annotation.Resource; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.DELETE; +import jakarta.ws.rs.PUT; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.Context; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.UriInfo; import org.orcid.api.member.common.delegator.WebhooksServiceDelegator; import org.springframework.stereotype.Component; diff --git a/orcid-api-web/src/main/java/org/orcid/api/member/common/delegator/WebhooksServiceDelegator.java b/orcid-api-web/src/main/java/org/orcid/api/member/common/delegator/WebhooksServiceDelegator.java index 6c7c6ac48b3..c5b081215d2 100644 --- a/orcid-api-web/src/main/java/org/orcid/api/member/common/delegator/WebhooksServiceDelegator.java +++ b/orcid-api-web/src/main/java/org/orcid/api/member/common/delegator/WebhooksServiceDelegator.java @@ -2,7 +2,7 @@ import java.net.URI; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.core.Response; public interface WebhooksServiceDelegator { Response registerWebhook(String orcid, String webhookUri, URI absolutePathUri); diff --git a/orcid-api-web/src/main/java/org/orcid/api/member/common/delegator/impl/WebhooksServiceDelegatorImpl.java b/orcid-api-web/src/main/java/org/orcid/api/member/common/delegator/impl/WebhooksServiceDelegatorImpl.java index 1fb5f6ceba5..eeeeaa014f9 100644 --- a/orcid-api-web/src/main/java/org/orcid/api/member/common/delegator/impl/WebhooksServiceDelegatorImpl.java +++ b/orcid-api-web/src/main/java/org/orcid/api/member/common/delegator/impl/WebhooksServiceDelegatorImpl.java @@ -6,8 +6,8 @@ import java.util.HashMap; import java.util.Map; -import javax.annotation.Resource; -import javax.ws.rs.core.Response; +import jakarta.annotation.Resource; +import jakarta.ws.rs.core.Response; import org.orcid.api.member.common.delegator.WebhooksServiceDelegator; import org.orcid.core.exception.OrcidBadRequestException; diff --git a/orcid-api-web/src/main/java/org/orcid/api/memberV2/server/MemberV2ApiServiceImplV2_0.java b/orcid-api-web/src/main/java/org/orcid/api/memberV2/server/MemberV2ApiServiceImplV2_0.java index 6b57e6a98d0..df81a1b024b 100644 --- a/orcid-api-web/src/main/java/org/orcid/api/memberV2/server/MemberV2ApiServiceImplV2_0.java +++ b/orcid-api-web/src/main/java/org/orcid/api/memberV2/server/MemberV2ApiServiceImplV2_0.java @@ -43,21 +43,21 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; -import javax.ws.rs.Consumes; -import javax.ws.rs.DELETE; -import javax.ws.rs.DefaultValue; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.UriInfo; +import jakarta.annotation.Resource; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.DELETE; +import jakarta.ws.rs.DefaultValue; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.PUT; +import jakarta.ws.rs.Path; +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.UriInfo; import org.orcid.api.common.swagger.SwaggerUIBuilder; import org.orcid.api.member.MemberApiServiceImplHelper; diff --git a/orcid-api-web/src/main/java/org/orcid/api/memberV2/server/MemberV2ApiServiceImplV2_1.java b/orcid-api-web/src/main/java/org/orcid/api/memberV2/server/MemberV2ApiServiceImplV2_1.java index 1d83d1cd57d..dfa6e5343a5 100644 --- a/orcid-api-web/src/main/java/org/orcid/api/memberV2/server/MemberV2ApiServiceImplV2_1.java +++ b/orcid-api-web/src/main/java/org/orcid/api/memberV2/server/MemberV2ApiServiceImplV2_1.java @@ -43,21 +43,21 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; -import javax.ws.rs.Consumes; -import javax.ws.rs.DELETE; -import javax.ws.rs.DefaultValue; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.UriInfo; +import jakarta.annotation.Resource; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.DELETE; +import jakarta.ws.rs.DefaultValue; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.PUT; +import jakarta.ws.rs.Path; +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.UriInfo; import org.orcid.api.common.swagger.SwaggerUIBuilder; import org.orcid.api.member.MemberApiServiceImplHelper; diff --git a/orcid-api-web/src/main/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator.java b/orcid-api-web/src/main/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator.java index bd3382145b7..d870b9c2fcf 100644 --- a/orcid-api-web/src/main/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator.java +++ b/orcid-api-web/src/main/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator.java @@ -3,7 +3,7 @@ import java.util.List; import java.util.Map; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.core.Response; import org.apache.hc.core5.http.ParseException; diff --git a/orcid-api-web/src/main/java/org/orcid/api/memberV2/server/delegator/impl/MemberV2ApiServiceDelegatorImpl.java b/orcid-api-web/src/main/java/org/orcid/api/memberV2/server/delegator/impl/MemberV2ApiServiceDelegatorImpl.java index ada91ef43e6..3fdd502dfa1 100644 --- a/orcid-api-web/src/main/java/org/orcid/api/memberV2/server/delegator/impl/MemberV2ApiServiceDelegatorImpl.java +++ b/orcid-api-web/src/main/java/org/orcid/api/memberV2/server/delegator/impl/MemberV2ApiServiceDelegatorImpl.java @@ -11,8 +11,8 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; -import javax.annotation.Resource; -import javax.ws.rs.core.Response; +import jakarta.annotation.Resource; +import jakarta.ws.rs.core.Response; import org.orcid.api.common.util.ActivityUtils; import org.orcid.api.common.util.ApiUtils; diff --git a/orcid-api-web/src/main/java/org/orcid/api/memberV2/server/delegator/impl/MemberV2ApiServiceVersionedDelegatorImpl.java b/orcid-api-web/src/main/java/org/orcid/api/memberV2/server/delegator/impl/MemberV2ApiServiceVersionedDelegatorImpl.java index cef1b05e4ed..6b09d39a77a 100644 --- a/orcid-api-web/src/main/java/org/orcid/api/memberV2/server/delegator/impl/MemberV2ApiServiceVersionedDelegatorImpl.java +++ b/orcid-api-web/src/main/java/org/orcid/api/memberV2/server/delegator/impl/MemberV2ApiServiceVersionedDelegatorImpl.java @@ -4,9 +4,9 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.Response; +import jakarta.annotation.Resource; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.Response; import org.orcid.api.common.jaxb.OrcidValidationJaxbContextResolver; import org.orcid.api.memberV2.server.delegator.MemberV2ApiServiceDelegator; diff --git a/orcid-api-web/src/main/java/org/orcid/api/memberV3/server/MemberV3ApiServiceImplV3_0.java b/orcid-api-web/src/main/java/org/orcid/api/memberV3/server/MemberV3ApiServiceImplV3_0.java index 18580133aba..9154e67c50b 100644 --- a/orcid-api-web/src/main/java/org/orcid/api/memberV3/server/MemberV3ApiServiceImplV3_0.java +++ b/orcid-api-web/src/main/java/org/orcid/api/memberV3/server/MemberV3ApiServiceImplV3_0.java @@ -66,22 +66,22 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; -import javax.ws.rs.Consumes; -import javax.ws.rs.DELETE; -import javax.ws.rs.DefaultValue; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.UriInfo; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.DELETE; +import jakarta.ws.rs.DefaultValue; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.PUT; +import jakarta.ws.rs.Path; +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.UriInfo; import org.orcid.api.common.swagger.SwaggerUIBuilder; import org.orcid.api.member.MemberApiServiceImplHelper; diff --git a/orcid-api-web/src/main/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator.java b/orcid-api-web/src/main/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator.java index df5dc1a2d6a..b86ae5cbbb6 100644 --- a/orcid-api-web/src/main/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator.java +++ b/orcid-api-web/src/main/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator.java @@ -3,7 +3,7 @@ import java.util.List; import java.util.Map; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.core.Response; import org.apache.hc.core5.http.ParseException; diff --git a/orcid-api-web/src/main/java/org/orcid/api/memberV3/server/delegator/impl/MemberV3ApiServiceDelegatorImpl.java b/orcid-api-web/src/main/java/org/orcid/api/memberV3/server/delegator/impl/MemberV3ApiServiceDelegatorImpl.java index 39ddab4b169..96a11a68ae2 100644 --- a/orcid-api-web/src/main/java/org/orcid/api/memberV3/server/delegator/impl/MemberV3ApiServiceDelegatorImpl.java +++ b/orcid-api-web/src/main/java/org/orcid/api/memberV3/server/delegator/impl/MemberV3ApiServiceDelegatorImpl.java @@ -37,9 +37,9 @@ import org.springframework.context.MessageSource; import org.springframework.stereotype.Component; -import javax.annotation.Resource; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.Response.Status; +import jakarta.annotation.Resource; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.Response.Status; import java.util.*; import org.apache.hc.core5.http.ParseException; diff --git a/orcid-api-web/src/main/java/org/orcid/api/notificationsV2/server/delegator/NotificationsApiServiceDelegator.java b/orcid-api-web/src/main/java/org/orcid/api/notificationsV2/server/delegator/NotificationsApiServiceDelegator.java index be48f1fc71d..d23ff5e31cd 100644 --- a/orcid-api-web/src/main/java/org/orcid/api/notificationsV2/server/delegator/NotificationsApiServiceDelegator.java +++ b/orcid-api-web/src/main/java/org/orcid/api/notificationsV2/server/delegator/NotificationsApiServiceDelegator.java @@ -1,7 +1,7 @@ package org.orcid.api.notificationsV2.server.delegator; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.UriInfo; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.UriInfo; import org.orcid.core.exception.OrcidNotificationAlreadyReadException; diff --git a/orcid-api-web/src/main/java/org/orcid/api/notificationsV2/server/delegator/impl/NotificationsApiServiceDelegatorImpl.java b/orcid-api-web/src/main/java/org/orcid/api/notificationsV2/server/delegator/impl/NotificationsApiServiceDelegatorImpl.java index a0ce3f0dd07..65d2bf5bc35 100644 --- a/orcid-api-web/src/main/java/org/orcid/api/notificationsV2/server/delegator/impl/NotificationsApiServiceDelegatorImpl.java +++ b/orcid-api-web/src/main/java/org/orcid/api/notificationsV2/server/delegator/impl/NotificationsApiServiceDelegatorImpl.java @@ -9,9 +9,9 @@ import java.util.HashMap; import java.util.Map; -import javax.annotation.Resource; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.UriInfo; +import jakarta.annotation.Resource; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.UriInfo; import javax.xml.datatype.XMLGregorianCalendar; import org.orcid.api.notificationsV2.server.delegator.NotificationsApiServiceDelegator; diff --git a/orcid-api-web/src/main/java/org/orcid/api/notificationsV2/server/delegator/impl/NotificationsApiServiceVersionedDelegatorImpl.java b/orcid-api-web/src/main/java/org/orcid/api/notificationsV2/server/delegator/impl/NotificationsApiServiceVersionedDelegatorImpl.java index 406b2c220dc..edbb831f7ed 100644 --- a/orcid-api-web/src/main/java/org/orcid/api/notificationsV2/server/delegator/impl/NotificationsApiServiceVersionedDelegatorImpl.java +++ b/orcid-api-web/src/main/java/org/orcid/api/notificationsV2/server/delegator/impl/NotificationsApiServiceVersionedDelegatorImpl.java @@ -2,9 +2,9 @@ import static org.orcid.core.api.OrcidApiConstants.STATUS_OK_MESSAGE; -import javax.annotation.Resource; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.UriInfo; +import jakarta.annotation.Resource; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.UriInfo; import org.orcid.api.memberV2.server.delegator.MemberV2ApiServiceDelegator; import org.orcid.api.notificationsV2.server.delegator.NotificationsApiServiceDelegator; diff --git a/orcid-api-web/src/main/java/org/orcid/api/notificationsV3/server/delegator/NotificationsApiServiceDelegator.java b/orcid-api-web/src/main/java/org/orcid/api/notificationsV3/server/delegator/NotificationsApiServiceDelegator.java index 77c0c0e97c8..b4a602bf2bf 100644 --- a/orcid-api-web/src/main/java/org/orcid/api/notificationsV3/server/delegator/NotificationsApiServiceDelegator.java +++ b/orcid-api-web/src/main/java/org/orcid/api/notificationsV3/server/delegator/NotificationsApiServiceDelegator.java @@ -1,7 +1,7 @@ package org.orcid.api.notificationsV3.server.delegator; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.UriInfo; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.UriInfo; import org.orcid.core.exception.OrcidNotificationAlreadyReadException; diff --git a/orcid-api-web/src/main/java/org/orcid/api/notificationsV3/server/delegator/impl/NotificationsApiServiceDelegatorImpl.java b/orcid-api-web/src/main/java/org/orcid/api/notificationsV3/server/delegator/impl/NotificationsApiServiceDelegatorImpl.java index b946ff05bf0..a263438befd 100644 --- a/orcid-api-web/src/main/java/org/orcid/api/notificationsV3/server/delegator/impl/NotificationsApiServiceDelegatorImpl.java +++ b/orcid-api-web/src/main/java/org/orcid/api/notificationsV3/server/delegator/impl/NotificationsApiServiceDelegatorImpl.java @@ -23,9 +23,9 @@ import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Component; -import javax.annotation.Resource; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.UriInfo; +import jakarta.annotation.Resource; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.UriInfo; import java.net.URI; import java.net.URISyntaxException; import java.security.AccessControlException; diff --git a/orcid-api-web/src/main/java/org/orcid/api/swagger/MemberSwaggerResource.java b/orcid-api-web/src/main/java/org/orcid/api/swagger/MemberSwaggerResource.java index 863ab40b9ab..c796ee9ce9f 100644 --- a/orcid-api-web/src/main/java/org/orcid/api/swagger/MemberSwaggerResource.java +++ b/orcid-api-web/src/main/java/org/orcid/api/swagger/MemberSwaggerResource.java @@ -5,10 +5,10 @@ import io.swagger.models.auth.OAuth2Definition; import io.swagger.util.Json;*/ -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.core.Application; -import javax.ws.rs.core.MediaType; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.Application; +import jakarta.ws.rs.core.MediaType; import org.orcid.core.api.OrcidApiConstants; import org.orcid.jaxb.model.message.ScopePathType; diff --git a/orcid-api-web/src/test/java/org/orcid/api/member/server/validator/JSONInputValidatorTest.java b/orcid-api-web/src/test/java/org/orcid/api/member/server/validator/JSONInputValidatorTest.java index d1dafca7934..4285fb6cef3 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/member/server/validator/JSONInputValidatorTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/member/server/validator/JSONInputValidatorTest.java @@ -2,7 +2,7 @@ import java.io.IOException; -import javax.xml.bind.JAXBException; +import jakarta.xml.bind.JAXBException; import org.junit.Test; import org.orcid.api.common.exception.JSONInputValidator; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ActivitiesSummaryTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ActivitiesSummaryTest.java index 9143d0ea9a8..3b188cc168b 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ActivitiesSummaryTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ActivitiesSummaryTest.java @@ -10,8 +10,8 @@ import java.util.Collections; import java.util.List; -import javax.annotation.Resource; -import javax.ws.rs.core.Response; +import jakarta.annotation.Resource; +import jakarta.ws.rs.core.Response; import org.junit.AfterClass; import org.junit.BeforeClass; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_AddressesTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_AddressesTest.java index 3aeab6a2169..fa8119565b5 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_AddressesTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_AddressesTest.java @@ -13,9 +13,9 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.NoResultException; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.core.Response; import org.junit.AfterClass; import org.junit.BeforeClass; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_BiogrphyTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_BiogrphyTest.java index 2dadf092f2d..b3e57a4fcb7 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_BiogrphyTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_BiogrphyTest.java @@ -8,8 +8,8 @@ import java.util.Collections; import java.util.List; -import javax.annotation.Resource; -import javax.ws.rs.core.Response; +import jakarta.annotation.Resource; +import jakarta.ws.rs.core.Response; import org.junit.AfterClass; import org.junit.BeforeClass; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_EducationsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_EducationsTest.java index 34408cb7682..e9b18cec5e0 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_EducationsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_EducationsTest.java @@ -13,9 +13,9 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.NoResultException; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.core.Response; import org.junit.After; import org.junit.AfterClass; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_EmailsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_EmailsTest.java index 3c2160ca378..f1d3309cb12 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_EmailsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_EmailsTest.java @@ -5,8 +5,8 @@ import java.util.Collections; import java.util.List; -import javax.annotation.Resource; -import javax.ws.rs.core.Response; +import jakarta.annotation.Resource; +import jakarta.ws.rs.core.Response; import org.junit.AfterClass; import org.junit.BeforeClass; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_EmploymentsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_EmploymentsTest.java index 24bc173e79e..4ad4701e881 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_EmploymentsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_EmploymentsTest.java @@ -16,9 +16,9 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.NoResultException; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.core.Response; import org.junit.After; import org.junit.AfterClass; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ExternalIdentifiersTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ExternalIdentifiersTest.java index c42f600b660..7e4c706c5a2 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ExternalIdentifiersTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ExternalIdentifiersTest.java @@ -12,9 +12,9 @@ import java.util.Collections; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.NoResultException; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.core.Response; import org.junit.AfterClass; import org.junit.BeforeClass; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_FundingTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_FundingTest.java index 54f44971a6f..6a7f0083370 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_FundingTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_FundingTest.java @@ -14,9 +14,9 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.NoResultException; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.core.Response; import org.orcid.test.DBUnitTest; import org.orcid.test.helper.Utils; import org.junit.After; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_GeneralTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_GeneralTest.java index 0bdab217fea..5353847a9c8 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_GeneralTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_GeneralTest.java @@ -14,9 +14,9 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.NoResultException; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.core.Response; import org.junit.After; import org.junit.AfterClass; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_GroupIdTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_GroupIdTest.java index 06f7c9d4a90..4a5a791a59d 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_GroupIdTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_GroupIdTest.java @@ -10,9 +10,9 @@ import java.util.GregorianCalendar; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.NoResultException; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.core.Response; import org.junit.AfterClass; import org.junit.BeforeClass; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_KeywordsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_KeywordsTest.java index 511d3cf92d7..011a7f723e9 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_KeywordsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_KeywordsTest.java @@ -13,9 +13,9 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.NoResultException; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.core.Response; import org.junit.AfterClass; import org.junit.BeforeClass; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_OtherNamesTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_OtherNamesTest.java index 3fff08654b1..3f884bf7471 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_OtherNamesTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_OtherNamesTest.java @@ -13,9 +13,9 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.NoResultException; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.core.Response; import org.orcid.test.DBUnitTest; import org.orcid.test.helper.Utils; import org.junit.AfterClass; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_PeerReviewsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_PeerReviewsTest.java index d4f20636150..87150f14f42 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_PeerReviewsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_PeerReviewsTest.java @@ -13,9 +13,9 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.NoResultException; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.core.Response; import org.junit.After; import org.junit.AfterClass; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_PersonalDetailsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_PersonalDetailsTest.java index 5f2f3781cb0..d526f828ffe 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_PersonalDetailsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_PersonalDetailsTest.java @@ -10,8 +10,8 @@ import java.util.Collections; import java.util.List; -import javax.annotation.Resource; -import javax.ws.rs.core.Response; +import jakarta.annotation.Resource; +import jakarta.ws.rs.core.Response; import org.junit.AfterClass; import org.junit.BeforeClass; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ReadPersonTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ReadPersonTest.java index 20e5179a09a..1b5e5b707ad 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ReadPersonTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ReadPersonTest.java @@ -5,8 +5,8 @@ import java.util.Collections; import java.util.List; -import javax.annotation.Resource; -import javax.ws.rs.core.Response; +import jakarta.annotation.Resource; +import jakarta.ws.rs.core.Response; import org.junit.AfterClass; import org.junit.BeforeClass; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ReadRecordTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ReadRecordTest.java index 0bc956dea96..7865fbd55a5 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ReadRecordTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ReadRecordTest.java @@ -5,8 +5,8 @@ import java.util.Collections; import java.util.List; -import javax.annotation.Resource; -import javax.ws.rs.core.Response; +import jakarta.annotation.Resource; +import jakarta.ws.rs.core.Response; import org.junit.AfterClass; import org.junit.BeforeClass; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ResearcherUrlsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ResearcherUrlsTest.java index 11974818f92..0c04054faa4 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ResearcherUrlsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ResearcherUrlsTest.java @@ -14,9 +14,9 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.NoResultException; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.core.Response; import org.junit.AfterClass; import org.junit.BeforeClass; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_WorksTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_WorksTest.java index 76bcf1d7e8a..3abda0414d1 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_WorksTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_WorksTest.java @@ -14,9 +14,9 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.NoResultException; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.core.Response; import org.junit.After; import org.junit.AfterClass; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceVersionedDelegatorTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceVersionedDelegatorTest.java index 385797cae29..7da51376b08 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceVersionedDelegatorTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceVersionedDelegatorTest.java @@ -12,9 +12,9 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.NoResultException; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.core.Response; import org.apache.commons.lang.time.DateUtils; import org.junit.AfterClass; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegatorErrorsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegatorErrorsTest.java index 2334548d1c4..5ed40a4dfbb 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegatorErrorsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegatorErrorsTest.java @@ -10,9 +10,9 @@ import java.util.Date; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.NoResultException; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.core.Response; import org.apache.commons.lang.time.DateUtils; import org.junit.AfterClass; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ActivitiesSummaryTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ActivitiesSummaryTest.java index f21cdb6c516..5e2ed1fd92b 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ActivitiesSummaryTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ActivitiesSummaryTest.java @@ -10,8 +10,8 @@ import java.util.Collections; import java.util.List; -import javax.annotation.Resource; -import javax.ws.rs.core.Response; +import jakarta.annotation.Resource; +import jakarta.ws.rs.core.Response; import org.junit.AfterClass; import org.junit.BeforeClass; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_AddressesTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_AddressesTest.java index bc009ad332c..35847844494 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_AddressesTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_AddressesTest.java @@ -13,9 +13,9 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.NoResultException; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.core.Response; import org.junit.AfterClass; import org.junit.BeforeClass; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_BiogrphyTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_BiogrphyTest.java index 17406ff3ad6..dea0a4203ec 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_BiogrphyTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_BiogrphyTest.java @@ -8,8 +8,8 @@ import java.util.Collections; import java.util.List; -import javax.annotation.Resource; -import javax.ws.rs.core.Response; +import jakarta.annotation.Resource; +import jakarta.ws.rs.core.Response; import org.junit.AfterClass; import org.junit.BeforeClass; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_DistinctionsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_DistinctionsTest.java index d9738dbc665..dc656efbe8f 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_DistinctionsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_DistinctionsTest.java @@ -10,9 +10,9 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.NoResultException; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.core.Response; import org.apache.hc.core5.http.HttpStatus; import org.junit.AfterClass; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_EducationsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_EducationsTest.java index eab4c66665e..ec21287dd65 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_EducationsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_EducationsTest.java @@ -10,9 +10,9 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.NoResultException; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.core.Response; import org.apache.hc.core5.http.HttpStatus; import org.junit.AfterClass; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_EmailsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_EmailsTest.java index 93256c9adc5..0de07fc6b68 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_EmailsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_EmailsTest.java @@ -9,8 +9,8 @@ import java.util.Collections; import java.util.List; -import javax.annotation.Resource; -import javax.ws.rs.core.Response; +import jakarta.annotation.Resource; +import jakarta.ws.rs.core.Response; import org.junit.AfterClass; import org.junit.BeforeClass; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_EmploymentsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_EmploymentsTest.java index a0fd279b70c..842b5e56847 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_EmploymentsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_EmploymentsTest.java @@ -10,9 +10,9 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.NoResultException; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.core.Response; import org.apache.hc.core5.http.HttpStatus; import org.junit.AfterClass; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ExternalIdentifiersTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ExternalIdentifiersTest.java index de064b12217..4c6154e44f2 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ExternalIdentifiersTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ExternalIdentifiersTest.java @@ -12,9 +12,9 @@ import java.util.Collections; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.NoResultException; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.core.Response; import org.junit.AfterClass; import org.junit.BeforeClass; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_FundingTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_FundingTest.java index 94a0d4de27a..1f713d42302 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_FundingTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_FundingTest.java @@ -14,9 +14,9 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.NoResultException; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.core.Response; import org.junit.After; import org.junit.AfterClass; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_GeneralTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_GeneralTest.java index 09599a134ac..e1cdb08b2c1 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_GeneralTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_GeneralTest.java @@ -15,9 +15,9 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.NoResultException; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.core.Response; import org.junit.After; import org.junit.AfterClass; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_GroupIdTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_GroupIdTest.java index 15dfc30eb7e..0dfec01b63a 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_GroupIdTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_GroupIdTest.java @@ -10,9 +10,9 @@ import java.util.GregorianCalendar; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.NoResultException; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.core.Response; import org.junit.AfterClass; import org.junit.BeforeClass; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_InvitedPositionsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_InvitedPositionsTest.java index f6541f565d6..9ebe3029d4f 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_InvitedPositionsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_InvitedPositionsTest.java @@ -10,9 +10,9 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.NoResultException; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.core.Response; import org.apache.hc.core5.http.HttpStatus; import org.junit.AfterClass; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_KeywordsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_KeywordsTest.java index e85906319b6..8aaa445cb20 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_KeywordsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_KeywordsTest.java @@ -13,9 +13,9 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.NoResultException; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.core.Response; import org.junit.AfterClass; import org.junit.BeforeClass; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_MembershipsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_MembershipsTest.java index cd3a1a87f96..22e43c0ea0e 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_MembershipsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_MembershipsTest.java @@ -10,9 +10,9 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.NoResultException; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.core.Response; import org.apache.hc.core5.http.HttpStatus; import org.junit.AfterClass; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_OtherNamesTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_OtherNamesTest.java index c98735c78b2..2f894a170d0 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_OtherNamesTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_OtherNamesTest.java @@ -13,9 +13,9 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.NoResultException; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.core.Response; import org.junit.AfterClass; import org.junit.BeforeClass; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_PeerReviewsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_PeerReviewsTest.java index ad8f46faa77..d0696ea6998 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_PeerReviewsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_PeerReviewsTest.java @@ -13,9 +13,9 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.NoResultException; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.core.Response; import org.junit.After; import org.junit.AfterClass; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_PersonalDetailsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_PersonalDetailsTest.java index 9a66ab9e149..026cb556be6 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_PersonalDetailsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_PersonalDetailsTest.java @@ -10,8 +10,8 @@ import java.util.Collections; import java.util.List; -import javax.annotation.Resource; -import javax.ws.rs.core.Response; +import jakarta.annotation.Resource; +import jakarta.ws.rs.core.Response; import org.junit.AfterClass; import org.junit.BeforeClass; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_QualificationsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_QualificationsTest.java index f17d81661f5..71aaa4cf20b 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_QualificationsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_QualificationsTest.java @@ -10,9 +10,9 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.NoResultException; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.core.Response; import org.apache.hc.core5.http.HttpStatus; import org.junit.AfterClass; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ReadPersonTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ReadPersonTest.java index 8ae4784160a..921f0602b67 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ReadPersonTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ReadPersonTest.java @@ -5,8 +5,8 @@ import java.util.Collections; import java.util.List; -import javax.annotation.Resource; -import javax.ws.rs.core.Response; +import jakarta.annotation.Resource; +import jakarta.ws.rs.core.Response; import org.junit.AfterClass; import org.junit.BeforeClass; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ReadRecordTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ReadRecordTest.java index 80d8dea980b..d9160768901 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ReadRecordTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ReadRecordTest.java @@ -5,8 +5,8 @@ import java.util.Collections; import java.util.List; -import javax.annotation.Resource; -import javax.ws.rs.core.Response; +import jakarta.annotation.Resource; +import jakarta.ws.rs.core.Response; import org.junit.AfterClass; import org.junit.BeforeClass; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ResearcherUrlsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ResearcherUrlsTest.java index 34a8e741dec..52c3eca0f37 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ResearcherUrlsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ResearcherUrlsTest.java @@ -14,9 +14,9 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.NoResultException; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.core.Response; import org.junit.AfterClass; import org.junit.BeforeClass; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ServicesTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ServicesTest.java index bcfe6404bb8..cd273519423 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ServicesTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ServicesTest.java @@ -10,9 +10,9 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.NoResultException; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.core.Response; import org.apache.hc.core5.http.HttpStatus; import org.junit.AfterClass; diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_WorksTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_WorksTest.java index f4ff706a911..d7f03364db3 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_WorksTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_WorksTest.java @@ -14,9 +14,9 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.NoResultException; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.core.Response; import org.junit.After; import org.junit.AfterClass; diff --git a/orcid-api-web/src/test/java/org/orcid/api/t2/OAuthOrcidApiService.java b/orcid-api-web/src/test/java/org/orcid/api/t2/OAuthOrcidApiService.java index 5c15c655f41..11b644703d1 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/t2/OAuthOrcidApiService.java +++ b/orcid-api-web/src/test/java/org/orcid/api/t2/OAuthOrcidApiService.java @@ -1,10 +1,10 @@ package org.orcid.api.t2; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.core.MediaType; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.MediaType; import static org.orcid.core.api.OrcidApiConstants.*; diff --git a/orcid-api-web/src/test/java/org/orcid/api/t2/server/delegator/NotificationsApiServiceDelegatorTest.java b/orcid-api-web/src/test/java/org/orcid/api/t2/server/delegator/NotificationsApiServiceDelegatorTest.java index b428c079362..ec2553b0908 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/t2/server/delegator/NotificationsApiServiceDelegatorTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/t2/server/delegator/NotificationsApiServiceDelegatorTest.java @@ -7,7 +7,7 @@ import java.util.ArrayList; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.core.Response; import org.junit.Before; import org.junit.Test; diff --git a/orcid-api-web/src/test/java/org/orcid/api/util/ApiUtilsTest.java b/orcid-api-web/src/test/java/org/orcid/api/util/ApiUtilsTest.java index 4ae252811d6..5a9c7de9789 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/util/ApiUtilsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/util/ApiUtilsTest.java @@ -8,8 +8,8 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; -import javax.ws.rs.core.Response; +import jakarta.annotation.Resource; +import jakarta.ws.rs.core.Response; import org.junit.Before; import org.junit.Test; diff --git a/orcid-api-web/src/test/java/org/orcid/test/helper/Utils.java b/orcid-api-web/src/test/java/org/orcid/test/helper/Utils.java index 8f1750d0391..3c481dfc21e 100644 --- a/orcid-api-web/src/test/java/org/orcid/test/helper/Utils.java +++ b/orcid-api-web/src/test/java/org/orcid/test/helper/Utils.java @@ -8,7 +8,7 @@ import java.util.List; import java.util.Map; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.core.Response; import org.orcid.jaxb.model.common_v2.Country; import org.orcid.jaxb.model.common_v2.Filterable; diff --git a/orcid-api-web/src/test/java/org/orcid/test/helper/v3/Utils.java b/orcid-api-web/src/test/java/org/orcid/test/helper/v3/Utils.java index 4712ab582e3..3e909677c84 100644 --- a/orcid-api-web/src/test/java/org/orcid/test/helper/v3/Utils.java +++ b/orcid-api-web/src/test/java/org/orcid/test/helper/v3/Utils.java @@ -8,7 +8,7 @@ import java.util.List; import java.util.Map; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.core.Response; import org.orcid.jaxb.model.common.FundingType; import org.orcid.jaxb.model.common.Iso3166Country; diff --git a/orcid-core/pom.xml b/orcid-core/pom.xml index bb5c353b0f4..103e072cdac 100644 --- a/orcid-core/pom.xml +++ b/orcid-core/pom.xml @@ -97,9 +97,9 @@ commons-codec - javax.mail - mail - 1.4.4 + com.sun.mail + jakarta.mail + 2.0.1 commons-io @@ -299,8 +299,8 @@ - javax.ws.rs - javax.ws.rs-api + jakarta.ws.rs + jakarta.ws.rs-api diff --git a/orcid-core/src/main/java/org/orcid/core/adapter/impl/MapperFacadeFactory.java b/orcid-core/src/main/java/org/orcid/core/adapter/impl/MapperFacadeFactory.java index be940ba3cd1..b8cd92758ef 100644 --- a/orcid-core/src/main/java/org/orcid/core/adapter/impl/MapperFacadeFactory.java +++ b/orcid-core/src/main/java/org/orcid/core/adapter/impl/MapperFacadeFactory.java @@ -8,7 +8,7 @@ import java.util.Map; import java.util.TreeSet; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.commons.lang3.StringUtils; import org.orcid.core.adapter.converter.CreditNameConverter; diff --git a/orcid-core/src/main/java/org/orcid/core/adapter/v3/impl/MapperFacadeFactory.java b/orcid-core/src/main/java/org/orcid/core/adapter/v3/impl/MapperFacadeFactory.java index cc4b1a9daf3..62594d32709 100644 --- a/orcid-core/src/main/java/org/orcid/core/adapter/v3/impl/MapperFacadeFactory.java +++ b/orcid-core/src/main/java/org/orcid/core/adapter/v3/impl/MapperFacadeFactory.java @@ -8,7 +8,7 @@ import java.util.Map; import java.util.TreeSet; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.commons.lang3.StringUtils; import org.orcid.core.adapter.converter.EmptyStringToNullConverter; diff --git a/orcid-core/src/main/java/org/orcid/core/aop/ProfileLastModifiedAspect.java b/orcid-core/src/main/java/org/orcid/core/aop/ProfileLastModifiedAspect.java index dfa98e251f1..410c9c2cb9c 100644 --- a/orcid-core/src/main/java/org/orcid/core/aop/ProfileLastModifiedAspect.java +++ b/orcid-core/src/main/java/org/orcid/core/aop/ProfileLastModifiedAspect.java @@ -2,7 +2,7 @@ import java.util.Date; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.commons.lang.StringUtils; import org.aspectj.lang.JoinPoint; diff --git a/orcid-core/src/main/java/org/orcid/core/api/rate_limit/PapiRateLimitRedisClient.java b/orcid-core/src/main/java/org/orcid/core/api/rate_limit/PapiRateLimitRedisClient.java index 6a21d23335c..cb310ba317a 100644 --- a/orcid-core/src/main/java/org/orcid/core/api/rate_limit/PapiRateLimitRedisClient.java +++ b/orcid-core/src/main/java/org/orcid/core/api/rate_limit/PapiRateLimitRedisClient.java @@ -4,7 +4,7 @@ import java.util.Date; import java.util.HashMap; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.commons.lang.StringUtils; import org.orcid.core.utils.cache.redis.RedisClient; diff --git a/orcid-core/src/main/java/org/orcid/core/cache/OrcidString.java b/orcid-core/src/main/java/org/orcid/core/cache/OrcidString.java index 2e32f4ed327..4814347f34e 100644 --- a/orcid-core/src/main/java/org/orcid/core/cache/OrcidString.java +++ b/orcid-core/src/main/java/org/orcid/core/cache/OrcidString.java @@ -18,7 +18,7 @@ import java.io.Serializable; -import javax.mail.MethodNotSupportedException; +import jakarta.mail.MethodNotSupportedException; import org.orcid.persistence.jpa.entities.OrcidAware; diff --git a/orcid-core/src/main/java/org/orcid/core/cache/impl/FeaturedGroupedWorksExtendedRetriever.java b/orcid-core/src/main/java/org/orcid/core/cache/impl/FeaturedGroupedWorksExtendedRetriever.java index 539583ecde7..d74df5a3297 100644 --- a/orcid-core/src/main/java/org/orcid/core/cache/impl/FeaturedGroupedWorksExtendedRetriever.java +++ b/orcid-core/src/main/java/org/orcid/core/cache/impl/FeaturedGroupedWorksExtendedRetriever.java @@ -5,7 +5,7 @@ import org.orcid.core.manager.v3.read_only.WorkManagerReadOnly; import org.orcid.pojo.WorkSummaryExtended; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import java.util.List; public class FeaturedGroupedWorksExtendedRetriever implements Retriever> { diff --git a/orcid-core/src/main/java/org/orcid/core/cache/impl/GroupedWorksExtendedRetriever.java b/orcid-core/src/main/java/org/orcid/core/cache/impl/GroupedWorksExtendedRetriever.java index df045b716a4..f94fc16b688 100644 --- a/orcid-core/src/main/java/org/orcid/core/cache/impl/GroupedWorksExtendedRetriever.java +++ b/orcid-core/src/main/java/org/orcid/core/cache/impl/GroupedWorksExtendedRetriever.java @@ -5,8 +5,8 @@ import org.orcid.core.manager.v3.read_only.WorkManagerReadOnly; import org.orcid.pojo.WorksExtended; -import javax.annotation.Resource; -import javax.transaction.Transactional; +import jakarta.annotation.Resource; +import jakarta.transaction.Transactional; public class GroupedWorksExtendedRetriever implements Retriever { diff --git a/orcid-core/src/main/java/org/orcid/core/cache/impl/GroupedWorksRetriever.java b/orcid-core/src/main/java/org/orcid/core/cache/impl/GroupedWorksRetriever.java index f1f0fe1e9b6..a63e4543763 100644 --- a/orcid-core/src/main/java/org/orcid/core/cache/impl/GroupedWorksRetriever.java +++ b/orcid-core/src/main/java/org/orcid/core/cache/impl/GroupedWorksRetriever.java @@ -16,8 +16,8 @@ */ package org.orcid.core.cache.impl; -import javax.annotation.Resource; -import javax.transaction.Transactional; +import jakarta.annotation.Resource; +import jakarta.transaction.Transactional; import org.orcid.core.cache.OrcidString; import org.orcid.core.cache.Retriever; diff --git a/orcid-core/src/main/java/org/orcid/core/cache/impl/ProfileEntityRetriever.java b/orcid-core/src/main/java/org/orcid/core/cache/impl/ProfileEntityRetriever.java index 94fe7e8c312..7d9e061e0d7 100644 --- a/orcid-core/src/main/java/org/orcid/core/cache/impl/ProfileEntityRetriever.java +++ b/orcid-core/src/main/java/org/orcid/core/cache/impl/ProfileEntityRetriever.java @@ -16,7 +16,7 @@ */ package org.orcid.core.cache.impl; -import javax.transaction.Transactional; +import jakarta.transaction.Transactional; import org.orcid.core.cache.OrcidString; import org.orcid.core.cache.Retriever; diff --git a/orcid-core/src/main/java/org/orcid/core/cache/impl/SalesForceConnectionEntityRetriever.java b/orcid-core/src/main/java/org/orcid/core/cache/impl/SalesForceConnectionEntityRetriever.java index 164ac2c317c..6a2ad78fd67 100644 --- a/orcid-core/src/main/java/org/orcid/core/cache/impl/SalesForceConnectionEntityRetriever.java +++ b/orcid-core/src/main/java/org/orcid/core/cache/impl/SalesForceConnectionEntityRetriever.java @@ -18,7 +18,7 @@ import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.cache.OrcidString; import org.orcid.core.cache.Retriever; diff --git a/orcid-core/src/main/java/org/orcid/core/cache/impl/WorksTitleRetriever.java b/orcid-core/src/main/java/org/orcid/core/cache/impl/WorksTitleRetriever.java index 20de0e63079..cb3669b6cab 100644 --- a/orcid-core/src/main/java/org/orcid/core/cache/impl/WorksTitleRetriever.java +++ b/orcid-core/src/main/java/org/orcid/core/cache/impl/WorksTitleRetriever.java @@ -6,7 +6,7 @@ import org.orcid.pojo.ActivityTitle; import org.orcid.pojo.WorkSummaryExtended; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import java.util.List; public class WorksTitleRetriever implements Retriever> { diff --git a/orcid-core/src/main/java/org/orcid/core/cli/AnonymizeWorksFromCSV.java b/orcid-core/src/main/java/org/orcid/core/cli/AnonymizeWorksFromCSV.java index cbe22cf9599..5d4f96f5e5b 100644 --- a/orcid-core/src/main/java/org/orcid/core/cli/AnonymizeWorksFromCSV.java +++ b/orcid-core/src/main/java/org/orcid/core/cli/AnonymizeWorksFromCSV.java @@ -7,7 +7,7 @@ import java.util.Date; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.kohsuke.args4j.CmdLineException; import org.kohsuke.args4j.CmdLineParser; diff --git a/orcid-core/src/main/java/org/orcid/core/cli/AnonymizeWorksFromGetMyData.java b/orcid-core/src/main/java/org/orcid/core/cli/AnonymizeWorksFromGetMyData.java index fcbafc2c567..2273ed238d1 100644 --- a/orcid-core/src/main/java/org/orcid/core/cli/AnonymizeWorksFromGetMyData.java +++ b/orcid-core/src/main/java/org/orcid/core/cli/AnonymizeWorksFromGetMyData.java @@ -8,7 +8,7 @@ import java.util.Iterator; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.commons.io.FileUtils; diff --git a/orcid-core/src/main/java/org/orcid/core/cli/CorrectBadClientSourceData.java b/orcid-core/src/main/java/org/orcid/core/cli/CorrectBadClientSourceData.java index 207b3f14f2b..17e9cdac4b0 100644 --- a/orcid-core/src/main/java/org/orcid/core/cli/CorrectBadClientSourceData.java +++ b/orcid-core/src/main/java/org/orcid/core/cli/CorrectBadClientSourceData.java @@ -5,7 +5,7 @@ import java.util.Date; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.jaxb.model.clientgroup.ClientType; import org.orcid.persistence.dao.AddressDao; diff --git a/orcid-core/src/main/java/org/orcid/core/cli/CorrectBadOrgData.java b/orcid-core/src/main/java/org/orcid/core/cli/CorrectBadOrgData.java index 9cf5cd84ba1..1804095b9e4 100644 --- a/orcid-core/src/main/java/org/orcid/core/cli/CorrectBadOrgData.java +++ b/orcid-core/src/main/java/org/orcid/core/cli/CorrectBadOrgData.java @@ -5,7 +5,7 @@ import java.util.List; import java.util.stream.Collectors; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.kohsuke.args4j.CmdLineException; import org.kohsuke.args4j.CmdLineParser; diff --git a/orcid-core/src/main/java/org/orcid/core/cli/CorrectClientProfileSourceIdReferences.java b/orcid-core/src/main/java/org/orcid/core/cli/CorrectClientProfileSourceIdReferences.java index a9339554101..dbac5694680 100644 --- a/orcid-core/src/main/java/org/orcid/core/cli/CorrectClientProfileSourceIdReferences.java +++ b/orcid-core/src/main/java/org/orcid/core/cli/CorrectClientProfileSourceIdReferences.java @@ -4,7 +4,7 @@ import java.util.ArrayList; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.kohsuke.args4j.CmdLineException; import org.kohsuke.args4j.CmdLineParser; diff --git a/orcid-core/src/main/java/org/orcid/core/cli/DeleteActiveMQQueue.java b/orcid-core/src/main/java/org/orcid/core/cli/DeleteActiveMQQueue.java index bb6a330941c..d95b3140300 100644 --- a/orcid-core/src/main/java/org/orcid/core/cli/DeleteActiveMQQueue.java +++ b/orcid-core/src/main/java/org/orcid/core/cli/DeleteActiveMQQueue.java @@ -1,8 +1,8 @@ package org.orcid.core.cli; -import javax.jms.ConnectionFactory; -import javax.jms.JMSException; -import javax.jms.Session; +import jakarta.jms.ConnectionFactory; +import jakarta.jms.JMSException; +import jakarta.jms.Session; import org.apache.activemq.ActiveMQConnection; import org.apache.activemq.command.ActiveMQDestination; diff --git a/orcid-core/src/main/java/org/orcid/core/cli/LoadFundRefData.java b/orcid-core/src/main/java/org/orcid/core/cli/LoadFundRefData.java index 2cb7103f48c..57e701bc7ae 100644 --- a/orcid-core/src/main/java/org/orcid/core/cli/LoadFundRefData.java +++ b/orcid-core/src/main/java/org/orcid/core/cli/LoadFundRefData.java @@ -7,7 +7,7 @@ import java.net.http.HttpResponse; import java.util.HashMap; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; diff --git a/orcid-core/src/main/java/org/orcid/core/cli/NormalizeISNIs.java b/orcid-core/src/main/java/org/orcid/core/cli/NormalizeISNIs.java index ac958801f48..5c627982c53 100644 --- a/orcid-core/src/main/java/org/orcid/core/cli/NormalizeISNIs.java +++ b/orcid-core/src/main/java/org/orcid/core/cli/NormalizeISNIs.java @@ -2,7 +2,7 @@ import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.orgs.extId.normalizer.impl.ISNIOrgDisambiguatedExternalIdNormalizer; import org.orcid.persistence.dao.OrgDisambiguatedExternalIdentifierDao; diff --git a/orcid-core/src/main/java/org/orcid/core/cli/ViewMQStatistics.java b/orcid-core/src/main/java/org/orcid/core/cli/ViewMQStatistics.java index 76a0941ef7d..4456953d483 100644 --- a/orcid-core/src/main/java/org/orcid/core/cli/ViewMQStatistics.java +++ b/orcid-core/src/main/java/org/orcid/core/cli/ViewMQStatistics.java @@ -2,15 +2,15 @@ import java.util.Enumeration; -import javax.jms.Connection; -import javax.jms.ConnectionFactory; -import javax.jms.JMSException; -import javax.jms.MapMessage; -import javax.jms.Message; -import javax.jms.MessageConsumer; -import javax.jms.MessageProducer; -import javax.jms.Queue; -import javax.jms.Session; +import jakarta.jms.Connection; +import jakarta.jms.ConnectionFactory; +import jakarta.jms.JMSException; +import jakarta.jms.MapMessage; +import jakarta.jms.Message; +import jakarta.jms.MessageConsumer; +import jakarta.jms.MessageProducer; +import jakarta.jms.Queue; +import jakarta.jms.Session; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/orcid-core/src/main/java/org/orcid/core/cli/anonymize/XMLDeserializer.java b/orcid-core/src/main/java/org/orcid/core/cli/anonymize/XMLDeserializer.java index a63001a3708..4467877d10e 100644 --- a/orcid-core/src/main/java/org/orcid/core/cli/anonymize/XMLDeserializer.java +++ b/orcid-core/src/main/java/org/orcid/core/cli/anonymize/XMLDeserializer.java @@ -7,10 +7,10 @@ import java.io.StringReader; import java.io.StringWriter; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.Marshaller; -import javax.xml.bind.Unmarshaller; -import javax.xml.bind.annotation.adapters.NormalizedStringAdapter; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.Marshaller; +import jakarta.xml.bind.Unmarshaller; +import jakarta.xml.bind.annotation.adapters.NormalizedStringAdapter; public class XMLDeserializer { diff --git a/orcid-core/src/main/java/org/orcid/core/common/manager/impl/EmailDomainManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/common/manager/impl/EmailDomainManagerImpl.java index 0170775e9b9..924d77d8bb1 100644 --- a/orcid-core/src/main/java/org/orcid/core/common/manager/impl/EmailDomainManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/common/manager/impl/EmailDomainManagerImpl.java @@ -3,7 +3,7 @@ import java.util.ArrayList; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.ehcache.Cache; import org.orcid.core.common.manager.EmailDomainManager; diff --git a/orcid-core/src/main/java/org/orcid/core/common/manager/impl/EmailFrequencyManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/common/manager/impl/EmailFrequencyManagerImpl.java index 32abb8847b8..afef5f52b36 100644 --- a/orcid-core/src/main/java/org/orcid/core/common/manager/impl/EmailFrequencyManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/common/manager/impl/EmailFrequencyManagerImpl.java @@ -4,7 +4,7 @@ import java.util.Map; import java.util.UUID; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.NoResultException; import org.orcid.core.common.manager.EmailFrequencyManager; diff --git a/orcid-core/src/main/java/org/orcid/core/common/manager/impl/EventManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/common/manager/impl/EventManagerImpl.java index a72e2dceccb..a3afa780451 100644 --- a/orcid-core/src/main/java/org/orcid/core/common/manager/impl/EventManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/common/manager/impl/EventManagerImpl.java @@ -5,7 +5,7 @@ import java.nio.charset.StandardCharsets; import java.util.Date; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; import org.apache.commons.lang.StringUtils; diff --git a/orcid-core/src/main/java/org/orcid/core/common/manager/impl/SummaryManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/common/manager/impl/SummaryManagerImpl.java index 226c3f8d6be..097c3473e20 100644 --- a/orcid-core/src/main/java/org/orcid/core/common/manager/impl/SummaryManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/common/manager/impl/SummaryManagerImpl.java @@ -8,7 +8,7 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.tuple.Pair; diff --git a/orcid-core/src/main/java/org/orcid/core/cron/CleanOldClientKeysCronJob.java b/orcid-core/src/main/java/org/orcid/core/cron/CleanOldClientKeysCronJob.java index 360a2419927..73c5dcfb956 100644 --- a/orcid-core/src/main/java/org/orcid/core/cron/CleanOldClientKeysCronJob.java +++ b/orcid-core/src/main/java/org/orcid/core/cron/CleanOldClientKeysCronJob.java @@ -2,7 +2,7 @@ import java.util.ArrayList; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.persistence.dao.ClientDetailsDao; import org.orcid.persistence.dao.ClientSecretDao; import org.orcid.persistence.jpa.entities.ClientSecretEntity; diff --git a/orcid-core/src/main/java/org/orcid/core/crossref/CrossRefMetadata.java b/orcid-core/src/main/java/org/orcid/core/crossref/CrossRefMetadata.java index 18fc74ba873..950d8f60fb1 100644 --- a/orcid-core/src/main/java/org/orcid/core/crossref/CrossRefMetadata.java +++ b/orcid-core/src/main/java/org/orcid/core/crossref/CrossRefMetadata.java @@ -1,6 +1,6 @@ package org.orcid.core.crossref; -import javax.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlRootElement; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; diff --git a/orcid-core/src/main/java/org/orcid/core/exception/OrcidCoreExceptionMapper.java b/orcid-core/src/main/java/org/orcid/core/exception/OrcidCoreExceptionMapper.java index 7600b6a6451..9fab5413a4e 100644 --- a/orcid-core/src/main/java/org/orcid/core/exception/OrcidCoreExceptionMapper.java +++ b/orcid-core/src/main/java/org/orcid/core/exception/OrcidCoreExceptionMapper.java @@ -4,10 +4,10 @@ import java.util.Locale; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.NoResultException; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.Response.Status; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.Response.Status; import org.apache.commons.lang3.text.StrSubstitutor; import org.apache.commons.lang3.tuple.ImmutablePair; diff --git a/orcid-core/src/main/java/org/orcid/core/groupIds/issn/IssnClient.java b/orcid-core/src/main/java/org/orcid/core/groupIds/issn/IssnClient.java index 837ee681476..9397dbbbcfc 100644 --- a/orcid-core/src/main/java/org/orcid/core/groupIds/issn/IssnClient.java +++ b/orcid-core/src/main/java/org/orcid/core/groupIds/issn/IssnClient.java @@ -6,7 +6,7 @@ import java.net.http.HttpResponse; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.commons.lang3.StringUtils; import org.codehaus.jettison.json.JSONArray; diff --git a/orcid-core/src/main/java/org/orcid/core/locale/LocaleManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/locale/LocaleManagerImpl.java index 57d34c40fc2..163a2bf2e14 100644 --- a/orcid-core/src/main/java/org/orcid/core/locale/LocaleManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/locale/LocaleManagerImpl.java @@ -5,7 +5,7 @@ import java.util.Map; import java.util.ResourceBundle; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.commons.lang3.LocaleUtils; import org.orcid.core.manager.CountryManager; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/ActivityManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/ActivityManagerImpl.java index 050fb3ff4e1..25a13b4228e 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/ActivityManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/ActivityManagerImpl.java @@ -3,7 +3,7 @@ import java.util.LinkedHashMap; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.manager.ActivityManager; import org.orcid.core.manager.AffiliationsManager; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/AddressManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/AddressManagerImpl.java index b2df894a4c2..42dc27a893e 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/AddressManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/AddressManagerImpl.java @@ -4,8 +4,8 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; -import javax.transaction.Transactional; +import jakarta.annotation.Resource; +import jakarta.transaction.Transactional; import org.orcid.core.exception.ApplicationException; import org.orcid.core.exception.OrcidDuplicatedElementException; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/AdminManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/AdminManagerImpl.java index 2ac845aed12..4c8a052099d 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/AdminManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/AdminManagerImpl.java @@ -6,7 +6,7 @@ import java.util.Map; import java.util.stream.Collectors; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.commons.codec.binary.Base64; import org.apache.commons.lang3.StringUtils; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/AffiliationsManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/AffiliationsManagerImpl.java index 052e2feb901..8052d6e31fd 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/AffiliationsManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/AffiliationsManagerImpl.java @@ -5,7 +5,7 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.manager.AffiliationsManager; import org.orcid.core.manager.NotificationManager; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/BackupCodeManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/BackupCodeManagerImpl.java index 1b85e107d60..f2358678dfa 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/BackupCodeManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/BackupCodeManagerImpl.java @@ -4,7 +4,7 @@ import java.util.Date; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.commons.lang.RandomStringUtils; import org.orcid.core.manager.BackupCodeManager; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/BibtexManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/BibtexManagerImpl.java index fd58eacf66b..944a85c6ab6 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/BibtexManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/BibtexManagerImpl.java @@ -3,7 +3,7 @@ import java.util.ArrayList; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.manager.ActivitiesSummaryManager; import org.orcid.core.manager.BibtexManager; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/BiographyManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/BiographyManagerImpl.java index 2007875cd53..6dade968644 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/BiographyManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/BiographyManagerImpl.java @@ -1,6 +1,6 @@ package org.orcid.core.manager.impl; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.manager.BiographyManager; import org.orcid.core.manager.ProfileEntityCacheManager; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/ClientDetailsEntityCacheManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/ClientDetailsEntityCacheManagerImpl.java index 3ddaae1dbbd..a23480045e8 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/ClientDetailsEntityCacheManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/ClientDetailsEntityCacheManagerImpl.java @@ -2,7 +2,7 @@ import java.util.Date; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.ehcache.Cache; import org.orcid.core.manager.ClientDetailsEntityCacheManager; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/ClientDetailsManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/ClientDetailsManagerImpl.java index 664f0415403..1d52f346c07 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/ClientDetailsManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/ClientDetailsManagerImpl.java @@ -9,7 +9,7 @@ import java.util.TreeSet; import java.util.UUID; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.manager.AppIdGenerationManager; import org.orcid.core.manager.ClientDetailsManager; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/CountryManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/CountryManagerImpl.java index 8e9a849167a..dd606a9ea99 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/CountryManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/CountryManagerImpl.java @@ -7,7 +7,7 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.commons.io.IOUtils; import org.orcid.core.manager.CountryManager; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/DOIManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/DOIManagerImpl.java index 031cf469889..08e8418e58e 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/DOIManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/DOIManagerImpl.java @@ -3,7 +3,7 @@ import java.net.MalformedURLException; import java.net.URL; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.ehcache.Cache; import org.orcid.core.manager.DOIManager; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/DoiBibtexCacheEntryFactory.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/DoiBibtexCacheEntryFactory.java index 809c293c58b..9dddb34f538 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/DoiBibtexCacheEntryFactory.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/DoiBibtexCacheEntryFactory.java @@ -3,7 +3,7 @@ import java.net.http.HttpClient; import java.net.http.HttpResponse; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.ehcache.spi.loaderwriter.CacheLoaderWriter; import org.orcid.core.utils.http.HttpRequestUtils; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/ExternalIdentifierManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/ExternalIdentifierManagerImpl.java index 52c41dacf33..de580bf54e7 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/ExternalIdentifierManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/ExternalIdentifierManagerImpl.java @@ -4,7 +4,7 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.exception.ApplicationException; import org.orcid.core.exception.OrcidDuplicatedElementException; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/GroupIdRecordManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/GroupIdRecordManagerImpl.java index 62ede48ca9c..37e3bfd7596 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/GroupIdRecordManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/GroupIdRecordManagerImpl.java @@ -4,7 +4,7 @@ import java.net.URISyntaxException; import java.util.GregorianCalendar; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.codehaus.jettison.json.JSONException; import org.orcid.core.exception.*; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/IdentifierTypeManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/IdentifierTypeManagerImpl.java index 28fecb0b7a3..ad6b25bd544 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/IdentifierTypeManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/IdentifierTypeManagerImpl.java @@ -11,7 +11,7 @@ import java.util.SortedMap; import java.util.TreeMap; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.commons.collections4.trie.PatriciaTrie; import org.orcid.core.adapter.impl.IdentifierTypePOJOConverter; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/IdentityProviderManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/IdentityProviderManagerImpl.java index 9cf59e8cf6e..52b13758e45 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/IdentityProviderManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/IdentityProviderManagerImpl.java @@ -6,8 +6,8 @@ import java.util.Optional; import java.util.stream.Collectors; -import javax.annotation.Resource; -import javax.transaction.Transactional; +import jakarta.annotation.Resource; +import jakarta.transaction.Transactional; import org.ehcache.Cache; import org.orcid.core.locale.LocaleManager; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/IdentityProviderNameCacheEntryFactory.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/IdentityProviderNameCacheEntryFactory.java index fad7ec303a2..7d790b37666 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/IdentityProviderNameCacheEntryFactory.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/IdentityProviderNameCacheEntryFactory.java @@ -1,6 +1,6 @@ package org.orcid.core.manager.impl; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.ehcache.spi.loaderwriter.CacheLoaderWriter; import org.orcid.core.manager.IdentityProviderManager; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/InstitutionalSignInManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/InstitutionalSignInManagerImpl.java index 935ffeedbd7..ff7fb780bc6 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/InstitutionalSignInManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/InstitutionalSignInManagerImpl.java @@ -12,7 +12,7 @@ import java.util.Set; import java.util.regex.Pattern; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.commons.lang3.StringUtils; import org.orcid.core.manager.ClientDetailsEntityCacheManager; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/NotificationManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/NotificationManagerImpl.java index a57583b3f86..b7cbe530f1d 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/NotificationManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/NotificationManagerImpl.java @@ -15,7 +15,7 @@ import java.util.Map; import java.util.stream.Collectors; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.commons.codec.binary.Base64; import org.orcid.core.adapter.JpaJaxbNotificationAdapter; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/NotificationValidationManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/NotificationValidationManagerImpl.java index 7e3fa3bb4f5..fb8eb51c813 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/NotificationValidationManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/NotificationValidationManagerImpl.java @@ -3,7 +3,7 @@ import java.net.URI; import java.net.URISyntaxException; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.commons.lang3.StringUtils; import org.orcid.core.exception.OrcidValidationException; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/OrcidGenerationManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/OrcidGenerationManagerImpl.java index abcb572ee20..0f942a53aec 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/OrcidGenerationManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/OrcidGenerationManagerImpl.java @@ -2,7 +2,7 @@ import java.util.Random; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.commons.lang3.StringUtils; import org.ehcache.Cache; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/OrcidSearchManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/OrcidSearchManagerImpl.java index 8d777333aa2..14d89265df0 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/OrcidSearchManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/OrcidSearchManagerImpl.java @@ -4,7 +4,7 @@ import java.util.Map; import java.util.stream.Collectors; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.manager.OrcidSearchManager; import org.orcid.core.manager.OrcidSecurityManager; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/OrcidSecurityManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/OrcidSecurityManagerImpl.java index 9979a0990ca..55c43ff10a4 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/OrcidSecurityManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/OrcidSecurityManagerImpl.java @@ -9,7 +9,7 @@ import java.util.Objects; import java.util.Set; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.NoResultException; import javax.xml.datatype.XMLGregorianCalendar; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/OrgDisambiguatedManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/OrgDisambiguatedManagerImpl.java index 029d42fdf2f..65904bfe804 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/OrgDisambiguatedManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/OrgDisambiguatedManagerImpl.java @@ -8,8 +8,8 @@ import java.util.Set; import java.util.stream.Collectors; -import javax.annotation.Resource; -import javax.transaction.Transactional; +import jakarta.annotation.Resource; +import jakarta.transaction.Transactional; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang3.tuple.Pair; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/OrgManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/OrgManagerImpl.java index 4ba3bbc03ba..0b98c0c0eed 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/OrgManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/OrgManagerImpl.java @@ -3,7 +3,7 @@ import java.io.Writer; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.exception.InvalidDisambiguatedOrgException; import org.orcid.core.manager.OrgManager; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/OtherNameManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/OtherNameManagerImpl.java index 695336f9e85..5ec17d4b868 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/OtherNameManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/OtherNameManagerImpl.java @@ -4,7 +4,7 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.exception.ApplicationException; import org.orcid.core.exception.OrcidDuplicatedElementException; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/PeerReviewManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/PeerReviewManagerImpl.java index 58d161de081..8225f22ca10 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/PeerReviewManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/PeerReviewManagerImpl.java @@ -7,7 +7,7 @@ import java.util.Map; import java.util.Optional; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.commons.lang3.StringUtils; import org.orcid.core.exception.GroupIdRecordNotFoundException; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/PreferenceManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/PreferenceManagerImpl.java index bde29bf929d..aff2fbc918f 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/PreferenceManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/PreferenceManagerImpl.java @@ -1,6 +1,6 @@ package org.orcid.core.manager.impl; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.manager.PreferenceManager; import org.orcid.core.manager.v3.ProfileHistoryEventManager; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/ProfileEntityCacheManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/ProfileEntityCacheManagerImpl.java index 09c075d0dd3..921d8c75b4c 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/ProfileEntityCacheManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/ProfileEntityCacheManagerImpl.java @@ -1,6 +1,6 @@ package org.orcid.core.manager.impl; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.cache.GenericCacheManager; import org.orcid.core.cache.OrcidString; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/ProfileEntityManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/ProfileEntityManagerImpl.java index e21af5b6f5d..5381db8981f 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/ProfileEntityManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/ProfileEntityManagerImpl.java @@ -4,7 +4,7 @@ import java.util.Date; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.commons.lang3.StringUtils; import org.orcid.core.manager.EncryptionManager; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/ProfileFundingManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/ProfileFundingManagerImpl.java index 859da93e66c..33b5fcd0b4b 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/ProfileFundingManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/ProfileFundingManagerImpl.java @@ -5,7 +5,7 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.manager.NotificationManager; import org.orcid.core.manager.OrcidSecurityManager; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/ProfileKeywordManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/ProfileKeywordManagerImpl.java index c60b0749615..c76de4d7e1d 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/ProfileKeywordManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/ProfileKeywordManagerImpl.java @@ -5,8 +5,8 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; -import javax.transaction.Transactional; +import jakarta.annotation.Resource; +import jakarta.transaction.Transactional; import org.orcid.core.exception.ApplicationException; import org.orcid.core.exception.OrcidDuplicatedElementException; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/RecordNameManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/RecordNameManagerImpl.java index ac261e3da8a..d595718a100 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/RecordNameManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/RecordNameManagerImpl.java @@ -2,7 +2,7 @@ import java.util.Date; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.manager.RecordNameManager; import org.orcid.core.manager.SourceNameCacheManager; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/ReferenceDataManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/ReferenceDataManagerImpl.java index 68153128955..d2aaf6fe8c4 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/ReferenceDataManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/ReferenceDataManagerImpl.java @@ -3,7 +3,7 @@ import java.util.Map; import java.util.TreeMap; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.manager.ReferenceDataManager; import org.orcid.persistence.dao.GenericDao; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/RegistrationManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/RegistrationManagerImpl.java index 0510caf19f6..b1ffb1318aa 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/RegistrationManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/RegistrationManagerImpl.java @@ -7,7 +7,7 @@ import java.util.Map; import java.util.Set; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.common.manager.EmailFrequencyManager; import org.orcid.core.manager.AdminManager; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/ResearcherUrlManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/ResearcherUrlManagerImpl.java index ccf5b3fd2bc..f02b634d1e9 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/ResearcherUrlManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/ResearcherUrlManagerImpl.java @@ -4,7 +4,7 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.exception.ApplicationException; import org.orcid.core.exception.OrcidDuplicatedElementException; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/SourceManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/SourceManagerImpl.java index 509d17d147b..99dbf62272e 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/SourceManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/SourceManagerImpl.java @@ -2,7 +2,7 @@ import java.util.Collection; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.common.util.AuthenticationUtils; import org.orcid.core.manager.ClientDetailsManager; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/SourceNameCacheManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/SourceNameCacheManagerImpl.java index c567e21a9d7..414af291970 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/SourceNameCacheManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/SourceNameCacheManagerImpl.java @@ -1,6 +1,6 @@ package org.orcid.core.manager.impl; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.commons.lang.StringUtils; import org.ehcache.Cache; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/StatusManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/StatusManagerImpl.java index f5cb3c093bd..9564d0b346d 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/StatusManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/StatusManagerImpl.java @@ -4,7 +4,7 @@ import java.util.LinkedHashMap; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.PersistenceException; import org.orcid.core.manager.StatusManager; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/SubjectManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/SubjectManagerImpl.java index 25f37b9cd87..373e3db144f 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/SubjectManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/SubjectManagerImpl.java @@ -3,7 +3,7 @@ import java.util.Map; import java.util.TreeMap; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.manager.SubjectManager; import org.orcid.persistence.dao.GenericDao; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/TemplateManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/TemplateManagerImpl.java index 68530f367dd..2ac57446c24 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/TemplateManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/TemplateManagerImpl.java @@ -5,7 +5,7 @@ import java.util.Locale; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.locale.LocaleManager; import org.orcid.core.manager.TemplateManager; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/TwoFactorAuthenticationManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/TwoFactorAuthenticationManagerImpl.java index 9b5426f5c20..21761d9dedb 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/TwoFactorAuthenticationManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/TwoFactorAuthenticationManagerImpl.java @@ -2,7 +2,7 @@ import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.jboss.aerogear.security.otp.Totp; import org.jboss.aerogear.security.otp.api.Base32; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/UserConnectionManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/UserConnectionManagerImpl.java index e95927b5547..91f9392e2d3 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/UserConnectionManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/UserConnectionManagerImpl.java @@ -2,7 +2,7 @@ import java.util.*; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.constants.OrcidOauth2Constants; import org.orcid.core.manager.NotificationManager; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/WebhookManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/WebhookManagerImpl.java index 90ea0b2a43c..fbee1f1b970 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/WebhookManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/WebhookManagerImpl.java @@ -16,7 +16,7 @@ import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.manager.WebhookManager; import org.orcid.core.utils.http.HttpRequestUtils; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/WorkEntityCacheManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/WorkEntityCacheManagerImpl.java index a26693c58ea..ec476ccce89 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/WorkEntityCacheManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/WorkEntityCacheManagerImpl.java @@ -10,7 +10,7 @@ import java.util.function.Function; import java.util.stream.Collectors; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.commons.collections4.ListUtils; import org.ehcache.Cache; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/WorkManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/WorkManagerImpl.java index f56fb8dc841..11b52d8a7fb 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/WorkManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/WorkManagerImpl.java @@ -10,7 +10,7 @@ import java.util.Map; import java.util.Set; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.adapter.v3.converter.ContributorsRolesAndSequencesConverterV2; import org.orcid.core.exception.ExceedMaxNumberOfElementsException; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/AddressManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/AddressManagerReadOnlyImpl.java index 9e4578eed85..e13d79d673c 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/AddressManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/AddressManagerReadOnlyImpl.java @@ -2,7 +2,7 @@ import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.adapter.JpaJaxbAddressAdapter; import org.orcid.core.manager.read_only.AddressManagerReadOnly; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/AffiliationsManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/AffiliationsManagerReadOnlyImpl.java index 21352d7d5b0..6b3c960a1dc 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/AffiliationsManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/AffiliationsManagerReadOnlyImpl.java @@ -3,7 +3,7 @@ import java.util.ArrayList; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.adapter.JpaJaxbEducationAdapter; import org.orcid.core.adapter.JpaJaxbEmploymentAdapter; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/ClientDetailsManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/ClientDetailsManagerReadOnlyImpl.java index b5caefcbf60..ee266e5616d 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/ClientDetailsManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/ClientDetailsManagerReadOnlyImpl.java @@ -5,7 +5,7 @@ import java.util.List; import java.util.Set; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.NoResultException; import org.orcid.core.adapter.JpaJaxbClientAdapter; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/ClientManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/ClientManagerReadOnlyImpl.java index afe2763ae22..193105b5e69 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/ClientManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/ClientManagerReadOnlyImpl.java @@ -4,7 +4,7 @@ import java.util.List; import java.util.Set; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.adapter.JpaJaxbClientAdapter; import org.orcid.core.manager.read_only.ClientManagerReadOnly; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/EmailManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/EmailManagerReadOnlyImpl.java index 0a4a20b6364..bc04f5a173d 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/EmailManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/EmailManagerReadOnlyImpl.java @@ -7,7 +7,7 @@ import java.util.TreeMap; import java.util.stream.Collectors; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.commons.lang3.StringUtils; import org.orcid.core.adapter.JpaJaxbEmailAdapter; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/ExternalIdentifierManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/ExternalIdentifierManagerReadOnlyImpl.java index e543b6b73fe..eaf1db0d4a6 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/ExternalIdentifierManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/ExternalIdentifierManagerReadOnlyImpl.java @@ -2,7 +2,7 @@ import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.adapter.JpaJaxbExternalIdentifierAdapter; import org.orcid.core.manager.read_only.ExternalIdentifierManagerReadOnly; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/GroupIdRecordManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/GroupIdRecordManagerReadOnlyImpl.java index b248cc3f429..c4c739a9318 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/GroupIdRecordManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/GroupIdRecordManagerReadOnlyImpl.java @@ -3,7 +3,7 @@ import java.util.List; import java.util.Optional; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.NoResultException; import org.orcid.core.adapter.JpaJaxbGroupIdRecordAdapter; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/OtherNameManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/OtherNameManagerReadOnlyImpl.java index 6f9cce7e70a..27ec88e772f 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/OtherNameManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/OtherNameManagerReadOnlyImpl.java @@ -2,7 +2,7 @@ import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.adapter.JpaJaxbOtherNameAdapter; import org.orcid.core.manager.read_only.OtherNameManagerReadOnly; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/PeerReviewManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/PeerReviewManagerReadOnlyImpl.java index 54a8362bf22..a3d50bba7ac 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/PeerReviewManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/PeerReviewManagerReadOnlyImpl.java @@ -4,7 +4,7 @@ import java.util.List; import java.util.Set; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.adapter.JpaJaxbPeerReviewAdapter; import org.orcid.core.manager.read_only.PeerReviewManagerReadOnly; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/PersonDetailsManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/PersonDetailsManagerReadOnlyImpl.java index 2663944909d..7e766f6e3f3 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/PersonDetailsManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/PersonDetailsManagerReadOnlyImpl.java @@ -36,7 +36,7 @@ import liquibase.repackaged.org.apache.commons.lang3.StringUtils; -import javax.annotation.Resource; +import jakarta.annotation.Resource; public class PersonDetailsManagerReadOnlyImpl extends ManagerReadOnlyBaseImpl implements PersonDetailsManagerReadOnly { diff --git a/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/ProfileFundingManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/ProfileFundingManagerReadOnlyImpl.java index 2801e82eb9d..30536301c55 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/ProfileFundingManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/ProfileFundingManagerReadOnlyImpl.java @@ -4,7 +4,7 @@ import java.util.List; import java.util.Set; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.adapter.JpaJaxbFundingAdapter; import org.orcid.core.manager.read_only.ProfileFundingManagerReadOnly; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/ProfileKeywordManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/ProfileKeywordManagerReadOnlyImpl.java index 8b5e72e2cd2..d91af3764f0 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/ProfileKeywordManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/ProfileKeywordManagerReadOnlyImpl.java @@ -2,7 +2,7 @@ import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.adapter.JpaJaxbKeywordAdapter; import org.orcid.core.manager.read_only.ProfileKeywordManagerReadOnly; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/RecordCorrectionsManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/RecordCorrectionsManagerReadOnlyImpl.java index 7c3e126fc80..93933a80440 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/RecordCorrectionsManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/RecordCorrectionsManagerReadOnlyImpl.java @@ -2,7 +2,7 @@ import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.adapter.JpaJaxbInvalidRecordDataChangeAdapter; import org.orcid.core.manager.read_only.RecordCorrectionsManagerReadOnly; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/RecordManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/RecordManagerReadOnlyImpl.java index cad178049c5..f5820e586bf 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/RecordManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/RecordManagerReadOnlyImpl.java @@ -1,6 +1,6 @@ package org.orcid.core.manager.read_only.impl; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.manager.ProfileEntityCacheManager; import org.orcid.core.manager.impl.OrcidUrlManager; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/RecordNameManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/RecordNameManagerReadOnlyImpl.java index 4d509854c85..cf88c7167c4 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/RecordNameManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/RecordNameManagerReadOnlyImpl.java @@ -1,6 +1,6 @@ package org.orcid.core.manager.read_only.impl; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.adapter.JpaJaxbNameAdapter; import org.orcid.core.manager.read_only.RecordNameManagerReadOnly; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/ResearcherUrlManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/ResearcherUrlManagerReadOnlyImpl.java index eea0f0c45ce..b6ae42e0629 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/ResearcherUrlManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/ResearcherUrlManagerReadOnlyImpl.java @@ -2,7 +2,7 @@ import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.adapter.JpaJaxbResearcherUrlAdapter; import org.orcid.core.manager.read_only.ResearcherUrlManagerReadOnly; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/WorkManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/WorkManagerReadOnlyImpl.java index 6f2cb414396..0d2bc41fa82 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/WorkManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/WorkManagerReadOnlyImpl.java @@ -6,7 +6,7 @@ import java.util.Set; import java.util.stream.Collectors; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.adapter.JpaJaxbWorkAdapter; import org.orcid.core.exception.ExceedMaxNumberOfPutCodesException; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/ActivityManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/ActivityManagerImpl.java index cbf8ef4b645..0e8469f91b7 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/ActivityManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/ActivityManagerImpl.java @@ -3,7 +3,7 @@ import java.util.LinkedHashMap; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.manager.v3.ActivityManager; import org.orcid.core.manager.v3.AffiliationsManager; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/AddressManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/AddressManagerImpl.java index 996eac8440e..ac27b34f90d 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/AddressManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/AddressManagerImpl.java @@ -4,8 +4,8 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; -import javax.transaction.Transactional; +import jakarta.annotation.Resource; +import jakarta.transaction.Transactional; import org.orcid.core.exception.ApplicationException; import org.orcid.core.exception.OrcidDuplicatedElementException; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/AffiliationsManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/AffiliationsManagerImpl.java index d8cb5665d6e..664ed3c93e0 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/AffiliationsManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/AffiliationsManagerImpl.java @@ -6,8 +6,8 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; -import javax.transaction.Transactional; +import jakarta.annotation.Resource; +import jakarta.transaction.Transactional; import org.apache.commons.lang3.StringUtils; import org.orcid.core.manager.ClientDetailsEntityCacheManager; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/BibtexManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/BibtexManagerImpl.java index 9d6ebf076e5..728b803eaf5 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/BibtexManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/BibtexManagerImpl.java @@ -3,7 +3,7 @@ import java.util.ArrayList; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.NoResultException; import org.orcid.core.manager.DOIManager; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/BiographyManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/BiographyManagerImpl.java index 00e58330015..fb99436d598 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/BiographyManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/BiographyManagerImpl.java @@ -1,6 +1,6 @@ package org.orcid.core.manager.v3.impl; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.manager.v3.BiographyManager; import org.orcid.core.manager.ProfileEntityCacheManager; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/ClientDetailsManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/ClientDetailsManagerImpl.java index 71a60d5940a..50ca724433c 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/ClientDetailsManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/ClientDetailsManagerImpl.java @@ -11,7 +11,7 @@ import java.util.TreeSet; import java.util.UUID; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.commons.lang.time.DateUtils; import org.orcid.core.exception.ClientAlreadyActiveException; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/ClientManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/ClientManagerImpl.java index 2b0a41ca74a..6837887043a 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/ClientManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/ClientManagerImpl.java @@ -9,8 +9,8 @@ import java.util.Set; import java.util.UUID; -import javax.annotation.Resource; -import javax.transaction.Transactional; +import jakarta.annotation.Resource; +import jakarta.transaction.Transactional; import org.orcid.core.adapter.v3.JpaJaxbClientAdapter; import org.orcid.core.constants.OrcidOauth2Constants; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/EmailManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/EmailManagerImpl.java index f4f5c38448f..dc7718067e1 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/EmailManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/EmailManagerImpl.java @@ -5,7 +5,7 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; import org.apache.commons.lang3.StringUtils; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/ExternalIdentifierManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/ExternalIdentifierManagerImpl.java index 4bff791ffcd..823a80a1f65 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/ExternalIdentifierManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/ExternalIdentifierManagerImpl.java @@ -4,7 +4,7 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.exception.ApplicationException; import org.orcid.core.exception.OrcidDuplicatedElementException; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/FindMyStuffManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/FindMyStuffManagerImpl.java index 7dabe885e65..1c64c4e67d1 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/FindMyStuffManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/FindMyStuffManagerImpl.java @@ -10,7 +10,7 @@ import java.util.Map; import java.util.Set; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.adapter.v3.JpaJaxbNotificationAdapter; import org.orcid.core.manager.ClientDetailsEntityCacheManager; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/GivenPermissionToManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/GivenPermissionToManagerImpl.java index 94536c33262..468f5a99d33 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/GivenPermissionToManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/GivenPermissionToManagerImpl.java @@ -3,7 +3,7 @@ import java.util.Date; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.manager.v3.GivenPermissionToManager; import org.orcid.core.manager.v3.NotificationManager; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/GroupIdRecordManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/GroupIdRecordManagerImpl.java index 9e75ee8e5dc..fe9c2704bc3 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/GroupIdRecordManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/GroupIdRecordManagerImpl.java @@ -4,7 +4,7 @@ import java.net.URISyntaxException; import java.util.GregorianCalendar; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.codehaus.jettison.json.JSONException; import org.orcid.core.exception.*; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/GroupingSuggestionManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/GroupingSuggestionManagerImpl.java index 0eb9b524244..39bd24ec935 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/GroupingSuggestionManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/GroupingSuggestionManagerImpl.java @@ -3,7 +3,7 @@ import java.util.List; import java.util.stream.Collectors; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.exception.MissingGroupableExternalIDException; import org.orcid.core.manager.v3.GroupingSuggestionManager; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/GroupingSuggestionsCacheManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/GroupingSuggestionsCacheManagerImpl.java index 3e578ffdb97..c60adc19980 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/GroupingSuggestionsCacheManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/GroupingSuggestionsCacheManagerImpl.java @@ -4,7 +4,7 @@ import java.util.List; import java.util.stream.Collectors; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.ehcache.Cache; import org.orcid.core.manager.v3.GroupingSuggestionsCacheManager; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/MembersManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/MembersManagerImpl.java index 1a3ca18dcf4..fa779430c27 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/MembersManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/MembersManagerImpl.java @@ -9,7 +9,7 @@ import java.util.Map; import java.util.Set; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.commons.lang.StringUtils; import org.orcid.core.common.manager.EmailFrequencyManager; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/NotificationManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/NotificationManagerImpl.java index 58b5ea012dd..6f9de9fc10c 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/NotificationManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/NotificationManagerImpl.java @@ -46,7 +46,7 @@ import org.springframework.context.MessageSource; import org.springframework.transaction.annotation.Transactional; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import java.io.UnsupportedEncodingException; import java.math.BigInteger; import java.net.URLEncoder; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/NotificationValidationManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/NotificationValidationManagerImpl.java index d9ba343c9be..c12861d73d2 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/NotificationValidationManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/NotificationValidationManagerImpl.java @@ -3,7 +3,7 @@ import java.net.URI; import java.net.URISyntaxException; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.commons.lang3.StringUtils; import org.orcid.core.exception.OrcidValidationException; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/OrcidSearchManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/OrcidSearchManagerImpl.java index f17594b743c..0a43a957b3e 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/OrcidSearchManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/OrcidSearchManagerImpl.java @@ -7,7 +7,7 @@ import java.util.Set; import java.util.TreeSet; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.hc.client5.http.ClientProtocolException; import org.orcid.core.exception.ApplicationException; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/OrcidSecurityManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/OrcidSecurityManagerImpl.java index 4269651662a..893c8d07afb 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/OrcidSecurityManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/OrcidSecurityManagerImpl.java @@ -9,7 +9,7 @@ import java.util.Objects; import java.util.Set; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.NoResultException; import javax.xml.datatype.XMLGregorianCalendar; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/OrgAffiliationRelationEntityCacheManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/OrgAffiliationRelationEntityCacheManagerImpl.java index aad2202801c..c66f5663e7c 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/OrgAffiliationRelationEntityCacheManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/OrgAffiliationRelationEntityCacheManagerImpl.java @@ -2,7 +2,7 @@ import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.cache.GenericCacheManager; import org.orcid.core.cache.OrcidString; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/OrgManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/OrgManagerImpl.java index 60c7f89e10a..99c0902c452 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/OrgManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/OrgManagerImpl.java @@ -6,7 +6,7 @@ import java.util.Arrays; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.exception.InvalidDisambiguatedOrgException; import org.orcid.core.manager.v3.OrgManager; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/OtherNameManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/OtherNameManagerImpl.java index e12b77b40a9..ae5d6ce7422 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/OtherNameManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/OtherNameManagerImpl.java @@ -4,7 +4,7 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.exception.ApplicationException; import org.orcid.core.exception.OrcidDuplicatedElementException; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/PeerReviewManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/PeerReviewManagerImpl.java index 2d392b760a3..ceb09d26916 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/PeerReviewManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/PeerReviewManagerImpl.java @@ -7,7 +7,7 @@ import java.util.Map; import java.util.Optional; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.commons.lang3.StringUtils; import org.orcid.core.exception.OrcidValidationException; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/ProfileEmailDomainManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/ProfileEmailDomainManagerImpl.java index 3c6bb730d7c..68d9d779230 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/ProfileEmailDomainManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/ProfileEmailDomainManagerImpl.java @@ -16,7 +16,7 @@ import org.slf4j.LoggerFactory; import org.springframework.transaction.annotation.Transactional; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import java.util.*; /** diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/ProfileEntityManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/ProfileEntityManagerImpl.java index 49547e81a6f..2c24615ac43 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/ProfileEntityManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/ProfileEntityManagerImpl.java @@ -9,7 +9,7 @@ import java.util.Map; import java.util.Set; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.commons.lang.StringUtils; import org.orcid.core.common.manager.EmailFrequencyManager; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/ProfileFundingManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/ProfileFundingManagerImpl.java index 62eb974beb4..eb1c31aac0a 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/ProfileFundingManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/ProfileFundingManagerImpl.java @@ -2,7 +2,7 @@ import java.util.*; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.manager.ClientDetailsEntityCacheManager; import org.orcid.core.manager.ProfileEntityCacheManager; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/ProfileHistoryEventManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/ProfileHistoryEventManagerImpl.java index 0114f6e62f7..31a0c778542 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/ProfileHistoryEventManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/ProfileHistoryEventManagerImpl.java @@ -2,7 +2,7 @@ import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.manager.v3.ProfileHistoryEventManager; import org.orcid.core.profile.history.ProfileHistoryEventType; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/ProfileInterstitialFlagManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/ProfileInterstitialFlagManagerImpl.java index ebef8eae167..3719832e0c5 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/ProfileInterstitialFlagManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/ProfileInterstitialFlagManagerImpl.java @@ -6,7 +6,7 @@ import org.orcid.persistence.jpa.entities.ProfileInterstitialFlagEntity; import org.springframework.transaction.annotation.Transactional; -import javax.annotation.Resource; +import jakarta.annotation.Resource; /** * diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/ProfileKeywordManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/ProfileKeywordManagerImpl.java index 9eea8781519..ba716b0a982 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/ProfileKeywordManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/ProfileKeywordManagerImpl.java @@ -4,8 +4,8 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; -import javax.transaction.Transactional; +import jakarta.annotation.Resource; +import jakarta.transaction.Transactional; import org.orcid.core.exception.ApplicationException; import org.orcid.core.exception.OrcidDuplicatedElementException; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/RecordNameManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/RecordNameManagerImpl.java index 5a89adc9864..972179eb6f9 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/RecordNameManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/RecordNameManagerImpl.java @@ -2,7 +2,7 @@ import java.util.Date; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.manager.SourceNameCacheManager; import org.orcid.core.manager.v3.RecordNameManager; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/ResearchResourceManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/ResearchResourceManagerImpl.java index 457cb357d48..377ed96a1dd 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/ResearchResourceManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/ResearchResourceManagerImpl.java @@ -2,8 +2,8 @@ import java.util.*; -import javax.annotation.Resource; -import javax.transaction.Transactional; +import jakarta.annotation.Resource; +import jakarta.transaction.Transactional; import org.orcid.core.adapter.v3.JpaJaxbResearchResourceAdapter; import org.orcid.core.manager.ClientDetailsEntityCacheManager; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/ResearcherUrlManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/ResearcherUrlManagerImpl.java index f99d412b013..4b1747ee2ce 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/ResearcherUrlManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/ResearcherUrlManagerImpl.java @@ -4,7 +4,7 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.exception.ApplicationException; import org.orcid.core.exception.OrcidDuplicatedElementException; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/SourceManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/SourceManagerImpl.java index c60d63f5fac..ed477529f4b 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/SourceManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/SourceManagerImpl.java @@ -1,6 +1,6 @@ package org.orcid.core.manager.v3.impl; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.commons.lang3.StringUtils; import org.orcid.core.common.util.AuthenticationUtils; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/SpamManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/SpamManagerImpl.java index 4e29535419c..36f30f03ed8 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/SpamManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/SpamManagerImpl.java @@ -2,7 +2,7 @@ import java.util.Date; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.manager.v3.ProfileEntityManager; import org.orcid.core.manager.v3.SpamManager; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/WorkManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/WorkManagerImpl.java index d48199e9feb..6e1d6c2d040 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/WorkManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/WorkManagerImpl.java @@ -10,7 +10,7 @@ import java.util.Map; import java.util.Set; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.commons.lang3.StringUtils; import org.orcid.core.adapter.jsonidentifier.converter.JSONWorkExternalIdentifiersConverterV3; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/WorksCacheManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/WorksCacheManagerImpl.java index 83ff1774af8..1338f83606f 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/WorksCacheManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/WorksCacheManagerImpl.java @@ -1,6 +1,6 @@ package org.orcid.core.manager.v3.impl; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.cache.GenericCacheManager; import org.orcid.core.cache.OrcidString; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/WorksExtendedCacheManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/WorksExtendedCacheManagerImpl.java index 7849108a2dd..94f37db383a 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/WorksExtendedCacheManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/WorksExtendedCacheManagerImpl.java @@ -7,7 +7,7 @@ import org.orcid.pojo.WorkSummaryExtended; import org.orcid.pojo.WorksExtended; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import java.util.List; public class WorksExtendedCacheManagerImpl implements WorksExtendedCacheManager { diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/AddressManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/AddressManagerReadOnlyImpl.java index c5e00c2eb62..6beb4479d30 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/AddressManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/AddressManagerReadOnlyImpl.java @@ -2,7 +2,7 @@ import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.adapter.v3.JpaJaxbAddressAdapter; import org.orcid.core.manager.v3.read_only.AddressManagerReadOnly; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/AffiliationsManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/AffiliationsManagerReadOnlyImpl.java index a6ac3ad8380..91e662ed677 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/AffiliationsManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/AffiliationsManagerReadOnlyImpl.java @@ -6,7 +6,7 @@ import java.util.Map; import java.util.Set; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.adapter.v3.JpaJaxbDistinctionAdapter; import org.orcid.core.adapter.v3.JpaJaxbEducationAdapter; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ClientDetailsManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ClientDetailsManagerReadOnlyImpl.java index 288031c9ade..c3fbaffd1f9 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ClientDetailsManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ClientDetailsManagerReadOnlyImpl.java @@ -2,7 +2,7 @@ import java.util.*; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.NoResultException; import org.orcid.core.adapter.v3.JpaJaxbClientAdapter; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ClientManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ClientManagerReadOnlyImpl.java index aadb30b5616..314cf0f309f 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ClientManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ClientManagerReadOnlyImpl.java @@ -4,7 +4,7 @@ import java.util.List; import java.util.Set; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.adapter.v3.JpaJaxbClientAdapter; import org.orcid.core.manager.v3.read_only.ClientManagerReadOnly; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/EmailManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/EmailManagerReadOnlyImpl.java index 0f9b0e08a9f..1537d145016 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/EmailManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/EmailManagerReadOnlyImpl.java @@ -9,7 +9,7 @@ import java.util.TreeMap; import java.util.stream.Collectors; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.commons.lang3.StringUtils; import org.orcid.core.adapter.v3.JpaJaxbEmailAdapter; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ExternalIdentifierManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ExternalIdentifierManagerReadOnlyImpl.java index 611ffa104db..ccc7ccc343c 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ExternalIdentifierManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ExternalIdentifierManagerReadOnlyImpl.java @@ -2,7 +2,7 @@ import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.adapter.v3.JpaJaxbExternalIdentifierAdapter; import org.orcid.core.manager.v3.read_only.ExternalIdentifierManagerReadOnly; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/GivenPermissionToManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/GivenPermissionToManagerReadOnlyImpl.java index bff0477f981..b6110caeef6 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/GivenPermissionToManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/GivenPermissionToManagerReadOnlyImpl.java @@ -3,7 +3,7 @@ import java.util.ArrayList; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.manager.v3.read_only.GivenPermissionToManagerReadOnly; import org.orcid.core.manager.v3.read_only.RecordNameManagerReadOnly; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/GroupIdRecordManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/GroupIdRecordManagerReadOnlyImpl.java index 62aa039015b..2644484dca5 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/GroupIdRecordManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/GroupIdRecordManagerReadOnlyImpl.java @@ -3,7 +3,7 @@ import java.util.List; import java.util.Optional; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.NoResultException; import org.orcid.core.adapter.v3.JpaJaxbGroupIdRecordAdapter; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/GroupingSuggestionManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/GroupingSuggestionManagerReadOnlyImpl.java index 789e9449380..50cbf3c8553 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/GroupingSuggestionManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/GroupingSuggestionManagerReadOnlyImpl.java @@ -2,7 +2,7 @@ import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.manager.v3.GroupingSuggestionsCacheManager; import org.orcid.core.manager.v3.read_only.GroupingSuggestionManagerReadOnly; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/OtherNameManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/OtherNameManagerReadOnlyImpl.java index 8e767095758..a91e0ed1c05 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/OtherNameManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/OtherNameManagerReadOnlyImpl.java @@ -2,7 +2,7 @@ import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.adapter.v3.JpaJaxbOtherNameAdapter; import org.orcid.core.manager.v3.read_only.OtherNameManagerReadOnly; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/PeerReviewManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/PeerReviewManagerReadOnlyImpl.java index 34dea3c161a..7305435a9c4 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/PeerReviewManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/PeerReviewManagerReadOnlyImpl.java @@ -4,7 +4,7 @@ import java.util.*; import java.util.stream.Collectors; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.adapter.v3.JpaJaxbPeerReviewAdapter; import org.orcid.core.manager.impl.ClientDetailsManagerImpl; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/PersonDetailsManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/PersonDetailsManagerReadOnlyImpl.java index a31f7905ad4..97ad83a9af3 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/PersonDetailsManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/PersonDetailsManagerReadOnlyImpl.java @@ -35,7 +35,7 @@ import liquibase.repackaged.org.apache.commons.lang3.StringUtils; -import javax.annotation.Resource; +import jakarta.annotation.Resource; public class PersonDetailsManagerReadOnlyImpl extends ManagerReadOnlyBaseImpl implements PersonDetailsManagerReadOnly { diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ProfileEmailDomainManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ProfileEmailDomainManagerReadOnlyImpl.java index 5d54da3dfef..15fda28dab7 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ProfileEmailDomainManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ProfileEmailDomainManagerReadOnlyImpl.java @@ -6,7 +6,7 @@ import org.orcid.persistence.dao.ProfileEmailDomainDao; import org.orcid.persistence.jpa.entities.ProfileEmailDomainEntity; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import java.util.List; /** diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ProfileEntityManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ProfileEntityManagerReadOnlyImpl.java index 17cf0aae4b3..76593c005a1 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ProfileEntityManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ProfileEntityManagerReadOnlyImpl.java @@ -9,7 +9,7 @@ import org.orcid.pojo.ajaxForm.PojoUtil; import org.springframework.cache.annotation.Cacheable; -import javax.annotation.Resource; +import jakarta.annotation.Resource; public class ProfileEntityManagerReadOnlyImpl extends ManagerReadOnlyBaseImpl implements ProfileEntityManagerReadOnly { diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ProfileFundingManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ProfileFundingManagerReadOnlyImpl.java index bf9673d1c98..630936fc4d9 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ProfileFundingManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ProfileFundingManagerReadOnlyImpl.java @@ -4,7 +4,7 @@ import java.util.List; import java.util.Set; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.adapter.v3.JpaJaxbFundingAdapter; import org.orcid.core.manager.v3.read_only.ProfileFundingManagerReadOnly; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ProfileInterstitialFlagManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ProfileInterstitialFlagManagerReadOnlyImpl.java index 34ba8a9ee9c..a964b481ee4 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ProfileInterstitialFlagManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ProfileInterstitialFlagManagerReadOnlyImpl.java @@ -6,7 +6,7 @@ import org.orcid.persistence.dao.ProfileInterstitialFlagDao; import org.orcid.persistence.jpa.entities.ProfileInterstitialFlagEntity; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import java.util.ArrayList; import java.util.List; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ProfileKeywordManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ProfileKeywordManagerReadOnlyImpl.java index 50096829da5..adda4d7e910 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ProfileKeywordManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ProfileKeywordManagerReadOnlyImpl.java @@ -2,7 +2,7 @@ import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.adapter.v3.JpaJaxbKeywordAdapter; import org.orcid.core.manager.v3.read_only.ProfileKeywordManagerReadOnly; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/RecordManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/RecordManagerReadOnlyImpl.java index efb9a5bcba7..f56766673ca 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/RecordManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/RecordManagerReadOnlyImpl.java @@ -1,6 +1,6 @@ package org.orcid.core.manager.v3.read_only.impl; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.manager.ProfileEntityCacheManager; import org.orcid.core.manager.SourceNameCacheManager; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/RecordNameManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/RecordNameManagerReadOnlyImpl.java index 27fe5aa5e63..067419fb3a6 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/RecordNameManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/RecordNameManagerReadOnlyImpl.java @@ -1,6 +1,6 @@ package org.orcid.core.manager.v3.read_only.impl; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.commons.lang3.StringUtils; import org.orcid.core.adapter.v3.JpaJaxbNameAdapter; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ResearchResourceManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ResearchResourceManagerReadOnlyImpl.java index 33bf5ed06b2..156c766ab08 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ResearchResourceManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ResearchResourceManagerReadOnlyImpl.java @@ -3,8 +3,8 @@ import java.util.List; import java.util.Set; -import javax.annotation.Resource; -import javax.transaction.Transactional; +import jakarta.annotation.Resource; +import jakarta.transaction.Transactional; import org.orcid.core.adapter.v3.JpaJaxbResearchResourceAdapter; import org.orcid.core.manager.v3.read_only.ResearchResourceManagerReadOnly; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ResearcherUrlManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ResearcherUrlManagerReadOnlyImpl.java index 5f31e63c238..0fe18c28289 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ResearcherUrlManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ResearcherUrlManagerReadOnlyImpl.java @@ -2,7 +2,7 @@ import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.adapter.v3.JpaJaxbResearcherUrlAdapter; import org.orcid.core.manager.v3.read_only.ResearcherUrlManagerReadOnly; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/SpamManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/SpamManagerReadOnlyImpl.java index 8f10f4ff899..ec0826855c2 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/SpamManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/SpamManagerReadOnlyImpl.java @@ -1,6 +1,6 @@ package org.orcid.core.manager.v3.read_only.impl; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.adapter.v3.JpaJaxbSpamAdapter; import org.orcid.core.manager.v3.ProfileEntityManager; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/WorkManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/WorkManagerReadOnlyImpl.java index dec2ec560a5..49a0feb935e 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/WorkManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/WorkManagerReadOnlyImpl.java @@ -9,8 +9,8 @@ import java.util.Set; import java.util.stream.Collectors; -import javax.annotation.PostConstruct; -import javax.annotation.Resource; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; import org.orcid.core.adapter.jsonidentifier.converter.JSONWorkExternalIdentifiersConverterV3; import org.orcid.core.adapter.v3.JpaJaxbWorkAdapter; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/validator/ActivityValidator.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/validator/ActivityValidator.java index 8f310d1a961..27d66a58e00 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/validator/ActivityValidator.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/validator/ActivityValidator.java @@ -12,7 +12,7 @@ import java.util.regex.Pattern; import java.util.stream.Collectors; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.commons.lang3.StringUtils; import org.orcid.core.exception.ActivityIdentifierValidationException; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/validator/ExternalIDValidator.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/validator/ExternalIDValidator.java index eaae9602bdc..7f7c3151e80 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/validator/ExternalIDValidator.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/validator/ExternalIDValidator.java @@ -3,7 +3,7 @@ import java.util.ArrayList; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.exception.ActivityIdentifierValidationException; import org.orcid.core.manager.IdentifierTypeManager; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/validator/ActivityValidator.java b/orcid-core/src/main/java/org/orcid/core/manager/validator/ActivityValidator.java index f4e86b931f0..61b13881e06 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/validator/ActivityValidator.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/validator/ActivityValidator.java @@ -12,7 +12,7 @@ import java.util.regex.Pattern; import java.util.stream.Collectors; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.commons.lang3.StringUtils; import org.orcid.core.exception.ActivityIdentifierValidationException; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/validator/ExternalIDValidator.java b/orcid-core/src/main/java/org/orcid/core/manager/validator/ExternalIDValidator.java index c6586cd4330..aff6028442d 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/validator/ExternalIDValidator.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/validator/ExternalIDValidator.java @@ -3,7 +3,7 @@ import java.util.ArrayList; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.exception.ActivityIdentifierValidationException; import org.orcid.core.manager.IdentifierTypeManager; diff --git a/orcid-core/src/main/java/org/orcid/core/messaging/JmsMessageSender.java b/orcid-core/src/main/java/org/orcid/core/messaging/JmsMessageSender.java index d855e4bb3fd..c5757a79928 100644 --- a/orcid-core/src/main/java/org/orcid/core/messaging/JmsMessageSender.java +++ b/orcid-core/src/main/java/org/orcid/core/messaging/JmsMessageSender.java @@ -2,7 +2,7 @@ import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.utils.listener.LastModifiedMessage; import org.orcid.utils.solr.entities.OrgDisambiguatedSolrDocument; diff --git a/orcid-core/src/main/java/org/orcid/core/model/EducationQualification.java b/orcid-core/src/main/java/org/orcid/core/model/EducationQualification.java index bdd2de9f6e8..533a0cff7e0 100644 --- a/orcid-core/src/main/java/org/orcid/core/model/EducationQualification.java +++ b/orcid-core/src/main/java/org/orcid/core/model/EducationQualification.java @@ -2,11 +2,11 @@ import java.util.Objects; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; import org.orcid.jaxb.model.v3.release.common.FuzzyDate; diff --git a/orcid-core/src/main/java/org/orcid/core/model/EducationQualifications.java b/orcid-core/src/main/java/org/orcid/core/model/EducationQualifications.java index f20f1a9e3dd..4caa1e04843 100644 --- a/orcid-core/src/main/java/org/orcid/core/model/EducationQualifications.java +++ b/orcid-core/src/main/java/org/orcid/core/model/EducationQualifications.java @@ -4,11 +4,11 @@ import java.util.List; import java.util.Objects; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/orcid-core/src/main/java/org/orcid/core/model/EmailDomain.java b/orcid-core/src/main/java/org/orcid/core/model/EmailDomain.java index 5b1686f6e99..76f0ae765a8 100644 --- a/orcid-core/src/main/java/org/orcid/core/model/EmailDomain.java +++ b/orcid-core/src/main/java/org/orcid/core/model/EmailDomain.java @@ -2,12 +2,12 @@ import java.util.Objects; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlTransient; -import javax.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlTransient; +import jakarta.xml.bind.annotation.XmlType; import org.orcid.jaxb.model.v3.release.common.FuzzyDate; import org.orcid.jaxb.model.v3.release.common.VerificationDate; diff --git a/orcid-core/src/main/java/org/orcid/core/model/EmailDomains.java b/orcid-core/src/main/java/org/orcid/core/model/EmailDomains.java index 138c28add94..2d703846bf9 100644 --- a/orcid-core/src/main/java/org/orcid/core/model/EmailDomains.java +++ b/orcid-core/src/main/java/org/orcid/core/model/EmailDomains.java @@ -4,11 +4,11 @@ import java.util.List; import java.util.Objects; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/orcid-core/src/main/java/org/orcid/core/model/Employment.java b/orcid-core/src/main/java/org/orcid/core/model/Employment.java index a2ab224d1a8..20d72d04e03 100644 --- a/orcid-core/src/main/java/org/orcid/core/model/Employment.java +++ b/orcid-core/src/main/java/org/orcid/core/model/Employment.java @@ -3,11 +3,11 @@ import java.io.Serializable; import java.util.Objects; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; import org.orcid.jaxb.model.v3.release.common.FuzzyDate; import org.orcid.jaxb.model.v3.release.record.AffiliationType; diff --git a/orcid-core/src/main/java/org/orcid/core/model/Employments.java b/orcid-core/src/main/java/org/orcid/core/model/Employments.java index 102ee8dad07..db75b922299 100644 --- a/orcid-core/src/main/java/org/orcid/core/model/Employments.java +++ b/orcid-core/src/main/java/org/orcid/core/model/Employments.java @@ -4,11 +4,11 @@ import java.util.List; import java.util.Objects; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/orcid-core/src/main/java/org/orcid/core/model/ExternalIdentifier.java b/orcid-core/src/main/java/org/orcid/core/model/ExternalIdentifier.java index a2c6d01ffa1..d804381e135 100644 --- a/orcid-core/src/main/java/org/orcid/core/model/ExternalIdentifier.java +++ b/orcid-core/src/main/java/org/orcid/core/model/ExternalIdentifier.java @@ -2,11 +2,11 @@ import java.util.Objects; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/orcid-core/src/main/java/org/orcid/core/model/ExternalIdentifiers.java b/orcid-core/src/main/java/org/orcid/core/model/ExternalIdentifiers.java index c6b0894ff43..9df687754ee 100644 --- a/orcid-core/src/main/java/org/orcid/core/model/ExternalIdentifiers.java +++ b/orcid-core/src/main/java/org/orcid/core/model/ExternalIdentifiers.java @@ -4,11 +4,11 @@ import java.util.List; import java.util.Objects; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/orcid-core/src/main/java/org/orcid/core/model/Fundings.java b/orcid-core/src/main/java/org/orcid/core/model/Fundings.java index 628c6ce7735..2cf679f38a3 100644 --- a/orcid-core/src/main/java/org/orcid/core/model/Fundings.java +++ b/orcid-core/src/main/java/org/orcid/core/model/Fundings.java @@ -2,7 +2,7 @@ import java.io.Serializable; -import javax.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlRootElement; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/orcid-core/src/main/java/org/orcid/core/model/ItemsCount.java b/orcid-core/src/main/java/org/orcid/core/model/ItemsCount.java index 164ff01e5fc..0bf87c6c5ff 100644 --- a/orcid-core/src/main/java/org/orcid/core/model/ItemsCount.java +++ b/orcid-core/src/main/java/org/orcid/core/model/ItemsCount.java @@ -2,10 +2,10 @@ import java.util.Objects; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlType; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/orcid-core/src/main/java/org/orcid/core/model/PeerReviews.java b/orcid-core/src/main/java/org/orcid/core/model/PeerReviews.java index 0dd0c61b285..dd797f0085c 100644 --- a/orcid-core/src/main/java/org/orcid/core/model/PeerReviews.java +++ b/orcid-core/src/main/java/org/orcid/core/model/PeerReviews.java @@ -3,11 +3,11 @@ import java.io.Serializable; import java.util.Objects; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/orcid-core/src/main/java/org/orcid/core/model/ProfessionalActivities.java b/orcid-core/src/main/java/org/orcid/core/model/ProfessionalActivities.java index ab0fbcd795e..00796514103 100644 --- a/orcid-core/src/main/java/org/orcid/core/model/ProfessionalActivities.java +++ b/orcid-core/src/main/java/org/orcid/core/model/ProfessionalActivities.java @@ -4,11 +4,11 @@ import java.util.List; import java.util.Objects; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/orcid-core/src/main/java/org/orcid/core/model/ProfessionalActivity.java b/orcid-core/src/main/java/org/orcid/core/model/ProfessionalActivity.java index fb2a1e8e01f..be9d3bec491 100644 --- a/orcid-core/src/main/java/org/orcid/core/model/ProfessionalActivity.java +++ b/orcid-core/src/main/java/org/orcid/core/model/ProfessionalActivity.java @@ -2,11 +2,11 @@ import java.util.Objects; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; import org.orcid.jaxb.model.v3.release.common.FuzzyDate; diff --git a/orcid-core/src/main/java/org/orcid/core/model/RecordSummary.java b/orcid-core/src/main/java/org/orcid/core/model/RecordSummary.java index cc8189048da..e6689b2c372 100644 --- a/orcid-core/src/main/java/org/orcid/core/model/RecordSummary.java +++ b/orcid-core/src/main/java/org/orcid/core/model/RecordSummary.java @@ -3,13 +3,13 @@ import java.io.Serializable; import java.util.Objects; -import javax.annotation.Resource; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlTransient; -import javax.xml.bind.annotation.XmlType; +import jakarta.annotation.Resource; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlTransient; +import jakarta.xml.bind.annotation.XmlType; import org.orcid.core.manager.impl.OrcidUrlManager; import org.orcid.jaxb.model.v3.release.common.CreatedDate; diff --git a/orcid-core/src/main/java/org/orcid/core/model/ResearchResources.java b/orcid-core/src/main/java/org/orcid/core/model/ResearchResources.java index 3748e41b223..e0d5973d701 100644 --- a/orcid-core/src/main/java/org/orcid/core/model/ResearchResources.java +++ b/orcid-core/src/main/java/org/orcid/core/model/ResearchResources.java @@ -2,7 +2,7 @@ import java.io.Serializable; -import javax.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlRootElement; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/orcid-core/src/main/java/org/orcid/core/model/Works.java b/orcid-core/src/main/java/org/orcid/core/model/Works.java index 1404d68aa15..5a305401eb6 100644 --- a/orcid-core/src/main/java/org/orcid/core/model/Works.java +++ b/orcid-core/src/main/java/org/orcid/core/model/Works.java @@ -2,7 +2,7 @@ import java.io.Serializable; -import javax.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlRootElement; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/orcid-core/src/main/java/org/orcid/core/model/package-info.java b/orcid-core/src/main/java/org/orcid/core/model/package-info.java index 75d5bd31108..0320e5fc652 100644 --- a/orcid-core/src/main/java/org/orcid/core/model/package-info.java +++ b/orcid-core/src/main/java/org/orcid/core/model/package-info.java @@ -1,7 +1,7 @@ -@javax.xml.bind.annotation.XmlSchema(namespace = "http://www.orcid.org/ns/record", xmlns = { - @javax.xml.bind.annotation.XmlNs(prefix = "activities", namespaceURI = "http://www.orcid.org/ns/activities"), - @javax.xml.bind.annotation.XmlNs(prefix = "common", namespaceURI = "http://www.orcid.org/ns/common"), - @javax.xml.bind.annotation.XmlNs(prefix = "summary", namespaceURI = "http://www.orcid.org/ns/summary")}, - elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED) +@jakarta.xml.bind.annotation.XmlSchema(namespace = "http://www.orcid.org/ns/record", xmlns = { + @jakarta.xml.bind.annotation.XmlNs(prefix = "activities", namespaceURI = "http://www.orcid.org/ns/activities"), + @jakarta.xml.bind.annotation.XmlNs(prefix = "common", namespaceURI = "http://www.orcid.org/ns/common"), + @jakarta.xml.bind.annotation.XmlNs(prefix = "summary", namespaceURI = "http://www.orcid.org/ns/summary")}, + elementFormDefault = jakarta.xml.bind.annotation.XmlNsForm.QUALIFIED) package org.orcid.core.model; diff --git a/orcid-core/src/main/java/org/orcid/core/oauth/OAuthError.java b/orcid-core/src/main/java/org/orcid/core/oauth/OAuthError.java index e61dd176b67..93b697299f1 100644 --- a/orcid-core/src/main/java/org/orcid/core/oauth/OAuthError.java +++ b/orcid-core/src/main/java/org/orcid/core/oauth/OAuthError.java @@ -1,6 +1,6 @@ package org.orcid.core.oauth; -import javax.ws.rs.core.Response.Status; +import jakarta.ws.rs.core.Response.Status; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; diff --git a/orcid-core/src/main/java/org/orcid/core/oauth/OAuthErrorUtils.java b/orcid-core/src/main/java/org/orcid/core/oauth/OAuthErrorUtils.java index a63b7f07347..7a4ce53738a 100644 --- a/orcid-core/src/main/java/org/orcid/core/oauth/OAuthErrorUtils.java +++ b/orcid-core/src/main/java/org/orcid/core/oauth/OAuthErrorUtils.java @@ -1,6 +1,6 @@ package org.orcid.core.oauth; -import javax.ws.rs.core.Response.Status; +import jakarta.ws.rs.core.Response.Status; import de.undercouch.citeproc.helper.tool.MissingArgumentException; import org.orcid.core.exception.ClientDeactivatedException; diff --git a/orcid-core/src/main/java/org/orcid/core/oauth/OrcidUserAuthentication.java b/orcid-core/src/main/java/org/orcid/core/oauth/OrcidUserAuthentication.java index 6fec889b48d..f9bede234af 100644 --- a/orcid-core/src/main/java/org/orcid/core/oauth/OrcidUserAuthentication.java +++ b/orcid-core/src/main/java/org/orcid/core/oauth/OrcidUserAuthentication.java @@ -2,7 +2,7 @@ import java.util.Collection; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.commons.lang3.StringUtils; import org.orcid.core.manager.v3.read_only.RecordNameManagerReadOnly; diff --git a/orcid-core/src/main/java/org/orcid/core/oauth/authorizationServer/AuthorizationServerUtil.java b/orcid-core/src/main/java/org/orcid/core/oauth/authorizationServer/AuthorizationServerUtil.java index c0fc48d13bc..f19e9caf12a 100644 --- a/orcid-core/src/main/java/org/orcid/core/oauth/authorizationServer/AuthorizationServerUtil.java +++ b/orcid-core/src/main/java/org/orcid/core/oauth/authorizationServer/AuthorizationServerUtil.java @@ -11,9 +11,9 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; -import javax.annotation.Resource; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; +import jakarta.annotation.Resource; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URISyntaxException; diff --git a/orcid-core/src/main/java/org/orcid/core/orgs/grouping/OrgGrouping.java b/orcid-core/src/main/java/org/orcid/core/orgs/grouping/OrgGrouping.java index 103cb43feb1..c2422aea7e0 100644 --- a/orcid-core/src/main/java/org/orcid/core/orgs/grouping/OrgGrouping.java +++ b/orcid-core/src/main/java/org/orcid/core/orgs/grouping/OrgGrouping.java @@ -8,7 +8,7 @@ import java.util.Map; import java.util.stream.Collectors; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.commons.lang3.StringUtils; import org.orcid.core.manager.OrgDisambiguatedManager; diff --git a/orcid-core/src/main/java/org/orcid/core/profileEvent/ProfileEventManager.java b/orcid-core/src/main/java/org/orcid/core/profileEvent/ProfileEventManager.java index 3ca894d6562..3498c19fee0 100644 --- a/orcid-core/src/main/java/org/orcid/core/profileEvent/ProfileEventManager.java +++ b/orcid-core/src/main/java/org/orcid/core/profileEvent/ProfileEventManager.java @@ -9,7 +9,7 @@ import java.util.concurrent.Executors; import java.util.concurrent.Future; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.commons.lang3.time.DurationFormatUtils; import org.kohsuke.args4j.CmdLineException; diff --git a/orcid-core/src/main/java/org/orcid/core/security/OrcidUserDetailsServiceImpl.java b/orcid-core/src/main/java/org/orcid/core/security/OrcidUserDetailsServiceImpl.java index 1467e40d0a9..097cf1d64b1 100644 --- a/orcid-core/src/main/java/org/orcid/core/security/OrcidUserDetailsServiceImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/security/OrcidUserDetailsServiceImpl.java @@ -20,7 +20,7 @@ import java.util.Collection; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.RandomStringUtils; diff --git a/orcid-core/src/main/java/org/orcid/core/solr/OrcidSolrOrgsClient.java b/orcid-core/src/main/java/org/orcid/core/solr/OrcidSolrOrgsClient.java index 6f133fba908..3c23f64bdef 100644 --- a/orcid-core/src/main/java/org/orcid/core/solr/OrcidSolrOrgsClient.java +++ b/orcid-core/src/main/java/org/orcid/core/solr/OrcidSolrOrgsClient.java @@ -8,7 +8,7 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.SolrQuery; diff --git a/orcid-core/src/main/java/org/orcid/core/solr/OrcidSolrProfileClient.java b/orcid-core/src/main/java/org/orcid/core/solr/OrcidSolrProfileClient.java index 5ce1740c173..d88eb6f4fbf 100644 --- a/orcid-core/src/main/java/org/orcid/core/solr/OrcidSolrProfileClient.java +++ b/orcid-core/src/main/java/org/orcid/core/solr/OrcidSolrProfileClient.java @@ -10,7 +10,7 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.SolrQuery; diff --git a/orcid-core/src/main/java/org/orcid/core/solr/SolrBeanFactory.java b/orcid-core/src/main/java/org/orcid/core/solr/SolrBeanFactory.java index 09a3b5dec0e..c566bd285d0 100644 --- a/orcid-core/src/main/java/org/orcid/core/solr/SolrBeanFactory.java +++ b/orcid-core/src/main/java/org/orcid/core/solr/SolrBeanFactory.java @@ -1,6 +1,6 @@ package org.orcid.core.solr; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.impl.HttpSolrClient; diff --git a/orcid-core/src/main/java/org/orcid/core/stats/impl/StatisticsManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/stats/impl/StatisticsManagerImpl.java index c066589d0a2..b907a5957eb 100644 --- a/orcid-core/src/main/java/org/orcid/core/stats/impl/StatisticsManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/stats/impl/StatisticsManagerImpl.java @@ -3,7 +3,7 @@ import java.text.NumberFormat; import java.util.Locale; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.stats.StatisticsManager; import org.orcid.core.utils.statistics.StatisticsEnum; diff --git a/orcid-core/src/main/java/org/orcid/core/togglz/OrcidTogglzConfiguration.java b/orcid-core/src/main/java/org/orcid/core/togglz/OrcidTogglzConfiguration.java index 3bce408cfe3..da39190d538 100644 --- a/orcid-core/src/main/java/org/orcid/core/togglz/OrcidTogglzConfiguration.java +++ b/orcid-core/src/main/java/org/orcid/core/togglz/OrcidTogglzConfiguration.java @@ -1,6 +1,6 @@ package org.orcid.core.togglz; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import javax.sql.DataSource; import org.orcid.core.security.OrcidRoles; diff --git a/orcid-core/src/main/java/org/orcid/core/utils/FunderIdentifierType.java b/orcid-core/src/main/java/org/orcid/core/utils/FunderIdentifierType.java index 9a197e8bf75..dcfda2ce995 100644 --- a/orcid-core/src/main/java/org/orcid/core/utils/FunderIdentifierType.java +++ b/orcid-core/src/main/java/org/orcid/core/utils/FunderIdentifierType.java @@ -8,9 +8,9 @@ package org.orcid.core.utils; -import javax.xml.bind.annotation.XmlEnum; -import javax.xml.bind.annotation.XmlEnumValue; -import javax.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlEnum; +import jakarta.xml.bind.annotation.XmlEnumValue; +import jakarta.xml.bind.annotation.XmlType; /** * TODO: Once the jersey migration is over, this could be moved back to the orcid-utils package so it could be reused form the orcid-persistence package diff --git a/orcid-core/src/main/java/org/orcid/core/utils/OrcidEhCacheManagerFactoryBean.java b/orcid-core/src/main/java/org/orcid/core/utils/OrcidEhCacheManagerFactoryBean.java index 0124d4f33db..b554ba7aeb9 100644 --- a/orcid-core/src/main/java/org/orcid/core/utils/OrcidEhCacheManagerFactoryBean.java +++ b/orcid-core/src/main/java/org/orcid/core/utils/OrcidEhCacheManagerFactoryBean.java @@ -2,7 +2,7 @@ import java.io.File; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang3.RandomStringUtils; diff --git a/orcid-core/src/main/java/org/orcid/core/utils/OrcidMessageUtil.java b/orcid-core/src/main/java/org/orcid/core/utils/OrcidMessageUtil.java index 4472e764d3f..aa2029457c1 100644 --- a/orcid-core/src/main/java/org/orcid/core/utils/OrcidMessageUtil.java +++ b/orcid-core/src/main/java/org/orcid/core/utils/OrcidMessageUtil.java @@ -2,7 +2,7 @@ import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.manager.SourceNameCacheManager; import org.orcid.jaxb.model.message.Address; diff --git a/orcid-core/src/main/java/org/orcid/core/utils/SourceEntityUtils.java b/orcid-core/src/main/java/org/orcid/core/utils/SourceEntityUtils.java index 747c178af4f..9f908db3001 100644 --- a/orcid-core/src/main/java/org/orcid/core/utils/SourceEntityUtils.java +++ b/orcid-core/src/main/java/org/orcid/core/utils/SourceEntityUtils.java @@ -1,6 +1,6 @@ package org.orcid.core.utils; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.commons.lang3.StringUtils; import org.orcid.core.manager.ClientDetailsEntityCacheManager; diff --git a/orcid-core/src/main/java/org/orcid/core/utils/VerifyEmailUtils.java b/orcid-core/src/main/java/org/orcid/core/utils/VerifyEmailUtils.java index 6ddfc0c6beb..c09f14234ca 100644 --- a/orcid-core/src/main/java/org/orcid/core/utils/VerifyEmailUtils.java +++ b/orcid-core/src/main/java/org/orcid/core/utils/VerifyEmailUtils.java @@ -8,7 +8,7 @@ import java.util.Locale; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import javax.xml.datatype.XMLGregorianCalendar; import org.apache.commons.codec.binary.Base64; diff --git a/orcid-core/src/main/java/org/orcid/core/utils/cache/redis/RedisClient.java b/orcid-core/src/main/java/org/orcid/core/utils/cache/redis/RedisClient.java index d315f5d8589..bf4551b2c0a 100644 --- a/orcid-core/src/main/java/org/orcid/core/utils/cache/redis/RedisClient.java +++ b/orcid-core/src/main/java/org/orcid/core/utils/cache/redis/RedisClient.java @@ -10,8 +10,8 @@ import java.util.Set; import java.util.List; -import javax.annotation.PostConstruct; -import javax.annotation.Resource; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; import org.codehaus.jettison.json.JSONException; import org.codehaus.jettison.json.JSONObject; diff --git a/orcid-core/src/main/java/org/orcid/core/utils/v3/identifiers/PIDNormalizationService.java b/orcid-core/src/main/java/org/orcid/core/utils/v3/identifiers/PIDNormalizationService.java index 35f6bc8f826..4a25018e113 100644 --- a/orcid-core/src/main/java/org/orcid/core/utils/v3/identifiers/PIDNormalizationService.java +++ b/orcid-core/src/main/java/org/orcid/core/utils/v3/identifiers/PIDNormalizationService.java @@ -12,8 +12,8 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; -import javax.annotation.PostConstruct; -import javax.annotation.Resource; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; import org.apache.commons.lang3.StringUtils; import org.apache.commons.validator.routines.UrlValidator; diff --git a/orcid-core/src/main/java/org/orcid/core/utils/v3/identifiers/PIDResolverService.java b/orcid-core/src/main/java/org/orcid/core/utils/v3/identifiers/PIDResolverService.java index 2dd73c21389..72bb1600858 100644 --- a/orcid-core/src/main/java/org/orcid/core/utils/v3/identifiers/PIDResolverService.java +++ b/orcid-core/src/main/java/org/orcid/core/utils/v3/identifiers/PIDResolverService.java @@ -8,8 +8,8 @@ import java.util.Locale; import java.util.Map; -import javax.annotation.PostConstruct; -import javax.annotation.Resource; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; import org.orcid.core.manager.IdentifierTypeManager; import org.orcid.core.utils.v3.identifiers.resolvers.LinkResolver; diff --git a/orcid-core/src/main/java/org/orcid/core/utils/v3/identifiers/finders/CrossrefFinder.java b/orcid-core/src/main/java/org/orcid/core/utils/v3/identifiers/finders/CrossrefFinder.java index 9d6ede5a787..2ea9edfd6db 100644 --- a/orcid-core/src/main/java/org/orcid/core/utils/v3/identifiers/finders/CrossrefFinder.java +++ b/orcid-core/src/main/java/org/orcid/core/utils/v3/identifiers/finders/CrossrefFinder.java @@ -6,7 +6,7 @@ import java.net.MalformedURLException; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.utils.v3.identifiers.PIDResolverCache; import org.orcid.core.utils.v3.identifiers.normalizers.DOINormalizer; diff --git a/orcid-core/src/main/java/org/orcid/core/utils/v3/identifiers/finders/DataciteFinder.java b/orcid-core/src/main/java/org/orcid/core/utils/v3/identifiers/finders/DataciteFinder.java index 41dbd557069..ec89b33b340 100644 --- a/orcid-core/src/main/java/org/orcid/core/utils/v3/identifiers/finders/DataciteFinder.java +++ b/orcid-core/src/main/java/org/orcid/core/utils/v3/identifiers/finders/DataciteFinder.java @@ -5,7 +5,7 @@ import java.net.MalformedURLException; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.utils.v3.identifiers.PIDResolverCache; import org.orcid.core.utils.v3.identifiers.normalizers.DOINormalizer; diff --git a/orcid-core/src/main/java/org/orcid/core/utils/v3/identifiers/normalizers/CaseSensitiveNormalizer.java b/orcid-core/src/main/java/org/orcid/core/utils/v3/identifiers/normalizers/CaseSensitiveNormalizer.java index 5bdf5ebdd55..3586b82aa1f 100644 --- a/orcid-core/src/main/java/org/orcid/core/utils/v3/identifiers/normalizers/CaseSensitiveNormalizer.java +++ b/orcid-core/src/main/java/org/orcid/core/utils/v3/identifiers/normalizers/CaseSensitiveNormalizer.java @@ -4,8 +4,8 @@ import java.util.Locale; import java.util.Map; -import javax.annotation.PostConstruct; -import javax.annotation.Resource; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; import org.orcid.core.adapter.v3.converter.ContributorsRolesAndSequencesConverter; import org.orcid.core.manager.IdentifierTypeManager; diff --git a/orcid-core/src/main/java/org/orcid/core/utils/v3/identifiers/resolvers/ArXivResolver.java b/orcid-core/src/main/java/org/orcid/core/utils/v3/identifiers/resolvers/ArXivResolver.java index e54e4afc64b..7b5aa44e654 100644 --- a/orcid-core/src/main/java/org/orcid/core/utils/v3/identifiers/resolvers/ArXivResolver.java +++ b/orcid-core/src/main/java/org/orcid/core/utils/v3/identifiers/resolvers/ArXivResolver.java @@ -11,8 +11,8 @@ import java.util.List; import java.util.Stack; -import javax.annotation.Resource; -import javax.ws.rs.core.MediaType; +import jakarta.annotation.Resource; +import jakarta.ws.rs.core.MediaType; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; diff --git a/orcid-core/src/main/java/org/orcid/core/utils/v3/identifiers/resolvers/DOIResolver.java b/orcid-core/src/main/java/org/orcid/core/utils/v3/identifiers/resolvers/DOIResolver.java index a05868cd6e8..2e2f1fa77c1 100644 --- a/orcid-core/src/main/java/org/orcid/core/utils/v3/identifiers/resolvers/DOIResolver.java +++ b/orcid-core/src/main/java/org/orcid/core/utils/v3/identifiers/resolvers/DOIResolver.java @@ -11,7 +11,7 @@ import java.util.List; import java.util.Locale; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.commons.lang3.StringUtils; import org.codehaus.jettison.json.JSONArray; diff --git a/orcid-core/src/main/java/org/orcid/core/utils/v3/identifiers/resolvers/Http200Resolver.java b/orcid-core/src/main/java/org/orcid/core/utils/v3/identifiers/resolvers/Http200Resolver.java index 7613a5a64e9..3f3e8ef3802 100644 --- a/orcid-core/src/main/java/org/orcid/core/utils/v3/identifiers/resolvers/Http200Resolver.java +++ b/orcid-core/src/main/java/org/orcid/core/utils/v3/identifiers/resolvers/Http200Resolver.java @@ -3,8 +3,8 @@ import java.util.ArrayList; import java.util.List; -import javax.annotation.PostConstruct; -import javax.annotation.Resource; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; import org.apache.commons.lang3.StringUtils; import org.orcid.core.utils.v3.identifiers.PIDNormalizationService; diff --git a/orcid-core/src/main/java/org/orcid/core/utils/v3/identifiers/resolvers/ISBNOCLCResolver.java b/orcid-core/src/main/java/org/orcid/core/utils/v3/identifiers/resolvers/ISBNOCLCResolver.java index 04e9f6d64bc..1c44f308778 100644 --- a/orcid-core/src/main/java/org/orcid/core/utils/v3/identifiers/resolvers/ISBNOCLCResolver.java +++ b/orcid-core/src/main/java/org/orcid/core/utils/v3/identifiers/resolvers/ISBNOCLCResolver.java @@ -4,7 +4,7 @@ import org.apache.commons.validator.routines.ISBNValidator; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.commons.lang3.StringUtils; import org.orcid.core.utils.v3.identifiers.PIDNormalizationService; diff --git a/orcid-core/src/main/java/org/orcid/core/utils/v3/identifiers/resolvers/PubMedResolver.java b/orcid-core/src/main/java/org/orcid/core/utils/v3/identifiers/resolvers/PubMedResolver.java index eafbddb123d..91065c35464 100644 --- a/orcid-core/src/main/java/org/orcid/core/utils/v3/identifiers/resolvers/PubMedResolver.java +++ b/orcid-core/src/main/java/org/orcid/core/utils/v3/identifiers/resolvers/PubMedResolver.java @@ -14,8 +14,8 @@ import java.util.List; import java.util.Locale; -import javax.annotation.Resource; -import javax.ws.rs.core.MediaType; +import jakarta.annotation.Resource; +import jakarta.ws.rs.core.MediaType; import org.apache.commons.lang3.StringUtils; import org.codehaus.jettison.json.JSONArray; diff --git a/orcid-core/src/main/java/org/orcid/core/utils/v3/identifiers/resolvers/UnresolvableResolver.java b/orcid-core/src/main/java/org/orcid/core/utils/v3/identifiers/resolvers/UnresolvableResolver.java index 3f47303ee78..355cb3458dd 100644 --- a/orcid-core/src/main/java/org/orcid/core/utils/v3/identifiers/resolvers/UnresolvableResolver.java +++ b/orcid-core/src/main/java/org/orcid/core/utils/v3/identifiers/resolvers/UnresolvableResolver.java @@ -5,8 +5,8 @@ import java.util.Locale; import java.util.Map; -import javax.annotation.PostConstruct; -import javax.annotation.Resource; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; import org.apache.commons.lang3.StringUtils; import org.orcid.core.manager.IdentifierTypeManager; diff --git a/orcid-core/src/main/java/org/orcid/core/version/impl/VersionConverterImplV2_0ToV2_1.java b/orcid-core/src/main/java/org/orcid/core/version/impl/VersionConverterImplV2_0ToV2_1.java index d9cc115d443..b7948bc7aba 100644 --- a/orcid-core/src/main/java/org/orcid/core/version/impl/VersionConverterImplV2_0ToV2_1.java +++ b/orcid-core/src/main/java/org/orcid/core/version/impl/VersionConverterImplV2_0ToV2_1.java @@ -1,6 +1,6 @@ package org.orcid.core.version.impl; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.manager.impl.OrcidUrlManager; import org.orcid.core.version.V2Convertible; diff --git a/orcid-core/src/main/java/org/orcid/core/web/filters/AcceptFilter.java b/orcid-core/src/main/java/org/orcid/core/web/filters/AcceptFilter.java index b26935445d4..c59ed3fc03d 100644 --- a/orcid-core/src/main/java/org/orcid/core/web/filters/AcceptFilter.java +++ b/orcid-core/src/main/java/org/orcid/core/web/filters/AcceptFilter.java @@ -17,7 +17,7 @@ import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequestWrapper; import jakarta.servlet.http.HttpServletResponse; -import javax.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MediaType; import org.orcid.core.manager.impl.OrcidUrlManager; import org.springframework.web.filter.OncePerRequestFilter; diff --git a/orcid-core/src/main/java/org/orcid/core/web/filters/CorsFilter.java b/orcid-core/src/main/java/org/orcid/core/web/filters/CorsFilter.java index 0914a6f68f9..5f7bccf6770 100644 --- a/orcid-core/src/main/java/org/orcid/core/web/filters/CorsFilter.java +++ b/orcid-core/src/main/java/org/orcid/core/web/filters/CorsFilter.java @@ -3,7 +3,7 @@ import java.io.IOException; import java.net.URISyntaxException; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.servlet.FilterChain; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; diff --git a/orcid-core/src/main/java/org/orcid/core/web/filters/CorsFilterWeb.java b/orcid-core/src/main/java/org/orcid/core/web/filters/CorsFilterWeb.java index c9054d348a8..d093f0134a4 100644 --- a/orcid-core/src/main/java/org/orcid/core/web/filters/CorsFilterWeb.java +++ b/orcid-core/src/main/java/org/orcid/core/web/filters/CorsFilterWeb.java @@ -5,7 +5,7 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.servlet.FilterChain; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; diff --git a/orcid-core/src/main/java/org/orcid/core/web/filters/JsonpCallbackFilter.java b/orcid-core/src/main/java/org/orcid/core/web/filters/JsonpCallbackFilter.java index 0fab5a5b09a..3eca0769158 100644 --- a/orcid-core/src/main/java/org/orcid/core/web/filters/JsonpCallbackFilter.java +++ b/orcid-core/src/main/java/org/orcid/core/web/filters/JsonpCallbackFilter.java @@ -4,7 +4,7 @@ import java.io.OutputStream; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.servlet.FilterChain; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; diff --git a/orcid-core/src/main/java/org/orcid/core/web/filters/JsonpCallbackFilterWeb.java b/orcid-core/src/main/java/org/orcid/core/web/filters/JsonpCallbackFilterWeb.java index a000a602728..77edccbd63f 100644 --- a/orcid-core/src/main/java/org/orcid/core/web/filters/JsonpCallbackFilterWeb.java +++ b/orcid-core/src/main/java/org/orcid/core/web/filters/JsonpCallbackFilterWeb.java @@ -5,7 +5,7 @@ import java.net.URISyntaxException; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.servlet.FilterChain; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; diff --git a/orcid-core/src/main/java/org/orcid/pojo/IdentifierType.java b/orcid-core/src/main/java/org/orcid/pojo/IdentifierType.java index 60467c4079c..53b6cd33b77 100644 --- a/orcid-core/src/main/java/org/orcid/pojo/IdentifierType.java +++ b/orcid-core/src/main/java/org/orcid/pojo/IdentifierType.java @@ -3,8 +3,8 @@ import java.io.Serializable; import java.util.Date; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlTransient; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlTransient; import org.orcid.persistence.jpa.entities.ClientDetailsEntity; diff --git a/orcid-core/src/main/java/org/orcid/pojo/WorkGroupExtended.java b/orcid-core/src/main/java/org/orcid/pojo/WorkGroupExtended.java index 6518acab7ac..736312a30dc 100644 --- a/orcid-core/src/main/java/org/orcid/pojo/WorkGroupExtended.java +++ b/orcid-core/src/main/java/org/orcid/pojo/WorkGroupExtended.java @@ -4,7 +4,7 @@ import org.orcid.jaxb.model.v3.release.record.GroupableActivity; import org.orcid.jaxb.model.v3.release.record.summary.ActivityGroup; -import javax.xml.bind.annotation.*; +import jakarta.xml.bind.annotation.*; import java.io.Serializable; import java.util.ArrayList; import java.util.Collection; diff --git a/orcid-core/src/main/java/org/orcid/pojo/WorkSummaryExtended.java b/orcid-core/src/main/java/org/orcid/pojo/WorkSummaryExtended.java index 5f6d56ef8d5..243b940df99 100644 --- a/orcid-core/src/main/java/org/orcid/pojo/WorkSummaryExtended.java +++ b/orcid-core/src/main/java/org/orcid/pojo/WorkSummaryExtended.java @@ -19,7 +19,7 @@ import org.orcid.jaxb.model.v3.release.record.WorkTitle; import org.orcid.jaxb.model.v3.release.record.summary.WorkSummary; -import javax.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlElement; import javax.xml.datatype.DatatypeConfigurationException; import javax.xml.datatype.DatatypeFactory; import javax.xml.datatype.XMLGregorianCalendar; diff --git a/orcid-core/src/main/java/org/orcid/pojo/WorksExtended.java b/orcid-core/src/main/java/org/orcid/pojo/WorksExtended.java index 5d6e5c3f89a..2ecadcb342c 100644 --- a/orcid-core/src/main/java/org/orcid/pojo/WorksExtended.java +++ b/orcid-core/src/main/java/org/orcid/pojo/WorksExtended.java @@ -5,7 +5,7 @@ import org.orcid.jaxb.model.v3.release.record.Group; import org.orcid.jaxb.model.v3.release.record.GroupsContainer; -import javax.xml.bind.annotation.*; +import jakarta.xml.bind.annotation.*; import java.io.Serializable; import java.util.ArrayList; import java.util.Collection; diff --git a/orcid-core/src/main/java/org/orcid/pojo/grouping/WorkGroup.java b/orcid-core/src/main/java/org/orcid/pojo/grouping/WorkGroup.java index 2dbf34923d8..13f1eec6d6a 100644 --- a/orcid-core/src/main/java/org/orcid/pojo/grouping/WorkGroup.java +++ b/orcid-core/src/main/java/org/orcid/pojo/grouping/WorkGroup.java @@ -17,7 +17,7 @@ import org.orcid.pojo.ajaxForm.Text; import org.orcid.pojo.ajaxForm.WorkForm; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import static org.orcid.pojo.ajaxForm.PojoUtil.getWorkForm; diff --git a/orcid-core/src/main/java/org/orcid/pojo/summary/RecordSummaryPojo.java b/orcid-core/src/main/java/org/orcid/pojo/summary/RecordSummaryPojo.java index b889c1547b1..39d860f1941 100644 --- a/orcid-core/src/main/java/org/orcid/pojo/summary/RecordSummaryPojo.java +++ b/orcid-core/src/main/java/org/orcid/pojo/summary/RecordSummaryPojo.java @@ -2,7 +2,7 @@ import java.util.List; -import javax.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlRootElement; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; diff --git a/orcid-core/src/test/java/org/orcid/core/SourceInActivitiesTest.java b/orcid-core/src/test/java/org/orcid/core/SourceInActivitiesTest.java index 2d738e34d6f..e626c3ac29f 100644 --- a/orcid-core/src/test/java/org/orcid/core/SourceInActivitiesTest.java +++ b/orcid-core/src/test/java/org/orcid/core/SourceInActivitiesTest.java @@ -8,7 +8,7 @@ import java.util.Arrays; import java.util.Locale; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.After; import org.junit.AfterClass; diff --git a/orcid-core/src/test/java/org/orcid/core/adapter/JpaJaxbClientAdapterTest.java b/orcid-core/src/test/java/org/orcid/core/adapter/JpaJaxbClientAdapterTest.java index d31a19d86eb..aca2731dc6d 100644 --- a/orcid-core/src/test/java/org/orcid/core/adapter/JpaJaxbClientAdapterTest.java +++ b/orcid-core/src/test/java/org/orcid/core/adapter/JpaJaxbClientAdapterTest.java @@ -13,7 +13,7 @@ import java.util.SortedSet; import java.util.TreeSet; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/orcid-core/src/test/java/org/orcid/core/adapter/MockSourceNameCache.java b/orcid-core/src/test/java/org/orcid/core/adapter/MockSourceNameCache.java index cf2d2ac1c85..afc2484f871 100644 --- a/orcid-core/src/test/java/org/orcid/core/adapter/MockSourceNameCache.java +++ b/orcid-core/src/test/java/org/orcid/core/adapter/MockSourceNameCache.java @@ -5,7 +5,7 @@ import java.util.Date; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.BaseTest; diff --git a/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONExternalIdentifiersConverterV3Test.java b/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONExternalIdentifiersConverterV3Test.java index 4f568eaee9e..28df6d997a6 100644 --- a/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONExternalIdentifiersConverterV3Test.java +++ b/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONExternalIdentifiersConverterV3Test.java @@ -5,9 +5,9 @@ import java.io.InputStream; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; import org.junit.Before; import org.junit.Test; diff --git a/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONFundingExternalIdentifiersConverterV1Test.java b/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONFundingExternalIdentifiersConverterV1Test.java index 4481ea834ae..ec7a19dc4c0 100644 --- a/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONFundingExternalIdentifiersConverterV1Test.java +++ b/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONFundingExternalIdentifiersConverterV1Test.java @@ -3,7 +3,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; -import javax.xml.bind.JAXBException; +import jakarta.xml.bind.JAXBException; import org.junit.Test; import org.orcid.jaxb.model.message.FundingExternalIdentifier; diff --git a/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONFundingExternalIdentifiersConverterV2Test.java b/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONFundingExternalIdentifiersConverterV2Test.java index 9e6df452456..84eb324aa36 100644 --- a/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONFundingExternalIdentifiersConverterV2Test.java +++ b/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONFundingExternalIdentifiersConverterV2Test.java @@ -6,9 +6,9 @@ import java.io.InputStream; import java.math.BigDecimal; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; import org.junit.Test; import org.orcid.jaxb.model.common_v2.Visibility; diff --git a/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONFundingExternalIdentifiersConverterV3Test.java b/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONFundingExternalIdentifiersConverterV3Test.java index 2e78c50fb26..7000774f7b9 100644 --- a/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONFundingExternalIdentifiersConverterV3Test.java +++ b/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONFundingExternalIdentifiersConverterV3Test.java @@ -6,9 +6,9 @@ import java.io.InputStream; import java.math.BigDecimal; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; import org.junit.Test; import org.orcid.jaxb.model.common_v2.Visibility; diff --git a/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONPeerReviewWorkExternalIdentifierConverterV2Test.java b/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONPeerReviewWorkExternalIdentifierConverterV2Test.java index ff08ece5eb6..4599773fc2f 100644 --- a/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONPeerReviewWorkExternalIdentifierConverterV2Test.java +++ b/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONPeerReviewWorkExternalIdentifierConverterV2Test.java @@ -5,9 +5,9 @@ import java.io.InputStream; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; import org.junit.Test; import org.orcid.jaxb.model.common_v2.Visibility; diff --git a/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONPeerReviewWorkExternalIdentifierConverterV3Test.java b/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONPeerReviewWorkExternalIdentifierConverterV3Test.java index f5bba3ea259..62242f2e8f5 100644 --- a/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONPeerReviewWorkExternalIdentifierConverterV3Test.java +++ b/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONPeerReviewWorkExternalIdentifierConverterV3Test.java @@ -5,9 +5,9 @@ import java.io.InputStream; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; import org.junit.Test; import org.orcid.jaxb.model.v3.release.record.ExternalID; diff --git a/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONWorkExternalIdentifiersConverterV1Test.java b/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONWorkExternalIdentifiersConverterV1Test.java index 0a4167d34b5..5b5c53ec186 100644 --- a/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONWorkExternalIdentifiersConverterV1Test.java +++ b/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONWorkExternalIdentifiersConverterV1Test.java @@ -3,7 +3,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; -import javax.xml.bind.JAXBException; +import jakarta.xml.bind.JAXBException; import org.junit.Test; import org.orcid.jaxb.model.message.WorkExternalIdentifier; diff --git a/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONWorkExternalIdentifiersConverterV2Test.java b/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONWorkExternalIdentifiersConverterV2Test.java index 472e6b53aab..3c0e59c7475 100644 --- a/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONWorkExternalIdentifiersConverterV2Test.java +++ b/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONWorkExternalIdentifiersConverterV2Test.java @@ -7,9 +7,9 @@ import java.io.InputStream; import java.util.Date; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; import org.junit.Test; import org.orcid.jaxb.model.common_v2.Iso3166Country; diff --git a/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONWorkExternalIdentifiersConverterV3Test.java b/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONWorkExternalIdentifiersConverterV3Test.java index b657ae52b14..efd21bdf749 100644 --- a/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONWorkExternalIdentifiersConverterV3Test.java +++ b/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONWorkExternalIdentifiersConverterV3Test.java @@ -7,10 +7,10 @@ import java.io.InputStream; import java.util.Date; -import javax.annotation.Resource; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; +import jakarta.annotation.Resource; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; import org.junit.Before; import org.junit.Test; diff --git a/orcid-core/src/test/java/org/orcid/core/adapter/v2/latest/JpaJaxbAddressAdapterTest.java b/orcid-core/src/test/java/org/orcid/core/adapter/v2/latest/JpaJaxbAddressAdapterTest.java index f1e31f52849..88b007ee86d 100644 --- a/orcid-core/src/test/java/org/orcid/core/adapter/v2/latest/JpaJaxbAddressAdapterTest.java +++ b/orcid-core/src/test/java/org/orcid/core/adapter/v2/latest/JpaJaxbAddressAdapterTest.java @@ -7,10 +7,10 @@ import java.io.InputStream; import java.util.Date; -import javax.annotation.Resource; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; +import jakarta.annotation.Resource; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/orcid-core/src/test/java/org/orcid/core/adapter/v2/latest/JpaJaxbEducationAdapterTest.java b/orcid-core/src/test/java/org/orcid/core/adapter/v2/latest/JpaJaxbEducationAdapterTest.java index 439db06bab0..f0125080aea 100644 --- a/orcid-core/src/test/java/org/orcid/core/adapter/v2/latest/JpaJaxbEducationAdapterTest.java +++ b/orcid-core/src/test/java/org/orcid/core/adapter/v2/latest/JpaJaxbEducationAdapterTest.java @@ -7,10 +7,10 @@ import java.io.InputStream; import java.util.Date; -import javax.annotation.Resource; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; +import jakarta.annotation.Resource; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/orcid-core/src/test/java/org/orcid/core/adapter/v2/latest/JpaJaxbEmailAdapterTest.java b/orcid-core/src/test/java/org/orcid/core/adapter/v2/latest/JpaJaxbEmailAdapterTest.java index 29df960ae9e..6a379c83a6e 100644 --- a/orcid-core/src/test/java/org/orcid/core/adapter/v2/latest/JpaJaxbEmailAdapterTest.java +++ b/orcid-core/src/test/java/org/orcid/core/adapter/v2/latest/JpaJaxbEmailAdapterTest.java @@ -7,10 +7,10 @@ import java.io.InputStream; import java.util.Date; -import javax.annotation.Resource; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; +import jakarta.annotation.Resource; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/orcid-core/src/test/java/org/orcid/core/adapter/v2/latest/JpaJaxbEmploymentAdapterTest.java b/orcid-core/src/test/java/org/orcid/core/adapter/v2/latest/JpaJaxbEmploymentAdapterTest.java index 758af02ac88..f30ebf026fb 100644 --- a/orcid-core/src/test/java/org/orcid/core/adapter/v2/latest/JpaJaxbEmploymentAdapterTest.java +++ b/orcid-core/src/test/java/org/orcid/core/adapter/v2/latest/JpaJaxbEmploymentAdapterTest.java @@ -7,10 +7,10 @@ import java.io.InputStream; import java.util.Date; -import javax.annotation.Resource; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; +import jakarta.annotation.Resource; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/orcid-core/src/test/java/org/orcid/core/adapter/v2/latest/JpaJaxbExternalIdentifierAdapterTest.java b/orcid-core/src/test/java/org/orcid/core/adapter/v2/latest/JpaJaxbExternalIdentifierAdapterTest.java index 07d4177980c..d5f8e2c5c0d 100644 --- a/orcid-core/src/test/java/org/orcid/core/adapter/v2/latest/JpaJaxbExternalIdentifierAdapterTest.java +++ b/orcid-core/src/test/java/org/orcid/core/adapter/v2/latest/JpaJaxbExternalIdentifierAdapterTest.java @@ -7,10 +7,10 @@ import java.io.InputStream; import java.util.Date; -import javax.annotation.Resource; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; +import jakarta.annotation.Resource; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/orcid-core/src/test/java/org/orcid/core/adapter/v2/latest/JpaJaxbFundingAdapterTest.java b/orcid-core/src/test/java/org/orcid/core/adapter/v2/latest/JpaJaxbFundingAdapterTest.java index 2054aab2f03..8dbab1fd998 100644 --- a/orcid-core/src/test/java/org/orcid/core/adapter/v2/latest/JpaJaxbFundingAdapterTest.java +++ b/orcid-core/src/test/java/org/orcid/core/adapter/v2/latest/JpaJaxbFundingAdapterTest.java @@ -8,10 +8,10 @@ import java.math.BigDecimal; import java.util.Date; -import javax.annotation.Resource; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; +import jakarta.annotation.Resource; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/orcid-core/src/test/java/org/orcid/core/adapter/v2/latest/JpaJaxbInvalidRecordDataChangeAdapterTest.java b/orcid-core/src/test/java/org/orcid/core/adapter/v2/latest/JpaJaxbInvalidRecordDataChangeAdapterTest.java index cc05ecb12d7..0ef0f124079 100644 --- a/orcid-core/src/test/java/org/orcid/core/adapter/v2/latest/JpaJaxbInvalidRecordDataChangeAdapterTest.java +++ b/orcid-core/src/test/java/org/orcid/core/adapter/v2/latest/JpaJaxbInvalidRecordDataChangeAdapterTest.java @@ -5,7 +5,7 @@ import java.util.Date; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/orcid-core/src/test/java/org/orcid/core/adapter/v2/latest/JpaJaxbKeywordAdapterTest.java b/orcid-core/src/test/java/org/orcid/core/adapter/v2/latest/JpaJaxbKeywordAdapterTest.java index 874ad9c4f0a..2d24ab275bf 100644 --- a/orcid-core/src/test/java/org/orcid/core/adapter/v2/latest/JpaJaxbKeywordAdapterTest.java +++ b/orcid-core/src/test/java/org/orcid/core/adapter/v2/latest/JpaJaxbKeywordAdapterTest.java @@ -7,10 +7,10 @@ import java.io.InputStream; import java.util.Date; -import javax.annotation.Resource; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; +import jakarta.annotation.Resource; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/orcid-core/src/test/java/org/orcid/core/adapter/v2/latest/JpaJaxbNameAdapterTest.java b/orcid-core/src/test/java/org/orcid/core/adapter/v2/latest/JpaJaxbNameAdapterTest.java index 18df3b7ea6e..efdf096eeb0 100644 --- a/orcid-core/src/test/java/org/orcid/core/adapter/v2/latest/JpaJaxbNameAdapterTest.java +++ b/orcid-core/src/test/java/org/orcid/core/adapter/v2/latest/JpaJaxbNameAdapterTest.java @@ -6,8 +6,8 @@ import java.util.Date; -import javax.annotation.Resource; -import javax.xml.bind.JAXBException; +import jakarta.annotation.Resource; +import jakarta.xml.bind.JAXBException; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/orcid-core/src/test/java/org/orcid/core/adapter/v2/latest/JpaJaxbNotificationAdapterTest.java b/orcid-core/src/test/java/org/orcid/core/adapter/v2/latest/JpaJaxbNotificationAdapterTest.java index f33b67f6cc5..32add8fd1ca 100644 --- a/orcid-core/src/test/java/org/orcid/core/adapter/v2/latest/JpaJaxbNotificationAdapterTest.java +++ b/orcid-core/src/test/java/org/orcid/core/adapter/v2/latest/JpaJaxbNotificationAdapterTest.java @@ -8,7 +8,7 @@ import java.util.Date; import java.util.Set; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/orcid-core/src/test/java/org/orcid/core/adapter/v2/latest/JpaJaxbOtherNameAdapterTest.java b/orcid-core/src/test/java/org/orcid/core/adapter/v2/latest/JpaJaxbOtherNameAdapterTest.java index 073650c59e9..40f74cae4f1 100644 --- a/orcid-core/src/test/java/org/orcid/core/adapter/v2/latest/JpaJaxbOtherNameAdapterTest.java +++ b/orcid-core/src/test/java/org/orcid/core/adapter/v2/latest/JpaJaxbOtherNameAdapterTest.java @@ -7,10 +7,10 @@ import java.io.InputStream; import java.util.Date; -import javax.annotation.Resource; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; +import jakarta.annotation.Resource; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/orcid-core/src/test/java/org/orcid/core/adapter/v2/latest/JpaJaxbPeerReviewAdapterTest.java b/orcid-core/src/test/java/org/orcid/core/adapter/v2/latest/JpaJaxbPeerReviewAdapterTest.java index 74408ebfeb2..5a851192dc7 100644 --- a/orcid-core/src/test/java/org/orcid/core/adapter/v2/latest/JpaJaxbPeerReviewAdapterTest.java +++ b/orcid-core/src/test/java/org/orcid/core/adapter/v2/latest/JpaJaxbPeerReviewAdapterTest.java @@ -7,10 +7,10 @@ import java.io.InputStream; import java.util.Date; -import javax.annotation.Resource; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; +import jakarta.annotation.Resource; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/orcid-core/src/test/java/org/orcid/core/adapter/v2/latest/JpaJaxbResearcherUrlAdapterTest.java b/orcid-core/src/test/java/org/orcid/core/adapter/v2/latest/JpaJaxbResearcherUrlAdapterTest.java index bab56f6e8bf..4bdcc3ea7d2 100644 --- a/orcid-core/src/test/java/org/orcid/core/adapter/v2/latest/JpaJaxbResearcherUrlAdapterTest.java +++ b/orcid-core/src/test/java/org/orcid/core/adapter/v2/latest/JpaJaxbResearcherUrlAdapterTest.java @@ -7,10 +7,10 @@ import java.io.InputStream; import java.util.Date; -import javax.annotation.Resource; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; +import jakarta.annotation.Resource; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/orcid-core/src/test/java/org/orcid/core/adapter/v2/latest/JpaJaxbWorkAdapterTest.java b/orcid-core/src/test/java/org/orcid/core/adapter/v2/latest/JpaJaxbWorkAdapterTest.java index 044797b73b4..96edea7636e 100644 --- a/orcid-core/src/test/java/org/orcid/core/adapter/v2/latest/JpaJaxbWorkAdapterTest.java +++ b/orcid-core/src/test/java/org/orcid/core/adapter/v2/latest/JpaJaxbWorkAdapterTest.java @@ -10,10 +10,10 @@ import java.util.Date; import java.util.List; -import javax.annotation.Resource; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; +import jakarta.annotation.Resource; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; import org.junit.After; import org.junit.Before; diff --git a/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbAddressAdapterTest.java b/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbAddressAdapterTest.java index fddcd90466b..5822d5f38d2 100644 --- a/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbAddressAdapterTest.java +++ b/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbAddressAdapterTest.java @@ -7,10 +7,10 @@ import java.io.InputStream; import java.util.Date; -import javax.annotation.Resource; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; +import jakarta.annotation.Resource; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; import org.junit.After; import org.junit.Before; diff --git a/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbClientAdapterTest.java b/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbClientAdapterTest.java index 624031cfab8..4b9f9fdc4de 100644 --- a/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbClientAdapterTest.java +++ b/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbClientAdapterTest.java @@ -13,7 +13,7 @@ import java.util.SortedSet; import java.util.TreeSet; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbDistinctionAdapterTest.java b/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbDistinctionAdapterTest.java index 3492d642abb..ab0d3f3487f 100644 --- a/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbDistinctionAdapterTest.java +++ b/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbDistinctionAdapterTest.java @@ -7,10 +7,10 @@ import java.io.InputStream; import java.util.Date; -import javax.annotation.Resource; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; +import jakarta.annotation.Resource; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; import org.junit.After; import org.junit.Before; diff --git a/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbEducationAdapterTest.java b/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbEducationAdapterTest.java index 01e6e44044d..a5b844d4fc8 100644 --- a/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbEducationAdapterTest.java +++ b/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbEducationAdapterTest.java @@ -7,10 +7,10 @@ import java.io.InputStream; import java.util.Date; -import javax.annotation.Resource; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; +import jakarta.annotation.Resource; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; import org.junit.After; import org.junit.Before; diff --git a/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbEmailAdapterTest.java b/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbEmailAdapterTest.java index 65a70e2e6ac..41b529e21d1 100644 --- a/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbEmailAdapterTest.java +++ b/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbEmailAdapterTest.java @@ -7,10 +7,10 @@ import java.io.InputStream; import java.util.Date; -import javax.annotation.Resource; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; +import jakarta.annotation.Resource; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; import org.junit.After; import org.junit.Before; diff --git a/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbEmploymentAdapterTest.java b/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbEmploymentAdapterTest.java index c7e365bb90d..20654fae71d 100644 --- a/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbEmploymentAdapterTest.java +++ b/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbEmploymentAdapterTest.java @@ -8,11 +8,11 @@ import java.io.StringWriter; import java.util.Date; -import javax.annotation.Resource; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Marshaller; -import javax.xml.bind.Unmarshaller; +import jakarta.annotation.Resource; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Marshaller; +import jakarta.xml.bind.Unmarshaller; import org.junit.After; import org.junit.Before; diff --git a/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbExternalIdentifierAdapterTest.java b/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbExternalIdentifierAdapterTest.java index 2c8c8bacbe6..22fa00a2609 100644 --- a/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbExternalIdentifierAdapterTest.java +++ b/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbExternalIdentifierAdapterTest.java @@ -7,10 +7,10 @@ import java.io.InputStream; import java.util.Date; -import javax.annotation.Resource; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; +import jakarta.annotation.Resource; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; import org.junit.After; import org.junit.Before; diff --git a/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbFundingAdapterTest.java b/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbFundingAdapterTest.java index f2fd299c648..7dc5b6334f2 100644 --- a/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbFundingAdapterTest.java +++ b/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbFundingAdapterTest.java @@ -8,10 +8,10 @@ import java.math.BigDecimal; import java.util.Date; -import javax.annotation.Resource; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; +import jakarta.annotation.Resource; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; import org.junit.After; import org.junit.Before; diff --git a/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbInvitedPositionAdapterTest.java b/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbInvitedPositionAdapterTest.java index ea2e1890243..a2a8e9b8271 100644 --- a/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbInvitedPositionAdapterTest.java +++ b/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbInvitedPositionAdapterTest.java @@ -7,10 +7,10 @@ import java.io.InputStream; import java.util.Date; -import javax.annotation.Resource; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; +import jakarta.annotation.Resource; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; import org.junit.After; import org.junit.Before; diff --git a/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbKeywordAdapterTest.java b/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbKeywordAdapterTest.java index abcb6e9288e..029fa5e51f4 100644 --- a/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbKeywordAdapterTest.java +++ b/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbKeywordAdapterTest.java @@ -7,10 +7,10 @@ import java.io.InputStream; import java.util.Date; -import javax.annotation.Resource; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; +import jakarta.annotation.Resource; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; import org.junit.After; import org.junit.Before; diff --git a/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbMembershipAdapterTest.java b/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbMembershipAdapterTest.java index 243c3f7bed1..dd9a36cfea1 100644 --- a/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbMembershipAdapterTest.java +++ b/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbMembershipAdapterTest.java @@ -7,10 +7,10 @@ import java.io.InputStream; import java.util.Date; -import javax.annotation.Resource; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; +import jakarta.annotation.Resource; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; import org.junit.After; import org.junit.Before; diff --git a/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbNameAdapterTest.java b/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbNameAdapterTest.java index 991845e61b8..26b41113555 100644 --- a/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbNameAdapterTest.java +++ b/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbNameAdapterTest.java @@ -6,8 +6,8 @@ import java.util.Date; -import javax.annotation.Resource; -import javax.xml.bind.JAXBException; +import jakarta.annotation.Resource; +import jakarta.xml.bind.JAXBException; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbNotificationAdapterTest.java b/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbNotificationAdapterTest.java index 4a3806568ae..59a22951fca 100644 --- a/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbNotificationAdapterTest.java +++ b/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbNotificationAdapterTest.java @@ -8,7 +8,7 @@ import java.util.Date; import java.util.Set; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbOtherNameAdapterTest.java b/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbOtherNameAdapterTest.java index 0eb14db708f..356b1ca6d4e 100644 --- a/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbOtherNameAdapterTest.java +++ b/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbOtherNameAdapterTest.java @@ -7,10 +7,10 @@ import java.io.InputStream; import java.util.Date; -import javax.annotation.Resource; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; +import jakarta.annotation.Resource; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; import org.junit.After; import org.junit.Before; diff --git a/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbPeerReviewAdapterTest.java b/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbPeerReviewAdapterTest.java index 498cd9de9c0..8bc93d071b8 100644 --- a/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbPeerReviewAdapterTest.java +++ b/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbPeerReviewAdapterTest.java @@ -7,10 +7,10 @@ import java.io.InputStream; import java.util.Date; -import javax.annotation.Resource; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; +import jakarta.annotation.Resource; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; import org.junit.After; import org.junit.Before; diff --git a/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbQualificationAdapterTest.java b/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbQualificationAdapterTest.java index 110ba66a1f7..9c70094471b 100644 --- a/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbQualificationAdapterTest.java +++ b/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbQualificationAdapterTest.java @@ -7,10 +7,10 @@ import java.io.InputStream; import java.util.Date; -import javax.annotation.Resource; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; +import jakarta.annotation.Resource; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; import org.junit.After; import org.junit.Before; diff --git a/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbResearchResourceAdapterTest.java b/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbResearchResourceAdapterTest.java index 34b288fc03e..95f82cfe77a 100644 --- a/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbResearchResourceAdapterTest.java +++ b/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbResearchResourceAdapterTest.java @@ -8,10 +8,10 @@ import java.util.ArrayList; import java.util.Date; -import javax.annotation.Resource; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; +import jakarta.annotation.Resource; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; import org.junit.After; import org.junit.Before; diff --git a/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbResearcherUrlAdapterTest.java b/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbResearcherUrlAdapterTest.java index 4d052d85369..4f7bfd4cb09 100644 --- a/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbResearcherUrlAdapterTest.java +++ b/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbResearcherUrlAdapterTest.java @@ -7,10 +7,10 @@ import java.io.InputStream; import java.util.Date; -import javax.annotation.Resource; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; +import jakarta.annotation.Resource; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; import org.junit.After; import org.junit.Before; diff --git a/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbServiceAdapterTest.java b/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbServiceAdapterTest.java index 6f4de964d43..ff9bbd6eebb 100644 --- a/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbServiceAdapterTest.java +++ b/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbServiceAdapterTest.java @@ -7,10 +7,10 @@ import java.io.InputStream; import java.util.Date; -import javax.annotation.Resource; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; +import jakarta.annotation.Resource; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; import org.junit.After; import org.junit.Before; diff --git a/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbWorkAdapterTest.java b/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbWorkAdapterTest.java index 874b5322b1e..b761520db58 100644 --- a/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbWorkAdapterTest.java +++ b/orcid-core/src/test/java/org/orcid/core/adapter/v3/JpaJaxbWorkAdapterTest.java @@ -10,10 +10,10 @@ import java.util.Date; import java.util.List; -import javax.annotation.Resource; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; +import jakarta.annotation.Resource; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; import org.junit.After; import org.junit.Before; diff --git a/orcid-core/src/test/java/org/orcid/core/common/manager/SummaryManagerTest.java b/orcid-core/src/test/java/org/orcid/core/common/manager/SummaryManagerTest.java index 67b18ed0292..1d351e563fc 100644 --- a/orcid-core/src/test/java/org/orcid/core/common/manager/SummaryManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/common/manager/SummaryManagerTest.java @@ -12,7 +12,7 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import javax.xml.datatype.XMLGregorianCalendar; import com.oracle.truffle.api.profiles.Profile; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/ActivitiesSummaryManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/ActivitiesSummaryManagerTest.java index ffe59e92f58..cc1b2299852 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/ActivitiesSummaryManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/ActivitiesSummaryManagerTest.java @@ -7,7 +7,7 @@ import java.util.Collections; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.AfterClass; import org.junit.BeforeClass; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/AddressManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/AddressManagerTest.java index 96d1540e5d5..a8d7bf956fd 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/AddressManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/AddressManagerTest.java @@ -11,7 +11,7 @@ import java.util.Collections; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.AfterClass; import org.junit.Before; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/AffiliationsManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/AffiliationsManagerTest.java index 0a21a8e4e92..7b035f9df52 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/AffiliationsManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/AffiliationsManagerTest.java @@ -11,7 +11,7 @@ import java.util.Collections; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.AfterClass; import org.junit.Before; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/AppIdGenerationManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/AppIdGenerationManagerTest.java index 98bb93646c9..454b205a346 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/AppIdGenerationManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/AppIdGenerationManagerTest.java @@ -5,7 +5,7 @@ import java.util.ArrayList; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.Test; import org.orcid.core.BaseTest; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/BiographyManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/BiographyManagerTest.java index ad93ba56061..d8dcab31234 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/BiographyManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/BiographyManagerTest.java @@ -9,7 +9,7 @@ import java.util.Arrays; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.AfterClass; import org.junit.BeforeClass; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/ClientManagerReadOnlyTest.java b/orcid-core/src/test/java/org/orcid/core/manager/ClientManagerReadOnlyTest.java index ac2d2b9a778..1aa5e16a99d 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/ClientManagerReadOnlyTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/ClientManagerReadOnlyTest.java @@ -14,7 +14,7 @@ import java.util.SortedSet; import java.util.TreeSet; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.commons.lang.RandomStringUtils; import org.junit.After; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/ExternalIdentifierManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/ExternalIdentifierManagerTest.java index c26af27e00a..5920f108fc6 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/ExternalIdentifierManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/ExternalIdentifierManagerTest.java @@ -13,7 +13,7 @@ import java.util.Date; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.AfterClass; import org.junit.Before; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/GroupIdRecordManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/GroupIdRecordManagerTest.java index 19c79ce4e87..d4eaf59dd8b 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/GroupIdRecordManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/GroupIdRecordManagerTest.java @@ -13,7 +13,7 @@ import java.util.List; import java.util.Optional; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.AfterClass; import org.junit.Before; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/IdentifierTypeManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/IdentifierTypeManagerTest.java index 33ab95c6f4d..8965a8260a7 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/IdentifierTypeManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/IdentifierTypeManagerTest.java @@ -13,7 +13,7 @@ import java.util.Locale; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.After; import org.junit.AfterClass; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/InstitutionalSignInManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/InstitutionalSignInManagerTest.java index 53f347dc5fe..ffaa140d2d1 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/InstitutionalSignInManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/InstitutionalSignInManagerTest.java @@ -16,7 +16,7 @@ import java.util.HashMap; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.commons.io.IOUtils; import org.junit.After; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/NotificationManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/NotificationManagerTest.java index e508905beb9..43f11cee835 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/NotificationManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/NotificationManagerTest.java @@ -24,8 +24,8 @@ import java.util.stream.Collectors; import java.util.stream.IntStream; -import javax.annotation.Resource; -import javax.xml.bind.JAXBException; +import jakarta.annotation.Resource; +import jakarta.xml.bind.JAXBException; import org.junit.After; import org.junit.AfterClass; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/OrcidGenerationManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/OrcidGenerationManagerTest.java index b8ece29b573..31efd3a83e0 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/OrcidGenerationManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/OrcidGenerationManagerTest.java @@ -7,7 +7,7 @@ import java.util.HashSet; import java.util.Set; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.log4j.Logger; import org.junit.Rule; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/OrcidSearchManagerImplTest.java b/orcid-core/src/test/java/org/orcid/core/manager/OrcidSearchManagerImplTest.java index c44bed6d41b..254aee90017 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/OrcidSearchManagerImplTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/OrcidSearchManagerImplTest.java @@ -9,7 +9,7 @@ import java.util.HashMap; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.solr.common.SolrDocument; import org.junit.After; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/OrcidSecurityManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/OrcidSecurityManagerTest.java index b53e50f1370..4a55837d264 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/OrcidSecurityManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/OrcidSecurityManagerTest.java @@ -5,7 +5,7 @@ import java.util.Calendar; import java.util.Date; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.NoResultException; import org.junit.After; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/OrcidSecurityManagerTestBase.java b/orcid-core/src/test/java/org/orcid/core/manager/OrcidSecurityManagerTestBase.java index a7c435e0b85..b025cdc3f91 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/OrcidSecurityManagerTestBase.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/OrcidSecurityManagerTestBase.java @@ -8,7 +8,7 @@ import java.util.GregorianCalendar; import java.util.Random; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import javax.xml.datatype.DatatypeConfigurationException; import javax.xml.datatype.DatatypeFactory; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/OrgDisambiguatedManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/OrgDisambiguatedManagerTest.java index 3949f2e1ca8..d5abc41bf28 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/OrgDisambiguatedManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/OrgDisambiguatedManagerTest.java @@ -10,7 +10,7 @@ import java.util.HashSet; import java.util.Set; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.After; import org.junit.Before; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/OrgManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/OrgManagerTest.java index 1c544871973..bac9a86fb4f 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/OrgManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/OrgManagerTest.java @@ -10,7 +10,7 @@ import java.util.Collections; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.commons.io.IOUtils; import org.junit.AfterClass; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/OtherNameManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/OtherNameManagerTest.java index 02506cae64c..41973359623 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/OtherNameManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/OtherNameManagerTest.java @@ -12,7 +12,7 @@ import java.util.Date; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.AfterClass; import org.junit.Before; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/PeerReviewManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/PeerReviewManagerTest.java index adb8b4c3592..b11c63c672b 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/PeerReviewManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/PeerReviewManagerTest.java @@ -14,7 +14,7 @@ import java.util.Collections; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.AfterClass; import org.junit.Before; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/PersonDetailsManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/PersonDetailsManagerTest.java index 0026d89a7a1..ec6d8e00497 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/PersonDetailsManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/PersonDetailsManagerTest.java @@ -8,7 +8,7 @@ import java.util.Collections; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.AfterClass; import org.junit.BeforeClass; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/PersonalDetailsManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/PersonalDetailsManagerTest.java index 9eeb1f43278..d1c02fa3d1d 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/PersonalDetailsManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/PersonalDetailsManagerTest.java @@ -10,7 +10,7 @@ import java.util.Collections; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.AfterClass; import org.junit.BeforeClass; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/ProfileFundingManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/ProfileFundingManagerTest.java index 13650551506..c7de64167fa 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/ProfileFundingManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/ProfileFundingManagerTest.java @@ -14,7 +14,7 @@ import java.util.Collections; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.AfterClass; import org.junit.Before; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/ProfileKeywordManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/ProfileKeywordManagerTest.java index 28dfdfeb027..30b0fe6e8c2 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/ProfileKeywordManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/ProfileKeywordManagerTest.java @@ -11,7 +11,7 @@ import java.util.Collections; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.AfterClass; import org.junit.Before; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/RecordCorrectionsManagerReadOnlyTest.java b/orcid-core/src/test/java/org/orcid/core/manager/RecordCorrectionsManagerReadOnlyTest.java index 641830951bd..55f6a30c4db 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/RecordCorrectionsManagerReadOnlyTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/RecordCorrectionsManagerReadOnlyTest.java @@ -13,7 +13,7 @@ import java.util.Date; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.Before; import org.junit.Test; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/RecordManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/RecordManagerTest.java index 8feb18f9245..3dddce90886 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/RecordManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/RecordManagerTest.java @@ -7,7 +7,7 @@ import java.util.Collections; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.AfterClass; import org.junit.BeforeClass; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/RecordNameManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/RecordNameManagerTest.java index 36aa6463af0..743a0f73a34 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/RecordNameManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/RecordNameManagerTest.java @@ -8,7 +8,7 @@ import java.util.Arrays; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.AfterClass; import org.junit.BeforeClass; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/ResearcherUrlManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/ResearcherUrlManagerTest.java index 4b9d9bf0738..871653c8ee7 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/ResearcherUrlManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/ResearcherUrlManagerTest.java @@ -11,7 +11,7 @@ import java.util.Collections; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.AfterClass; import org.junit.Before; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/SourceNameCacheManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/SourceNameCacheManagerTest.java index 74c6b50ee38..ae921e6932b 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/SourceNameCacheManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/SourceNameCacheManagerTest.java @@ -9,7 +9,7 @@ import java.util.Date; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.After; import org.junit.Before; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/TemplateManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/TemplateManagerTest.java index 2b21ae373b3..43698feafb1 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/TemplateManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/TemplateManagerTest.java @@ -10,7 +10,7 @@ import java.util.Map; import java.util.stream.Collectors; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.commons.io.IOUtils; import org.junit.Test; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/WorkManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/WorkManagerTest.java index 99ab4226e39..7fd6609dcdc 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/WorkManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/WorkManagerTest.java @@ -19,7 +19,7 @@ import java.util.GregorianCalendar; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import javax.xml.datatype.DatatypeConfigurationException; import javax.xml.datatype.DatatypeFactory; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/impl/BibtexManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/impl/BibtexManagerTest.java index fdf786defef..d56ff1c752a 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/impl/BibtexManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/impl/BibtexManagerTest.java @@ -5,7 +5,7 @@ import java.util.Arrays; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.Assert; import org.junit.Before; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/impl/OrcidUrlManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/impl/OrcidUrlManagerTest.java index 5af1d7736a8..18e3eff1419 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/impl/OrcidUrlManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/impl/OrcidUrlManagerTest.java @@ -6,7 +6,7 @@ import java.net.URI; import java.net.URISyntaxException; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/impl/PasswordGenerationManagerImplTest.java b/orcid-core/src/test/java/org/orcid/core/manager/impl/PasswordGenerationManagerImplTest.java index c3aad075a76..549f09c0711 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/impl/PasswordGenerationManagerImplTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/impl/PasswordGenerationManagerImplTest.java @@ -6,7 +6,7 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/impl/ProfileEntityManagerImplTest.java b/orcid-core/src/test/java/org/orcid/core/manager/impl/ProfileEntityManagerImplTest.java index 06069f3a5d1..29014e0e7f9 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/impl/ProfileEntityManagerImplTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/impl/ProfileEntityManagerImplTest.java @@ -6,7 +6,7 @@ import java.util.Arrays; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.AfterClass; import org.junit.BeforeClass; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/impl/RegistrationManagerImplTest.java b/orcid-core/src/test/java/org/orcid/core/manager/impl/RegistrationManagerImplTest.java index 63fb888d090..ea971c18236 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/impl/RegistrationManagerImplTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/impl/RegistrationManagerImplTest.java @@ -16,7 +16,7 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.After; import org.junit.AfterClass; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/v3/ActivitiesSummaryManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/v3/ActivitiesSummaryManagerTest.java index 2391b89049c..d698e953c02 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/v3/ActivitiesSummaryManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/v3/ActivitiesSummaryManagerTest.java @@ -7,7 +7,7 @@ import java.util.Collections; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.After; import org.junit.AfterClass; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/v3/AddressManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/v3/AddressManagerTest.java index acaa5d6a0ad..d360a2cdfa6 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/v3/AddressManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/v3/AddressManagerTest.java @@ -12,7 +12,7 @@ import java.util.Date; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.After; import org.junit.AfterClass; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/v3/AffiliationsManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/v3/AffiliationsManagerTest.java index 0b5bb9bbff6..20f96d43ad1 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/v3/AffiliationsManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/v3/AffiliationsManagerTest.java @@ -12,7 +12,7 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.After; import org.junit.AfterClass; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/v3/BiographyManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/v3/BiographyManagerTest.java index 4ad87b298a0..11da0656e1e 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/v3/BiographyManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/v3/BiographyManagerTest.java @@ -9,7 +9,7 @@ import java.util.Arrays; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.AfterClass; import org.junit.BeforeClass; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/v3/ClientManagerReadOnlyTest.java b/orcid-core/src/test/java/org/orcid/core/manager/v3/ClientManagerReadOnlyTest.java index 85f52aed456..14a6272e646 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/v3/ClientManagerReadOnlyTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/v3/ClientManagerReadOnlyTest.java @@ -14,7 +14,7 @@ import java.util.SortedSet; import java.util.TreeSet; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.commons.lang.RandomStringUtils; import org.junit.After; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/v3/ClientManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/v3/ClientManagerTest.java index df59c3c685b..b0bfd783f3f 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/v3/ClientManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/v3/ClientManagerTest.java @@ -17,8 +17,8 @@ import java.util.List; import java.util.Set; -import javax.annotation.Resource; -import javax.transaction.Transactional; +import jakarta.annotation.Resource; +import jakarta.transaction.Transactional; import org.apache.commons.lang.RandomStringUtils; import org.junit.AfterClass; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/v3/EmailManagerReadOnlyTest.java b/orcid-core/src/test/java/org/orcid/core/manager/v3/EmailManagerReadOnlyTest.java index c2f1000bc7e..ad398334373 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/v3/EmailManagerReadOnlyTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/v3/EmailManagerReadOnlyTest.java @@ -12,7 +12,7 @@ import java.util.Collections; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.NoResultException; import org.junit.AfterClass; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/v3/EmailManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/v3/EmailManagerTest.java index dec3608db4b..fda198f884b 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/v3/EmailManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/v3/EmailManagerTest.java @@ -20,8 +20,8 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; -import javax.xml.bind.JAXBException; +import jakarta.annotation.Resource; +import jakarta.xml.bind.JAXBException; import javax.xml.datatype.XMLGregorianCalendar; import org.apache.commons.lang.RandomStringUtils; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/v3/ExternalIdentifierManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/v3/ExternalIdentifierManagerTest.java index c61cfb149a0..a8f5509e253 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/v3/ExternalIdentifierManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/v3/ExternalIdentifierManagerTest.java @@ -13,7 +13,7 @@ import java.util.Date; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.After; import org.junit.AfterClass; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/v3/FindMyStuffManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/v3/FindMyStuffManagerTest.java index bae964f9356..898617d5adb 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/v3/FindMyStuffManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/v3/FindMyStuffManagerTest.java @@ -9,7 +9,7 @@ import java.util.List; import java.util.SortedSet; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.Before; import org.junit.Test; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/v3/GivenPermissionToManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/v3/GivenPermissionToManagerTest.java index 6883ee89e8e..900dc6a1c4d 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/v3/GivenPermissionToManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/v3/GivenPermissionToManagerTest.java @@ -11,7 +11,7 @@ import java.util.Date; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.After; import org.junit.AfterClass; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/v3/GroupIdRecordManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/v3/GroupIdRecordManagerTest.java index 837cefcb512..582ec6d00e9 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/v3/GroupIdRecordManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/v3/GroupIdRecordManagerTest.java @@ -13,7 +13,7 @@ import java.util.List; import java.util.Optional; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.AfterClass; import org.junit.Before; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/v3/MembersManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/v3/MembersManagerTest.java index 43db8f97854..e2312292bb0 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/v3/MembersManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/v3/MembersManagerTest.java @@ -6,7 +6,7 @@ import java.util.Arrays; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.After; import org.junit.AfterClass; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/v3/NotificationManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/v3/NotificationManagerTest.java index 160465907d4..1b8eb9a7735 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/v3/NotificationManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/v3/NotificationManagerTest.java @@ -36,8 +36,8 @@ import org.springframework.test.util.ReflectionTestUtils; import org.springframework.transaction.annotation.Transactional; -import javax.annotation.Resource; -import javax.xml.bind.JAXBException; +import jakarta.annotation.Resource; +import jakarta.xml.bind.JAXBException; import java.io.IOException; import java.net.URISyntaxException; import java.util.*; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/v3/NotificationManager_autoArchiveOffsetTest.java b/orcid-core/src/test/java/org/orcid/core/manager/v3/NotificationManager_autoArchiveOffsetTest.java index 1a28ed46e43..2b6572cffe3 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/v3/NotificationManager_autoArchiveOffsetTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/v3/NotificationManager_autoArchiveOffsetTest.java @@ -6,7 +6,7 @@ import java.util.Collections; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.AfterClass; import org.junit.Before; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/v3/NotificationManager_autoDeleteOffsetTest.java b/orcid-core/src/test/java/org/orcid/core/manager/v3/NotificationManager_autoDeleteOffsetTest.java index f2cd71d2643..bb66435eac7 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/v3/NotificationManager_autoDeleteOffsetTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/v3/NotificationManager_autoDeleteOffsetTest.java @@ -9,7 +9,7 @@ import java.util.Collections; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.AfterClass; import org.junit.Before; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/v3/OrcidSearchManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/v3/OrcidSearchManagerTest.java index 86ebd74eed9..2c7b447b7dc 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/v3/OrcidSearchManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/v3/OrcidSearchManagerTest.java @@ -9,7 +9,7 @@ import java.util.HashMap; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.solr.common.SolrDocument; import org.junit.After; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/v3/OrcidSecurityManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/v3/OrcidSecurityManagerTest.java index 16ec9ce5e3a..b0df50a4d8f 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/v3/OrcidSecurityManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/v3/OrcidSecurityManagerTest.java @@ -5,7 +5,7 @@ import java.util.Calendar; import java.util.Date; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.NoResultException; import org.junit.After; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/v3/OrcidSecurityManagerTestBase.java b/orcid-core/src/test/java/org/orcid/core/manager/v3/OrcidSecurityManagerTestBase.java index 20b506ecf55..76c5ff57cb4 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/v3/OrcidSecurityManagerTestBase.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/v3/OrcidSecurityManagerTestBase.java @@ -8,7 +8,7 @@ import java.util.GregorianCalendar; import java.util.Random; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import javax.xml.datatype.DatatypeConfigurationException; import javax.xml.datatype.DatatypeFactory; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/v3/OrgManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/v3/OrgManagerTest.java index b8e10a94862..6eb3b4d1a5a 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/v3/OrgManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/v3/OrgManagerTest.java @@ -11,7 +11,7 @@ import java.util.Collections; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.commons.io.IOUtils; import org.junit.AfterClass; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/v3/OtherNameManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/v3/OtherNameManagerTest.java index 1ea7602439d..2af3d4bd1f6 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/v3/OtherNameManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/v3/OtherNameManagerTest.java @@ -12,7 +12,7 @@ import java.util.Date; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.After; import org.junit.AfterClass; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/v3/PeerReviewManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/v3/PeerReviewManagerTest.java index 17bd0855caf..e1835d82788 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/v3/PeerReviewManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/v3/PeerReviewManagerTest.java @@ -15,7 +15,7 @@ import java.util.Collections; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.After; import org.junit.AfterClass; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/v3/PersonDetailsManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/v3/PersonDetailsManagerTest.java index 0a88608dcde..71cacd5df8f 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/v3/PersonDetailsManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/v3/PersonDetailsManagerTest.java @@ -8,7 +8,7 @@ import java.util.Collections; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.AfterClass; import org.junit.BeforeClass; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/v3/PersonalDetailsManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/v3/PersonalDetailsManagerTest.java index 246f0d09a6e..4169a4d9459 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/v3/PersonalDetailsManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/v3/PersonalDetailsManagerTest.java @@ -10,7 +10,7 @@ import java.util.Collections; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.After; import org.junit.AfterClass; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/v3/ProfileFundingManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/v3/ProfileFundingManagerTest.java index 27da969c320..0de4e7af626 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/v3/ProfileFundingManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/v3/ProfileFundingManagerTest.java @@ -14,7 +14,7 @@ import java.util.Collections; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.After; import org.junit.AfterClass; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/v3/ProfileKeywordManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/v3/ProfileKeywordManagerTest.java index d540160eeb8..41798f2781f 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/v3/ProfileKeywordManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/v3/ProfileKeywordManagerTest.java @@ -11,7 +11,7 @@ import java.util.Collections; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.After; import org.junit.AfterClass; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/v3/RecordManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/v3/RecordManagerTest.java index c4d74779dee..386f9417e5a 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/v3/RecordManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/v3/RecordManagerTest.java @@ -7,7 +7,7 @@ import java.util.Collections; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.AfterClass; import org.junit.BeforeClass; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/v3/RecordNameManagerV3Test.java b/orcid-core/src/test/java/org/orcid/core/manager/v3/RecordNameManagerV3Test.java index 7355081e28e..cafdf268a1e 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/v3/RecordNameManagerV3Test.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/v3/RecordNameManagerV3Test.java @@ -8,7 +8,7 @@ import java.util.Arrays; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.AfterClass; import org.junit.BeforeClass; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/v3/ResearchResourceManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/v3/ResearchResourceManagerTest.java index d09529617c6..1d2a9e10ba2 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/v3/ResearchResourceManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/v3/ResearchResourceManagerTest.java @@ -10,7 +10,7 @@ import java.util.Collections; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.After; import org.junit.AfterClass; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/v3/ResearcherUrlManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/v3/ResearcherUrlManagerTest.java index 63e9be3c9e9..4ec4ce6282d 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/v3/ResearcherUrlManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/v3/ResearcherUrlManagerTest.java @@ -12,7 +12,7 @@ import java.util.Date; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.After; import org.junit.AfterClass; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/v3/SpamManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/v3/SpamManagerTest.java index fbc1c2ffbfd..75b85d34321 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/v3/SpamManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/v3/SpamManagerTest.java @@ -7,7 +7,7 @@ import java.util.Arrays; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.AfterClass; import org.junit.BeforeClass; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/v3/WorkManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/v3/WorkManagerTest.java index 660a28f9bcb..dfeb400176c 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/v3/WorkManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/v3/WorkManagerTest.java @@ -23,7 +23,7 @@ import java.util.stream.Collectors; import java.util.stream.Stream; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import javax.xml.datatype.DatatypeConfigurationException; import javax.xml.datatype.DatatypeFactory; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/v3/impl/BibtexManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/v3/impl/BibtexManagerTest.java index 5f573fba496..de2adc2b5c6 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/v3/impl/BibtexManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/v3/impl/BibtexManagerTest.java @@ -5,7 +5,7 @@ import java.util.Arrays; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.Assert; import org.junit.Before; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/v3/impl/OrcidSearchManagerImplTest.java b/orcid-core/src/test/java/org/orcid/core/manager/v3/impl/OrcidSearchManagerImplTest.java index 93e3199ddec..1a537bd5ea1 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/v3/impl/OrcidSearchManagerImplTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/v3/impl/OrcidSearchManagerImplTest.java @@ -10,7 +10,7 @@ import java.util.HashMap; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.After; import org.junit.Before; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/v3/impl/ProfileEntityManagerImplTest.java b/orcid-core/src/test/java/org/orcid/core/manager/v3/impl/ProfileEntityManagerImplTest.java index df6bc33a594..e862dd1c46d 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/v3/impl/ProfileEntityManagerImplTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/v3/impl/ProfileEntityManagerImplTest.java @@ -56,7 +56,7 @@ import org.springframework.test.util.ReflectionTestUtils; import org.springframework.transaction.annotation.Transactional; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import java.util.Arrays; import java.util.Date; import java.util.List; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/v3/validator/ActivityValidatorTest.java b/orcid-core/src/test/java/org/orcid/core/manager/v3/validator/ActivityValidatorTest.java index 5dc18f849b0..3641ed26402 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/v3/validator/ActivityValidatorTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/v3/validator/ActivityValidatorTest.java @@ -7,7 +7,7 @@ import java.util.stream.Collectors; import java.util.stream.Stream; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/v3/validator/ExternalIDValidatorTest.java b/orcid-core/src/test/java/org/orcid/core/manager/v3/validator/ExternalIDValidatorTest.java index b6ec4deb186..7423795fb04 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/v3/validator/ExternalIDValidatorTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/v3/validator/ExternalIDValidatorTest.java @@ -2,7 +2,7 @@ import static org.junit.Assert.fail; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/validator/ActivityValidatorTest.java b/orcid-core/src/test/java/org/orcid/core/manager/validator/ActivityValidatorTest.java index a8f961b90b4..4aa678ceef5 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/validator/ActivityValidatorTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/validator/ActivityValidatorTest.java @@ -7,7 +7,7 @@ import java.util.stream.Collectors; import java.util.stream.Stream; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/orcid-core/src/test/java/org/orcid/core/manager/validator/ExternalIDValidatorTest.java b/orcid-core/src/test/java/org/orcid/core/manager/validator/ExternalIDValidatorTest.java index c8f3937d988..4e71d7536f1 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/validator/ExternalIDValidatorTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/validator/ExternalIDValidatorTest.java @@ -2,7 +2,7 @@ import static org.junit.Assert.fail; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.Before; import org.junit.Test; diff --git a/orcid-core/src/test/java/org/orcid/core/model/RecordSummaryMarshallingTest.java b/orcid-core/src/test/java/org/orcid/core/model/RecordSummaryMarshallingTest.java index d55d341835b..5d3ce48938d 100644 --- a/orcid-core/src/test/java/org/orcid/core/model/RecordSummaryMarshallingTest.java +++ b/orcid-core/src/test/java/org/orcid/core/model/RecordSummaryMarshallingTest.java @@ -7,9 +7,9 @@ import java.nio.charset.StandardCharsets; import java.util.ArrayList; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Marshaller; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Marshaller; import org.apache.commons.io.IOUtils; import org.junit.Test; diff --git a/orcid-core/src/test/java/org/orcid/core/oauth/OAuthErrorUtilsTest.java b/orcid-core/src/test/java/org/orcid/core/oauth/OAuthErrorUtilsTest.java index 7187cc49509..1b3d1fe37ce 100644 --- a/orcid-core/src/test/java/org/orcid/core/oauth/OAuthErrorUtilsTest.java +++ b/orcid-core/src/test/java/org/orcid/core/oauth/OAuthErrorUtilsTest.java @@ -17,7 +17,7 @@ * ============================================================================= */ import static org.junit.Assert.assertEquals; -import javax.ws.rs.core.Response.Status; +import jakarta.ws.rs.core.Response.Status; import org.junit.Test; import org.orcid.core.exception.DeactivatedException; diff --git a/orcid-core/src/test/java/org/orcid/core/oauth/service/ClientDetailsManagerTest.java b/orcid-core/src/test/java/org/orcid/core/oauth/service/ClientDetailsManagerTest.java index b80f0457509..fbe358c77b3 100644 --- a/orcid-core/src/test/java/org/orcid/core/oauth/service/ClientDetailsManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/oauth/service/ClientDetailsManagerTest.java @@ -11,7 +11,7 @@ import java.util.List; import java.util.Set; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; diff --git a/orcid-core/src/test/java/org/orcid/core/solr/OrcidSolrOrgsClientTest.java b/orcid-core/src/test/java/org/orcid/core/solr/OrcidSolrOrgsClientTest.java index f269c1dfa9c..e4567f29a5d 100644 --- a/orcid-core/src/test/java/org/orcid/core/solr/OrcidSolrOrgsClientTest.java +++ b/orcid-core/src/test/java/org/orcid/core/solr/OrcidSolrOrgsClientTest.java @@ -7,7 +7,7 @@ import java.io.IOException; import java.util.Arrays; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.SolrQuery; diff --git a/orcid-core/src/test/java/org/orcid/core/solr/OrcidSolrProfileClientTest.java b/orcid-core/src/test/java/org/orcid/core/solr/OrcidSolrProfileClientTest.java index a447b769429..a1c55f1d917 100644 --- a/orcid-core/src/test/java/org/orcid/core/solr/OrcidSolrProfileClientTest.java +++ b/orcid-core/src/test/java/org/orcid/core/solr/OrcidSolrProfileClientTest.java @@ -6,7 +6,7 @@ import java.io.IOException; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.SolrServerException; diff --git a/orcid-core/src/test/java/org/orcid/core/utils/ArXivResolverTest.java b/orcid-core/src/test/java/org/orcid/core/utils/ArXivResolverTest.java index da7fd986e4f..c450a56cb14 100644 --- a/orcid-core/src/test/java/org/orcid/core/utils/ArXivResolverTest.java +++ b/orcid-core/src/test/java/org/orcid/core/utils/ArXivResolverTest.java @@ -9,7 +9,7 @@ import java.io.IOException; import java.io.InputStream; -import javax.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MediaType; import org.junit.Before; import org.junit.Test; diff --git a/orcid-core/src/test/java/org/orcid/core/utils/PubMedResolverTest.java b/orcid-core/src/test/java/org/orcid/core/utils/PubMedResolverTest.java index b26c961a2d3..6c4e4ff8806 100644 --- a/orcid-core/src/test/java/org/orcid/core/utils/PubMedResolverTest.java +++ b/orcid-core/src/test/java/org/orcid/core/utils/PubMedResolverTest.java @@ -11,7 +11,7 @@ import java.util.List; import java.util.Locale; -import javax.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MediaType; import org.junit.Before; import org.junit.Rule; diff --git a/orcid-core/src/test/java/org/orcid/core/utils/v3/identifiers/PIDNormalizationServiceTest.java b/orcid-core/src/test/java/org/orcid/core/utils/v3/identifiers/PIDNormalizationServiceTest.java index e6c83276635..2ae6d337f08 100644 --- a/orcid-core/src/test/java/org/orcid/core/utils/v3/identifiers/PIDNormalizationServiceTest.java +++ b/orcid-core/src/test/java/org/orcid/core/utils/v3/identifiers/PIDNormalizationServiceTest.java @@ -2,7 +2,7 @@ import static org.junit.Assert.assertEquals; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/orcid-core/src/test/java/org/orcid/core/utils/v3/identifiers/PIDResolverServiceTest.java b/orcid-core/src/test/java/org/orcid/core/utils/v3/identifiers/PIDResolverServiceTest.java index c67b794b855..992309f0cad 100644 --- a/orcid-core/src/test/java/org/orcid/core/utils/v3/identifiers/PIDResolverServiceTest.java +++ b/orcid-core/src/test/java/org/orcid/core/utils/v3/identifiers/PIDResolverServiceTest.java @@ -9,7 +9,7 @@ import java.util.LinkedList; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.Test; import org.mockito.Mockito; diff --git a/orcid-core/src/test/java/org/orcid/core/utils/v3/identifiers/finders/CrossrefFinderTest.java b/orcid-core/src/test/java/org/orcid/core/utils/v3/identifiers/finders/CrossrefFinderTest.java index 36c7778c21e..acae3004d7e 100644 --- a/orcid-core/src/test/java/org/orcid/core/utils/v3/identifiers/finders/CrossrefFinderTest.java +++ b/orcid-core/src/test/java/org/orcid/core/utils/v3/identifiers/finders/CrossrefFinderTest.java @@ -7,7 +7,7 @@ import java.io.IOException; import java.io.InputStream; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.Before; import org.junit.Test; diff --git a/orcid-core/src/test/java/org/orcid/core/utils/v3/identifiers/finders/DataciteFinderTest.java b/orcid-core/src/test/java/org/orcid/core/utils/v3/identifiers/finders/DataciteFinderTest.java index 165fa60e8b9..bdd8072f399 100644 --- a/orcid-core/src/test/java/org/orcid/core/utils/v3/identifiers/finders/DataciteFinderTest.java +++ b/orcid-core/src/test/java/org/orcid/core/utils/v3/identifiers/finders/DataciteFinderTest.java @@ -8,7 +8,7 @@ import java.io.IOException; import java.io.InputStream; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.Before; import org.junit.Test; diff --git a/orcid-core/src/test/java/org/orcid/core/web/filters/CrossDomainWebMangerTest.java b/orcid-core/src/test/java/org/orcid/core/web/filters/CrossDomainWebMangerTest.java index caa180cbad7..63641acdefc 100644 --- a/orcid-core/src/test/java/org/orcid/core/web/filters/CrossDomainWebMangerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/web/filters/CrossDomainWebMangerTest.java @@ -6,7 +6,7 @@ import java.net.URISyntaxException; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/orcid-core/src/test/java/org/orcid/record_2_0/ConvertV2ToV2_1Test.java b/orcid-core/src/test/java/org/orcid/record_2_0/ConvertV2ToV2_1Test.java index 79405309b4f..2faebfa6d8f 100644 --- a/orcid-core/src/test/java/org/orcid/record_2_0/ConvertV2ToV2_1Test.java +++ b/orcid-core/src/test/java/org/orcid/record_2_0/ConvertV2ToV2_1Test.java @@ -4,10 +4,10 @@ import java.io.InputStream; -import javax.annotation.Resource; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; +import jakarta.annotation.Resource; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; import org.junit.Test; import org.orcid.core.BaseTest; diff --git a/orcid-internal-api/src/main/java/org/orcid/internal/server/InternalApiServiceImplBase.java b/orcid-internal-api/src/main/java/org/orcid/internal/server/InternalApiServiceImplBase.java index ce79d8cedee..91a4542fc98 100644 --- a/orcid-internal-api/src/main/java/org/orcid/internal/server/InternalApiServiceImplBase.java +++ b/orcid-internal-api/src/main/java/org/orcid/internal/server/InternalApiServiceImplBase.java @@ -6,13 +6,13 @@ import static org.orcid.core.api.OrcidApiConstants.MEMBER_INFO; import static org.orcid.core.api.OrcidApiConstants.STATUS_PATH; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; import org.apache.commons.net.util.Base64; import org.orcid.internal.server.delegator.InternalApiServiceDelegator; diff --git a/orcid-internal-api/src/main/java/org/orcid/internal/server/delegator/InternalApiServiceDelegator.java b/orcid-internal-api/src/main/java/org/orcid/internal/server/delegator/InternalApiServiceDelegator.java index 13e71a333c6..5f645a3c8f4 100644 --- a/orcid-internal-api/src/main/java/org/orcid/internal/server/delegator/InternalApiServiceDelegator.java +++ b/orcid-internal-api/src/main/java/org/orcid/internal/server/delegator/InternalApiServiceDelegator.java @@ -1,6 +1,6 @@ package org.orcid.internal.server.delegator; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.core.Response; /** * diff --git a/orcid-internal-api/src/main/java/org/orcid/internal/server/delegator/impl/InternalApiServiceDelegatorImpl.java b/orcid-internal-api/src/main/java/org/orcid/internal/server/delegator/impl/InternalApiServiceDelegatorImpl.java index ee4c86c2f1b..822c43ac477 100644 --- a/orcid-internal-api/src/main/java/org/orcid/internal/server/delegator/impl/InternalApiServiceDelegatorImpl.java +++ b/orcid-internal-api/src/main/java/org/orcid/internal/server/delegator/impl/InternalApiServiceDelegatorImpl.java @@ -6,9 +6,9 @@ import java.util.HashMap; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.NoResultException; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.core.Response; import org.orcid.core.exception.DeactivatedException; import org.orcid.core.exception.LockedException; diff --git a/orcid-internal-api/src/main/java/org/orcid/internal/util/ClientInfo.java b/orcid-internal-api/src/main/java/org/orcid/internal/util/ClientInfo.java index 1464057347f..a62196c3a9d 100644 --- a/orcid-internal-api/src/main/java/org/orcid/internal/util/ClientInfo.java +++ b/orcid-internal-api/src/main/java/org/orcid/internal/util/ClientInfo.java @@ -1,6 +1,6 @@ package org.orcid.internal.util; -import javax.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlElement; import org.orcid.pojo.ajaxForm.Client; import org.orcid.pojo.ajaxForm.PojoUtil; diff --git a/orcid-internal-api/src/main/java/org/orcid/internal/util/EmailResponse.java b/orcid-internal-api/src/main/java/org/orcid/internal/util/EmailResponse.java index 98b980c7965..47dcbeb4353 100644 --- a/orcid-internal-api/src/main/java/org/orcid/internal/util/EmailResponse.java +++ b/orcid-internal-api/src/main/java/org/orcid/internal/util/EmailResponse.java @@ -2,7 +2,7 @@ import org.springframework.http.HttpStatus; -import javax.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlElement; public class EmailResponse { diff --git a/orcid-internal-api/src/main/java/org/orcid/internal/util/LastModifiedResponse.java b/orcid-internal-api/src/main/java/org/orcid/internal/util/LastModifiedResponse.java index 1ae585bd93b..d023b22ff3c 100644 --- a/orcid-internal-api/src/main/java/org/orcid/internal/util/LastModifiedResponse.java +++ b/orcid-internal-api/src/main/java/org/orcid/internal/util/LastModifiedResponse.java @@ -1,6 +1,6 @@ package org.orcid.internal.util; -import javax.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlElement; /** * diff --git a/orcid-internal-api/src/main/java/org/orcid/internal/util/MemberInfo.java b/orcid-internal-api/src/main/java/org/orcid/internal/util/MemberInfo.java index a5466f2fa6f..994bbe1733b 100644 --- a/orcid-internal-api/src/main/java/org/orcid/internal/util/MemberInfo.java +++ b/orcid-internal-api/src/main/java/org/orcid/internal/util/MemberInfo.java @@ -3,7 +3,7 @@ import java.util.ArrayList; import java.util.List; -import javax.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlElement; import org.orcid.pojo.ajaxForm.Client; import org.orcid.pojo.ajaxForm.Member; diff --git a/orcid-internal-api/src/test/java/org/orcid/internal/server/InternalApiServiceDelegatorTest.java b/orcid-internal-api/src/test/java/org/orcid/internal/server/InternalApiServiceDelegatorTest.java index 5425208e4dd..c574e7de784 100644 --- a/orcid-internal-api/src/test/java/org/orcid/internal/server/InternalApiServiceDelegatorTest.java +++ b/orcid-internal-api/src/test/java/org/orcid/internal/server/InternalApiServiceDelegatorTest.java @@ -9,8 +9,8 @@ import java.util.Arrays; import java.util.List; -import javax.annotation.Resource; -import javax.ws.rs.core.Response; +import jakarta.annotation.Resource; +import jakarta.ws.rs.core.Response; import org.junit.Before; import org.junit.Test; diff --git a/orcid-message-listener/pom.xml b/orcid-message-listener/pom.xml index 0d314448d13..f3c8ecc6e42 100644 --- a/orcid-message-listener/pom.xml +++ b/orcid-message-listener/pom.xml @@ -71,9 +71,9 @@ - javax.ws.rs - javax.ws.rs-api - 2.1 + jakarta.ws.rs + jakarta.ws.rs-api + 3.1.0 @@ -95,14 +95,22 @@ org.postgresql postgresql - - org.hibernate - hibernate-agroal - - - org.hibernate - hibernate-c3p0 - + + org.hibernate.orm + hibernate-core + + + org.hibernate.orm + hibernate-agroal + + + org.hibernate.orm + hibernate-c3p0 + + + org.hibernate.validator + hibernate-validator + org.liquibase liquibase-core @@ -141,9 +149,9 @@ 2.3.3 - javax.annotation - javax.annotation-api - 1.3.2 + jakarta.annotation + jakarta.annotation-api + 2.1.1 diff --git a/orcid-message-listener/src/main/java/org/orcid/cron/ResendSolrFailedMessages.java b/orcid-message-listener/src/main/java/org/orcid/cron/ResendSolrFailedMessages.java index 50833506962..aa727849ed9 100644 --- a/orcid-message-listener/src/main/java/org/orcid/cron/ResendSolrFailedMessages.java +++ b/orcid-message-listener/src/main/java/org/orcid/cron/ResendSolrFailedMessages.java @@ -6,7 +6,7 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.commons.lang3.StringUtils; import org.orcid.listener.persistence.entities.SearchEngineRecordStatusEntity; @@ -23,7 +23,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; -import javax.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MediaType; @Configuration @EnableScheduling diff --git a/orcid-message-listener/src/main/java/org/orcid/cron/ResendV2FailedMessages.java b/orcid-message-listener/src/main/java/org/orcid/cron/ResendV2FailedMessages.java index 677c9ffb748..8a5be6f0154 100644 --- a/orcid-message-listener/src/main/java/org/orcid/cron/ResendV2FailedMessages.java +++ b/orcid-message-listener/src/main/java/org/orcid/cron/ResendV2FailedMessages.java @@ -6,7 +6,7 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.commons.lang3.StringUtils; import org.orcid.listener.persistence.entities.Api20RecordStatusEntity; @@ -24,7 +24,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; -import javax.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MediaType; @Configuration @EnableScheduling diff --git a/orcid-message-listener/src/main/java/org/orcid/cron/ResendV3FailedMessages.java b/orcid-message-listener/src/main/java/org/orcid/cron/ResendV3FailedMessages.java index 87ae7d1efe4..2397f329961 100644 --- a/orcid-message-listener/src/main/java/org/orcid/cron/ResendV3FailedMessages.java +++ b/orcid-message-listener/src/main/java/org/orcid/cron/ResendV3FailedMessages.java @@ -6,7 +6,7 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.commons.lang3.StringUtils; import org.orcid.listener.persistence.entities.Api30RecordStatusEntity; @@ -24,7 +24,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; -import javax.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MediaType; @Configuration @EnableScheduling diff --git a/orcid-message-listener/src/main/java/org/orcid/listener/BaseListener.java b/orcid-message-listener/src/main/java/org/orcid/listener/BaseListener.java index ccb928b104c..373fe6cecaa 100644 --- a/orcid-message-listener/src/main/java/org/orcid/listener/BaseListener.java +++ b/orcid-message-listener/src/main/java/org/orcid/listener/BaseListener.java @@ -20,9 +20,9 @@ import java.util.Map; import java.util.function.Consumer; -import javax.jms.JMSException; -import javax.jms.Message; -import javax.jms.MessageListener; +import jakarta.jms.JMSException; +import jakarta.jms.Message; +import jakarta.jms.MessageListener; import org.apache.activemq.command.ActiveMQMapMessage; import org.fusesource.hawtbuf.UTF8Buffer; diff --git a/orcid-message-listener/src/main/java/org/orcid/listener/OrgIndexerListener.java b/orcid-message-listener/src/main/java/org/orcid/listener/OrgIndexerListener.java index 1a72988ca6b..91dee8dc7e8 100644 --- a/orcid-message-listener/src/main/java/org/orcid/listener/OrgIndexerListener.java +++ b/orcid-message-listener/src/main/java/org/orcid/listener/OrgIndexerListener.java @@ -1,8 +1,8 @@ package org.orcid.listener; -import javax.jms.JMSException; -import javax.jms.Message; -import javax.jms.MessageListener; +import jakarta.jms.JMSException; +import jakarta.jms.Message; +import jakarta.jms.MessageListener; import org.apache.activemq.command.ActiveMQObjectMessage; import org.orcid.listener.solr.SolrOrgsMessageProcessor; diff --git a/orcid-message-listener/src/main/java/org/orcid/listener/http/OrcidAPIClient.java b/orcid-message-listener/src/main/java/org/orcid/listener/http/OrcidAPIClient.java index 0839e5d8b73..9d1e449a92d 100644 --- a/orcid-message-listener/src/main/java/org/orcid/listener/http/OrcidAPIClient.java +++ b/orcid-message-listener/src/main/java/org/orcid/listener/http/OrcidAPIClient.java @@ -11,7 +11,7 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; -import javax.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MediaType; @Component public class OrcidAPIClient { diff --git a/orcid-message-listener/src/main/java/org/orcid/listener/orcid/Orcid20ManagerImpl.java b/orcid-message-listener/src/main/java/org/orcid/listener/orcid/Orcid20ManagerImpl.java index 729da2afc1b..df309371285 100644 --- a/orcid-message-listener/src/main/java/org/orcid/listener/orcid/Orcid20ManagerImpl.java +++ b/orcid-message-listener/src/main/java/org/orcid/listener/orcid/Orcid20ManagerImpl.java @@ -6,7 +6,7 @@ import java.util.Map; import java.util.concurrent.ExecutionException; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.jaxb.model.error_v2.OrcidError; import org.orcid.jaxb.model.record_v2.Record; @@ -21,7 +21,7 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; -import javax.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MediaType; @Component public class Orcid20ManagerImpl implements Orcid20Manager { diff --git a/orcid-message-listener/src/main/java/org/orcid/listener/orcid/Orcid30ManagerImpl.java b/orcid-message-listener/src/main/java/org/orcid/listener/orcid/Orcid30ManagerImpl.java index 3e1797aa1a7..9cc27aaa80a 100644 --- a/orcid-message-listener/src/main/java/org/orcid/listener/orcid/Orcid30ManagerImpl.java +++ b/orcid-message-listener/src/main/java/org/orcid/listener/orcid/Orcid30ManagerImpl.java @@ -7,7 +7,7 @@ import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.jaxb.model.v3.release.error.OrcidError; import org.orcid.jaxb.model.v3.release.record.Record; @@ -28,7 +28,7 @@ import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; -import javax.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MediaType; @Component public class Orcid30ManagerImpl implements Orcid30Manager { diff --git a/orcid-message-listener/src/main/java/org/orcid/listener/s3/S3Manager.java b/orcid-message-listener/src/main/java/org/orcid/listener/s3/S3Manager.java index a18e8c96627..0f7d45c00b6 100644 --- a/orcid-message-listener/src/main/java/org/orcid/listener/s3/S3Manager.java +++ b/orcid-message-listener/src/main/java/org/orcid/listener/s3/S3Manager.java @@ -20,9 +20,9 @@ import java.util.HashMap; import java.util.Map; -import javax.annotation.Resource; -import javax.ws.rs.core.MediaType; -import javax.xml.bind.JAXBException; +import jakarta.annotation.Resource; +import jakarta.ws.rs.core.MediaType; +import jakarta.xml.bind.JAXBException; import org.orcid.listener.persistence.util.APIVersion; import org.orcid.listener.persistence.util.ActivityType; diff --git a/orcid-message-listener/src/main/java/org/orcid/listener/s3/S3MessageProcessorAPIV2.java b/orcid-message-listener/src/main/java/org/orcid/listener/s3/S3MessageProcessorAPIV2.java index 288c8aa5691..69052498d31 100644 --- a/orcid-message-listener/src/main/java/org/orcid/listener/s3/S3MessageProcessorAPIV2.java +++ b/orcid-message-listener/src/main/java/org/orcid/listener/s3/S3MessageProcessorAPIV2.java @@ -6,8 +6,8 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; -import javax.xml.bind.JAXBException; +import jakarta.annotation.Resource; +import jakarta.xml.bind.JAXBException; import org.orcid.jaxb.model.error_v2.OrcidError; import org.orcid.jaxb.model.record.summary_v2.ActivitiesSummary; diff --git a/orcid-message-listener/src/main/java/org/orcid/listener/s3/S3MessageProcessorAPIV3.java b/orcid-message-listener/src/main/java/org/orcid/listener/s3/S3MessageProcessorAPIV3.java index 116d2e5b16a..d00717c0b9f 100644 --- a/orcid-message-listener/src/main/java/org/orcid/listener/s3/S3MessageProcessorAPIV3.java +++ b/orcid-message-listener/src/main/java/org/orcid/listener/s3/S3MessageProcessorAPIV3.java @@ -6,8 +6,8 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; -import javax.xml.bind.JAXBException; +import jakarta.annotation.Resource; +import jakarta.xml.bind.JAXBException; import org.orcid.jaxb.model.v3.release.error.OrcidError; import org.orcid.jaxb.model.v3.release.record.Activity; diff --git a/orcid-message-listener/src/main/java/org/orcid/listener/s3/S3MessagingService.java b/orcid-message-listener/src/main/java/org/orcid/listener/s3/S3MessagingService.java index 3f93325d238..3ef3ac71738 100644 --- a/orcid-message-listener/src/main/java/org/orcid/listener/s3/S3MessagingService.java +++ b/orcid-message-listener/src/main/java/org/orcid/listener/s3/S3MessagingService.java @@ -5,7 +5,7 @@ import java.util.Date; import java.util.concurrent.TimeUnit; -import javax.xml.bind.JAXBException; +import jakarta.xml.bind.JAXBException; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3ClientBuilder; diff --git a/orcid-message-listener/src/main/java/org/orcid/listener/s3/S3V2RecordConsumer.java b/orcid-message-listener/src/main/java/org/orcid/listener/s3/S3V2RecordConsumer.java index 3acabc095a0..6a2a5fce11b 100644 --- a/orcid-message-listener/src/main/java/org/orcid/listener/s3/S3V2RecordConsumer.java +++ b/orcid-message-listener/src/main/java/org/orcid/listener/s3/S3V2RecordConsumer.java @@ -2,7 +2,7 @@ import java.util.function.Consumer; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.utils.listener.LastModifiedMessage; import org.orcid.utils.listener.RetryMessage; diff --git a/orcid-message-listener/src/main/java/org/orcid/listener/s3/S3V3RecordConsumer.java b/orcid-message-listener/src/main/java/org/orcid/listener/s3/S3V3RecordConsumer.java index 3ca0eb54a45..b6e76d61baa 100644 --- a/orcid-message-listener/src/main/java/org/orcid/listener/s3/S3V3RecordConsumer.java +++ b/orcid-message-listener/src/main/java/org/orcid/listener/s3/S3V3RecordConsumer.java @@ -2,7 +2,7 @@ import java.util.function.Consumer; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.utils.listener.LastModifiedMessage; import org.orcid.utils.listener.RetryMessage; diff --git a/orcid-message-listener/src/main/java/org/orcid/listener/solr/OrcidRecordToSolrDocument.java b/orcid-message-listener/src/main/java/org/orcid/listener/solr/OrcidRecordToSolrDocument.java index b9e3cf27f7b..4dd88e79c93 100644 --- a/orcid-message-listener/src/main/java/org/orcid/listener/solr/OrcidRecordToSolrDocument.java +++ b/orcid-message-listener/src/main/java/org/orcid/listener/solr/OrcidRecordToSolrDocument.java @@ -11,8 +11,8 @@ import java.util.Map.Entry; import java.util.Set; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; import org.apache.commons.lang.StringUtils; import org.orcid.jaxb.model.common.Relationship; diff --git a/orcid-message-listener/src/main/java/org/orcid/listener/solr/SolrBeanFactory.java b/orcid-message-listener/src/main/java/org/orcid/listener/solr/SolrBeanFactory.java index 2ec649ec04d..a93adebd67b 100644 --- a/orcid-message-listener/src/main/java/org/orcid/listener/solr/SolrBeanFactory.java +++ b/orcid-message-listener/src/main/java/org/orcid/listener/solr/SolrBeanFactory.java @@ -1,6 +1,6 @@ package org.orcid.listener.solr; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.impl.HttpSolrClient; diff --git a/orcid-message-listener/src/main/java/org/orcid/listener/solr/SolrIndexUpdater.java b/orcid-message-listener/src/main/java/org/orcid/listener/solr/SolrIndexUpdater.java index 46c0e417cd1..7a3b9e9e7a5 100644 --- a/orcid-message-listener/src/main/java/org/orcid/listener/solr/SolrIndexUpdater.java +++ b/orcid-message-listener/src/main/java/org/orcid/listener/solr/SolrIndexUpdater.java @@ -7,7 +7,7 @@ import java.util.Date; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.SolrQuery; diff --git a/orcid-message-listener/src/main/java/org/orcid/listener/solr/SolrMessageProcessor.java b/orcid-message-listener/src/main/java/org/orcid/listener/solr/SolrMessageProcessor.java index c984105b967..f5803c746c1 100644 --- a/orcid-message-listener/src/main/java/org/orcid/listener/solr/SolrMessageProcessor.java +++ b/orcid-message-listener/src/main/java/org/orcid/listener/solr/SolrMessageProcessor.java @@ -4,8 +4,8 @@ import java.util.List; import java.util.function.Consumer; -import javax.annotation.Resource; -import javax.xml.bind.JAXBException; +import jakarta.annotation.Resource; +import jakarta.xml.bind.JAXBException; import org.orcid.jaxb.model.v3.release.record.Record; import org.orcid.jaxb.model.v3.release.record.ResearchResource; diff --git a/orcid-message-listener/src/main/java/org/orcid/listener/solr/SolrOrgsMessageProcessor.java b/orcid-message-listener/src/main/java/org/orcid/listener/solr/SolrOrgsMessageProcessor.java index 8e08fd09917..f598f64c893 100644 --- a/orcid-message-listener/src/main/java/org/orcid/listener/solr/SolrOrgsMessageProcessor.java +++ b/orcid-message-listener/src/main/java/org/orcid/listener/solr/SolrOrgsMessageProcessor.java @@ -5,8 +5,8 @@ import java.util.Map; import java.util.function.Consumer; -import javax.annotation.Resource; -import javax.xml.bind.JAXBException; +import jakarta.annotation.Resource; +import jakarta.xml.bind.JAXBException; import org.apache.commons.lang3.StringUtils; import org.orcid.utils.jersey.JerseyClientHelper; @@ -20,7 +20,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; -import javax.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MediaType; @Component public class SolrOrgsMessageProcessor implements Consumer { diff --git a/orcid-message-listener/src/test/java/org/orcid/listener/clients/S3ManagerTest.java b/orcid-message-listener/src/test/java/org/orcid/listener/clients/S3ManagerTest.java index c5fdcf54651..3f6d57df343 100644 --- a/orcid-message-listener/src/test/java/org/orcid/listener/clients/S3ManagerTest.java +++ b/orcid-message-listener/src/test/java/org/orcid/listener/clients/S3ManagerTest.java @@ -10,8 +10,8 @@ import java.io.IOException; import java.util.Date; -import javax.ws.rs.core.MediaType; -import javax.xml.bind.JAXBException; +import jakarta.ws.rs.core.MediaType; +import jakarta.xml.bind.JAXBException; import org.junit.Before; import org.junit.Test; diff --git a/orcid-message-listener/src/test/java/org/orcid/listener/common/S3MessageProcessorAPIV2Test.java b/orcid-message-listener/src/test/java/org/orcid/listener/common/S3MessageProcessorAPIV2Test.java index 7e97e0fb621..633416e06a3 100644 --- a/orcid-message-listener/src/test/java/org/orcid/listener/common/S3MessageProcessorAPIV2Test.java +++ b/orcid-message-listener/src/test/java/org/orcid/listener/common/S3MessageProcessorAPIV2Test.java @@ -21,8 +21,8 @@ import java.util.Map; import java.util.concurrent.ExecutionException; -import javax.annotation.Resource; -import javax.xml.bind.JAXBException; +import jakarta.annotation.Resource; +import jakarta.xml.bind.JAXBException; import javax.xml.datatype.XMLGregorianCalendar; import org.junit.Before; diff --git a/orcid-message-listener/src/test/java/org/orcid/listener/common/S3MessageProcessorAPIV3Test.java b/orcid-message-listener/src/test/java/org/orcid/listener/common/S3MessageProcessorAPIV3Test.java index d48fdce1aae..3adf8f5c677 100644 --- a/orcid-message-listener/src/test/java/org/orcid/listener/common/S3MessageProcessorAPIV3Test.java +++ b/orcid-message-listener/src/test/java/org/orcid/listener/common/S3MessageProcessorAPIV3Test.java @@ -21,8 +21,8 @@ import java.util.Map; import java.util.concurrent.ExecutionException; -import javax.annotation.Resource; -import javax.xml.bind.JAXBException; +import jakarta.annotation.Resource; +import jakarta.xml.bind.JAXBException; import javax.xml.datatype.XMLGregorianCalendar; import org.junit.Before; diff --git a/orcid-message-listener/src/test/java/org/orcid/listener/converter/OrcidRecordToSolrDocumentTest.java b/orcid-message-listener/src/test/java/org/orcid/listener/converter/OrcidRecordToSolrDocumentTest.java index f05b8c61f8e..bf25a2b9e10 100644 --- a/orcid-message-listener/src/test/java/org/orcid/listener/converter/OrcidRecordToSolrDocumentTest.java +++ b/orcid-message-listener/src/test/java/org/orcid/listener/converter/OrcidRecordToSolrDocumentTest.java @@ -7,9 +7,9 @@ import java.io.InputStream; import java.util.Arrays; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; import org.junit.Test; import org.orcid.jaxb.model.common.PeerReviewType; diff --git a/orcid-message-listener/src/test/java/org/orcid/listener/persistence/dao/Api20RecordStatusDaoTest.java b/orcid-message-listener/src/test/java/org/orcid/listener/persistence/dao/Api20RecordStatusDaoTest.java index c19e28195ba..5864aa3a90d 100644 --- a/orcid-message-listener/src/test/java/org/orcid/listener/persistence/dao/Api20RecordStatusDaoTest.java +++ b/orcid-message-listener/src/test/java/org/orcid/listener/persistence/dao/Api20RecordStatusDaoTest.java @@ -10,7 +10,7 @@ import java.util.Date; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.EntityManager; import jakarta.persistence.PersistenceContext; diff --git a/orcid-message-listener/src/test/java/org/orcid/listener/persistence/dao/Api30RecordStatusDaoTest.java b/orcid-message-listener/src/test/java/org/orcid/listener/persistence/dao/Api30RecordStatusDaoTest.java index de8a4233d39..f429dc9c476 100644 --- a/orcid-message-listener/src/test/java/org/orcid/listener/persistence/dao/Api30RecordStatusDaoTest.java +++ b/orcid-message-listener/src/test/java/org/orcid/listener/persistence/dao/Api30RecordStatusDaoTest.java @@ -10,7 +10,7 @@ import java.util.Date; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.EntityManager; import jakarta.persistence.PersistenceContext; diff --git a/orcid-message-listener/src/test/java/org/orcid/listener/s3/S3MessagingServiceTest.java b/orcid-message-listener/src/test/java/org/orcid/listener/s3/S3MessagingServiceTest.java index e1ac7366164..6a0d20dcac0 100644 --- a/orcid-message-listener/src/test/java/org/orcid/listener/s3/S3MessagingServiceTest.java +++ b/orcid-message-listener/src/test/java/org/orcid/listener/s3/S3MessagingServiceTest.java @@ -2,7 +2,7 @@ import static org.junit.Assert.assertEquals; -import javax.xml.bind.JAXBException; +import jakarta.xml.bind.JAXBException; import org.junit.Before; import org.junit.Test; diff --git a/orcid-persistence/pom.xml b/orcid-persistence/pom.xml index 311c20d6981..16880a8ba94 100644 --- a/orcid-persistence/pom.xml +++ b/orcid-persistence/pom.xml @@ -33,6 +33,7 @@ **/*.xml **/*.xsd **/*.txt + META-INF/services/** **/orcid-persistence-context.xml @@ -216,9 +217,9 @@ 2.3.3 - javax.annotation - javax.annotation-api - 1.3.2 + jakarta.annotation + jakarta.annotation-api + 2.1.1 diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/EmailScheduleDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/EmailScheduleDaoImpl.java index 1f7ba212526..8da6be7a45a 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/EmailScheduleDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/EmailScheduleDaoImpl.java @@ -5,7 +5,7 @@ import java.util.List; import jakarta.persistence.Query; -import javax.transaction.Transactional; +import jakarta.transaction.Transactional; import org.orcid.persistence.dao.EmailScheduleDao; import org.orcid.persistence.jpa.entities.EmailScheduleEntity; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/EventDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/EventDaoImpl.java index 55ea03b506c..a2ad19ed1ff 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/EventDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/EventDaoImpl.java @@ -1,6 +1,6 @@ package org.orcid.persistence.dao.impl; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.EntityManager; import jakarta.persistence.Query; import jakarta.persistence.TypedQuery; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/EventStatsDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/EventStatsDaoImpl.java index e8df8d1672e..b6434da1171 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/EventStatsDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/EventStatsDaoImpl.java @@ -5,7 +5,7 @@ import org.orcid.persistence.jpa.entities.EventStatsEntity; import org.springframework.transaction.annotation.Transactional; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.EntityManager; import jakarta.persistence.Query; import jakarta.persistence.TypedQuery; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/FindMyStuffHistoryDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/FindMyStuffHistoryDaoImpl.java index db9238bed64..f6471b0ae9a 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/FindMyStuffHistoryDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/FindMyStuffHistoryDaoImpl.java @@ -4,7 +4,7 @@ import jakarta.persistence.Query; import jakarta.persistence.TypedQuery; -import javax.transaction.Transactional; +import jakarta.transaction.Transactional; import org.orcid.persistence.dao.FindMyStuffHistoryDao; import org.orcid.persistence.jpa.entities.FindMyStuffHistoryEntity; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/GenericDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/GenericDaoImpl.java index 6cf64324ec6..8f91ea9f6ec 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/GenericDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/GenericDaoImpl.java @@ -4,7 +4,7 @@ import java.util.Date; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.EntityManager; import jakarta.persistence.Query; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/IdentityProviderDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/IdentityProviderDaoImpl.java index 45d05636047..3095a6af968 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/IdentityProviderDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/IdentityProviderDaoImpl.java @@ -4,7 +4,7 @@ import jakarta.persistence.Query; import jakarta.persistence.TypedQuery; -import javax.transaction.Transactional; +import jakarta.transaction.Transactional; import org.orcid.persistence.dao.IdentityProviderDao; import org.orcid.persistence.jpa.entities.IdentityProviderEntity; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/InvalidRecordDataChangeDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/InvalidRecordDataChangeDaoImpl.java index e021e6e4bd5..6513008cb9b 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/InvalidRecordDataChangeDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/InvalidRecordDataChangeDaoImpl.java @@ -2,7 +2,7 @@ import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.EntityManager; import jakarta.persistence.Query; import jakarta.persistence.TypedQuery; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/MemberChosenOrgDisambiguatedDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/MemberChosenOrgDisambiguatedDaoImpl.java index e7fe152e467..68378f0487a 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/MemberChosenOrgDisambiguatedDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/MemberChosenOrgDisambiguatedDaoImpl.java @@ -2,9 +2,9 @@ import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.EntityManager; -import javax.transaction.Transactional; +import jakarta.transaction.Transactional; import org.orcid.persistence.dao.MemberChosenOrgDisambiguatedDao; import org.orcid.persistence.jpa.entities.MemberChosenOrgDisambiguatedEntity; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/MiscDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/MiscDaoImpl.java index f8a41a40176..b5648b6c959 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/MiscDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/MiscDaoImpl.java @@ -2,7 +2,7 @@ import java.util.Date; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.EntityManager; import jakarta.persistence.Query; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgAffiliationRelationDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgAffiliationRelationDaoImpl.java index 0edb345e599..c56a1f3c53c 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgAffiliationRelationDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgAffiliationRelationDaoImpl.java @@ -5,7 +5,7 @@ import java.util.List; import java.util.concurrent.CompletableFuture; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.Query; import jakarta.persistence.TypedQuery; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ValidatedPublicProfileDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ValidatedPublicProfileDaoImpl.java index f996ad2c924..29121caef65 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ValidatedPublicProfileDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ValidatedPublicProfileDaoImpl.java @@ -4,7 +4,7 @@ import java.util.List; import jakarta.persistence.Query; -import javax.transaction.Transactional; +import jakarta.transaction.Transactional; import org.orcid.persistence.dao.ValidatedPublicProfileDao; import org.orcid.persistence.jpa.entities.ValidatedPublicProfileEntity; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/package-info.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/package-info.java index f3c05483fcb..273ddc8d09d 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/package-info.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/package-info.java @@ -1,7 +1 @@ -@TypeDefs( { @TypeDef(name = "encryptedString", typeClass = EncryptedStringType.class, parameters = { @Parameter(name = "encryptorRegisteredName", value = "hibernateStringEncryptor") }) }) -package org.orcid.persistence.jpa.entities; - -import org.hibernate.annotations.TypeDefs; -import org.hibernate.annotations.TypeDef; -import org.hibernate.annotations.Parameter; -import org.jasypt.hibernate5.type.EncryptedStringType; \ No newline at end of file +package org.orcid.persistence.jpa.entities; \ No newline at end of file diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/type/EncryptedStringTypeContributor.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/type/EncryptedStringTypeContributor.java new file mode 100644 index 00000000000..b7691638c06 --- /dev/null +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/type/EncryptedStringTypeContributor.java @@ -0,0 +1,41 @@ +package org.orcid.persistence.jpa.type; + +import org.hibernate.boot.model.TypeContributions; +import org.hibernate.boot.model.TypeContributor; +import org.hibernate.service.ServiceRegistry; +import org.hibernate.type.BasicType; +import org.hibernate.type.BasicTypeReference; +import org.hibernate.type.StandardBasicTypes; + +/** + * Registers the legacy encryptedString logical type name in Hibernate 6. + * + * The old TypeDef or TypeDefs annotation API was removed, so this keeps + * compatibility for mappings that still refer to encryptedString by name. + */ +public class EncryptedStringTypeContributor implements TypeContributor { + + public static final String ENCRYPTED_STRING_TYPE_NAME = "encryptedString"; + + @Override + public void contribute(TypeContributions typeContributions, ServiceRegistry serviceRegistry) { + BasicType stringType = resolveStringType(typeContributions); + typeContributions.getTypeConfiguration() + .getBasicTypeRegistry() + .register(stringType, ENCRYPTED_STRING_TYPE_NAME); + } + + private BasicType resolveStringType(TypeContributions typeContributions) { + BasicType stringType = typeContributions.getTypeConfiguration() + .getBasicTypeRegistry() + .getRegisteredType("string"); + if (stringType != null) { + return stringType; + } + + BasicTypeReference stringReference = StandardBasicTypes.STRING; + return typeContributions.getTypeConfiguration() + .getBasicTypeRegistry() + .resolve(stringReference); + } +} \ No newline at end of file diff --git a/orcid-persistence/src/main/resources/META-INF/services/org.hibernate.boot.model.TypeContributor b/orcid-persistence/src/main/resources/META-INF/services/org.hibernate.boot.model.TypeContributor new file mode 100644 index 00000000000..a9182248ca6 --- /dev/null +++ b/orcid-persistence/src/main/resources/META-INF/services/org.hibernate.boot.model.TypeContributor @@ -0,0 +1 @@ +org.orcid.persistence.jpa.type.EncryptedStringTypeContributor diff --git a/orcid-persistence/src/main/resources/orcid-persistence-context.xml b/orcid-persistence/src/main/resources/orcid-persistence-context.xml index 228ed700ff7..3bbb6e793ff 100644 --- a/orcid-persistence/src/main/resources/orcid-persistence-context.xml +++ b/orcid-persistence/src/main/resources/orcid-persistence-context.xml @@ -289,7 +289,7 @@ - + @@ -300,7 +300,7 @@ - + diff --git a/orcid-persistence/src/test/java/org/orcid/persistence/dao/AddressDaoTest.java b/orcid-persistence/src/test/java/org/orcid/persistence/dao/AddressDaoTest.java index 94614a5898c..4e2d7a9c7c4 100644 --- a/orcid-persistence/src/test/java/org/orcid/persistence/dao/AddressDaoTest.java +++ b/orcid-persistence/src/test/java/org/orcid/persistence/dao/AddressDaoTest.java @@ -8,7 +8,7 @@ import java.util.Date; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.AfterClass; import org.junit.BeforeClass; diff --git a/orcid-persistence/src/test/java/org/orcid/persistence/dao/BackupCodesDaoTest.java b/orcid-persistence/src/test/java/org/orcid/persistence/dao/BackupCodesDaoTest.java index 726cf6fe906..313d36facef 100644 --- a/orcid-persistence/src/test/java/org/orcid/persistence/dao/BackupCodesDaoTest.java +++ b/orcid-persistence/src/test/java/org/orcid/persistence/dao/BackupCodesDaoTest.java @@ -7,7 +7,7 @@ import java.util.Arrays; import java.util.Date; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.AfterClass; import org.junit.BeforeClass; diff --git a/orcid-persistence/src/test/java/org/orcid/persistence/dao/BiographyDaoTest.java b/orcid-persistence/src/test/java/org/orcid/persistence/dao/BiographyDaoTest.java index fe4207ac681..4e225b389bd 100644 --- a/orcid-persistence/src/test/java/org/orcid/persistence/dao/BiographyDaoTest.java +++ b/orcid-persistence/src/test/java/org/orcid/persistence/dao/BiographyDaoTest.java @@ -7,7 +7,7 @@ import java.util.Arrays; import java.util.Date; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.AfterClass; import org.junit.BeforeClass; diff --git a/orcid-persistence/src/test/java/org/orcid/persistence/dao/ClientDetailsDaoTest.java b/orcid-persistence/src/test/java/org/orcid/persistence/dao/ClientDetailsDaoTest.java index adbc52f909b..b784aa911dc 100644 --- a/orcid-persistence/src/test/java/org/orcid/persistence/dao/ClientDetailsDaoTest.java +++ b/orcid-persistence/src/test/java/org/orcid/persistence/dao/ClientDetailsDaoTest.java @@ -6,7 +6,7 @@ import java.util.Arrays; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.AfterClass; import org.junit.BeforeClass; diff --git a/orcid-persistence/src/test/java/org/orcid/persistence/dao/ClientSecretDaoTest.java b/orcid-persistence/src/test/java/org/orcid/persistence/dao/ClientSecretDaoTest.java index 216ba3c4e86..a2f9f5d9958 100644 --- a/orcid-persistence/src/test/java/org/orcid/persistence/dao/ClientSecretDaoTest.java +++ b/orcid-persistence/src/test/java/org/orcid/persistence/dao/ClientSecretDaoTest.java @@ -7,7 +7,7 @@ import java.util.Arrays; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.AfterClass; import org.junit.Before; diff --git a/orcid-persistence/src/test/java/org/orcid/persistence/dao/EmailDaoTest.java b/orcid-persistence/src/test/java/org/orcid/persistence/dao/EmailDaoTest.java index 0195d14a87d..b48fdde9bc0 100644 --- a/orcid-persistence/src/test/java/org/orcid/persistence/dao/EmailDaoTest.java +++ b/orcid-persistence/src/test/java/org/orcid/persistence/dao/EmailDaoTest.java @@ -8,7 +8,7 @@ import java.util.Arrays; import java.util.Date; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.AfterClass; import org.junit.Before; diff --git a/orcid-persistence/src/test/java/org/orcid/persistence/dao/EmailFrequencyDaoTest.java b/orcid-persistence/src/test/java/org/orcid/persistence/dao/EmailFrequencyDaoTest.java index 6fa9118435a..fa38ec2f830 100644 --- a/orcid-persistence/src/test/java/org/orcid/persistence/dao/EmailFrequencyDaoTest.java +++ b/orcid-persistence/src/test/java/org/orcid/persistence/dao/EmailFrequencyDaoTest.java @@ -8,7 +8,7 @@ import java.util.Arrays; import java.util.Date; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.AfterClass; import org.junit.BeforeClass; diff --git a/orcid-persistence/src/test/java/org/orcid/persistence/dao/EventDaoTest.java b/orcid-persistence/src/test/java/org/orcid/persistence/dao/EventDaoTest.java index 9c6ef5f0981..22d4d6f70ae 100644 --- a/orcid-persistence/src/test/java/org/orcid/persistence/dao/EventDaoTest.java +++ b/orcid-persistence/src/test/java/org/orcid/persistence/dao/EventDaoTest.java @@ -8,7 +8,7 @@ import java.util.Date; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.EntityManager; import org.apache.commons.lang3.reflect.FieldUtils; diff --git a/orcid-persistence/src/test/java/org/orcid/persistence/dao/EventStatsDaoTest.java b/orcid-persistence/src/test/java/org/orcid/persistence/dao/EventStatsDaoTest.java index 343b6fc8063..173ac24c3da 100644 --- a/orcid-persistence/src/test/java/org/orcid/persistence/dao/EventStatsDaoTest.java +++ b/orcid-persistence/src/test/java/org/orcid/persistence/dao/EventStatsDaoTest.java @@ -8,7 +8,7 @@ import org.orcid.test.OrcidJUnit4ClassRunner; import org.springframework.test.context.ContextConfiguration; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import java.time.Instant; import java.time.LocalDate; import java.time.ZoneId; diff --git a/orcid-persistence/src/test/java/org/orcid/persistence/dao/ExternalIdentifierDaoTest.java b/orcid-persistence/src/test/java/org/orcid/persistence/dao/ExternalIdentifierDaoTest.java index 520064f3b06..93f7216bfd7 100644 --- a/orcid-persistence/src/test/java/org/orcid/persistence/dao/ExternalIdentifierDaoTest.java +++ b/orcid-persistence/src/test/java/org/orcid/persistence/dao/ExternalIdentifierDaoTest.java @@ -13,7 +13,7 @@ import java.util.Date; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.NoResultException; import org.junit.AfterClass; diff --git a/orcid-persistence/src/test/java/org/orcid/persistence/dao/FindMyStuffDaoTest.java b/orcid-persistence/src/test/java/org/orcid/persistence/dao/FindMyStuffDaoTest.java index 7a64b1d3a8e..ad1662e7a31 100644 --- a/orcid-persistence/src/test/java/org/orcid/persistence/dao/FindMyStuffDaoTest.java +++ b/orcid-persistence/src/test/java/org/orcid/persistence/dao/FindMyStuffDaoTest.java @@ -6,7 +6,7 @@ import java.util.Arrays; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.AfterClass; import org.junit.BeforeClass; diff --git a/orcid-persistence/src/test/java/org/orcid/persistence/dao/IdentifierTypeDaoTest.java b/orcid-persistence/src/test/java/org/orcid/persistence/dao/IdentifierTypeDaoTest.java index 24f62d9e7fd..b76083592c0 100644 --- a/orcid-persistence/src/test/java/org/orcid/persistence/dao/IdentifierTypeDaoTest.java +++ b/orcid-persistence/src/test/java/org/orcid/persistence/dao/IdentifierTypeDaoTest.java @@ -9,7 +9,7 @@ import java.util.Date; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.AfterClass; import org.junit.BeforeClass; diff --git a/orcid-persistence/src/test/java/org/orcid/persistence/dao/InvalidRecordDataChangeDaoTest.java b/orcid-persistence/src/test/java/org/orcid/persistence/dao/InvalidRecordDataChangeDaoTest.java index 1a9ce581227..9860a919791 100644 --- a/orcid-persistence/src/test/java/org/orcid/persistence/dao/InvalidRecordDataChangeDaoTest.java +++ b/orcid-persistence/src/test/java/org/orcid/persistence/dao/InvalidRecordDataChangeDaoTest.java @@ -9,7 +9,7 @@ import java.util.Iterator; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.AfterClass; import org.junit.BeforeClass; diff --git a/orcid-persistence/src/test/java/org/orcid/persistence/dao/NotificationDaoTest.java b/orcid-persistence/src/test/java/org/orcid/persistence/dao/NotificationDaoTest.java index 38900733811..7cdea554dc6 100644 --- a/orcid-persistence/src/test/java/org/orcid/persistence/dao/NotificationDaoTest.java +++ b/orcid-persistence/src/test/java/org/orcid/persistence/dao/NotificationDaoTest.java @@ -16,7 +16,7 @@ import java.util.List; import java.util.Set; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.commons.lang3.reflect.FieldUtils; import org.hsqldb.types.NumberType; diff --git a/orcid-persistence/src/test/java/org/orcid/persistence/dao/NotificationDao_NoDBPrefillTest.java b/orcid-persistence/src/test/java/org/orcid/persistence/dao/NotificationDao_NoDBPrefillTest.java index e7bf016db97..5056608b37c 100644 --- a/orcid-persistence/src/test/java/org/orcid/persistence/dao/NotificationDao_NoDBPrefillTest.java +++ b/orcid-persistence/src/test/java/org/orcid/persistence/dao/NotificationDao_NoDBPrefillTest.java @@ -8,7 +8,7 @@ import java.util.Collections; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.AfterClass; import org.junit.BeforeClass; diff --git a/orcid-persistence/src/test/java/org/orcid/persistence/dao/OrcidOauth2AuthoriziationCodeDetailDaoTest.java b/orcid-persistence/src/test/java/org/orcid/persistence/dao/OrcidOauth2AuthoriziationCodeDetailDaoTest.java index 1200d469198..d99c8c4d40e 100644 --- a/orcid-persistence/src/test/java/org/orcid/persistence/dao/OrcidOauth2AuthoriziationCodeDetailDaoTest.java +++ b/orcid-persistence/src/test/java/org/orcid/persistence/dao/OrcidOauth2AuthoriziationCodeDetailDaoTest.java @@ -7,7 +7,7 @@ import java.util.Date; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.AfterClass; import org.junit.BeforeClass; diff --git a/orcid-persistence/src/test/java/org/orcid/persistence/dao/OrcidOauth2TokenDetailDaoTest.java b/orcid-persistence/src/test/java/org/orcid/persistence/dao/OrcidOauth2TokenDetailDaoTest.java index af7d0997627..dd18feaa29d 100644 --- a/orcid-persistence/src/test/java/org/orcid/persistence/dao/OrcidOauth2TokenDetailDaoTest.java +++ b/orcid-persistence/src/test/java/org/orcid/persistence/dao/OrcidOauth2TokenDetailDaoTest.java @@ -14,7 +14,7 @@ import java.util.List; import java.util.Locale; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.NoResultException; import org.junit.AfterClass; diff --git a/orcid-persistence/src/test/java/org/orcid/persistence/dao/OrgAffiliationRelationDaoTest.java b/orcid-persistence/src/test/java/org/orcid/persistence/dao/OrgAffiliationRelationDaoTest.java index fcca19d9ea7..0b50d198a67 100644 --- a/orcid-persistence/src/test/java/org/orcid/persistence/dao/OrgAffiliationRelationDaoTest.java +++ b/orcid-persistence/src/test/java/org/orcid/persistence/dao/OrgAffiliationRelationDaoTest.java @@ -8,7 +8,7 @@ import java.util.Arrays; import java.util.Date; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.AfterClass; import org.junit.BeforeClass; diff --git a/orcid-persistence/src/test/java/org/orcid/persistence/dao/OrgDisambiguatedDaoTest.java b/orcid-persistence/src/test/java/org/orcid/persistence/dao/OrgDisambiguatedDaoTest.java index f763e1f3869..8817f043040 100644 --- a/orcid-persistence/src/test/java/org/orcid/persistence/dao/OrgDisambiguatedDaoTest.java +++ b/orcid-persistence/src/test/java/org/orcid/persistence/dao/OrgDisambiguatedDaoTest.java @@ -9,8 +9,8 @@ import java.util.Date; import java.util.List; -import javax.annotation.Resource; -import javax.transaction.Transactional; +import jakarta.annotation.Resource; +import jakarta.transaction.Transactional; import org.apache.commons.lang3.tuple.Pair; import org.junit.AfterClass; diff --git a/orcid-persistence/src/test/java/org/orcid/persistence/dao/OrgImportLogDaoTest.java b/orcid-persistence/src/test/java/org/orcid/persistence/dao/OrgImportLogDaoTest.java index f3618334b1e..5e7212ae869 100644 --- a/orcid-persistence/src/test/java/org/orcid/persistence/dao/OrgImportLogDaoTest.java +++ b/orcid-persistence/src/test/java/org/orcid/persistence/dao/OrgImportLogDaoTest.java @@ -7,7 +7,7 @@ import java.util.Date; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/orcid-persistence/src/test/java/org/orcid/persistence/dao/OtherNameDaoTest.java b/orcid-persistence/src/test/java/org/orcid/persistence/dao/OtherNameDaoTest.java index e6f4d3cbdee..7efc34225f9 100644 --- a/orcid-persistence/src/test/java/org/orcid/persistence/dao/OtherNameDaoTest.java +++ b/orcid-persistence/src/test/java/org/orcid/persistence/dao/OtherNameDaoTest.java @@ -9,7 +9,7 @@ import java.util.Date; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.NoResultException; import org.junit.AfterClass; diff --git a/orcid-persistence/src/test/java/org/orcid/persistence/dao/PeerReviewDaoTest.java b/orcid-persistence/src/test/java/org/orcid/persistence/dao/PeerReviewDaoTest.java index f40ac29e0ee..a112596a48a 100644 --- a/orcid-persistence/src/test/java/org/orcid/persistence/dao/PeerReviewDaoTest.java +++ b/orcid-persistence/src/test/java/org/orcid/persistence/dao/PeerReviewDaoTest.java @@ -8,7 +8,7 @@ import java.util.Arrays; import java.util.Date; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.AfterClass; import org.junit.BeforeClass; diff --git a/orcid-persistence/src/test/java/org/orcid/persistence/dao/ProfileDaoTest.java b/orcid-persistence/src/test/java/org/orcid/persistence/dao/ProfileDaoTest.java index 3440ec6f53b..16aecb45219 100644 --- a/orcid-persistence/src/test/java/org/orcid/persistence/dao/ProfileDaoTest.java +++ b/orcid-persistence/src/test/java/org/orcid/persistence/dao/ProfileDaoTest.java @@ -13,7 +13,7 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.EntityManager; import jakarta.persistence.Query; diff --git a/orcid-persistence/src/test/java/org/orcid/persistence/dao/ProfileFundingDaoTest.java b/orcid-persistence/src/test/java/org/orcid/persistence/dao/ProfileFundingDaoTest.java index 089fb2e232f..9d97196716f 100644 --- a/orcid-persistence/src/test/java/org/orcid/persistence/dao/ProfileFundingDaoTest.java +++ b/orcid-persistence/src/test/java/org/orcid/persistence/dao/ProfileFundingDaoTest.java @@ -8,7 +8,7 @@ import java.util.Arrays; import java.util.Date; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.AfterClass; import org.junit.BeforeClass; diff --git a/orcid-persistence/src/test/java/org/orcid/persistence/dao/ProfileHistoryEventDaoTest.java b/orcid-persistence/src/test/java/org/orcid/persistence/dao/ProfileHistoryEventDaoTest.java index 59aafe0dfef..38674b40c77 100644 --- a/orcid-persistence/src/test/java/org/orcid/persistence/dao/ProfileHistoryEventDaoTest.java +++ b/orcid-persistence/src/test/java/org/orcid/persistence/dao/ProfileHistoryEventDaoTest.java @@ -7,7 +7,7 @@ import java.util.Arrays; import java.util.Date; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.AfterClass; import org.junit.BeforeClass; diff --git a/orcid-persistence/src/test/java/org/orcid/persistence/dao/ProfileKeywordDaoTest.java b/orcid-persistence/src/test/java/org/orcid/persistence/dao/ProfileKeywordDaoTest.java index 0cbdfd12dd6..3e19ab05e77 100644 --- a/orcid-persistence/src/test/java/org/orcid/persistence/dao/ProfileKeywordDaoTest.java +++ b/orcid-persistence/src/test/java/org/orcid/persistence/dao/ProfileKeywordDaoTest.java @@ -8,7 +8,7 @@ import java.util.Date; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.AfterClass; import org.junit.BeforeClass; diff --git a/orcid-persistence/src/test/java/org/orcid/persistence/dao/RecordNameDaoTest.java b/orcid-persistence/src/test/java/org/orcid/persistence/dao/RecordNameDaoTest.java index b79ffd5b034..b7395d07597 100644 --- a/orcid-persistence/src/test/java/org/orcid/persistence/dao/RecordNameDaoTest.java +++ b/orcid-persistence/src/test/java/org/orcid/persistence/dao/RecordNameDaoTest.java @@ -8,7 +8,7 @@ import java.util.Arrays; import java.util.Date; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.AfterClass; import org.junit.BeforeClass; diff --git a/orcid-persistence/src/test/java/org/orcid/persistence/dao/ResearchResourceDaoTest.java b/orcid-persistence/src/test/java/org/orcid/persistence/dao/ResearchResourceDaoTest.java index a5d8eb29b5f..1833a8f2c8e 100644 --- a/orcid-persistence/src/test/java/org/orcid/persistence/dao/ResearchResourceDaoTest.java +++ b/orcid-persistence/src/test/java/org/orcid/persistence/dao/ResearchResourceDaoTest.java @@ -10,8 +10,8 @@ import java.util.Date; import java.util.List; -import javax.annotation.Resource; -import javax.transaction.Transactional; +import jakarta.annotation.Resource; +import jakarta.transaction.Transactional; import org.junit.AfterClass; import org.junit.BeforeClass; diff --git a/orcid-persistence/src/test/java/org/orcid/persistence/dao/ResearcherUrlDaoTest.java b/orcid-persistence/src/test/java/org/orcid/persistence/dao/ResearcherUrlDaoTest.java index 4f3634b107c..e5b6dc03280 100644 --- a/orcid-persistence/src/test/java/org/orcid/persistence/dao/ResearcherUrlDaoTest.java +++ b/orcid-persistence/src/test/java/org/orcid/persistence/dao/ResearcherUrlDaoTest.java @@ -9,7 +9,7 @@ import java.util.Date; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.NoResultException; import jakarta.persistence.PersistenceException; diff --git a/orcid-persistence/src/test/java/org/orcid/persistence/dao/SpamDaoTest.java b/orcid-persistence/src/test/java/org/orcid/persistence/dao/SpamDaoTest.java index 9af4e6ac228..00c4b539a30 100644 --- a/orcid-persistence/src/test/java/org/orcid/persistence/dao/SpamDaoTest.java +++ b/orcid-persistence/src/test/java/org/orcid/persistence/dao/SpamDaoTest.java @@ -8,9 +8,9 @@ import java.util.Arrays; import java.util.Date; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.NoResultException; -import javax.transaction.Transactional; +import jakarta.transaction.Transactional; import org.apache.commons.lang3.reflect.FieldUtils; import org.junit.AfterClass; diff --git a/orcid-persistence/src/test/java/org/orcid/persistence/dao/WorkDaoTest.java b/orcid-persistence/src/test/java/org/orcid/persistence/dao/WorkDaoTest.java index 786774099ce..dfbffbea728 100644 --- a/orcid-persistence/src/test/java/org/orcid/persistence/dao/WorkDaoTest.java +++ b/orcid-persistence/src/test/java/org/orcid/persistence/dao/WorkDaoTest.java @@ -10,7 +10,7 @@ import java.util.Date; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.AfterClass; import org.junit.BeforeClass; diff --git a/orcid-pub-web/src/main/java/org/orcid/api/common/swagger/SwaggerUIBuilder.java b/orcid-pub-web/src/main/java/org/orcid/api/common/swagger/SwaggerUIBuilder.java index e77dd97d9db..f242d54a9aa 100644 --- a/orcid-pub-web/src/main/java/org/orcid/api/common/swagger/SwaggerUIBuilder.java +++ b/orcid-pub-web/src/main/java/org/orcid/api/common/swagger/SwaggerUIBuilder.java @@ -5,7 +5,7 @@ import java.util.HashMap; import java.util.Map; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.core.Response; import org.orcid.core.api.OrcidApiConstants; diff --git a/orcid-pub-web/src/main/java/org/orcid/api/filters/AnalyticsFilter.java b/orcid-pub-web/src/main/java/org/orcid/api/filters/AnalyticsFilter.java index 954e2825184..dc3ad7690eb 100644 --- a/orcid-pub-web/src/main/java/org/orcid/api/filters/AnalyticsFilter.java +++ b/orcid-pub-web/src/main/java/org/orcid/api/filters/AnalyticsFilter.java @@ -1,13 +1,13 @@ package org.orcid.api.filters; -import javax.inject.Inject; -import javax.inject.Named; +import jakarta.inject.Inject; +import jakarta.inject.Named; import jakarta.servlet.http.HttpServletRequest; -import javax.ws.rs.container.ContainerRequestContext; -import javax.ws.rs.container.ContainerResponseContext; -import javax.ws.rs.container.ContainerResponseFilter; -import javax.ws.rs.core.Context; -import javax.ws.rs.ext.Provider; +import jakarta.ws.rs.container.ContainerRequestContext; +import jakarta.ws.rs.container.ContainerResponseContext; +import jakarta.ws.rs.container.ContainerResponseFilter; +import jakarta.ws.rs.core.Context; +import jakarta.ws.rs.ext.Provider; import org.orcid.api.common.analytics.AnalyticsProcess; import org.orcid.api.common.analytics.client.AnalyticsClient; diff --git a/orcid-pub-web/src/main/java/org/orcid/api/filters/ApiRateLimitFilter.java b/orcid-pub-web/src/main/java/org/orcid/api/filters/ApiRateLimitFilter.java index 5d9c6e726e9..0223a4e2a2c 100644 --- a/orcid-pub-web/src/main/java/org/orcid/api/filters/ApiRateLimitFilter.java +++ b/orcid-pub-web/src/main/java/org/orcid/api/filters/ApiRateLimitFilter.java @@ -5,7 +5,7 @@ import java.time.LocalDate; import java.util.*; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.servlet.FilterChain; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; diff --git a/orcid-pub-web/src/main/java/org/orcid/api/filters/PutAuthTokenActionFilter.java b/orcid-pub-web/src/main/java/org/orcid/api/filters/PutAuthTokenActionFilter.java index ff9bd9cc977..623a02062bb 100644 --- a/orcid-pub-web/src/main/java/org/orcid/api/filters/PutAuthTokenActionFilter.java +++ b/orcid-pub-web/src/main/java/org/orcid/api/filters/PutAuthTokenActionFilter.java @@ -6,8 +6,8 @@ import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; -import javax.ws.rs.core.Context; -import javax.ws.rs.ext.Provider; +import jakarta.ws.rs.core.Context; +import jakarta.ws.rs.ext.Provider; import org.orcid.core.togglz.Features; import org.slf4j.Logger; diff --git a/orcid-pub-web/src/main/java/org/orcid/api/identifiers/IdentifierApiServiceImpl.java b/orcid-pub-web/src/main/java/org/orcid/api/identifiers/IdentifierApiServiceImpl.java index 0dac414b960..fe94c47d619 100644 --- a/orcid-pub-web/src/main/java/org/orcid/api/identifiers/IdentifierApiServiceImpl.java +++ b/orcid-pub-web/src/main/java/org/orcid/api/identifiers/IdentifierApiServiceImpl.java @@ -1,11 +1,11 @@ package org.orcid.api.identifiers; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.QueryParam; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; import org.glassfish.jersey.message.XmlHeader; import org.orcid.api.identifiers.delegator.IdentifierApiServiceDelegator; diff --git a/orcid-pub-web/src/main/java/org/orcid/api/identifiers/delegator/IdentifierApiServiceDelegator.java b/orcid-pub-web/src/main/java/org/orcid/api/identifiers/delegator/IdentifierApiServiceDelegator.java index e8d696f1d88..c0d9b791003 100644 --- a/orcid-pub-web/src/main/java/org/orcid/api/identifiers/delegator/IdentifierApiServiceDelegator.java +++ b/orcid-pub-web/src/main/java/org/orcid/api/identifiers/delegator/IdentifierApiServiceDelegator.java @@ -1,6 +1,6 @@ package org.orcid.api.identifiers.delegator; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.core.Response; public interface IdentifierApiServiceDelegator { diff --git a/orcid-pub-web/src/main/java/org/orcid/api/identifiers/delegator/impl/IdentifierApiServiceDelegatorImpl.java b/orcid-pub-web/src/main/java/org/orcid/api/identifiers/delegator/impl/IdentifierApiServiceDelegatorImpl.java index 78f7b768bae..c54c79a815b 100644 --- a/orcid-pub-web/src/main/java/org/orcid/api/identifiers/delegator/impl/IdentifierApiServiceDelegatorImpl.java +++ b/orcid-pub-web/src/main/java/org/orcid/api/identifiers/delegator/impl/IdentifierApiServiceDelegatorImpl.java @@ -3,9 +3,9 @@ import java.util.Collection; import java.util.List; -import javax.annotation.Resource; -import javax.ws.rs.core.GenericEntity; -import javax.ws.rs.core.Response; +import jakarta.annotation.Resource; +import jakarta.ws.rs.core.GenericEntity; +import jakarta.ws.rs.core.Response; import org.apache.commons.lang3.LocaleUtils; import org.orcid.api.identifiers.delegator.IdentifierApiServiceDelegator; diff --git a/orcid-pub-web/src/main/java/org/orcid/api/lod/ExperimentalRDFResource.java b/orcid-pub-web/src/main/java/org/orcid/api/lod/ExperimentalRDFResource.java index 83a259630a8..fa02587427a 100644 --- a/orcid-pub-web/src/main/java/org/orcid/api/lod/ExperimentalRDFResource.java +++ b/orcid-pub-web/src/main/java/org/orcid/api/lod/ExperimentalRDFResource.java @@ -22,11 +22,11 @@ import static org.orcid.core.api.OrcidApiConstants.TEXT_N3; import static org.orcid.core.api.OrcidApiConstants.TEXT_TURTLE; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.Response; import org.orcid.api.publicV2.server.delegator.PublicV2ApiServiceDelegator; import org.orcid.core.api.OrcidApiConstants; diff --git a/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/PublicV2ApiServiceImplV2_0.java b/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/PublicV2ApiServiceImplV2_0.java index fe9be051d58..99ec5427e00 100644 --- a/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/PublicV2ApiServiceImplV2_0.java +++ b/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/PublicV2ApiServiceImplV2_0.java @@ -40,18 +40,18 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; -import javax.ws.rs.DefaultValue; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.UriInfo; +import jakarta.ws.rs.DefaultValue; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +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.UriInfo; import org.orcid.api.common.swagger.SwaggerUIBuilder; import org.orcid.api.publicV2.server.delegator.PublicV2ApiServiceDelegator; diff --git a/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/PublicV2ApiServiceImplV2_1.java b/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/PublicV2ApiServiceImplV2_1.java index b65a150cf31..f91dd82a052 100644 --- a/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/PublicV2ApiServiceImplV2_1.java +++ b/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/PublicV2ApiServiceImplV2_1.java @@ -40,18 +40,18 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; -import javax.ws.rs.DefaultValue; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.UriInfo; +import jakarta.ws.rs.DefaultValue; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +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.UriInfo; import org.orcid.api.common.swagger.SwaggerUIBuilder; import org.orcid.api.publicV2.server.delegator.PublicV2ApiServiceDelegator; diff --git a/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/delegator/PublicV2ApiServiceDelegator.java b/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/delegator/PublicV2ApiServiceDelegator.java index 70b3d529f63..69ac5860948 100644 --- a/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/delegator/PublicV2ApiServiceDelegator.java +++ b/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/delegator/PublicV2ApiServiceDelegator.java @@ -4,7 +4,7 @@ import java.util.Map; import jakarta.servlet.http.HttpServletRequest; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.core.Response; import org.apache.hc.core5.http.ParseException; diff --git a/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/delegator/impl/PublicV2ApiServiceDelegatorImpl.java b/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/delegator/impl/PublicV2ApiServiceDelegatorImpl.java index 338dfc1d8dc..ae7c00a46ff 100644 --- a/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/delegator/impl/PublicV2ApiServiceDelegatorImpl.java +++ b/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/delegator/impl/PublicV2ApiServiceDelegatorImpl.java @@ -6,9 +6,9 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.core.Response; import org.orcid.api.common.util.ActivityUtils; import org.orcid.api.common.util.ElementUtils; @@ -184,12 +184,12 @@ public Response viewStatusText() { /** * finds and returns the {@link org.orcid.jaxb.model.message.OrcidMessage} - * wrapped in a {@link javax.xml.ws.Response} with only the profile's bio + * wrapped in a {@link jakarta.xml.ws.Response} with only the profile's bio * details * * @param orcid * the ORCID to be used to identify the record - * @return the {@link javax.xml.ws.Response} with the + * @return the {@link jakarta.xml.ws.Response} with the * {@link org.orcid.jaxb.model.message.OrcidMessage} within it */ @Override diff --git a/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/delegator/impl/PublicV2ApiServiceVersionedDelegatorImpl.java b/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/delegator/impl/PublicV2ApiServiceVersionedDelegatorImpl.java index e8055e81b94..475b0933d92 100644 --- a/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/delegator/impl/PublicV2ApiServiceVersionedDelegatorImpl.java +++ b/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/delegator/impl/PublicV2ApiServiceVersionedDelegatorImpl.java @@ -3,9 +3,9 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.core.Response; import org.orcid.api.publicV2.server.delegator.PublicV2ApiServiceDelegator; import org.orcid.core.common.manager.EventManager; diff --git a/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/security/impl/PublicAPISecurityManagerV2Impl.java b/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/security/impl/PublicAPISecurityManagerV2Impl.java index 9723dbe7ea9..76c9327c111 100644 --- a/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/security/impl/PublicAPISecurityManagerV2Impl.java +++ b/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/security/impl/PublicAPISecurityManagerV2Impl.java @@ -5,7 +5,7 @@ import java.util.Iterator; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.api.publicV2.server.security.PublicAPISecurityManagerV2; import org.orcid.core.exception.OrcidCoreExceptionMapper; diff --git a/orcid-pub-web/src/main/java/org/orcid/api/publicV3/server/PublicV3ApiServiceImplV3_0.java b/orcid-pub-web/src/main/java/org/orcid/api/publicV3/server/PublicV3ApiServiceImplV3_0.java index a612f86465c..875fa8928f4 100644 --- a/orcid-pub-web/src/main/java/org/orcid/api/publicV3/server/PublicV3ApiServiceImplV3_0.java +++ b/orcid-pub-web/src/main/java/org/orcid/api/publicV3/server/PublicV3ApiServiceImplV3_0.java @@ -62,18 +62,18 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; -import javax.ws.rs.DefaultValue; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.UriInfo; +import jakarta.ws.rs.DefaultValue; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +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.UriInfo; import org.apache.hc.core5.http.ParseException; import org.orcid.api.common.swagger.SwaggerUIBuilder; diff --git a/orcid-pub-web/src/main/java/org/orcid/api/publicV3/server/delegator/PublicV3ApiServiceDelegator.java b/orcid-pub-web/src/main/java/org/orcid/api/publicV3/server/delegator/PublicV3ApiServiceDelegator.java index e84c8cf63af..c5970a330bc 100644 --- a/orcid-pub-web/src/main/java/org/orcid/api/publicV3/server/delegator/PublicV3ApiServiceDelegator.java +++ b/orcid-pub-web/src/main/java/org/orcid/api/publicV3/server/delegator/PublicV3ApiServiceDelegator.java @@ -4,7 +4,7 @@ import java.util.Map; import jakarta.servlet.http.HttpServletRequest; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.core.Response; import org.apache.hc.core5.http.ParseException; diff --git a/orcid-pub-web/src/main/java/org/orcid/api/publicV3/server/delegator/impl/PublicV3ApiServiceDelegatorImpl.java b/orcid-pub-web/src/main/java/org/orcid/api/publicV3/server/delegator/impl/PublicV3ApiServiceDelegatorImpl.java index 809370d9dd3..124ecbd44aa 100644 --- a/orcid-pub-web/src/main/java/org/orcid/api/publicV3/server/delegator/impl/PublicV3ApiServiceDelegatorImpl.java +++ b/orcid-pub-web/src/main/java/org/orcid/api/publicV3/server/delegator/impl/PublicV3ApiServiceDelegatorImpl.java @@ -6,10 +6,10 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.Response.Status; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.Response.Status; import org.orcid.api.common.util.v3.ActivityUtils; import org.orcid.api.common.util.v3.ElementUtils; @@ -221,12 +221,12 @@ public Response viewStatus() { /** * finds and returns the {@link org.orcid.jaxb.model.message.OrcidMessage} - * wrapped in a {@link javax.xml.ws.Response} with only the profile's bio + * wrapped in a {@link jakarta.xml.ws.Response} with only the profile's bio * details * * @param orcid * the ORCID to be used to identify the record - * @return the {@link javax.xml.ws.Response} with the + * @return the {@link jakarta.xml.ws.Response} with the * {@link org.orcid.jaxb.model.message.OrcidMessage} within it */ @Override diff --git a/orcid-pub-web/src/main/java/org/orcid/api/swagger/PublicSwaggerResource.java b/orcid-pub-web/src/main/java/org/orcid/api/swagger/PublicSwaggerResource.java index 7b5c0e81727..2908e03ec7e 100644 --- a/orcid-pub-web/src/main/java/org/orcid/api/swagger/PublicSwaggerResource.java +++ b/orcid-pub-web/src/main/java/org/orcid/api/swagger/PublicSwaggerResource.java @@ -1,9 +1,9 @@ package org.orcid.api.swagger; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.core.Application; -import javax.ws.rs.core.MediaType; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.Application; +import jakarta.ws.rs.core.MediaType; import org.orcid.core.api.OrcidApiConstants; import org.orcid.jaxb.model.message.ScopePathType; diff --git a/orcid-pub-web/src/test/java/org/orcid/api/filters/ApiRateLimitFilterTest.java b/orcid-pub-web/src/test/java/org/orcid/api/filters/ApiRateLimitFilterTest.java index c71aff12298..1e53afff509 100644 --- a/orcid-pub-web/src/test/java/org/orcid/api/filters/ApiRateLimitFilterTest.java +++ b/orcid-pub-web/src/test/java/org/orcid/api/filters/ApiRateLimitFilterTest.java @@ -12,7 +12,7 @@ import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.mock.web.MockHttpServletResponse; import org.springframework.test.context.ContextConfiguration; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.servlet.FilterChain; import jakarta.servlet.ServletException; import java.io.IOException; diff --git a/orcid-pub-web/src/test/java/org/orcid/api/identifiers/IdentifierApiServiceDelegatorTest.java b/orcid-pub-web/src/test/java/org/orcid/api/identifiers/IdentifierApiServiceDelegatorTest.java index 189a69936eb..7cd5ac2cf14 100644 --- a/orcid-pub-web/src/test/java/org/orcid/api/identifiers/IdentifierApiServiceDelegatorTest.java +++ b/orcid-pub-web/src/test/java/org/orcid/api/identifiers/IdentifierApiServiceDelegatorTest.java @@ -6,9 +6,9 @@ import java.util.ArrayList; import java.util.List; -import javax.annotation.Resource; -import javax.ws.rs.core.GenericEntity; -import javax.ws.rs.core.Response; +import jakarta.annotation.Resource; +import jakarta.ws.rs.core.GenericEntity; +import jakarta.ws.rs.core.Response; import org.junit.Before; import org.junit.Test; diff --git a/orcid-pub-web/src/test/java/org/orcid/api/publicV2/server/PublicV2ApiServiceDelegatorTest.java b/orcid-pub-web/src/test/java/org/orcid/api/publicV2/server/PublicV2ApiServiceDelegatorTest.java index 6fbd8129595..2e71d8ed042 100644 --- a/orcid-pub-web/src/test/java/org/orcid/api/publicV2/server/PublicV2ApiServiceDelegatorTest.java +++ b/orcid-pub-web/src/test/java/org/orcid/api/publicV2/server/PublicV2ApiServiceDelegatorTest.java @@ -10,10 +10,10 @@ import java.util.Map; import java.util.Set; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.NoResultException; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.Response; import org.junit.*; import org.junit.runner.RunWith; diff --git a/orcid-pub-web/src/test/java/org/orcid/api/publicV2/server/PublicV2ApiServiceVersionedDelegatorTest.java b/orcid-pub-web/src/test/java/org/orcid/api/publicV2/server/PublicV2ApiServiceVersionedDelegatorTest.java index 4a01024d767..1b977755d49 100644 --- a/orcid-pub-web/src/test/java/org/orcid/api/publicV2/server/PublicV2ApiServiceVersionedDelegatorTest.java +++ b/orcid-pub-web/src/test/java/org/orcid/api/publicV2/server/PublicV2ApiServiceVersionedDelegatorTest.java @@ -13,9 +13,9 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.NoResultException; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.core.Response; import org.apache.commons.lang.time.DateUtils; import org.junit.AfterClass; diff --git a/orcid-pub-web/src/test/java/org/orcid/api/publicV2/server/security/PublicAPISecurityManagerV2Test.java b/orcid-pub-web/src/test/java/org/orcid/api/publicV2/server/security/PublicAPISecurityManagerV2Test.java index b4157c2d6dc..4389bc9ddb0 100644 --- a/orcid-pub-web/src/test/java/org/orcid/api/publicV2/server/security/PublicAPISecurityManagerV2Test.java +++ b/orcid-pub-web/src/test/java/org/orcid/api/publicV2/server/security/PublicAPISecurityManagerV2Test.java @@ -9,7 +9,7 @@ import java.util.ArrayList; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/orcid-pub-web/src/test/java/org/orcid/api/publicV3/server/PublicV3ApiServiceDelegatorTest.java b/orcid-pub-web/src/test/java/org/orcid/api/publicV3/server/PublicV3ApiServiceDelegatorTest.java index a1ed7a2d917..9d80075c524 100644 --- a/orcid-pub-web/src/test/java/org/orcid/api/publicV3/server/PublicV3ApiServiceDelegatorTest.java +++ b/orcid-pub-web/src/test/java/org/orcid/api/publicV3/server/PublicV3ApiServiceDelegatorTest.java @@ -17,10 +17,10 @@ import java.util.Map; import java.util.Set; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.NoResultException; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.Response; import org.junit.AfterClass; import org.junit.Before; diff --git a/orcid-pub-web/src/test/java/org/orcid/api/publicV3/server/security/PublicAPISecurityManagerV3Test.java b/orcid-pub-web/src/test/java/org/orcid/api/publicV3/server/security/PublicAPISecurityManagerV3Test.java index d2e6c52ab27..5995481e88c 100644 --- a/orcid-pub-web/src/test/java/org/orcid/api/publicV3/server/security/PublicAPISecurityManagerV3Test.java +++ b/orcid-pub-web/src/test/java/org/orcid/api/publicV3/server/security/PublicAPISecurityManagerV3Test.java @@ -9,7 +9,7 @@ import java.util.ArrayList; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/orcid-scheduler-web/pom.xml b/orcid-scheduler-web/pom.xml index 61945f525e8..5efb328602e 100644 --- a/orcid-scheduler-web/pom.xml +++ b/orcid-scheduler-web/pom.xml @@ -54,9 +54,9 @@ 2.3.3 - javax.annotation - javax.annotation-api - 1.3.2 + jakarta.annotation + jakarta.annotation-api + 2.1.1 org.togglz diff --git a/orcid-scheduler-web/src/main/java/org/orcid/scheduler/autospam/AutospamEmailSender.java b/orcid-scheduler-web/src/main/java/org/orcid/scheduler/autospam/AutospamEmailSender.java index 288a7bf2d3a..d579075f042 100644 --- a/orcid-scheduler-web/src/main/java/org/orcid/scheduler/autospam/AutospamEmailSender.java +++ b/orcid-scheduler-web/src/main/java/org/orcid/scheduler/autospam/AutospamEmailSender.java @@ -4,7 +4,7 @@ import java.util.Locale; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.commons.lang3.LocaleUtils; import org.orcid.core.constants.EmailConstants; diff --git a/orcid-scheduler-web/src/main/java/org/orcid/scheduler/autospam/cli/AutoLockSpamRecords.java b/orcid-scheduler-web/src/main/java/org/orcid/scheduler/autospam/cli/AutoLockSpamRecords.java index 17480b67d7d..cd920c383ea 100644 --- a/orcid-scheduler-web/src/main/java/org/orcid/scheduler/autospam/cli/AutoLockSpamRecords.java +++ b/orcid-scheduler-web/src/main/java/org/orcid/scheduler/autospam/cli/AutoLockSpamRecords.java @@ -10,7 +10,7 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import org.apache.commons.lang.StringUtils; diff --git a/orcid-scheduler-web/src/main/java/org/orcid/scheduler/cleanup/AuthorizationCodeCleanerCronJobImpl.java b/orcid-scheduler-web/src/main/java/org/orcid/scheduler/cleanup/AuthorizationCodeCleanerCronJobImpl.java index 8e6cef3277b..f1d8b178241 100644 --- a/orcid-scheduler-web/src/main/java/org/orcid/scheduler/cleanup/AuthorizationCodeCleanerCronJobImpl.java +++ b/orcid-scheduler-web/src/main/java/org/orcid/scheduler/cleanup/AuthorizationCodeCleanerCronJobImpl.java @@ -4,7 +4,7 @@ import java.time.temporal.ChronoUnit; import java.util.Date; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.cron.AuthorizationCodeCleanerCronJob; import org.orcid.persistence.dao.OrcidOauth2AuthoriziationCodeDetailDao; diff --git a/orcid-scheduler-web/src/main/java/org/orcid/scheduler/email/cli/manager/EmailMessageSenderImpl.java b/orcid-scheduler-web/src/main/java/org/orcid/scheduler/email/cli/manager/EmailMessageSenderImpl.java index 3834e15bfd6..70ca2495c56 100644 --- a/orcid-scheduler-web/src/main/java/org/orcid/scheduler/email/cli/manager/EmailMessageSenderImpl.java +++ b/orcid-scheduler-web/src/main/java/org/orcid/scheduler/email/cli/manager/EmailMessageSenderImpl.java @@ -18,7 +18,7 @@ import java.util.concurrent.Executors; import java.util.stream.Collectors; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import javax.xml.datatype.XMLGregorianCalendar; import org.apache.commons.codec.binary.Base64; diff --git a/orcid-scheduler-web/src/main/java/org/orcid/scheduler/email/trickle/manager/impl/TrickleManagerImpl.java b/orcid-scheduler-web/src/main/java/org/orcid/scheduler/email/trickle/manager/impl/TrickleManagerImpl.java index ac645f66eec..d2e264a2518 100644 --- a/orcid-scheduler-web/src/main/java/org/orcid/scheduler/email/trickle/manager/impl/TrickleManagerImpl.java +++ b/orcid-scheduler-web/src/main/java/org/orcid/scheduler/email/trickle/manager/impl/TrickleManagerImpl.java @@ -4,7 +4,7 @@ import java.util.Date; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.email.trickle.producer.EmailTrickleItem; import org.orcid.core.manager.v3.EmailMessage; diff --git a/orcid-scheduler-web/src/main/java/org/orcid/scheduler/indexer/impl/OrcidRecordIndexerImpl.java b/orcid-scheduler-web/src/main/java/org/orcid/scheduler/indexer/impl/OrcidRecordIndexerImpl.java index 16996a1fa8f..5da2c2c9813 100644 --- a/orcid-scheduler-web/src/main/java/org/orcid/scheduler/indexer/impl/OrcidRecordIndexerImpl.java +++ b/orcid-scheduler-web/src/main/java/org/orcid/scheduler/indexer/impl/OrcidRecordIndexerImpl.java @@ -6,7 +6,7 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.messaging.JmsMessageSender; import org.orcid.core.utils.listener.LastModifiedMessage; diff --git a/orcid-scheduler-web/src/main/java/org/orcid/scheduler/jersey/ZenodoRecordsJsonBodyReader.java b/orcid-scheduler-web/src/main/java/org/orcid/scheduler/jersey/ZenodoRecordsJsonBodyReader.java index 111ccf93740..3d744f6dd81 100644 --- a/orcid-scheduler-web/src/main/java/org/orcid/scheduler/jersey/ZenodoRecordsJsonBodyReader.java +++ b/orcid-scheduler-web/src/main/java/org/orcid/scheduler/jersey/ZenodoRecordsJsonBodyReader.java @@ -10,13 +10,13 @@ import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; -import javax.ws.rs.Consumes; -import javax.ws.rs.ProcessingException; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.ext.MessageBodyReader; -import javax.ws.rs.ext.Provider; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.ProcessingException; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.ext.MessageBodyReader; +import jakarta.ws.rs.ext.Provider; @Provider @Consumes({ "application/json" }) diff --git a/orcid-scheduler-web/src/main/java/org/orcid/scheduler/loader/io/OrgDataClient.java b/orcid-scheduler-web/src/main/java/org/orcid/scheduler/loader/io/OrgDataClient.java index a56333724be..26ff790477c 100644 --- a/orcid-scheduler-web/src/main/java/org/orcid/scheduler/loader/io/OrgDataClient.java +++ b/orcid-scheduler-web/src/main/java/org/orcid/scheduler/loader/io/OrgDataClient.java @@ -7,8 +7,8 @@ import java.io.OutputStream; import java.util.Map; -import javax.annotation.Resource; -import javax.ws.rs.core.MediaType; +import jakarta.annotation.Resource; +import jakarta.ws.rs.core.MediaType; import org.apache.commons.io.IOUtils; import org.orcid.utils.jersey.JerseyClientHelper; diff --git a/orcid-scheduler-web/src/main/java/org/orcid/scheduler/loader/manager/impl/IssnLoadManagerImpl.java b/orcid-scheduler-web/src/main/java/org/orcid/scheduler/loader/manager/impl/IssnLoadManagerImpl.java index 75c74f7d4ca..e64caa21b6d 100644 --- a/orcid-scheduler-web/src/main/java/org/orcid/scheduler/loader/manager/impl/IssnLoadManagerImpl.java +++ b/orcid-scheduler-web/src/main/java/org/orcid/scheduler/loader/manager/impl/IssnLoadManagerImpl.java @@ -1,6 +1,6 @@ package org.orcid.scheduler.loader.manager.impl; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.scheduler.loader.manager.IssnLoadManager; import org.orcid.scheduler.loader.source.issn.IssnLoadSource; diff --git a/orcid-scheduler-web/src/main/java/org/orcid/scheduler/loader/manager/impl/OrgLoadManagerImpl.java b/orcid-scheduler-web/src/main/java/org/orcid/scheduler/loader/manager/impl/OrgLoadManagerImpl.java index 23d22029f34..7ddc7e53819 100644 --- a/orcid-scheduler-web/src/main/java/org/orcid/scheduler/loader/manager/impl/OrgLoadManagerImpl.java +++ b/orcid-scheduler-web/src/main/java/org/orcid/scheduler/loader/manager/impl/OrgLoadManagerImpl.java @@ -4,7 +4,7 @@ import java.util.List; import java.util.Optional; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.persistence.dao.OrgImportLogDao; import org.orcid.persistence.jpa.entities.OrgImportLogEntity; diff --git a/orcid-scheduler-web/src/main/java/org/orcid/scheduler/loader/source/cli/LoadDataForIssnSource.java b/orcid-scheduler-web/src/main/java/org/orcid/scheduler/loader/source/cli/LoadDataForIssnSource.java index 37b7608ccd4..fc2bb4192ef 100644 --- a/orcid-scheduler-web/src/main/java/org/orcid/scheduler/loader/source/cli/LoadDataForIssnSource.java +++ b/orcid-scheduler-web/src/main/java/org/orcid/scheduler/loader/source/cli/LoadDataForIssnSource.java @@ -1,6 +1,6 @@ package org.orcid.scheduler.loader.source.cli; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.scheduler.loader.manager.IssnLoadManager; import org.orcid.scheduler.loader.manager.OrgLoadManager; diff --git a/orcid-scheduler-web/src/main/java/org/orcid/scheduler/loader/source/cli/LoadDataForOrganizationSource.java b/orcid-scheduler-web/src/main/java/org/orcid/scheduler/loader/source/cli/LoadDataForOrganizationSource.java index b553c374dad..34ce3ee1002 100644 --- a/orcid-scheduler-web/src/main/java/org/orcid/scheduler/loader/source/cli/LoadDataForOrganizationSource.java +++ b/orcid-scheduler-web/src/main/java/org/orcid/scheduler/loader/source/cli/LoadDataForOrganizationSource.java @@ -1,7 +1,7 @@ package org.orcid.scheduler.loader.source.cli; -import javax.annotation.PostConstruct; +import jakarta.annotation.PostConstruct; import org.apache.commons.lang.StringUtils; import org.kohsuke.args4j.CmdLineException; diff --git a/orcid-scheduler-web/src/main/java/org/orcid/scheduler/loader/source/cli/ProcessOrganizationAsPartOfGroupForDisambiguatedOrgId.java b/orcid-scheduler-web/src/main/java/org/orcid/scheduler/loader/source/cli/ProcessOrganizationAsPartOfGroupForDisambiguatedOrgId.java index 450f2d1c804..d8ae6b8371c 100644 --- a/orcid-scheduler-web/src/main/java/org/orcid/scheduler/loader/source/cli/ProcessOrganizationAsPartOfGroupForDisambiguatedOrgId.java +++ b/orcid-scheduler-web/src/main/java/org/orcid/scheduler/loader/source/cli/ProcessOrganizationAsPartOfGroupForDisambiguatedOrgId.java @@ -1,7 +1,7 @@ package org.orcid.scheduler.loader.source.cli; -import javax.annotation.PostConstruct; +import jakarta.annotation.PostConstruct; import org.apache.commons.lang.StringUtils; import org.kohsuke.args4j.CmdLineException; diff --git a/orcid-scheduler-web/src/main/java/org/orcid/scheduler/loader/source/cli/RorToRinggoldFundrefCSVMapping.java b/orcid-scheduler-web/src/main/java/org/orcid/scheduler/loader/source/cli/RorToRinggoldFundrefCSVMapping.java index b0e59939101..9a7f572ef85 100644 --- a/orcid-scheduler-web/src/main/java/org/orcid/scheduler/loader/source/cli/RorToRinggoldFundrefCSVMapping.java +++ b/orcid-scheduler-web/src/main/java/org/orcid/scheduler/loader/source/cli/RorToRinggoldFundrefCSVMapping.java @@ -6,7 +6,7 @@ import java.util.HashMap; import java.util.List; -import javax.annotation.PostConstruct; +import jakarta.annotation.PostConstruct; import org.apache.commons.lang.StringUtils; diff --git a/orcid-scheduler-web/src/main/java/org/orcid/scheduler/loader/source/fundref/FundrefOrgLoadSource.java b/orcid-scheduler-web/src/main/java/org/orcid/scheduler/loader/source/fundref/FundrefOrgLoadSource.java index fbec5c0fe68..87c11738353 100644 --- a/orcid-scheduler-web/src/main/java/org/orcid/scheduler/loader/source/fundref/FundrefOrgLoadSource.java +++ b/orcid-scheduler-web/src/main/java/org/orcid/scheduler/loader/source/fundref/FundrefOrgLoadSource.java @@ -7,7 +7,7 @@ import java.util.HashMap; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; diff --git a/orcid-scheduler-web/src/main/java/org/orcid/scheduler/loader/source/issn/IssnLoadSource.java b/orcid-scheduler-web/src/main/java/org/orcid/scheduler/loader/source/issn/IssnLoadSource.java index f4aa1f2c09f..57c89200e37 100644 --- a/orcid-scheduler-web/src/main/java/org/orcid/scheduler/loader/source/issn/IssnLoadSource.java +++ b/orcid-scheduler-web/src/main/java/org/orcid/scheduler/loader/source/issn/IssnLoadSource.java @@ -7,7 +7,7 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.commons.lang3.StringUtils; import org.codehaus.jettison.json.JSONException; diff --git a/orcid-scheduler-web/src/main/java/org/orcid/scheduler/loader/source/ror/RorOrgLoadSource.java b/orcid-scheduler-web/src/main/java/org/orcid/scheduler/loader/source/ror/RorOrgLoadSource.java index 11830af6152..fbac25b40d6 100644 --- a/orcid-scheduler-web/src/main/java/org/orcid/scheduler/loader/source/ror/RorOrgLoadSource.java +++ b/orcid-scheduler-web/src/main/java/org/orcid/scheduler/loader/source/ror/RorOrgLoadSource.java @@ -16,9 +16,9 @@ import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; -import javax.annotation.Resource; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.HttpHeaders; +import jakarta.annotation.Resource; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.HttpHeaders; import org.apache.commons.lang.StringUtils; import org.orcid.core.manager.OrgDisambiguatedManager; diff --git a/orcid-scheduler-web/src/main/java/org/orcid/scheduler/mvp/OrcidIntegrationMVPNotifications.java b/orcid-scheduler-web/src/main/java/org/orcid/scheduler/mvp/OrcidIntegrationMVPNotifications.java index a2809d98cd9..729e44b425f 100644 --- a/orcid-scheduler-web/src/main/java/org/orcid/scheduler/mvp/OrcidIntegrationMVPNotifications.java +++ b/orcid-scheduler-web/src/main/java/org/orcid/scheduler/mvp/OrcidIntegrationMVPNotifications.java @@ -4,7 +4,7 @@ import java.util.List; import java.util.Set; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.commons.lang3.StringUtils; import org.json.JSONArray; diff --git a/orcid-scheduler-web/src/main/java/org/orcid/scheduler/report/PapiDailyLimitReport.java b/orcid-scheduler-web/src/main/java/org/orcid/scheduler/report/PapiDailyLimitReport.java index 91ea05ea0c3..4fbba91c5ad 100644 --- a/orcid-scheduler-web/src/main/java/org/orcid/scheduler/report/PapiDailyLimitReport.java +++ b/orcid-scheduler-web/src/main/java/org/orcid/scheduler/report/PapiDailyLimitReport.java @@ -2,7 +2,7 @@ import java.time.LocalDate; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.api.rate_limit.PapiRateLimitRedisClient; import org.orcid.core.togglz.Features; diff --git a/orcid-scheduler-web/src/main/java/org/orcid/scheduler/tasks/impl/IdentityProviderLoaderImpl.java b/orcid-scheduler-web/src/main/java/org/orcid/scheduler/tasks/impl/IdentityProviderLoaderImpl.java index 763b7a6449a..b5ff77b94eb 100644 --- a/orcid-scheduler-web/src/main/java/org/orcid/scheduler/tasks/impl/IdentityProviderLoaderImpl.java +++ b/orcid-scheduler-web/src/main/java/org/orcid/scheduler/tasks/impl/IdentityProviderLoaderImpl.java @@ -7,7 +7,7 @@ import java.util.regex.Pattern; import java.util.stream.Collectors; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import javax.xml.xpath.XPath; import javax.xml.xpath.XPathConstants; import javax.xml.xpath.XPathExpression; @@ -33,7 +33,7 @@ import org.w3c.dom.Node; import org.w3c.dom.NodeList; -import javax.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MediaType; public class IdentityProviderLoaderImpl implements IdentityProviderLoader { diff --git a/orcid-scheduler-web/src/main/java/org/orcid/scheduler/validation/PublicProfileValidator.java b/orcid-scheduler-web/src/main/java/org/orcid/scheduler/validation/PublicProfileValidator.java index fa75360f9f8..f75219209da 100644 --- a/orcid-scheduler-web/src/main/java/org/orcid/scheduler/validation/PublicProfileValidator.java +++ b/orcid-scheduler-web/src/main/java/org/orcid/scheduler/validation/PublicProfileValidator.java @@ -4,11 +4,11 @@ import java.util.Calendar; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import javax.xml.XMLConstants; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.util.JAXBSource; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.util.JAXBSource; import javax.xml.transform.Source; import javax.xml.transform.stream.StreamSource; import javax.xml.validation.Schema; @@ -25,7 +25,7 @@ import org.springframework.beans.factory.annotation.Value; import org.xml.sax.SAXException; -import javax.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MediaType; public class PublicProfileValidator { diff --git a/orcid-scheduler-web/src/main/java/org/orcid/scheduler/web/event/impl/EventStatsImpl.java b/orcid-scheduler-web/src/main/java/org/orcid/scheduler/web/event/impl/EventStatsImpl.java index 5087e88bbd2..80b61e0dc0c 100644 --- a/orcid-scheduler-web/src/main/java/org/orcid/scheduler/web/event/impl/EventStatsImpl.java +++ b/orcid-scheduler-web/src/main/java/org/orcid/scheduler/web/event/impl/EventStatsImpl.java @@ -8,7 +8,7 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import java.time.LocalDate; public class EventStatsImpl implements EventStats { diff --git a/orcid-scheduler-web/src/test/java/org/orcid/scheduler/email/cli/manager/EmailMessageSenderTest.java b/orcid-scheduler-web/src/test/java/org/orcid/scheduler/email/cli/manager/EmailMessageSenderTest.java index a0351048890..273b898b33c 100644 --- a/orcid-scheduler-web/src/test/java/org/orcid/scheduler/email/cli/manager/EmailMessageSenderTest.java +++ b/orcid-scheduler-web/src/test/java/org/orcid/scheduler/email/cli/manager/EmailMessageSenderTest.java @@ -12,7 +12,7 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.commons.io.IOUtils; import org.junit.After; diff --git a/orcid-utils/src/main/java/org/crossref/qrschema/_3/ArticleTitle.java b/orcid-utils/src/main/java/org/crossref/qrschema/_3/ArticleTitle.java index 083f859953f..1084eef5333 100644 --- a/orcid-utils/src/main/java/org/crossref/qrschema/_3/ArticleTitle.java +++ b/orcid-utils/src/main/java/org/crossref/qrschema/_3/ArticleTitle.java @@ -8,11 +8,11 @@ package org.crossref.qrschema._3; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; -import javax.xml.bind.annotation.XmlValue; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlValue; /** diff --git a/orcid-utils/src/main/java/org/crossref/qrschema/_3/Author.java b/orcid-utils/src/main/java/org/crossref/qrschema/_3/Author.java index 03001bc7de1..2ddaa2b6680 100644 --- a/orcid-utils/src/main/java/org/crossref/qrschema/_3/Author.java +++ b/orcid-utils/src/main/java/org/crossref/qrschema/_3/Author.java @@ -8,14 +8,14 @@ package org.crossref.qrschema._3; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; -import javax.xml.bind.annotation.XmlValue; -import javax.xml.bind.annotation.adapters.CollapsedStringAdapter; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlAttribute; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlValue; +import jakarta.xml.bind.annotation.adapters.CollapsedStringAdapter; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; /** diff --git a/orcid-utils/src/main/java/org/crossref/qrschema/_3/Body.java b/orcid-utils/src/main/java/org/crossref/qrschema/_3/Body.java index 7c39040cbf2..c90756c8982 100644 --- a/orcid-utils/src/main/java/org/crossref/qrschema/_3/Body.java +++ b/orcid-utils/src/main/java/org/crossref/qrschema/_3/Body.java @@ -10,11 +10,11 @@ import java.util.ArrayList; import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; /** diff --git a/orcid-utils/src/main/java/org/crossref/qrschema/_3/BookCite.java b/orcid-utils/src/main/java/org/crossref/qrschema/_3/BookCite.java index e6c7d34cb09..d3201436d57 100644 --- a/orcid-utils/src/main/java/org/crossref/qrschema/_3/BookCite.java +++ b/orcid-utils/src/main/java/org/crossref/qrschema/_3/BookCite.java @@ -9,12 +9,12 @@ package org.crossref.qrschema._3; import java.math.BigInteger; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlAttribute; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; /** diff --git a/orcid-utils/src/main/java/org/crossref/qrschema/_3/Component.java b/orcid-utils/src/main/java/org/crossref/qrschema/_3/Component.java index 7e120dbdee1..2e7b4b969f7 100644 --- a/orcid-utils/src/main/java/org/crossref/qrschema/_3/Component.java +++ b/orcid-utils/src/main/java/org/crossref/qrschema/_3/Component.java @@ -11,14 +11,14 @@ import java.math.BigInteger; import java.util.ArrayList; import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; -import javax.xml.bind.annotation.adapters.CollapsedStringAdapter; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlAttribute; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.adapters.CollapsedStringAdapter; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; /** diff --git a/orcid-utils/src/main/java/org/crossref/qrschema/_3/ComponentList.java b/orcid-utils/src/main/java/org/crossref/qrschema/_3/ComponentList.java index e67c7698574..6d231c90d5d 100644 --- a/orcid-utils/src/main/java/org/crossref/qrschema/_3/ComponentList.java +++ b/orcid-utils/src/main/java/org/crossref/qrschema/_3/ComponentList.java @@ -10,10 +10,10 @@ import java.util.ArrayList; import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; /** diff --git a/orcid-utils/src/main/java/org/crossref/qrschema/_3/ComponentNumber.java b/orcid-utils/src/main/java/org/crossref/qrschema/_3/ComponentNumber.java index cbd1d7afc0d..e5229d8376e 100644 --- a/orcid-utils/src/main/java/org/crossref/qrschema/_3/ComponentNumber.java +++ b/orcid-utils/src/main/java/org/crossref/qrschema/_3/ComponentNumber.java @@ -8,14 +8,14 @@ package org.crossref.qrschema._3; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; -import javax.xml.bind.annotation.XmlValue; -import javax.xml.bind.annotation.adapters.CollapsedStringAdapter; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlAttribute; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlValue; +import jakarta.xml.bind.annotation.adapters.CollapsedStringAdapter; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; /** diff --git a/orcid-utils/src/main/java/org/crossref/qrschema/_3/ConfCite.java b/orcid-utils/src/main/java/org/crossref/qrschema/_3/ConfCite.java index e2aba10f385..5fcea99a795 100644 --- a/orcid-utils/src/main/java/org/crossref/qrschema/_3/ConfCite.java +++ b/orcid-utils/src/main/java/org/crossref/qrschema/_3/ConfCite.java @@ -9,12 +9,12 @@ package org.crossref.qrschema._3; import java.math.BigInteger; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlAttribute; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; /** diff --git a/orcid-utils/src/main/java/org/crossref/qrschema/_3/Contributor.java b/orcid-utils/src/main/java/org/crossref/qrschema/_3/Contributor.java index 521b2a0720a..ef1fb4a7211 100644 --- a/orcid-utils/src/main/java/org/crossref/qrschema/_3/Contributor.java +++ b/orcid-utils/src/main/java/org/crossref/qrschema/_3/Contributor.java @@ -8,14 +8,14 @@ package org.crossref.qrschema._3; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; -import javax.xml.bind.annotation.adapters.CollapsedStringAdapter; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlAttribute; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.adapters.CollapsedStringAdapter; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; /** diff --git a/orcid-utils/src/main/java/org/crossref/qrschema/_3/Contributors.java b/orcid-utils/src/main/java/org/crossref/qrschema/_3/Contributors.java index 909b403dc3c..59e499257ef 100644 --- a/orcid-utils/src/main/java/org/crossref/qrschema/_3/Contributors.java +++ b/orcid-utils/src/main/java/org/crossref/qrschema/_3/Contributors.java @@ -10,11 +10,11 @@ import java.util.ArrayList; import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlAttribute; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; /** diff --git a/orcid-utils/src/main/java/org/crossref/qrschema/_3/CrmItem.java b/orcid-utils/src/main/java/org/crossref/qrschema/_3/CrmItem.java index 0302a5a953b..f434f2832d5 100644 --- a/orcid-utils/src/main/java/org/crossref/qrschema/_3/CrmItem.java +++ b/orcid-utils/src/main/java/org/crossref/qrschema/_3/CrmItem.java @@ -8,14 +8,14 @@ package org.crossref.qrschema._3; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; -import javax.xml.bind.annotation.XmlValue; -import javax.xml.bind.annotation.adapters.CollapsedStringAdapter; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlAttribute; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlValue; +import jakarta.xml.bind.annotation.adapters.CollapsedStringAdapter; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; /** diff --git a/orcid-utils/src/main/java/org/crossref/qrschema/_3/CrossrefMetadata.java b/orcid-utils/src/main/java/org/crossref/qrschema/_3/CrossrefMetadata.java index afa2cada6d5..668fd9f2d57 100644 --- a/orcid-utils/src/main/java/org/crossref/qrschema/_3/CrossrefMetadata.java +++ b/orcid-utils/src/main/java/org/crossref/qrschema/_3/CrossrefMetadata.java @@ -10,11 +10,11 @@ import java.util.ArrayList; import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; /** diff --git a/orcid-utils/src/main/java/org/crossref/qrschema/_3/CrossrefResult.java b/orcid-utils/src/main/java/org/crossref/qrschema/_3/CrossrefResult.java index aebee6af135..eb2a1730c54 100644 --- a/orcid-utils/src/main/java/org/crossref/qrschema/_3/CrossrefResult.java +++ b/orcid-utils/src/main/java/org/crossref/qrschema/_3/CrossrefResult.java @@ -10,12 +10,12 @@ import java.util.ArrayList; import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlAttribute; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; /** diff --git a/orcid-utils/src/main/java/org/crossref/qrschema/_3/DatabaseCite.java b/orcid-utils/src/main/java/org/crossref/qrschema/_3/DatabaseCite.java index d39c49263b5..31699d9832f 100644 --- a/orcid-utils/src/main/java/org/crossref/qrschema/_3/DatabaseCite.java +++ b/orcid-utils/src/main/java/org/crossref/qrschema/_3/DatabaseCite.java @@ -9,12 +9,12 @@ package org.crossref.qrschema._3; import java.math.BigInteger; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlAttribute; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; /** diff --git a/orcid-utils/src/main/java/org/crossref/qrschema/_3/Description.java b/orcid-utils/src/main/java/org/crossref/qrschema/_3/Description.java index 4e2b02f665f..3beb8983113 100644 --- a/orcid-utils/src/main/java/org/crossref/qrschema/_3/Description.java +++ b/orcid-utils/src/main/java/org/crossref/qrschema/_3/Description.java @@ -8,11 +8,11 @@ package org.crossref.qrschema._3; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; -import javax.xml.bind.annotation.XmlValue; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlValue; /** diff --git a/orcid-utils/src/main/java/org/crossref/qrschema/_3/DissertationCite.java b/orcid-utils/src/main/java/org/crossref/qrschema/_3/DissertationCite.java index fa136c0792e..1553f469545 100644 --- a/orcid-utils/src/main/java/org/crossref/qrschema/_3/DissertationCite.java +++ b/orcid-utils/src/main/java/org/crossref/qrschema/_3/DissertationCite.java @@ -9,12 +9,12 @@ package org.crossref.qrschema._3; import java.math.BigInteger; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlAttribute; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; /** diff --git a/orcid-utils/src/main/java/org/crossref/qrschema/_3/Doi.java b/orcid-utils/src/main/java/org/crossref/qrschema/_3/Doi.java index 0eef2b1d13b..c4fce0cfb17 100644 --- a/orcid-utils/src/main/java/org/crossref/qrschema/_3/Doi.java +++ b/orcid-utils/src/main/java/org/crossref/qrschema/_3/Doi.java @@ -8,14 +8,14 @@ package org.crossref.qrschema._3; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; -import javax.xml.bind.annotation.XmlValue; -import javax.xml.bind.annotation.adapters.CollapsedStringAdapter; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlAttribute; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlValue; +import jakarta.xml.bind.annotation.adapters.CollapsedStringAdapter; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; /** diff --git a/orcid-utils/src/main/java/org/crossref/qrschema/_3/DoiRecord.java b/orcid-utils/src/main/java/org/crossref/qrschema/_3/DoiRecord.java index 5ebf27f76be..5344d5bf8bd 100644 --- a/orcid-utils/src/main/java/org/crossref/qrschema/_3/DoiRecord.java +++ b/orcid-utils/src/main/java/org/crossref/qrschema/_3/DoiRecord.java @@ -8,11 +8,11 @@ package org.crossref.qrschema._3; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAnyElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlAnyElement; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; /** diff --git a/orcid-utils/src/main/java/org/crossref/qrschema/_3/EditionNumber.java b/orcid-utils/src/main/java/org/crossref/qrschema/_3/EditionNumber.java index dcab4e2dfa9..df9bdf481dc 100644 --- a/orcid-utils/src/main/java/org/crossref/qrschema/_3/EditionNumber.java +++ b/orcid-utils/src/main/java/org/crossref/qrschema/_3/EditionNumber.java @@ -8,14 +8,14 @@ package org.crossref.qrschema._3; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; -import javax.xml.bind.annotation.XmlValue; -import javax.xml.bind.annotation.adapters.CollapsedStringAdapter; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlAttribute; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlValue; +import jakarta.xml.bind.annotation.adapters.CollapsedStringAdapter; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; /** diff --git a/orcid-utils/src/main/java/org/crossref/qrschema/_3/FirstPage.java b/orcid-utils/src/main/java/org/crossref/qrschema/_3/FirstPage.java index 9c15570d354..5b6c1f9e90e 100644 --- a/orcid-utils/src/main/java/org/crossref/qrschema/_3/FirstPage.java +++ b/orcid-utils/src/main/java/org/crossref/qrschema/_3/FirstPage.java @@ -8,14 +8,14 @@ package org.crossref.qrschema._3; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; -import javax.xml.bind.annotation.XmlValue; -import javax.xml.bind.annotation.adapters.CollapsedStringAdapter; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlAttribute; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlValue; +import jakarta.xml.bind.annotation.adapters.CollapsedStringAdapter; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; /** diff --git a/orcid-utils/src/main/java/org/crossref/qrschema/_3/Format.java b/orcid-utils/src/main/java/org/crossref/qrschema/_3/Format.java index bc603c55fe4..f2d7705d945 100644 --- a/orcid-utils/src/main/java/org/crossref/qrschema/_3/Format.java +++ b/orcid-utils/src/main/java/org/crossref/qrschema/_3/Format.java @@ -8,11 +8,11 @@ package org.crossref.qrschema._3; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; -import javax.xml.bind.annotation.XmlValue; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlValue; /** diff --git a/orcid-utils/src/main/java/org/crossref/qrschema/_3/ForwardLink.java b/orcid-utils/src/main/java/org/crossref/qrschema/_3/ForwardLink.java index eb9176406f6..ae9651b93f6 100644 --- a/orcid-utils/src/main/java/org/crossref/qrschema/_3/ForwardLink.java +++ b/orcid-utils/src/main/java/org/crossref/qrschema/_3/ForwardLink.java @@ -10,12 +10,12 @@ import java.util.ArrayList; import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlAttribute; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; /** diff --git a/orcid-utils/src/main/java/org/crossref/qrschema/_3/GivenName.java b/orcid-utils/src/main/java/org/crossref/qrschema/_3/GivenName.java index 0b19374e754..a8cc39cebee 100644 --- a/orcid-utils/src/main/java/org/crossref/qrschema/_3/GivenName.java +++ b/orcid-utils/src/main/java/org/crossref/qrschema/_3/GivenName.java @@ -8,11 +8,11 @@ package org.crossref.qrschema._3; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; -import javax.xml.bind.annotation.XmlValue; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlValue; /** diff --git a/orcid-utils/src/main/java/org/crossref/qrschema/_3/Head.java b/orcid-utils/src/main/java/org/crossref/qrschema/_3/Head.java index 0df918a7ff4..38f54bb0651 100644 --- a/orcid-utils/src/main/java/org/crossref/qrschema/_3/Head.java +++ b/orcid-utils/src/main/java/org/crossref/qrschema/_3/Head.java @@ -8,11 +8,11 @@ package org.crossref.qrschema._3; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; /** diff --git a/orcid-utils/src/main/java/org/crossref/qrschema/_3/Identifier.java b/orcid-utils/src/main/java/org/crossref/qrschema/_3/Identifier.java index c4bf9fbe103..0576122b877 100644 --- a/orcid-utils/src/main/java/org/crossref/qrschema/_3/Identifier.java +++ b/orcid-utils/src/main/java/org/crossref/qrschema/_3/Identifier.java @@ -8,14 +8,14 @@ package org.crossref.qrschema._3; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; -import javax.xml.bind.annotation.XmlValue; -import javax.xml.bind.annotation.adapters.CollapsedStringAdapter; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlAttribute; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlValue; +import jakarta.xml.bind.annotation.adapters.CollapsedStringAdapter; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; /** diff --git a/orcid-utils/src/main/java/org/crossref/qrschema/_3/InstitutionName.java b/orcid-utils/src/main/java/org/crossref/qrschema/_3/InstitutionName.java index 1e2c3e32e38..dead10f0645 100644 --- a/orcid-utils/src/main/java/org/crossref/qrschema/_3/InstitutionName.java +++ b/orcid-utils/src/main/java/org/crossref/qrschema/_3/InstitutionName.java @@ -8,14 +8,14 @@ package org.crossref.qrschema._3; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; -import javax.xml.bind.annotation.XmlValue; -import javax.xml.bind.annotation.adapters.CollapsedStringAdapter; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlAttribute; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlValue; +import jakarta.xml.bind.annotation.adapters.CollapsedStringAdapter; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; /** diff --git a/orcid-utils/src/main/java/org/crossref/qrschema/_3/Isbn.java b/orcid-utils/src/main/java/org/crossref/qrschema/_3/Isbn.java index 2b64ec90cd5..af64f8083fc 100644 --- a/orcid-utils/src/main/java/org/crossref/qrschema/_3/Isbn.java +++ b/orcid-utils/src/main/java/org/crossref/qrschema/_3/Isbn.java @@ -8,14 +8,14 @@ package org.crossref.qrschema._3; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; -import javax.xml.bind.annotation.XmlValue; -import javax.xml.bind.annotation.adapters.CollapsedStringAdapter; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlAttribute; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlValue; +import jakarta.xml.bind.annotation.adapters.CollapsedStringAdapter; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; /** diff --git a/orcid-utils/src/main/java/org/crossref/qrschema/_3/Issn.java b/orcid-utils/src/main/java/org/crossref/qrschema/_3/Issn.java index 4aba0712037..cc464c00240 100644 --- a/orcid-utils/src/main/java/org/crossref/qrschema/_3/Issn.java +++ b/orcid-utils/src/main/java/org/crossref/qrschema/_3/Issn.java @@ -8,14 +8,14 @@ package org.crossref.qrschema._3; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; -import javax.xml.bind.annotation.XmlValue; -import javax.xml.bind.annotation.adapters.CollapsedStringAdapter; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlAttribute; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlValue; +import jakarta.xml.bind.annotation.adapters.CollapsedStringAdapter; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; /** diff --git a/orcid-utils/src/main/java/org/crossref/qrschema/_3/Issue.java b/orcid-utils/src/main/java/org/crossref/qrschema/_3/Issue.java index 739c19826a4..429fc9826c6 100644 --- a/orcid-utils/src/main/java/org/crossref/qrschema/_3/Issue.java +++ b/orcid-utils/src/main/java/org/crossref/qrschema/_3/Issue.java @@ -8,14 +8,14 @@ package org.crossref.qrschema._3; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; -import javax.xml.bind.annotation.XmlValue; -import javax.xml.bind.annotation.adapters.CollapsedStringAdapter; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlAttribute; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlValue; +import jakarta.xml.bind.annotation.adapters.CollapsedStringAdapter; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; /** diff --git a/orcid-utils/src/main/java/org/crossref/qrschema/_3/ItemNumber.java b/orcid-utils/src/main/java/org/crossref/qrschema/_3/ItemNumber.java index ef57a16f6a2..aa9b79a53c8 100644 --- a/orcid-utils/src/main/java/org/crossref/qrschema/_3/ItemNumber.java +++ b/orcid-utils/src/main/java/org/crossref/qrschema/_3/ItemNumber.java @@ -8,12 +8,12 @@ package org.crossref.qrschema._3; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; -import javax.xml.bind.annotation.XmlValue; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlAttribute; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlValue; /** diff --git a/orcid-utils/src/main/java/org/crossref/qrschema/_3/JournalAbbreviation.java b/orcid-utils/src/main/java/org/crossref/qrschema/_3/JournalAbbreviation.java index d5bbffba2a5..f86b665e6d4 100644 --- a/orcid-utils/src/main/java/org/crossref/qrschema/_3/JournalAbbreviation.java +++ b/orcid-utils/src/main/java/org/crossref/qrschema/_3/JournalAbbreviation.java @@ -8,11 +8,11 @@ package org.crossref.qrschema._3; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; -import javax.xml.bind.annotation.XmlValue; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlValue; /** diff --git a/orcid-utils/src/main/java/org/crossref/qrschema/_3/JournalCite.java b/orcid-utils/src/main/java/org/crossref/qrschema/_3/JournalCite.java index c9997e6a5e7..eaf97aa33cb 100644 --- a/orcid-utils/src/main/java/org/crossref/qrschema/_3/JournalCite.java +++ b/orcid-utils/src/main/java/org/crossref/qrschema/_3/JournalCite.java @@ -11,12 +11,12 @@ import java.math.BigInteger; import java.util.ArrayList; import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlAttribute; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; /** diff --git a/orcid-utils/src/main/java/org/crossref/qrschema/_3/JournalTitle.java b/orcid-utils/src/main/java/org/crossref/qrschema/_3/JournalTitle.java index c9cdaff53c3..4032e708d79 100644 --- a/orcid-utils/src/main/java/org/crossref/qrschema/_3/JournalTitle.java +++ b/orcid-utils/src/main/java/org/crossref/qrschema/_3/JournalTitle.java @@ -8,14 +8,14 @@ package org.crossref.qrschema._3; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; -import javax.xml.bind.annotation.XmlValue; -import javax.xml.bind.annotation.adapters.CollapsedStringAdapter; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlAttribute; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlValue; +import jakarta.xml.bind.annotation.adapters.CollapsedStringAdapter; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; /** diff --git a/orcid-utils/src/main/java/org/crossref/qrschema/_3/LastPage.java b/orcid-utils/src/main/java/org/crossref/qrschema/_3/LastPage.java index ecc58b41604..5561c8b13a9 100644 --- a/orcid-utils/src/main/java/org/crossref/qrschema/_3/LastPage.java +++ b/orcid-utils/src/main/java/org/crossref/qrschema/_3/LastPage.java @@ -8,14 +8,14 @@ package org.crossref.qrschema._3; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; -import javax.xml.bind.annotation.XmlValue; -import javax.xml.bind.annotation.adapters.CollapsedStringAdapter; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlAttribute; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlValue; +import jakarta.xml.bind.annotation.adapters.CollapsedStringAdapter; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; /** diff --git a/orcid-utils/src/main/java/org/crossref/qrschema/_3/ObjectFactory.java b/orcid-utils/src/main/java/org/crossref/qrschema/_3/ObjectFactory.java index b143b6e0464..672f5bf2d76 100644 --- a/orcid-utils/src/main/java/org/crossref/qrschema/_3/ObjectFactory.java +++ b/orcid-utils/src/main/java/org/crossref/qrschema/_3/ObjectFactory.java @@ -8,9 +8,9 @@ package org.crossref.qrschema._3; -import javax.xml.bind.JAXBElement; -import javax.xml.bind.annotation.XmlElementDecl; -import javax.xml.bind.annotation.XmlRegistry; +import jakarta.xml.bind.JAXBElement; +import jakarta.xml.bind.annotation.XmlElementDecl; +import jakarta.xml.bind.annotation.XmlRegistry; import javax.xml.namespace.QName; diff --git a/orcid-utils/src/main/java/org/crossref/qrschema/_3/Organization.java b/orcid-utils/src/main/java/org/crossref/qrschema/_3/Organization.java index e0936a47bcb..b589bf1510f 100644 --- a/orcid-utils/src/main/java/org/crossref/qrschema/_3/Organization.java +++ b/orcid-utils/src/main/java/org/crossref/qrschema/_3/Organization.java @@ -8,14 +8,14 @@ package org.crossref.qrschema._3; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; -import javax.xml.bind.annotation.XmlValue; -import javax.xml.bind.annotation.adapters.CollapsedStringAdapter; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlAttribute; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlValue; +import jakarta.xml.bind.annotation.adapters.CollapsedStringAdapter; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; /** diff --git a/orcid-utils/src/main/java/org/crossref/qrschema/_3/PaperTitle.java b/orcid-utils/src/main/java/org/crossref/qrschema/_3/PaperTitle.java index 97797119fcf..394e3a0f7d2 100644 --- a/orcid-utils/src/main/java/org/crossref/qrschema/_3/PaperTitle.java +++ b/orcid-utils/src/main/java/org/crossref/qrschema/_3/PaperTitle.java @@ -8,11 +8,11 @@ package org.crossref.qrschema._3; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; -import javax.xml.bind.annotation.XmlValue; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlValue; /** diff --git a/orcid-utils/src/main/java/org/crossref/qrschema/_3/PostedcontentCite.java b/orcid-utils/src/main/java/org/crossref/qrschema/_3/PostedcontentCite.java index 4036d9e4a9f..3012c2d9683 100644 --- a/orcid-utils/src/main/java/org/crossref/qrschema/_3/PostedcontentCite.java +++ b/orcid-utils/src/main/java/org/crossref/qrschema/_3/PostedcontentCite.java @@ -9,12 +9,12 @@ package org.crossref.qrschema._3; import java.math.BigInteger; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlAttribute; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; /** diff --git a/orcid-utils/src/main/java/org/crossref/qrschema/_3/PubType.java b/orcid-utils/src/main/java/org/crossref/qrschema/_3/PubType.java index c8887aa1825..6455e8e352c 100644 --- a/orcid-utils/src/main/java/org/crossref/qrschema/_3/PubType.java +++ b/orcid-utils/src/main/java/org/crossref/qrschema/_3/PubType.java @@ -8,9 +8,9 @@ package org.crossref.qrschema._3; -import javax.xml.bind.annotation.XmlEnum; -import javax.xml.bind.annotation.XmlEnumValue; -import javax.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlEnum; +import jakarta.xml.bind.annotation.XmlEnumValue; +import jakarta.xml.bind.annotation.XmlType; /** diff --git a/orcid-utils/src/main/java/org/crossref/qrschema/_3/PublicationType.java b/orcid-utils/src/main/java/org/crossref/qrschema/_3/PublicationType.java index f1da01a515c..1fc15535e8a 100644 --- a/orcid-utils/src/main/java/org/crossref/qrschema/_3/PublicationType.java +++ b/orcid-utils/src/main/java/org/crossref/qrschema/_3/PublicationType.java @@ -8,11 +8,11 @@ package org.crossref.qrschema._3; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; -import javax.xml.bind.annotation.XmlValue; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlValue; /** diff --git a/orcid-utils/src/main/java/org/crossref/qrschema/_3/Query.java b/orcid-utils/src/main/java/org/crossref/qrschema/_3/Query.java index 03492b1485e..affd0c5366e 100644 --- a/orcid-utils/src/main/java/org/crossref/qrschema/_3/Query.java +++ b/orcid-utils/src/main/java/org/crossref/qrschema/_3/Query.java @@ -11,14 +11,14 @@ import java.math.BigInteger; import java.util.ArrayList; import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; -import javax.xml.bind.annotation.adapters.CollapsedStringAdapter; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlAttribute; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.adapters.CollapsedStringAdapter; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; /** diff --git a/orcid-utils/src/main/java/org/crossref/qrschema/_3/QueryResult.java b/orcid-utils/src/main/java/org/crossref/qrschema/_3/QueryResult.java index d0c2ef2ffdc..343ba5f23aa 100644 --- a/orcid-utils/src/main/java/org/crossref/qrschema/_3/QueryResult.java +++ b/orcid-utils/src/main/java/org/crossref/qrschema/_3/QueryResult.java @@ -8,11 +8,11 @@ package org.crossref.qrschema._3; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; /** diff --git a/orcid-utils/src/main/java/org/crossref/qrschema/_3/ReportCite.java b/orcid-utils/src/main/java/org/crossref/qrschema/_3/ReportCite.java index 7031d1878a3..8b7f975b54f 100644 --- a/orcid-utils/src/main/java/org/crossref/qrschema/_3/ReportCite.java +++ b/orcid-utils/src/main/java/org/crossref/qrschema/_3/ReportCite.java @@ -9,12 +9,12 @@ package org.crossref.qrschema._3; import java.math.BigInteger; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlAttribute; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; /** diff --git a/orcid-utils/src/main/java/org/crossref/qrschema/_3/SeriesTitle.java b/orcid-utils/src/main/java/org/crossref/qrschema/_3/SeriesTitle.java index a13993b4fc6..8a187090162 100644 --- a/orcid-utils/src/main/java/org/crossref/qrschema/_3/SeriesTitle.java +++ b/orcid-utils/src/main/java/org/crossref/qrschema/_3/SeriesTitle.java @@ -8,14 +8,14 @@ package org.crossref.qrschema._3; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; -import javax.xml.bind.annotation.XmlValue; -import javax.xml.bind.annotation.adapters.CollapsedStringAdapter; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlAttribute; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlValue; +import jakarta.xml.bind.annotation.adapters.CollapsedStringAdapter; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; /** diff --git a/orcid-utils/src/main/java/org/crossref/qrschema/_3/StandardCite.java b/orcid-utils/src/main/java/org/crossref/qrschema/_3/StandardCite.java index 17abd7f619d..a2b9b2f1bfb 100644 --- a/orcid-utils/src/main/java/org/crossref/qrschema/_3/StandardCite.java +++ b/orcid-utils/src/main/java/org/crossref/qrschema/_3/StandardCite.java @@ -9,12 +9,12 @@ package org.crossref.qrschema._3; import java.math.BigInteger; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlAttribute; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; /** diff --git a/orcid-utils/src/main/java/org/crossref/qrschema/_3/Surname.java b/orcid-utils/src/main/java/org/crossref/qrschema/_3/Surname.java index c73275bb346..f36dc90b7c6 100644 --- a/orcid-utils/src/main/java/org/crossref/qrschema/_3/Surname.java +++ b/orcid-utils/src/main/java/org/crossref/qrschema/_3/Surname.java @@ -8,11 +8,11 @@ package org.crossref.qrschema._3; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; -import javax.xml.bind.annotation.XmlValue; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlValue; /** diff --git a/orcid-utils/src/main/java/org/crossref/qrschema/_3/Title.java b/orcid-utils/src/main/java/org/crossref/qrschema/_3/Title.java index 50f7eb0e91b..b412e9dfbc9 100644 --- a/orcid-utils/src/main/java/org/crossref/qrschema/_3/Title.java +++ b/orcid-utils/src/main/java/org/crossref/qrschema/_3/Title.java @@ -8,11 +8,11 @@ package org.crossref.qrschema._3; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; -import javax.xml.bind.annotation.XmlValue; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlValue; /** diff --git a/orcid-utils/src/main/java/org/crossref/qrschema/_3/Volume.java b/orcid-utils/src/main/java/org/crossref/qrschema/_3/Volume.java index 96869575bf7..5537aca9a31 100644 --- a/orcid-utils/src/main/java/org/crossref/qrschema/_3/Volume.java +++ b/orcid-utils/src/main/java/org/crossref/qrschema/_3/Volume.java @@ -8,14 +8,14 @@ package org.crossref.qrschema._3; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; -import javax.xml.bind.annotation.XmlValue; -import javax.xml.bind.annotation.adapters.CollapsedStringAdapter; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlAttribute; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlValue; +import jakarta.xml.bind.annotation.adapters.CollapsedStringAdapter; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; /** diff --git a/orcid-utils/src/main/java/org/crossref/qrschema/_3/VolumeTitle.java b/orcid-utils/src/main/java/org/crossref/qrschema/_3/VolumeTitle.java index c8851d0d98f..69948746287 100644 --- a/orcid-utils/src/main/java/org/crossref/qrschema/_3/VolumeTitle.java +++ b/orcid-utils/src/main/java/org/crossref/qrschema/_3/VolumeTitle.java @@ -8,14 +8,14 @@ package org.crossref.qrschema._3; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; -import javax.xml.bind.annotation.XmlValue; -import javax.xml.bind.annotation.adapters.CollapsedStringAdapter; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlAttribute; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlValue; +import jakarta.xml.bind.annotation.adapters.CollapsedStringAdapter; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; /** diff --git a/orcid-utils/src/main/java/org/crossref/qrschema/_3/Year.java b/orcid-utils/src/main/java/org/crossref/qrschema/_3/Year.java index 9d9f5bcb47f..0bfcacab3f1 100644 --- a/orcid-utils/src/main/java/org/crossref/qrschema/_3/Year.java +++ b/orcid-utils/src/main/java/org/crossref/qrschema/_3/Year.java @@ -8,14 +8,14 @@ package org.crossref.qrschema._3; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; -import javax.xml.bind.annotation.XmlValue; -import javax.xml.bind.annotation.adapters.CollapsedStringAdapter; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlAttribute; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlValue; +import jakarta.xml.bind.annotation.adapters.CollapsedStringAdapter; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; /** diff --git a/orcid-utils/src/main/java/org/crossref/qrschema/_3/package-info.java b/orcid-utils/src/main/java/org/crossref/qrschema/_3/package-info.java index b8c78e83e99..8d6291fb98a 100644 --- a/orcid-utils/src/main/java/org/crossref/qrschema/_3/package-info.java +++ b/orcid-utils/src/main/java/org/crossref/qrschema/_3/package-info.java @@ -5,5 +5,5 @@ // Generated on: 2018.08.17 at 03:19:13 PM BST // -@javax.xml.bind.annotation.XmlSchema(namespace = "http://www.crossref.org/qrschema/3.0", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED) +@jakarta.xml.bind.annotation.XmlSchema(namespace = "http://www.crossref.org/qrschema/3.0", elementFormDefault = jakarta.xml.bind.annotation.XmlNsForm.QUALIFIED) package org.crossref.qrschema._3; diff --git a/orcid-utils/src/main/java/org/datacite/schema/kernel_4/Box.java b/orcid-utils/src/main/java/org/datacite/schema/kernel_4/Box.java index 1aa06b3781e..eab332da936 100644 --- a/orcid-utils/src/main/java/org/datacite/schema/kernel_4/Box.java +++ b/orcid-utils/src/main/java/org/datacite/schema/kernel_4/Box.java @@ -8,9 +8,9 @@ package org.datacite.schema.kernel_4; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlType; /** diff --git a/orcid-utils/src/main/java/org/datacite/schema/kernel_4/ContributorType.java b/orcid-utils/src/main/java/org/datacite/schema/kernel_4/ContributorType.java index 0c6ef90c72b..6a351baf7ba 100644 --- a/orcid-utils/src/main/java/org/datacite/schema/kernel_4/ContributorType.java +++ b/orcid-utils/src/main/java/org/datacite/schema/kernel_4/ContributorType.java @@ -8,9 +8,9 @@ package org.datacite.schema.kernel_4; -import javax.xml.bind.annotation.XmlEnum; -import javax.xml.bind.annotation.XmlEnumValue; -import javax.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlEnum; +import jakarta.xml.bind.annotation.XmlEnumValue; +import jakarta.xml.bind.annotation.XmlType; /** diff --git a/orcid-utils/src/main/java/org/datacite/schema/kernel_4/DateType.java b/orcid-utils/src/main/java/org/datacite/schema/kernel_4/DateType.java index 63fe6248444..bb236d34045 100644 --- a/orcid-utils/src/main/java/org/datacite/schema/kernel_4/DateType.java +++ b/orcid-utils/src/main/java/org/datacite/schema/kernel_4/DateType.java @@ -8,9 +8,9 @@ package org.datacite.schema.kernel_4; -import javax.xml.bind.annotation.XmlEnum; -import javax.xml.bind.annotation.XmlEnumValue; -import javax.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlEnum; +import jakarta.xml.bind.annotation.XmlEnumValue; +import jakarta.xml.bind.annotation.XmlType; /** diff --git a/orcid-utils/src/main/java/org/datacite/schema/kernel_4/DescriptionType.java b/orcid-utils/src/main/java/org/datacite/schema/kernel_4/DescriptionType.java index de7734a02bb..2af98bfb87b 100644 --- a/orcid-utils/src/main/java/org/datacite/schema/kernel_4/DescriptionType.java +++ b/orcid-utils/src/main/java/org/datacite/schema/kernel_4/DescriptionType.java @@ -8,9 +8,9 @@ package org.datacite.schema.kernel_4; -import javax.xml.bind.annotation.XmlEnum; -import javax.xml.bind.annotation.XmlEnumValue; -import javax.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlEnum; +import jakarta.xml.bind.annotation.XmlEnumValue; +import jakarta.xml.bind.annotation.XmlType; /** diff --git a/orcid-utils/src/main/java/org/datacite/schema/kernel_4/FunderIdentifierType.java b/orcid-utils/src/main/java/org/datacite/schema/kernel_4/FunderIdentifierType.java index ece5ae5a1df..c893daf0c43 100644 --- a/orcid-utils/src/main/java/org/datacite/schema/kernel_4/FunderIdentifierType.java +++ b/orcid-utils/src/main/java/org/datacite/schema/kernel_4/FunderIdentifierType.java @@ -8,9 +8,9 @@ package org.datacite.schema.kernel_4; -import javax.xml.bind.annotation.XmlEnum; -import javax.xml.bind.annotation.XmlEnumValue; -import javax.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlEnum; +import jakarta.xml.bind.annotation.XmlEnumValue; +import jakarta.xml.bind.annotation.XmlType; /** diff --git a/orcid-utils/src/main/java/org/datacite/schema/kernel_4/ObjectFactory.java b/orcid-utils/src/main/java/org/datacite/schema/kernel_4/ObjectFactory.java index da40f75e5a2..0d7ab50d8bf 100644 --- a/orcid-utils/src/main/java/org/datacite/schema/kernel_4/ObjectFactory.java +++ b/orcid-utils/src/main/java/org/datacite/schema/kernel_4/ObjectFactory.java @@ -8,9 +8,9 @@ package org.datacite.schema.kernel_4; -import javax.xml.bind.JAXBElement; -import javax.xml.bind.annotation.XmlElementDecl; -import javax.xml.bind.annotation.XmlRegistry; +import jakarta.xml.bind.JAXBElement; +import jakarta.xml.bind.annotation.XmlElementDecl; +import jakarta.xml.bind.annotation.XmlRegistry; import javax.xml.namespace.QName; diff --git a/orcid-utils/src/main/java/org/datacite/schema/kernel_4/Point.java b/orcid-utils/src/main/java/org/datacite/schema/kernel_4/Point.java index 7b10278632b..6bb5350d4bd 100644 --- a/orcid-utils/src/main/java/org/datacite/schema/kernel_4/Point.java +++ b/orcid-utils/src/main/java/org/datacite/schema/kernel_4/Point.java @@ -8,9 +8,9 @@ package org.datacite.schema.kernel_4; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlType; /** diff --git a/orcid-utils/src/main/java/org/datacite/schema/kernel_4/RelatedIdentifierType.java b/orcid-utils/src/main/java/org/datacite/schema/kernel_4/RelatedIdentifierType.java index 9a29b3d43e8..908c84614d5 100644 --- a/orcid-utils/src/main/java/org/datacite/schema/kernel_4/RelatedIdentifierType.java +++ b/orcid-utils/src/main/java/org/datacite/schema/kernel_4/RelatedIdentifierType.java @@ -8,9 +8,9 @@ package org.datacite.schema.kernel_4; -import javax.xml.bind.annotation.XmlEnum; -import javax.xml.bind.annotation.XmlEnumValue; -import javax.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlEnum; +import jakarta.xml.bind.annotation.XmlEnumValue; +import jakarta.xml.bind.annotation.XmlType; /** diff --git a/orcid-utils/src/main/java/org/datacite/schema/kernel_4/RelationType.java b/orcid-utils/src/main/java/org/datacite/schema/kernel_4/RelationType.java index 3b84cf5316a..0420903c2fc 100644 --- a/orcid-utils/src/main/java/org/datacite/schema/kernel_4/RelationType.java +++ b/orcid-utils/src/main/java/org/datacite/schema/kernel_4/RelationType.java @@ -8,9 +8,9 @@ package org.datacite.schema.kernel_4; -import javax.xml.bind.annotation.XmlEnum; -import javax.xml.bind.annotation.XmlEnumValue; -import javax.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlEnum; +import jakarta.xml.bind.annotation.XmlEnumValue; +import jakarta.xml.bind.annotation.XmlType; /** diff --git a/orcid-utils/src/main/java/org/datacite/schema/kernel_4/Resource.java b/orcid-utils/src/main/java/org/datacite/schema/kernel_4/Resource.java index 142b196b12d..9c5be820240 100644 --- a/orcid-utils/src/main/java/org/datacite/schema/kernel_4/Resource.java +++ b/orcid-utils/src/main/java/org/datacite/schema/kernel_4/Resource.java @@ -11,19 +11,19 @@ import java.io.Serializable; import java.util.ArrayList; import java.util.List; -import javax.xml.bind.JAXBElement; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlElementRef; -import javax.xml.bind.annotation.XmlMixed; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlSchemaType; -import javax.xml.bind.annotation.XmlType; -import javax.xml.bind.annotation.XmlValue; -import javax.xml.bind.annotation.adapters.CollapsedStringAdapter; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; +import jakarta.xml.bind.JAXBElement; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlAttribute; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlElementRef; +import jakarta.xml.bind.annotation.XmlMixed; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlSchemaType; +import jakarta.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlValue; +import jakarta.xml.bind.annotation.adapters.CollapsedStringAdapter; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; /** *

Java class for anonymous complex type. diff --git a/orcid-utils/src/main/java/org/datacite/schema/kernel_4/ResourceType.java b/orcid-utils/src/main/java/org/datacite/schema/kernel_4/ResourceType.java index fc9624e7903..bea84ac32af 100644 --- a/orcid-utils/src/main/java/org/datacite/schema/kernel_4/ResourceType.java +++ b/orcid-utils/src/main/java/org/datacite/schema/kernel_4/ResourceType.java @@ -8,9 +8,9 @@ package org.datacite.schema.kernel_4; -import javax.xml.bind.annotation.XmlEnum; -import javax.xml.bind.annotation.XmlEnumValue; -import javax.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlEnum; +import jakarta.xml.bind.annotation.XmlEnumValue; +import jakarta.xml.bind.annotation.XmlType; /** diff --git a/orcid-utils/src/main/java/org/datacite/schema/kernel_4/TitleType.java b/orcid-utils/src/main/java/org/datacite/schema/kernel_4/TitleType.java index f846c94f7a2..43930eb04d3 100644 --- a/orcid-utils/src/main/java/org/datacite/schema/kernel_4/TitleType.java +++ b/orcid-utils/src/main/java/org/datacite/schema/kernel_4/TitleType.java @@ -8,9 +8,9 @@ package org.datacite.schema.kernel_4; -import javax.xml.bind.annotation.XmlEnum; -import javax.xml.bind.annotation.XmlEnumValue; -import javax.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlEnum; +import jakarta.xml.bind.annotation.XmlEnumValue; +import jakarta.xml.bind.annotation.XmlType; /** diff --git a/orcid-utils/src/main/java/org/datacite/schema/kernel_4/package-info.java b/orcid-utils/src/main/java/org/datacite/schema/kernel_4/package-info.java index 254ea8de3a7..4616523239c 100644 --- a/orcid-utils/src/main/java/org/datacite/schema/kernel_4/package-info.java +++ b/orcid-utils/src/main/java/org/datacite/schema/kernel_4/package-info.java @@ -5,5 +5,5 @@ // Generated on: 2018.08.17 at 03:04:42 PM BST // -@javax.xml.bind.annotation.XmlSchema(namespace = "http://datacite.org/schema/kernel-4", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED) +@jakarta.xml.bind.annotation.XmlSchema(namespace = "http://datacite.org/schema/kernel-4", elementFormDefault = jakarta.xml.bind.annotation.XmlNsForm.QUALIFIED) package org.datacite.schema.kernel_4; diff --git a/orcid-utils/src/main/java/org/orcid/utils/alerting/impl/SlackManagerImpl.java b/orcid-utils/src/main/java/org/orcid/utils/alerting/impl/SlackManagerImpl.java index 478f67d9136..72a794cfd83 100644 --- a/orcid-utils/src/main/java/org/orcid/utils/alerting/impl/SlackManagerImpl.java +++ b/orcid-utils/src/main/java/org/orcid/utils/alerting/impl/SlackManagerImpl.java @@ -3,7 +3,7 @@ import java.util.HashMap; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.commons.lang3.StringUtils; import org.orcid.utils.alerting.SlackManager; @@ -16,7 +16,7 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; -import javax.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MediaType; /** * diff --git a/orcid-utils/src/main/java/org/orcid/utils/email/MailGunManager.java b/orcid-utils/src/main/java/org/orcid/utils/email/MailGunManager.java index 93546538e26..b72e266dd03 100644 --- a/orcid-utils/src/main/java/org/orcid/utils/email/MailGunManager.java +++ b/orcid-utils/src/main/java/org/orcid/utils/email/MailGunManager.java @@ -2,7 +2,7 @@ import java.util.AbstractMap.SimpleEntry; -import javax.annotation.PostConstruct; +import jakarta.annotation.PostConstruct; import org.apache.commons.lang3.StringUtils; import org.orcid.utils.jersey.JerseyClientHelper; @@ -12,8 +12,8 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; -import javax.ws.rs.core.Form; -import javax.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Form; +import jakarta.ws.rs.core.MediaType; @Component public class MailGunManager { diff --git a/orcid-utils/src/main/java/org/orcid/utils/jersey/JerseyClientHelper.java b/orcid-utils/src/main/java/org/orcid/utils/jersey/JerseyClientHelper.java index c357c6e889a..1c7a93148db 100644 --- a/orcid-utils/src/main/java/org/orcid/utils/jersey/JerseyClientHelper.java +++ b/orcid-utils/src/main/java/org/orcid/utils/jersey/JerseyClientHelper.java @@ -13,13 +13,13 @@ import org.springframework.beans.factory.DisposableBean; import org.springframework.stereotype.Component; -import javax.ws.rs.client.Client; -import javax.ws.rs.client.ClientBuilder; -import javax.ws.rs.client.Entity; -import javax.ws.rs.client.Invocation.Builder; -import javax.ws.rs.client.WebTarget; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.client.Client; +import jakarta.ws.rs.client.ClientBuilder; +import jakarta.ws.rs.client.Entity; +import jakarta.ws.rs.client.Invocation.Builder; +import jakarta.ws.rs.client.WebTarget; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; @Component public class JerseyClientHelper implements DisposableBean { diff --git a/orcid-utils/src/main/java/org/orcid/utils/jersey/OrcidJerseyClientHandler.java b/orcid-utils/src/main/java/org/orcid/utils/jersey/OrcidJerseyClientHandler.java index 9d59f438ffe..41cda204981 100644 --- a/orcid-utils/src/main/java/org/orcid/utils/jersey/OrcidJerseyClientHandler.java +++ b/orcid-utils/src/main/java/org/orcid/utils/jersey/OrcidJerseyClientHandler.java @@ -20,8 +20,8 @@ import com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider; -import javax.ws.rs.client.Client; -import javax.ws.rs.client.ClientBuilder; +import jakarta.ws.rs.client.Client; +import jakarta.ws.rs.client.ClientBuilder; public class OrcidJerseyClientHandler { diff --git a/orcid-utils/src/main/java/org/orcid/utils/jersey/marshaller/ORCIDMarshaller.java b/orcid-utils/src/main/java/org/orcid/utils/jersey/marshaller/ORCIDMarshaller.java index b263d6b1117..d4ee7eb5a2c 100644 --- a/orcid-utils/src/main/java/org/orcid/utils/jersey/marshaller/ORCIDMarshaller.java +++ b/orcid-utils/src/main/java/org/orcid/utils/jersey/marshaller/ORCIDMarshaller.java @@ -2,9 +2,9 @@ import java.io.ByteArrayOutputStream; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Marshaller; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Marshaller; import org.orcid.jaxb.model.error_v2.OrcidError; import org.orcid.jaxb.model.record.summary_v2.ActivitiesSummary; diff --git a/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V2ActivitiesSummaryBodyReader.java b/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V2ActivitiesSummaryBodyReader.java index 8b3bc3fd9e8..c458d442f4b 100644 --- a/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V2ActivitiesSummaryBodyReader.java +++ b/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V2ActivitiesSummaryBodyReader.java @@ -5,19 +5,19 @@ import java.lang.annotation.Annotation; import java.lang.reflect.Type; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; import org.orcid.jaxb.model.record.summary_v2.ActivitiesSummary; -import javax.ws.rs.Consumes; -import javax.ws.rs.ProcessingException; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.ext.MessageBodyReader; -import javax.ws.rs.ext.Provider; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.ProcessingException; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.ext.MessageBodyReader; +import jakarta.ws.rs.ext.Provider; @Provider @Consumes({"application/xml", "application/json"}) diff --git a/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V2EducationBodyReader.java b/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V2EducationBodyReader.java index 49d036dec7b..97593db6247 100644 --- a/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V2EducationBodyReader.java +++ b/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V2EducationBodyReader.java @@ -5,19 +5,19 @@ import java.lang.annotation.Annotation; import java.lang.reflect.Type; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; import org.orcid.jaxb.model.record_v2.Education; -import javax.ws.rs.Consumes; -import javax.ws.rs.ProcessingException; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.ext.MessageBodyReader; -import javax.ws.rs.ext.Provider; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.ProcessingException; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.ext.MessageBodyReader; +import jakarta.ws.rs.ext.Provider; @Provider @Consumes({"application/xml", "application/json"}) diff --git a/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V2EmploymentBodyReader.java b/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V2EmploymentBodyReader.java index 51dba00791c..c36e28d809b 100644 --- a/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V2EmploymentBodyReader.java +++ b/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V2EmploymentBodyReader.java @@ -5,19 +5,19 @@ import java.lang.annotation.Annotation; import java.lang.reflect.Type; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; import org.orcid.jaxb.model.record_v2.Employment; -import javax.ws.rs.Consumes; -import javax.ws.rs.ProcessingException; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.ext.MessageBodyReader; -import javax.ws.rs.ext.Provider; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.ProcessingException; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.ext.MessageBodyReader; +import jakarta.ws.rs.ext.Provider; @Provider @Consumes({"application/xml", "application/json"}) diff --git a/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V2FundingBodyReader.java b/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V2FundingBodyReader.java index a1c1a69b6a0..92eeb94d114 100644 --- a/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V2FundingBodyReader.java +++ b/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V2FundingBodyReader.java @@ -5,19 +5,19 @@ import java.lang.annotation.Annotation; import java.lang.reflect.Type; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; import org.orcid.jaxb.model.record_v2.Funding; -import javax.ws.rs.Consumes; -import javax.ws.rs.ProcessingException; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.ext.MessageBodyReader; -import javax.ws.rs.ext.Provider; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.ProcessingException; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.ext.MessageBodyReader; +import jakarta.ws.rs.ext.Provider; @Provider @Consumes({"application/xml", "application/json"}) diff --git a/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V2OrcidErrorBodyReader.java b/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V2OrcidErrorBodyReader.java index 3a7b67deea3..00f0d5fe290 100644 --- a/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V2OrcidErrorBodyReader.java +++ b/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V2OrcidErrorBodyReader.java @@ -5,19 +5,19 @@ import java.lang.annotation.Annotation; import java.lang.reflect.Type; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; import org.orcid.jaxb.model.error_v2.OrcidError; -import javax.ws.rs.Consumes; -import javax.ws.rs.ProcessingException; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.ext.MessageBodyReader; -import javax.ws.rs.ext.Provider; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.ProcessingException; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.ext.MessageBodyReader; +import jakarta.ws.rs.ext.Provider; @Provider @Consumes({"application/xml", "application/json"}) diff --git a/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V2PeerReviewBodyReader.java b/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V2PeerReviewBodyReader.java index 0083050cd08..ac9dd15b8b4 100644 --- a/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V2PeerReviewBodyReader.java +++ b/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V2PeerReviewBodyReader.java @@ -5,19 +5,19 @@ import java.lang.annotation.Annotation; import java.lang.reflect.Type; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; import org.orcid.jaxb.model.record_v2.PeerReview; -import javax.ws.rs.Consumes; -import javax.ws.rs.ProcessingException; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.ext.MessageBodyReader; -import javax.ws.rs.ext.Provider; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.ProcessingException; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.ext.MessageBodyReader; +import jakarta.ws.rs.ext.Provider; @Provider @Consumes({"application/xml", "application/json"}) diff --git a/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V2RecordBodyReader.java b/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V2RecordBodyReader.java index 6b951b1a780..5ec7b6ad299 100644 --- a/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V2RecordBodyReader.java +++ b/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V2RecordBodyReader.java @@ -5,19 +5,19 @@ import java.lang.annotation.Annotation; import java.lang.reflect.Type; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; import org.orcid.jaxb.model.record_v2.Record; -import javax.ws.rs.Consumes; -import javax.ws.rs.ProcessingException; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.ext.MessageBodyReader; -import javax.ws.rs.ext.Provider; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.ProcessingException; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.ext.MessageBodyReader; +import jakarta.ws.rs.ext.Provider; @Provider @Consumes({"application/xml", "application/json"}) diff --git a/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V2WorkBodyReader.java b/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V2WorkBodyReader.java index 16a039f0417..346fb62fd00 100644 --- a/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V2WorkBodyReader.java +++ b/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V2WorkBodyReader.java @@ -5,19 +5,19 @@ import java.lang.annotation.Annotation; import java.lang.reflect.Type; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; import org.orcid.jaxb.model.record_v2.Work; -import javax.ws.rs.Consumes; -import javax.ws.rs.ProcessingException; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.ext.MessageBodyReader; -import javax.ws.rs.ext.Provider; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.ProcessingException; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.ext.MessageBodyReader; +import jakarta.ws.rs.ext.Provider; @Provider @Consumes({"application/xml", "application/json"}) diff --git a/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V3ActivitiesSummaryBodyReader.java b/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V3ActivitiesSummaryBodyReader.java index c981cb303e3..89680188459 100644 --- a/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V3ActivitiesSummaryBodyReader.java +++ b/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V3ActivitiesSummaryBodyReader.java @@ -5,19 +5,19 @@ import java.lang.annotation.Annotation; import java.lang.reflect.Type; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; import org.orcid.jaxb.model.v3.release.record.summary.ActivitiesSummary; -import javax.ws.rs.Consumes; -import javax.ws.rs.ProcessingException; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.ext.MessageBodyReader; -import javax.ws.rs.ext.Provider; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.ProcessingException; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.ext.MessageBodyReader; +import jakarta.ws.rs.ext.Provider; @Provider @Consumes({ "application/xml", "application/json" }) diff --git a/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V3DistinctionBodyReader.java b/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V3DistinctionBodyReader.java index 435bc237b12..55a69a34547 100644 --- a/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V3DistinctionBodyReader.java +++ b/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V3DistinctionBodyReader.java @@ -5,19 +5,19 @@ import java.lang.annotation.Annotation; import java.lang.reflect.Type; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; import org.orcid.jaxb.model.v3.release.record.Distinction; -import javax.ws.rs.Consumes; -import javax.ws.rs.ProcessingException; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.ext.MessageBodyReader; -import javax.ws.rs.ext.Provider; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.ProcessingException; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.ext.MessageBodyReader; +import jakarta.ws.rs.ext.Provider; @Provider @Consumes({ "application/xml", "application/json" }) diff --git a/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V3EducationBodyReader.java b/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V3EducationBodyReader.java index de3c8a3013a..f222944e565 100644 --- a/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V3EducationBodyReader.java +++ b/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V3EducationBodyReader.java @@ -5,19 +5,19 @@ import java.lang.annotation.Annotation; import java.lang.reflect.Type; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; import org.orcid.jaxb.model.v3.release.record.Education; -import javax.ws.rs.Consumes; -import javax.ws.rs.ProcessingException; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.ext.MessageBodyReader; -import javax.ws.rs.ext.Provider; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.ProcessingException; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.ext.MessageBodyReader; +import jakarta.ws.rs.ext.Provider; @Provider @Consumes({ "application/xml", "application/json" }) diff --git a/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V3EmploymentBodyReader.java b/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V3EmploymentBodyReader.java index 659a005ed90..0715dc7be45 100644 --- a/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V3EmploymentBodyReader.java +++ b/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V3EmploymentBodyReader.java @@ -5,19 +5,19 @@ import java.lang.annotation.Annotation; import java.lang.reflect.Type; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; import org.orcid.jaxb.model.v3.release.record.Employment; -import javax.ws.rs.Consumes; -import javax.ws.rs.ProcessingException; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.ext.MessageBodyReader; -import javax.ws.rs.ext.Provider; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.ProcessingException; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.ext.MessageBodyReader; +import jakarta.ws.rs.ext.Provider; @Provider @Consumes({ "application/xml", "application/json" }) diff --git a/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V3FundingBodyReader.java b/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V3FundingBodyReader.java index 2f1788e4d2d..ae3f332cf67 100644 --- a/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V3FundingBodyReader.java +++ b/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V3FundingBodyReader.java @@ -5,19 +5,19 @@ import java.lang.annotation.Annotation; import java.lang.reflect.Type; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; import org.orcid.jaxb.model.v3.release.record.Funding; -import javax.ws.rs.Consumes; -import javax.ws.rs.ProcessingException; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.ext.MessageBodyReader; -import javax.ws.rs.ext.Provider; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.ProcessingException; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.ext.MessageBodyReader; +import jakarta.ws.rs.ext.Provider; @Provider @Consumes({ "application/xml", "application/json" }) diff --git a/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V3InvitedPositionBodyReader.java b/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V3InvitedPositionBodyReader.java index 564e44f2ae7..f7ff5b5af97 100644 --- a/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V3InvitedPositionBodyReader.java +++ b/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V3InvitedPositionBodyReader.java @@ -5,19 +5,19 @@ import java.lang.annotation.Annotation; import java.lang.reflect.Type; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; import org.orcid.jaxb.model.v3.release.record.InvitedPosition; -import javax.ws.rs.Consumes; -import javax.ws.rs.ProcessingException; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.ext.MessageBodyReader; -import javax.ws.rs.ext.Provider; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.ProcessingException; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.ext.MessageBodyReader; +import jakarta.ws.rs.ext.Provider; @Provider @Consumes({ "application/xml", "application/json" }) diff --git a/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V3MembershipBodyReader.java b/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V3MembershipBodyReader.java index fea6f201c3a..73025ff9ef4 100644 --- a/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V3MembershipBodyReader.java +++ b/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V3MembershipBodyReader.java @@ -5,19 +5,19 @@ import java.lang.annotation.Annotation; import java.lang.reflect.Type; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; import org.orcid.jaxb.model.v3.release.record.Membership; -import javax.ws.rs.Consumes; -import javax.ws.rs.ProcessingException; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.ext.MessageBodyReader; -import javax.ws.rs.ext.Provider; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.ProcessingException; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.ext.MessageBodyReader; +import jakarta.ws.rs.ext.Provider; @Provider @Consumes({ "application/xml", "application/json" }) diff --git a/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V3OrcidErrorBodyReader.java b/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V3OrcidErrorBodyReader.java index 0da6007291a..dcab5fba739 100644 --- a/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V3OrcidErrorBodyReader.java +++ b/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V3OrcidErrorBodyReader.java @@ -5,19 +5,19 @@ import java.lang.annotation.Annotation; import java.lang.reflect.Type; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; import org.orcid.jaxb.model.v3.release.error.OrcidError; -import javax.ws.rs.Consumes; -import javax.ws.rs.ProcessingException; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.ext.MessageBodyReader; -import javax.ws.rs.ext.Provider; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.ProcessingException; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.ext.MessageBodyReader; +import jakarta.ws.rs.ext.Provider; @Provider @Consumes({ "application/xml", "application/json" }) diff --git a/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V3PeerReviewBodyReader.java b/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V3PeerReviewBodyReader.java index d7ae791c2a7..c315cc185ef 100644 --- a/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V3PeerReviewBodyReader.java +++ b/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V3PeerReviewBodyReader.java @@ -5,19 +5,19 @@ import java.lang.annotation.Annotation; import java.lang.reflect.Type; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; import org.orcid.jaxb.model.v3.release.record.PeerReview; -import javax.ws.rs.Consumes; -import javax.ws.rs.ProcessingException; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.ext.MessageBodyReader; -import javax.ws.rs.ext.Provider; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.ProcessingException; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.ext.MessageBodyReader; +import jakarta.ws.rs.ext.Provider; @Provider @Consumes({ "application/xml", "application/json" }) diff --git a/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V3QualificationBodyReader.java b/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V3QualificationBodyReader.java index 0017a4131b0..7eccef1ea56 100644 --- a/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V3QualificationBodyReader.java +++ b/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V3QualificationBodyReader.java @@ -5,19 +5,19 @@ import java.lang.annotation.Annotation; import java.lang.reflect.Type; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; import org.orcid.jaxb.model.v3.release.record.Qualification; -import javax.ws.rs.Consumes; -import javax.ws.rs.ProcessingException; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.ext.MessageBodyReader; -import javax.ws.rs.ext.Provider; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.ProcessingException; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.ext.MessageBodyReader; +import jakarta.ws.rs.ext.Provider; @Provider @Consumes({ "application/xml", "application/json" }) diff --git a/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V3RecordBodyReader.java b/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V3RecordBodyReader.java index d8e00f4604b..62f2bc04c11 100644 --- a/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V3RecordBodyReader.java +++ b/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V3RecordBodyReader.java @@ -5,19 +5,19 @@ import java.lang.annotation.Annotation; import java.lang.reflect.Type; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; import org.orcid.jaxb.model.v3.release.record.Record; -import javax.ws.rs.Consumes; -import javax.ws.rs.ProcessingException; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.ext.MessageBodyReader; -import javax.ws.rs.ext.Provider; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.ProcessingException; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.ext.MessageBodyReader; +import jakarta.ws.rs.ext.Provider; @Provider @Consumes({ "application/xml", "application/json" }) diff --git a/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V3ResearchResourceBodyReader.java b/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V3ResearchResourceBodyReader.java index 45a26619736..2e8cc00f029 100644 --- a/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V3ResearchResourceBodyReader.java +++ b/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V3ResearchResourceBodyReader.java @@ -5,19 +5,19 @@ import java.lang.annotation.Annotation; import java.lang.reflect.Type; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; import org.orcid.jaxb.model.v3.release.record.ResearchResource; -import javax.ws.rs.Consumes; -import javax.ws.rs.ProcessingException; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.ext.MessageBodyReader; -import javax.ws.rs.ext.Provider; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.ProcessingException; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.ext.MessageBodyReader; +import jakarta.ws.rs.ext.Provider; @Provider @Consumes({ "application/xml", "application/json" }) diff --git a/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V3ResearchResourcesBodyReader.java b/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V3ResearchResourcesBodyReader.java index c30500d1d9d..32c866dd2c7 100644 --- a/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V3ResearchResourcesBodyReader.java +++ b/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V3ResearchResourcesBodyReader.java @@ -5,20 +5,20 @@ import java.lang.annotation.Annotation; import java.lang.reflect.Type; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; import org.orcid.jaxb.model.v3.release.record.Record; import org.orcid.jaxb.model.v3.release.record.summary.ResearchResources; -import javax.ws.rs.Consumes; -import javax.ws.rs.ProcessingException; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.ext.MessageBodyReader; -import javax.ws.rs.ext.Provider; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.ProcessingException; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.ext.MessageBodyReader; +import jakarta.ws.rs.ext.Provider; @Provider @Consumes({"application/xml", "application/json"}) diff --git a/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V3ServiceBodyReader.java b/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V3ServiceBodyReader.java index 0d1a349d690..9c1c8330efa 100644 --- a/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V3ServiceBodyReader.java +++ b/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V3ServiceBodyReader.java @@ -5,19 +5,19 @@ import java.lang.annotation.Annotation; import java.lang.reflect.Type; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; import org.orcid.jaxb.model.v3.release.record.Service; -import javax.ws.rs.Consumes; -import javax.ws.rs.ProcessingException; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.ext.MessageBodyReader; -import javax.ws.rs.ext.Provider; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.ProcessingException; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.ext.MessageBodyReader; +import jakarta.ws.rs.ext.Provider; @Provider @Consumes({ "application/xml", "application/json" }) diff --git a/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V3WorkBodyReader.java b/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V3WorkBodyReader.java index 22ddb5fecd8..6f828e6254c 100644 --- a/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V3WorkBodyReader.java +++ b/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/V3WorkBodyReader.java @@ -5,19 +5,19 @@ import java.lang.annotation.Annotation; import java.lang.reflect.Type; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; import org.orcid.jaxb.model.v3.release.record.Work; -import javax.ws.rs.Consumes; -import javax.ws.rs.ProcessingException; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.ext.MessageBodyReader; -import javax.ws.rs.ext.Provider; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.ProcessingException; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.ext.MessageBodyReader; +import jakarta.ws.rs.ext.Provider; @Provider @Consumes({ "application/xml", "application/json" }) diff --git a/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/W3CDocumentBodyReader.java b/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/W3CDocumentBodyReader.java index ca9e9c112c0..c5d36a32a6a 100644 --- a/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/W3CDocumentBodyReader.java +++ b/orcid-utils/src/main/java/org/orcid/utils/jersey/unmarshaller/W3CDocumentBodyReader.java @@ -12,13 +12,13 @@ import org.w3c.dom.Document; import org.xml.sax.SAXException; -import javax.ws.rs.Consumes; -import javax.ws.rs.ProcessingException; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.ext.MessageBodyReader; -import javax.ws.rs.ext.Provider; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.ProcessingException; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.ext.MessageBodyReader; +import jakarta.ws.rs.ext.Provider; @Provider @Consumes({ "application/xml", "application/json", "application/samlmetadata+xml" }) diff --git a/orcid-utils/src/main/java/org/orcid/utils/panoply/PanoplyRedshiftClient.java b/orcid-utils/src/main/java/org/orcid/utils/panoply/PanoplyRedshiftClient.java index 079482d53ea..d03dd142ec0 100644 --- a/orcid-utils/src/main/java/org/orcid/utils/panoply/PanoplyRedshiftClient.java +++ b/orcid-utils/src/main/java/org/orcid/utils/panoply/PanoplyRedshiftClient.java @@ -10,7 +10,7 @@ import java.util.Date; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/orcid-web/pom.xml b/orcid-web/pom.xml index 99f63636414..cc8c91ea06b 100644 --- a/orcid-web/pom.xml +++ b/orcid-web/pom.xml @@ -131,13 +131,25 @@ 3.0.12 - - org.hibernate - hibernate-agroal - - - javax.validation - validation-api + + org.hibernate.orm + hibernate-core + + + org.hibernate.orm + hibernate-agroal + + + org.hibernate.orm + hibernate-c3p0 + + + org.hibernate.validator + hibernate-validator + + + jakarta.validation + jakarta.validation-api org.freemarker diff --git a/orcid-web/src/main/java/org/orcid/frontend/cli/AutoLockSpamRecords.java b/orcid-web/src/main/java/org/orcid/frontend/cli/AutoLockSpamRecords.java index 45edfe6e6d4..6c984f863c8 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/cli/AutoLockSpamRecords.java +++ b/orcid-web/src/main/java/org/orcid/frontend/cli/AutoLockSpamRecords.java @@ -7,7 +7,7 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.kohsuke.args4j.CmdLineException; import org.kohsuke.args4j.CmdLineParser; diff --git a/orcid-web/src/main/java/org/orcid/frontend/cli/SendWelcomeEmails.java b/orcid-web/src/main/java/org/orcid/frontend/cli/SendWelcomeEmails.java index 2c95ad0241b..78283fe974c 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/cli/SendWelcomeEmails.java +++ b/orcid-web/src/main/java/org/orcid/frontend/cli/SendWelcomeEmails.java @@ -4,7 +4,7 @@ import java.text.SimpleDateFormat; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.commons.lang3.time.DurationFormatUtils; import org.kohsuke.args4j.CmdLineParser; diff --git a/orcid-web/src/main/java/org/orcid/frontend/email/RecordEmailSender.java b/orcid-web/src/main/java/org/orcid/frontend/email/RecordEmailSender.java index aac5e114f6c..17b0d5f26b0 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/email/RecordEmailSender.java +++ b/orcid-web/src/main/java/org/orcid/frontend/email/RecordEmailSender.java @@ -4,7 +4,7 @@ import java.util.Locale; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.commons.lang3.LocaleUtils; import org.orcid.core.constants.EmailConstants; diff --git a/orcid-web/src/main/java/org/orcid/frontend/oauth2/RevokeController.java b/orcid-web/src/main/java/org/orcid/frontend/oauth2/RevokeController.java index 0067077077e..ce6a98f0c2d 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/oauth2/RevokeController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/oauth2/RevokeController.java @@ -1,9 +1,9 @@ package org.orcid.frontend.oauth2; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; import org.apache.commons.lang.StringUtils; import org.orcid.api.common.T2OrcidApiService; diff --git a/orcid-web/src/main/java/org/orcid/frontend/salesforce/adapter/SalesForceAdapter.java b/orcid-web/src/main/java/org/orcid/frontend/salesforce/adapter/SalesForceAdapter.java index eaab761375f..afd12c4ff38 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/salesforce/adapter/SalesForceAdapter.java +++ b/orcid-web/src/main/java/org/orcid/frontend/salesforce/adapter/SalesForceAdapter.java @@ -4,7 +4,7 @@ import java.util.List; import java.util.stream.Collectors; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.codehaus.jettison.json.JSONArray; import org.codehaus.jettison.json.JSONException; diff --git a/orcid-web/src/main/java/org/orcid/frontend/salesforce/manager/SalesforceManagerImpl.java b/orcid-web/src/main/java/org/orcid/frontend/salesforce/manager/SalesforceManagerImpl.java index d63dc2ea636..2fc86278bc4 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/salesforce/manager/SalesforceManagerImpl.java +++ b/orcid-web/src/main/java/org/orcid/frontend/salesforce/manager/SalesforceManagerImpl.java @@ -5,7 +5,7 @@ import java.util.List; import java.util.stream.Collectors; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.codehaus.jettison.json.JSONArray; import org.codehaus.jettison.json.JSONException; diff --git a/orcid-web/src/main/java/org/orcid/frontend/spring/AjaxAuthenticationSuccessHandlerBase.java b/orcid-web/src/main/java/org/orcid/frontend/spring/AjaxAuthenticationSuccessHandlerBase.java index da7bc9b403f..27b38a447c5 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/spring/AjaxAuthenticationSuccessHandlerBase.java +++ b/orcid-web/src/main/java/org/orcid/frontend/spring/AjaxAuthenticationSuccessHandlerBase.java @@ -1,6 +1,6 @@ package org.orcid.frontend.spring; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; diff --git a/orcid-web/src/main/java/org/orcid/frontend/spring/OrcidAccessDeniedHandler.java b/orcid-web/src/main/java/org/orcid/frontend/spring/OrcidAccessDeniedHandler.java index ee153d2727d..d58acb110ac 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/spring/OrcidAccessDeniedHandler.java +++ b/orcid-web/src/main/java/org/orcid/frontend/spring/OrcidAccessDeniedHandler.java @@ -2,7 +2,7 @@ import java.io.IOException; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; diff --git a/orcid-web/src/main/java/org/orcid/frontend/spring/OrcidAuthenticationProvider.java b/orcid-web/src/main/java/org/orcid/frontend/spring/OrcidAuthenticationProvider.java index 7af8b615e7f..556bbf9e251 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/spring/OrcidAuthenticationProvider.java +++ b/orcid-web/src/main/java/org/orcid/frontend/spring/OrcidAuthenticationProvider.java @@ -3,7 +3,7 @@ import java.time.Instant; import java.util.Date; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.exception.ExceptionUtils; diff --git a/orcid-web/src/main/java/org/orcid/frontend/spring/ShibbolethAjaxAuthenticationSuccessHandler.java b/orcid-web/src/main/java/org/orcid/frontend/spring/ShibbolethAjaxAuthenticationSuccessHandler.java index 85860479711..7916370a6fb 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/spring/ShibbolethAjaxAuthenticationSuccessHandler.java +++ b/orcid-web/src/main/java/org/orcid/frontend/spring/ShibbolethAjaxAuthenticationSuccessHandler.java @@ -6,7 +6,7 @@ import java.util.HashMap; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; diff --git a/orcid-web/src/main/java/org/orcid/frontend/spring/SocialAjaxAuthenticationSuccessHandler.java b/orcid-web/src/main/java/org/orcid/frontend/spring/SocialAjaxAuthenticationSuccessHandler.java index 62d6605a7c6..a8a980739fc 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/spring/SocialAjaxAuthenticationSuccessHandler.java +++ b/orcid-web/src/main/java/org/orcid/frontend/spring/SocialAjaxAuthenticationSuccessHandler.java @@ -3,7 +3,7 @@ import java.io.IOException; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; diff --git a/orcid-web/src/main/java/org/orcid/frontend/spring/session/redis/OrcidRedisHttpSessionConfiguration.java b/orcid-web/src/main/java/org/orcid/frontend/spring/session/redis/OrcidRedisHttpSessionConfiguration.java index 185a6509cec..497e91ec7ba 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/spring/session/redis/OrcidRedisHttpSessionConfiguration.java +++ b/orcid-web/src/main/java/org/orcid/frontend/spring/session/redis/OrcidRedisHttpSessionConfiguration.java @@ -48,7 +48,7 @@ import org.springframework.util.StringUtils; import org.springframework.util.StringValueResolver; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import java.time.Duration; import java.util.*; import java.util.concurrent.Executor; diff --git a/orcid-web/src/main/java/org/orcid/frontend/spring/web/social/config/SocialSignInUtils.java b/orcid-web/src/main/java/org/orcid/frontend/spring/web/social/config/SocialSignInUtils.java index 3c93a77cdd0..06d9b68b4f2 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/spring/web/social/config/SocialSignInUtils.java +++ b/orcid-web/src/main/java/org/orcid/frontend/spring/web/social/config/SocialSignInUtils.java @@ -10,7 +10,7 @@ import java.nio.charset.StandardCharsets; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/AdminController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/AdminController.java index 60356f873c9..c218d42555f 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/AdminController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/AdminController.java @@ -13,12 +13,12 @@ import java.util.StringTokenizer; import java.util.stream.Collectors; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.NoResultException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; -import javax.ws.rs.Produces; -import javax.ws.rs.core.MediaType; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.MediaType; import org.apache.commons.codec.binary.Base64; import org.apache.commons.lang3.StringUtils; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/AffiliationsController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/AffiliationsController.java index 6f6e2c12a38..c95b9acf5ff 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/AffiliationsController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/AffiliationsController.java @@ -6,7 +6,7 @@ import java.util.Map; import java.util.stream.IntStream; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; import org.orcid.api.common.util.v3.ActivityUtils; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/BaseController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/BaseController.java index 7875fa079d5..6273a4bf6d0 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/BaseController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/BaseController.java @@ -18,10 +18,10 @@ import java.util.TreeMap; import java.util.stream.Collectors; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; -import javax.ws.rs.core.UriBuilder; +import jakarta.ws.rs.core.UriBuilder; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang3.StringEscapeUtils; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/BaseWorkspaceController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/BaseWorkspaceController.java index 4afca8e6f40..10d9553ab6f 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/BaseWorkspaceController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/BaseWorkspaceController.java @@ -10,7 +10,7 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpSession; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/CacheClearController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/CacheClearController.java index 0bf34f8e6c0..6aef3068bc4 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/CacheClearController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/CacheClearController.java @@ -1,6 +1,6 @@ package org.orcid.frontend.web.controllers; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.manager.ProfileEntityCacheManager; import org.orcid.pojo.ajaxForm.Errors; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/ClaimController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/ClaimController.java index 5c8c087d05d..daed9a7c6b3 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/ClaimController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/ClaimController.java @@ -5,7 +5,7 @@ import java.util.List; import java.util.Locale; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.NoResultException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/ClientsController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/ClientsController.java index 618b6fdd669..e278085bf43 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/ClientsController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/ClientsController.java @@ -8,9 +8,9 @@ import java.util.Map; import java.util.Set; -import javax.annotation.Resource; -import javax.ws.rs.Produces; -import javax.ws.rs.core.MediaType; +import jakarta.annotation.Resource; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.MediaType; import org.orcid.core.exception.OrcidClientGroupManagementException; import org.orcid.core.manager.ProfileEntityCacheManager; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/CsrfController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/CsrfController.java index e598b68af0a..ba5404f5c4d 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/CsrfController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/CsrfController.java @@ -3,8 +3,8 @@ import java.util.Collections; import java.util.Map; -import javax.ws.rs.Produces; -import javax.ws.rs.core.MediaType; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.MediaType; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/DeveloperToolsController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/DeveloperToolsController.java index 7b487ebc0c1..2a20740e899 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/DeveloperToolsController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/DeveloperToolsController.java @@ -5,7 +5,7 @@ import java.util.List; import java.util.Set; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; import org.orcid.core.manager.ProfileEntityCacheManager; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/EmailDomainController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/EmailDomainController.java index aa7d8ee7fb9..9cc9e46d4d6 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/EmailDomainController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/EmailDomainController.java @@ -2,8 +2,8 @@ import java.util.List; -import javax.annotation.Resource; -import javax.ws.rs.core.MediaType; +import jakarta.annotation.Resource; +import jakarta.ws.rs.core.MediaType; import org.orcid.core.common.manager.EmailDomainManager; import org.orcid.core.solr.OrcidSolrOrgsClient; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/FindMyStuffController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/FindMyStuffController.java index 880b2a57212..841fd6ccc20 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/FindMyStuffController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/FindMyStuffController.java @@ -2,7 +2,7 @@ import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.manager.v3.FindMyStuffManager; import org.orcid.core.manager.v3.NotificationManager; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/FundingsController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/FundingsController.java index f5fd8ff764b..6f38cb68a8b 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/FundingsController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/FundingsController.java @@ -15,7 +15,7 @@ import java.util.stream.Collectors; import java.util.stream.Stream; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; import org.apache.commons.lang3.StringUtils; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/GetMyDataController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/GetMyDataController.java index 898cef71b5e..5620cb421c8 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/GetMyDataController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/GetMyDataController.java @@ -22,12 +22,12 @@ import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletResponse; -import javax.ws.rs.core.MediaType; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Marshaller; +import jakarta.ws.rs.core.MediaType; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Marshaller; import org.apache.commons.collections4.ListUtils; import org.orcid.core.manager.WorkEntityCacheManager; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/HomeController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/HomeController.java index 47a800e27fb..dbe6630fa32 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/HomeController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/HomeController.java @@ -7,12 +7,12 @@ import java.util.Map; import java.util.ResourceBundle; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.servlet.http.Cookie; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; -import javax.ws.rs.Produces; -import javax.ws.rs.core.MediaType; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.MediaType; import org.apache.commons.io.IOUtils; import org.apache.commons.lang.StringUtils; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/LoginController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/LoginController.java index fed7beaedb9..784ee9cc0d8 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/LoginController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/LoginController.java @@ -2,7 +2,7 @@ import java.io.UnsupportedEncodingException; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/ManageDelegatorsController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/ManageDelegatorsController.java index 1f676f4deec..695e4969cc2 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/ManageDelegatorsController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/ManageDelegatorsController.java @@ -6,7 +6,7 @@ import java.util.Locale; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.manager.SourceNameCacheManager; import org.orcid.core.manager.v3.SourceManager; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/ManageMembersController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/ManageMembersController.java index 4bf6b328f3c..3507deb8769 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/ManageMembersController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/ManageMembersController.java @@ -6,7 +6,7 @@ import java.util.Map; import java.util.TreeMap; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.exception.ClientAlreadyActiveException; import org.orcid.core.exception.ClientAlreadyDeactivatedException; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/ManageProfileController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/ManageProfileController.java index 3cc7dc117d8..61883a61a80 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/ManageProfileController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/ManageProfileController.java @@ -9,7 +9,7 @@ import java.util.Map; import java.util.stream.Collectors; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.NoResultException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/MembersListController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/MembersListController.java index 35c2bb11f4a..cffc2201299 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/MembersListController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/MembersListController.java @@ -4,7 +4,7 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.salesforce.model.CommunityType; import org.orcid.frontend.salesforce.manager.SalesforceManager; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/NotificationController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/NotificationController.java index 94f0a6e22d0..ce760730900 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/NotificationController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/NotificationController.java @@ -4,7 +4,7 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.codec.binary.Base64; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/OauthGenericCallsController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/OauthGenericCallsController.java index bc6ed9fe2ad..57370404f8a 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/OauthGenericCallsController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/OauthGenericCallsController.java @@ -5,12 +5,12 @@ import java.util.Map; import java.util.stream.Collectors; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.UriInfo; +import jakarta.ws.rs.core.Context; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.UriInfo; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/OpenIDController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/OpenIDController.java index 88e0919a006..7af19076952 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/OpenIDController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/OpenIDController.java @@ -7,7 +7,7 @@ import java.util.regex.Pattern; import java.util.stream.Collectors; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; import com.fasterxml.jackson.annotation.JsonInclude; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/OrgController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/OrgController.java index 3e4ddb345dc..9c9778db8a8 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/OrgController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/OrgController.java @@ -1,6 +1,6 @@ package org.orcid.frontend.web.controllers; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.manager.OrgDisambiguatedManager; import org.orcid.core.manager.v3.OrgManager; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/PIDController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/PIDController.java index 04edcdd27fc..1ee7c88c412 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/PIDController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/PIDController.java @@ -1,6 +1,6 @@ package org.orcid.frontend.web.controllers; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.commons.lang3.StringUtils; import org.orcid.core.utils.v3.identifiers.PIDNormalizationService; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/PasswordResetController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/PasswordResetController.java index 37ca3b309a2..d1bc8b935a6 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/PasswordResetController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/PasswordResetController.java @@ -10,11 +10,11 @@ import java.util.Locale; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.NoResultException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; -import javax.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MediaType; import org.apache.commons.codec.binary.Base64; import org.jasypt.exceptions.EncryptionOperationNotPossibleException; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/PeerReviewsController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/PeerReviewsController.java index fd9c7576075..d4369199026 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/PeerReviewsController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/PeerReviewsController.java @@ -7,7 +7,7 @@ import java.util.Map; import java.util.Optional; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; import org.orcid.core.exception.GroupIdRecordNotFoundException; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/PublicProfileController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/PublicProfileController.java index 5ef8ccbf161..552c1bffcd6 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/PublicProfileController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/PublicProfileController.java @@ -10,7 +10,7 @@ import java.util.Optional; import java.util.stream.IntStream; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/PublicRecordApiController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/PublicRecordApiController.java index c62b8c210a8..fc99281ad0a 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/PublicRecordApiController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/PublicRecordApiController.java @@ -1,6 +1,6 @@ package org.orcid.frontend.web.controllers; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.api.common.util.v3.PublicRecordUtils; import org.orcid.core.api.OrcidApiConstants; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/PublicRecordApiExceptionHandler.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/PublicRecordApiExceptionHandler.java index 997cc273b2d..ce470145d69 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/PublicRecordApiExceptionHandler.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/PublicRecordApiExceptionHandler.java @@ -2,9 +2,9 @@ import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import javax.servlet.http.HttpServletRequest; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.core.Response; import org.orcid.core.exception.OrcidCoreExceptionMapper; import org.orcid.core.exception.OrcidDeprecatedException; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/PublicRecordController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/PublicRecordController.java index 9de6f1207fe..b3b45350341 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/PublicRecordController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/PublicRecordController.java @@ -5,7 +5,7 @@ import java.util.Map; import java.util.stream.Collectors; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.common.manager.EventManager; import org.orcid.core.common.manager.SummaryManager; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/RecordCorrectionsController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/RecordCorrectionsController.java index 386c11d87f9..e713a8fd241 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/RecordCorrectionsController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/RecordCorrectionsController.java @@ -3,7 +3,7 @@ import java.util.Collections; import java.util.Optional; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.manager.v3.OrcidSecurityManager; import org.orcid.core.manager.read_only.RecordCorrectionsManagerReadOnly; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/RegistrationController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/RegistrationController.java index f0ae01ccf40..76f39429ae0 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/RegistrationController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/RegistrationController.java @@ -14,7 +14,7 @@ import java.util.regex.Pattern; import java.util.stream.Collectors; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/ResearchResourcesController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/ResearchResourcesController.java index ca50e545869..7d1a4d7690a 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/ResearchResourcesController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/ResearchResourcesController.java @@ -2,7 +2,7 @@ import java.util.ArrayList; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.manager.v3.ResearchResourceManager; import org.orcid.frontend.web.pagination.Page; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/ShibbolethController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/ShibbolethController.java index f4b02c97c72..7ed5d9424d0 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/ShibbolethController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/ShibbolethController.java @@ -6,7 +6,7 @@ import java.util.Date; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/SocialController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/SocialController.java index 199b2e2c982..8c5cd9f96be 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/SocialController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/SocialController.java @@ -3,7 +3,7 @@ import java.util.ArrayList; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/SpamController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/SpamController.java index 7625b1d5799..6614009292b 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/SpamController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/SpamController.java @@ -1,6 +1,6 @@ package org.orcid.frontend.web.controllers; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.manager.v3.SpamManager; import org.orcid.pojo.Spam; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/StatusController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/StatusController.java index 8c92a6ecd65..817ed8e25bc 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/StatusController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/StatusController.java @@ -2,10 +2,10 @@ import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; -import javax.ws.rs.Produces; -import javax.ws.rs.core.MediaType; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.MediaType; import org.orcid.core.locale.LocaleManager; import org.orcid.core.manager.StatusManager; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/TwoFactorAuthenticationController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/TwoFactorAuthenticationController.java index 4de73de01ac..22bf65877f3 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/TwoFactorAuthenticationController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/TwoFactorAuthenticationController.java @@ -1,6 +1,6 @@ package org.orcid.frontend.web.controllers; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/UnsubscribeController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/UnsubscribeController.java index b04934ae650..6a4713b397b 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/UnsubscribeController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/UnsubscribeController.java @@ -4,7 +4,7 @@ import java.util.HashMap; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.commons.codec.binary.Base64; import org.orcid.core.common.manager.EmailFrequencyManager; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/WorksController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/WorksController.java index 3e503cc75e6..83843f9af0c 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/WorksController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/WorksController.java @@ -38,7 +38,7 @@ import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; import java.util.*; import java.util.regex.Pattern; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/WorkspaceController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/WorkspaceController.java index af20d00e845..7d56e249a83 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/WorkspaceController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/WorkspaceController.java @@ -14,7 +14,7 @@ import java.util.TreeMap; import java.util.stream.Collectors; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/filter/OrcidSwitchUserFilter.java b/orcid-web/src/main/java/org/orcid/frontend/web/filter/OrcidSwitchUserFilter.java index bf850d0892e..df3cab3ce3d 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/filter/OrcidSwitchUserFilter.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/filter/OrcidSwitchUserFilter.java @@ -4,7 +4,7 @@ import java.util.Collection; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; import org.orcid.core.locale.LocaleManager; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/pagination/ResearchResourcePaginator.java b/orcid-web/src/main/java/org/orcid/frontend/web/pagination/ResearchResourcePaginator.java index c23ecc7c6bb..51bab8951ba 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/pagination/ResearchResourcePaginator.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/pagination/ResearchResourcePaginator.java @@ -7,7 +7,7 @@ import org.orcid.jaxb.model.v3.release.record.summary.ResearchResources; import org.orcid.pojo.ResearchResourceGroupPojo; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/pagination/WorksPaginator.java b/orcid-web/src/main/java/org/orcid/frontend/web/pagination/WorksPaginator.java index a0e2892bb94..c8e6df0ef91 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/pagination/WorksPaginator.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/pagination/WorksPaginator.java @@ -7,7 +7,7 @@ import java.util.stream.Collectors; import java.util.stream.Stream; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.manager.v3.WorksCacheManager; import org.orcid.core.manager.v3.WorksExtendedCacheManager; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/util/ThirdPartyLinkManager.java b/orcid-web/src/main/java/org/orcid/frontend/web/util/ThirdPartyLinkManager.java index c62e52ce608..6e365957ebb 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/util/ThirdPartyLinkManager.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/util/ThirdPartyLinkManager.java @@ -4,7 +4,7 @@ import java.util.List; import java.util.Locale; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.locale.LocaleManager; import org.orcid.core.manager.ClientDetailsEntityCacheManager; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/util/UtilEndpoints.java b/orcid-web/src/main/java/org/orcid/frontend/web/util/UtilEndpoints.java index 5126ba1a6de..f97094c2c62 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/util/UtilEndpoints.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/util/UtilEndpoints.java @@ -1,6 +1,6 @@ package org.orcid.frontend.web.util; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.orcid.core.manager.PasswordGenerationManager; import org.springframework.stereotype.Controller; diff --git a/orcid-web/src/test/java/org/orcid/frontend/email/RecordEmailSenderTest.java b/orcid-web/src/test/java/org/orcid/frontend/email/RecordEmailSenderTest.java index 71fd7f37513..9c76e0f0f9f 100644 --- a/orcid-web/src/test/java/org/orcid/frontend/email/RecordEmailSenderTest.java +++ b/orcid-web/src/test/java/org/orcid/frontend/email/RecordEmailSenderTest.java @@ -13,8 +13,8 @@ import java.util.ArrayList; import java.util.List; -import javax.annotation.Resource; -import javax.xml.bind.JAXBException; +import jakarta.annotation.Resource; +import jakarta.xml.bind.JAXBException; import org.apache.commons.lang3.LocaleUtils; import org.junit.Before; diff --git a/orcid-web/src/test/java/org/orcid/frontend/oauth2/RevokeControllerTest.java b/orcid-web/src/test/java/org/orcid/frontend/oauth2/RevokeControllerTest.java index 96a808b23b9..e2bbc593b48 100644 --- a/orcid-web/src/test/java/org/orcid/frontend/oauth2/RevokeControllerTest.java +++ b/orcid-web/src/test/java/org/orcid/frontend/oauth2/RevokeControllerTest.java @@ -8,7 +8,7 @@ import static org.mockito.Mockito.when; import jakarta.servlet.http.HttpServletRequest; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.core.Response; import org.junit.Before; import org.junit.Test; diff --git a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/AdminControllerLegacyTest.java b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/AdminControllerLegacyTest.java index 0440a52131e..a7963d916ae 100644 --- a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/AdminControllerLegacyTest.java +++ b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/AdminControllerLegacyTest.java @@ -56,7 +56,7 @@ import org.springframework.test.context.web.WebAppConfiguration; import org.springframework.test.util.ReflectionTestUtils; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpSession; diff --git a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/ClaimControllerTest.java b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/ClaimControllerTest.java index 181b817d24b..38f79aafaf9 100644 --- a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/ClaimControllerTest.java +++ b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/ClaimControllerTest.java @@ -11,7 +11,7 @@ import java.io.UnsupportedEncodingException; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; diff --git a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/ClientsControllerTest.java b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/ClientsControllerTest.java index 17772c8f7b7..12dfdc15d18 100644 --- a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/ClientsControllerTest.java +++ b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/ClientsControllerTest.java @@ -13,7 +13,7 @@ import java.util.Collections; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.apache.commons.lang3.RandomStringUtils; import org.junit.AfterClass; diff --git a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/DeveloperToolsControllerTest.java b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/DeveloperToolsControllerTest.java index af0db26c99f..f70c5bfa82e 100644 --- a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/DeveloperToolsControllerTest.java +++ b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/DeveloperToolsControllerTest.java @@ -15,7 +15,7 @@ import java.util.List; import java.util.Set; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.After; import org.junit.Before; diff --git a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/FundingsControllerTest.java b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/FundingsControllerTest.java index d681654d6ed..5aa643acafc 100644 --- a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/FundingsControllerTest.java +++ b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/FundingsControllerTest.java @@ -14,7 +14,7 @@ import java.util.Locale; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpSession; diff --git a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/GetMyDataControllerTest.java b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/GetMyDataControllerTest.java index 21b38ceb697..0514fc743f3 100644 --- a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/GetMyDataControllerTest.java +++ b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/GetMyDataControllerTest.java @@ -34,9 +34,9 @@ import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; import org.junit.Before; import org.junit.Test; diff --git a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/ManageMembersControllerTest.java b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/ManageMembersControllerTest.java index 4b2275aa7ca..a85474bc32c 100644 --- a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/ManageMembersControllerTest.java +++ b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/ManageMembersControllerTest.java @@ -15,8 +15,8 @@ import java.util.Arrays; import java.util.List; -import javax.annotation.Resource; -import javax.transaction.Transactional; +import jakarta.annotation.Resource; +import jakarta.transaction.Transactional; import org.junit.After; import org.junit.AfterClass; diff --git a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/OrgControllerTest.java b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/OrgControllerTest.java index eb95ede947f..95b6ae1087c 100644 --- a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/OrgControllerTest.java +++ b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/OrgControllerTest.java @@ -5,7 +5,7 @@ import java.util.Arrays; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; import org.junit.AfterClass; diff --git a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/PIDControllerTest.java b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/PIDControllerTest.java index f515d1aab1c..977514cb926 100644 --- a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/PIDControllerTest.java +++ b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/PIDControllerTest.java @@ -2,7 +2,7 @@ import static org.junit.Assert.assertEquals; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/PasswordResetControllerTest.java b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/PasswordResetControllerTest.java index a33e324a9e9..48032bdc398 100644 --- a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/PasswordResetControllerTest.java +++ b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/PasswordResetControllerTest.java @@ -14,7 +14,7 @@ import java.util.Arrays; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import javax.xml.datatype.DatatypeConfigurationException; diff --git a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/PeerReviewsControllerTest.java b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/PeerReviewsControllerTest.java index 73346027e63..bba4f60ef4f 100644 --- a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/PeerReviewsControllerTest.java +++ b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/PeerReviewsControllerTest.java @@ -8,7 +8,7 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; import org.junit.AfterClass; diff --git a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/PublicProfileControllerTest.java b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/PublicProfileControllerTest.java index e7c453c0cba..d7799f5a406 100644 --- a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/PublicProfileControllerTest.java +++ b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/PublicProfileControllerTest.java @@ -13,7 +13,7 @@ import java.util.List; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; diff --git a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/PublicRecordControllerLegacyTest.java b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/PublicRecordControllerLegacyTest.java index 4d2faaaab11..0d790858395 100644 --- a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/PublicRecordControllerLegacyTest.java +++ b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/PublicRecordControllerLegacyTest.java @@ -18,7 +18,7 @@ import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.web.WebAppConfiguration; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.util.Arrays; diff --git a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/PublicRecordControllerTest.java b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/PublicRecordControllerTest.java index 082001d8afc..00a96982a46 100644 --- a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/PublicRecordControllerTest.java +++ b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/PublicRecordControllerTest.java @@ -20,7 +20,7 @@ import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.mock.web.MockHttpSession; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.util.Collections; diff --git a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/RecordCorrectionsControllerTest.java b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/RecordCorrectionsControllerTest.java index 7a0c0f2b38d..764eb2c46f0 100644 --- a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/RecordCorrectionsControllerTest.java +++ b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/RecordCorrectionsControllerTest.java @@ -10,7 +10,7 @@ import java.util.Arrays; import java.util.Optional; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.AfterClass; import org.junit.Before; diff --git a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/RegistrationControllerTest.java b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/RegistrationControllerTest.java index 3382ea32e50..0e17e6de2bd 100644 --- a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/RegistrationControllerTest.java +++ b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/RegistrationControllerTest.java @@ -18,7 +18,7 @@ import java.util.List; import java.util.Locale; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpSession; diff --git a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/ResearchResourceControllerTest.java b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/ResearchResourceControllerTest.java index 3ad4d225900..f43297ff8ff 100644 --- a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/ResearchResourceControllerTest.java +++ b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/ResearchResourceControllerTest.java @@ -10,7 +10,7 @@ import java.util.Arrays; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.persistence.NoResultException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpSession; diff --git a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/ShibbolethControllerTest.java b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/ShibbolethControllerTest.java index 9f92c00af78..05bd51d84f2 100644 --- a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/ShibbolethControllerTest.java +++ b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/ShibbolethControllerTest.java @@ -9,7 +9,7 @@ import java.util.Locale; import java.util.Map; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpSession; diff --git a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/SpamControllerTest.java b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/SpamControllerTest.java index 44167706a8d..c8346485ea5 100644 --- a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/SpamControllerTest.java +++ b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/SpamControllerTest.java @@ -9,7 +9,7 @@ import java.util.Arrays; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpSession; diff --git a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/WorksControllerTest.java b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/WorksControllerTest.java index 0d7f79eae8b..7fea9f97f5d 100644 --- a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/WorksControllerTest.java +++ b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/WorksControllerTest.java @@ -13,7 +13,7 @@ import java.util.Arrays; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpSession; diff --git a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/WorkspaceControllerTest.java b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/WorkspaceControllerTest.java index 6d5eb037589..d03c8de3b21 100644 --- a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/WorkspaceControllerTest.java +++ b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/WorkspaceControllerTest.java @@ -5,7 +5,7 @@ import java.util.ArrayList; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/orcid-web/src/test/java/org/orcid/frontend/web/forms/validate/AbstractConstraintValidator.java b/orcid-web/src/test/java/org/orcid/frontend/web/forms/validate/AbstractConstraintValidator.java index 11a85698c69..13e8c9794f5 100644 --- a/orcid-web/src/test/java/org/orcid/frontend/web/forms/validate/AbstractConstraintValidator.java +++ b/orcid-web/src/test/java/org/orcid/frontend/web/forms/validate/AbstractConstraintValidator.java @@ -8,7 +8,7 @@ import java.util.Map; import java.util.Set; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import javax.validation.ConstraintViolation; import javax.validation.Validator; diff --git a/orcid-web/src/test/java/org/orcid/frontend/web/security/AuthenticationManagerTest.java b/orcid-web/src/test/java/org/orcid/frontend/web/security/AuthenticationManagerTest.java index 8898943f3d7..6005c722c1d 100644 --- a/orcid-web/src/test/java/org/orcid/frontend/web/security/AuthenticationManagerTest.java +++ b/orcid-web/src/test/java/org/orcid/frontend/web/security/AuthenticationManagerTest.java @@ -6,7 +6,7 @@ import java.util.Arrays; import java.util.Collection; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.AfterClass; import org.junit.Before; diff --git a/orcid-web/src/test/java/org/orcid/frontend/web/util/BaseControllerTest.java b/orcid-web/src/test/java/org/orcid/frontend/web/util/BaseControllerTest.java index 84267bec032..57859f04575 100644 --- a/orcid-web/src/test/java/org/orcid/frontend/web/util/BaseControllerTest.java +++ b/orcid-web/src/test/java/org/orcid/frontend/web/util/BaseControllerTest.java @@ -3,7 +3,7 @@ import java.util.Arrays; import java.util.List; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.junit.AfterClass; import org.junit.Before; diff --git a/pom.xml b/pom.xml index 113df2398da..4292dfdd023 100644 --- a/pom.xml +++ b/pom.xml @@ -716,9 +716,9 @@ the software. - javax.ws.rs - javax.ws.rs-api - 2.1 + jakarta.ws.rs + jakarta.ws.rs-api + 3.1.0 @@ -815,9 +815,9 @@ the software. compile - javax.validation - validation-api - 2.0.1.Final + jakarta.validation + jakarta.validation-api + 3.0.2 args4j From 925aed3fbef271ece3812022aabaf6e018c51513 Mon Sep 17 00:00:00 2001 From: Camelia Dumitru Date: Thu, 9 Apr 2026 18:00:28 +0100 Subject: [PATCH 27/77] Compilations errors for change from javax to jakarta fixed --- orcid-activemq/pom.xml | 4 ++-- orcid-api-common/pom.xml | 4 ++-- orcid-api-web/pom.xml | 4 ++-- orcid-core/pom.xml | 8 ++++---- .../org/orcid/core/cli/DeleteActiveMQQueue.java | 6 +++--- .../impl/ClientDetailsEntityCacheManagerImpl.java | 4 ++-- .../core/manager/v3/impl/EmailManagerImpl.java | 4 ++-- .../read_only/impl/EmailManagerReadOnlyImpl.java | 4 ++-- .../core/security/OrcidUserDetailsServiceImpl.java | 6 +++--- .../manager/v3/ResearchResourceManagerTest.java | 2 +- orcid-message-listener/pom.xml | 4 ++-- orcid-persistence/pom.xml | 8 ++++---- .../persistence/dao/impl/NotificationDaoImpl.java | 4 ++-- .../orcid/persistence/dao/impl/ProfileDaoImpl.java | 4 ++-- .../dao/impl/ProfileLastModifiedDaoImpl.java | 4 ++-- orcid-pub-web/pom.xml | 4 ++-- orcid-scheduler-web/pom.xml | 4 ++-- orcid-utils/pom.xml | 14 ++++++++++++-- .../spring/OrcidAuthenticationProvider.java | 2 +- .../web/controllers/ManageProfileController.java | 4 ++-- .../web/controllers/UnsubscribeController.java | 4 ++-- .../frontend/web/forms/validate/DateCompare.java | 4 ++-- .../frontend/web/forms/validate/FieldMatch.java | 4 ++-- .../web/forms/validate/FieldMatchValidator.java | 4 ++-- ...IntegerNotHigherThanSecondIntegerValidator.java | 4 ++-- .../web/forms/validate/IntegerCompare.java | 4 ++-- .../forms/validate/IntegerStringCrossField.java | 4 ++-- .../validate/IntegerStringCrossFieldValidator.java | 4 ++-- .../validate/StartDateBeforeEndDateValidator.java | 4 ++-- .../web/forms/validate/StringMatchIgnoreCase.java | 4 ++-- .../validate/StringMatchIgnoreCaseValidator.java | 4 ++-- .../frontend/web/forms/validate/TextPattern.java | 10 +++++----- .../web/forms/validate/TextPatternValidator.java | 6 +++--- .../validate/AbstractConstraintValidator.java | 4 ++-- pom.xml | 8 ++++---- 35 files changed, 90 insertions(+), 80 deletions(-) diff --git a/orcid-activemq/pom.xml b/orcid-activemq/pom.xml index e462f92359f..b059969badc 100644 --- a/orcid-activemq/pom.xml +++ b/orcid-activemq/pom.xml @@ -42,12 +42,12 @@ jakarta.xml.bind jakarta.xml.bind-api - 2.3.3 + 3.0.1 com.sun.xml.bind jaxb-impl -2.3.3 +3.0.2 jakarta.annotation diff --git a/orcid-api-common/pom.xml b/orcid-api-common/pom.xml index 5b5af5b7e4d..87a93f1c6fe 100644 --- a/orcid-api-common/pom.xml +++ b/orcid-api-common/pom.xml @@ -164,8 +164,8 @@ maven-compiler-plugin false - 11 - 11 + 17 + 17 diff --git a/orcid-api-web/pom.xml b/orcid-api-web/pom.xml index 7f0c9be7db7..f8391c91993 100644 --- a/orcid-api-web/pom.xml +++ b/orcid-api-web/pom.xml @@ -91,8 +91,8 @@ maven-compiler-plugin false - 11 - 11 + 17 + 17 diff --git a/orcid-core/pom.xml b/orcid-core/pom.xml index 103e072cdac..2ab83f4d6f6 100644 --- a/orcid-core/pom.xml +++ b/orcid-core/pom.xml @@ -124,7 +124,7 @@ jakarta.xml.bind jakarta.xml.bind-api - 2.3.3 + 3.0.1 jakarta.activation @@ -134,7 +134,7 @@ com.sun.xml.bind jaxb-impl - 2.3.6 + 3.0.2 runtime @@ -326,8 +326,8 @@ maven-compiler-plugin false - 11 - 11 + 17 + 17 diff --git a/orcid-core/src/main/java/org/orcid/core/cli/DeleteActiveMQQueue.java b/orcid-core/src/main/java/org/orcid/core/cli/DeleteActiveMQQueue.java index d95b3140300..bb6a330941c 100644 --- a/orcid-core/src/main/java/org/orcid/core/cli/DeleteActiveMQQueue.java +++ b/orcid-core/src/main/java/org/orcid/core/cli/DeleteActiveMQQueue.java @@ -1,8 +1,8 @@ package org.orcid.core.cli; -import jakarta.jms.ConnectionFactory; -import jakarta.jms.JMSException; -import jakarta.jms.Session; +import javax.jms.ConnectionFactory; +import javax.jms.JMSException; +import javax.jms.Session; import org.apache.activemq.ActiveMQConnection; import org.apache.activemq.command.ActiveMQDestination; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/ClientDetailsEntityCacheManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/ClientDetailsEntityCacheManagerImpl.java index a23480045e8..84c4a099a4f 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/ClientDetailsEntityCacheManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/ClientDetailsEntityCacheManagerImpl.java @@ -86,7 +86,7 @@ private Date retrieveLastModifiedDate(String clientId) { Date date = null; try { date = clientDetailsManager.getLastModified(clientId); - } catch (javax.persistence.NoResultException e) { + } catch (jakarta.persistence.NoResultException e) { LOG.debug("Missing lastModifiedDate clientId:" + clientId); } return date; @@ -96,7 +96,7 @@ private Date retrieveLastModifiedDateByIdP(String idp) { Date date = null; try { date = clientDetailsManager.getLastModifiedByIdp(idp); - } catch (javax.persistence.NoResultException e) { + } catch (jakarta.persistence.NoResultException e) { LOG.debug("Missing lastModifiedDate idp:" + idp); } return date; diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/EmailManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/EmailManagerImpl.java index dc7718067e1..4efb86aa875 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/EmailManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/EmailManagerImpl.java @@ -90,13 +90,13 @@ public boolean verifyPrimaryEmail(String orcid) { profileEmailDomainManager.processDomain(orcid, primaryEmail); } return result; - } catch (javax.persistence.NoResultException nre) { + } catch (jakarta.persistence.NoResultException nre) { String alternativePrimaryEmail = emailDao.findNewestVerifiedOrNewestEmail(orcid); emailDao.updatePrimary(orcid, alternativePrimaryEmail); String message = String.format("User with orcid %s have no primary email, so, we are setting the newest verified email, or, the newest email in case non is verified as the primary one", orcid); LOGGER.error(message); throw nre; - } catch (javax.persistence.NonUniqueResultException nure) { + } catch (jakarta.persistence.NonUniqueResultException nure) { String alternativePrimaryEmail = emailDao.findNewestPrimaryEmail(orcid); emailDao.updatePrimary(orcid, alternativePrimaryEmail); String message = String.format("User with orcid %s have more than one primary email, so, we are setting the latest modified primary as the primary one", orcid); diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/EmailManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/EmailManagerReadOnlyImpl.java index 1537d145016..518fe985f5d 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/EmailManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/EmailManagerReadOnlyImpl.java @@ -114,14 +114,14 @@ public boolean isPrimaryEmailVerified(String orcid) { try { String primaryEmail = emailDao.findPrimaryEmail(orcid).getEmail(); return emailDao.isVerified(orcid, primaryEmail); - } catch (javax.persistence.NoResultException nre) { + } catch (jakarta.persistence.NoResultException nre) { String alternativePrimaryEmail = emailDao.findNewestVerifiedOrNewestEmail(orcid); emailDao.updatePrimary(orcid, alternativePrimaryEmail); String message = String.format("User with orcid %s have no primary email, so, we are setting the newest verified email, or, the newest email in case non is verified as the primary one", orcid); LOGGER.error(message); throw nre; - } catch (javax.persistence.NonUniqueResultException nure) { + } catch (jakarta.persistence.NonUniqueResultException nure) { String alternativePrimaryEmail = emailDao.findNewestPrimaryEmail(orcid); emailDao.updatePrimary(orcid, alternativePrimaryEmail); diff --git a/orcid-core/src/main/java/org/orcid/core/security/OrcidUserDetailsServiceImpl.java b/orcid-core/src/main/java/org/orcid/core/security/OrcidUserDetailsServiceImpl.java index 097cf1d64b1..2553203a41c 100644 --- a/orcid-core/src/main/java/org/orcid/core/security/OrcidUserDetailsServiceImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/security/OrcidUserDetailsServiceImpl.java @@ -151,7 +151,7 @@ private ProfileEntity obtainEntity(String username) { if (!PojoUtil.isEmpty(orcid)) { profile = profileDao.find(orcid.toUpperCase()); } - } catch (javax.persistence.NoResultException nre) { + } catch (jakarta.persistence.NoResultException nre) { LOGGER.error("User " + username + " was not found"); } catch (Exception e) { LOGGER.error("Error finding user " + username, e); @@ -234,13 +234,13 @@ public boolean isAdmin() { private String setPrimaryEmailIfMissing(String orcid) { try { return emailDao.findPrimaryEmail(orcid).getEmail(); - } catch (javax.persistence.NoResultException nre) { + } catch (jakarta.persistence.NoResultException nre) { String alternativePrimaryEmail = emailDao.findNewestVerifiedOrNewestEmail(orcid); emailDao.updatePrimary(orcid, alternativePrimaryEmail); String message = String.format("User with orcid %s have no primary email, so, we are setting the newest verified email, or, the newest email in case non is verified as the primary one", orcid); LOGGER.error(message); return alternativePrimaryEmail; - } catch (javax.persistence.NonUniqueResultException nure) { + } catch (jakarta.persistence.NonUniqueResultException nure) { String alternativePrimaryEmail = emailDao.findNewestPrimaryEmail(orcid); emailDao.updatePrimary(orcid, alternativePrimaryEmail); String message = String.format("User with orcid %s have more than one primary email, so, we are setting the latest modified primary as the primary one", orcid); diff --git a/orcid-core/src/test/java/org/orcid/core/manager/v3/ResearchResourceManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/v3/ResearchResourceManagerTest.java index 1d2a9e10ba2..99f52c74c02 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/v3/ResearchResourceManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/v3/ResearchResourceManagerTest.java @@ -251,7 +251,7 @@ public void testUpdate(){ assertEquals("changedResourceName",r4.getResourceItems().get(0).getResourceName()); } - @Test(expected = javax.persistence.NoResultException.class) + @Test(expected = jakarta.persistence.NoResultException.class) public void testDelete(){ when(mockSourceManager.retrieveActiveSource()).thenReturn(Source.forClient(CLIENT_1_ID)); ResearchResource rr1 = researchResourceManager.createResearchResource(USER_ORCID, generateResearchResource("title6","id6"), true); diff --git a/orcid-message-listener/pom.xml b/orcid-message-listener/pom.xml index f3c8ecc6e42..a0d1bf9d756 100644 --- a/orcid-message-listener/pom.xml +++ b/orcid-message-listener/pom.xml @@ -141,12 +141,12 @@ jakarta.xml.bind jakarta.xml.bind-api - 2.3.3 + 3.0.1 com.sun.xml.bind jaxb-impl -2.3.3 +3.0.2 jakarta.annotation diff --git a/orcid-persistence/pom.xml b/orcid-persistence/pom.xml index 16880a8ba94..91014c4c2ad 100644 --- a/orcid-persistence/pom.xml +++ b/orcid-persistence/pom.xml @@ -46,8 +46,8 @@ maven-compiler-plugin false - 11 - 11 + 17 + 17 @@ -209,12 +209,12 @@ jakarta.xml.bind jakarta.xml.bind-api - 2.3.3 + 3.0.1 com.sun.xml.bind jaxb-impl - 2.3.3 + 3.0.2 jakarta.annotation diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/NotificationDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/NotificationDaoImpl.java index 021e92ccb93..c409a913f4d 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/NotificationDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/NotificationDaoImpl.java @@ -63,7 +63,7 @@ public NotificationEntity findLatestByOrcid(String orcid) { public List findUnsentByOrcid(String orcid) { TypedQuery query = entityManager.createQuery("from NotificationEntity where sentDate is null and orcid = :orcid", NotificationEntity.class); query.setParameter("orcid", orcid); - query.setHint("javax.persistence.query.timeout", queryTimeout); + query.setHint("jakarta.persistence.query.timeout", queryTimeout); return query.getResultList(); } @@ -208,7 +208,7 @@ public List findPermissionsByOrcidAndClient(String orcid, St public List findRecordsWithUnsentNotifications() { Query query = entityManager.createNamedQuery(NotificationEntity.FIND_ORCIDS_WITH_UNSENT_NOTIFICATIONS_ON_EMAIL_FREQUENCIES_TABLE); query.setParameter("never", Float.MAX_VALUE); - query.setHint("javax.persistence.query.timeout", queryTimeout); + query.setHint("jakarta.persistence.query.timeout", queryTimeout); List results = query.getResultList(); diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileDaoImpl.java index 9bf3cb864f8..8715f4639af 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileDaoImpl.java @@ -125,7 +125,7 @@ public Map findOrcidsByIndexingStatus(IndexingStatus indexingStatu } query.setMaxResults(maxResults); - query.setHint("javax.persistence.query.timeout", queryTimeout); + query.setHint("jakarta.persistence.query.timeout", queryTimeout); List results = query.getResultList(); @@ -366,7 +366,7 @@ public void updateIndexingStatus(String orcid, IndexingStatus indexingStatus) { query.setParameter("orcid", orcid); query.setParameter("indexingStatus", indexingStatus); // Sets a timeout for this query - query.setHint("javax.persistence.query.timeout", queryTimeout); + query.setHint("jakarta.persistence.query.timeout", queryTimeout); query.executeUpdate(); } diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileLastModifiedDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileLastModifiedDaoImpl.java index fd33cb15915..6889fc51f36 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileLastModifiedDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileLastModifiedDaoImpl.java @@ -33,7 +33,7 @@ public void updateLastModifiedDateAndIndexingStatus(String orcid, IndexingStatus updateQuery.setParameter("orcid", orcid); updateQuery.setParameter("indexingStatus", indexingStatus); // Sets a timeout for this query - updateQuery.setHint("javax.persistence.query.timeout", queryTimeout); + updateQuery.setHint("jakarta.persistence.query.timeout", queryTimeout); updateQuery.executeUpdate(); } @@ -43,7 +43,7 @@ public void updateLastModifiedDateWithoutResult(String orcid) { Query query = entityManager.createNativeQuery("update profile set last_modified = now() where orcid = :orcid "); query.setParameter("orcid", orcid); // Sets a timeout for this query - query.setHint("javax.persistence.query.timeout", queryTimeout); + query.setHint("jakarta.persistence.query.timeout", queryTimeout); query.executeUpdate(); } diff --git a/orcid-pub-web/pom.xml b/orcid-pub-web/pom.xml index 8f8c49ed465..e1376807e67 100644 --- a/orcid-pub-web/pom.xml +++ b/orcid-pub-web/pom.xml @@ -94,8 +94,8 @@ maven-compiler-plugin false - 11 - 11 + 17 + 17 diff --git a/orcid-scheduler-web/pom.xml b/orcid-scheduler-web/pom.xml index 5efb328602e..08abe871b4d 100644 --- a/orcid-scheduler-web/pom.xml +++ b/orcid-scheduler-web/pom.xml @@ -46,12 +46,12 @@ jakarta.xml.bind jakarta.xml.bind-api - 2.3.3 + 3.0.1 com.sun.xml.bind jaxb-impl - 2.3.3 + 3.0.2 jakarta.annotation diff --git a/orcid-utils/pom.xml b/orcid-utils/pom.xml index 620bc8aeeb7..9d07aa67b9a 100644 --- a/orcid-utils/pom.xml +++ b/orcid-utils/pom.xml @@ -81,6 +81,16 @@ jersey-hk2 ${jersey.version} + + jakarta.ws.rs + jakarta.ws.rs-api + 3.1.0 + + + jakarta.annotation + jakarta.annotation-api + 2.1.1 + @@ -100,7 +110,7 @@ jakarta.xml.bind jakarta.xml.bind-api - 2.3.3 + 3.0.1 jakarta.activation @@ -110,7 +120,7 @@ com.sun.xml.bind jaxb-impl - 2.3.6 + 3.0.2 runtime diff --git a/orcid-web/src/main/java/org/orcid/frontend/spring/OrcidAuthenticationProvider.java b/orcid-web/src/main/java/org/orcid/frontend/spring/OrcidAuthenticationProvider.java index 556bbf9e251..6690fda7c2c 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/spring/OrcidAuthenticationProvider.java +++ b/orcid-web/src/main/java/org/orcid/frontend/spring/OrcidAuthenticationProvider.java @@ -106,7 +106,7 @@ public Authentication authenticate(Authentication auth) throws AuthenticationExc profileEntityCacheManager.remove(userOrcid); } catch (Exception ex) { //TODO: This try/catch should be removed as soon as we confirm there are no more exceptions while updating the sign in lock. - if (!(ex instanceof javax.persistence.NoResultException)) { + if (!(ex instanceof jakarta.persistence.NoResultException)) { Throwable rootCause = ExceptionUtils.getRootCause(ex); if(rootCause != null) { LOGGER.error("An exception has occurred processing request from user " + auth.getName() + ". " + rootCause.getClass().getSimpleName() + ": " + rootCause.getMessage()); diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/ManageProfileController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/ManageProfileController.java index 61883a61a80..8347299d0b9 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/ManageProfileController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/ManageProfileController.java @@ -1116,9 +1116,9 @@ private void verifyPrimaryEmailIfNeeded(String orcid) { if (!emailManager.isPrimaryEmailVerified(orcid)) { try { emailManager.verifyPrimaryEmail(orcid); - } catch(javax.persistence.NoResultException nre) { + } catch(jakarta.persistence.NoResultException nre) { slackManager.sendSystemAlert(String.format("User with orcid %s have no primary email, so, we are setting the newest verified email, or, the newest email in case non is verified as the primary one", orcid)); - } catch(javax.persistence.NonUniqueResultException nure) { + } catch(jakarta.persistence.NonUniqueResultException nure) { slackManager.sendSystemAlert(String.format("User with orcid %s have more than one primary email, so, we are setting the latest modified primary as the primary one", orcid)); } } diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/UnsubscribeController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/UnsubscribeController.java index 6a4713b397b..ed1e826e0a0 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/UnsubscribeController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/UnsubscribeController.java @@ -58,9 +58,9 @@ public ModelAndView unsubscribeView(@PathVariable("encryptedId") String encrypte if(!emailManagerReadOnly.isPrimaryEmailVerified(orcid)) { try { emailManager.verifyPrimaryEmail(orcid); - } catch(javax.persistence.NoResultException nre) { + } catch(jakarta.persistence.NoResultException nre) { slackManager.sendSystemAlert(String.format("User with orcid %s have no primary email, so, we are setting the newest verified email, or, the newest email in case non is verified as the primary one", orcid)); - } catch(javax.persistence.NonUniqueResultException nure) { + } catch(jakarta.persistence.NonUniqueResultException nure) { slackManager.sendSystemAlert(String.format("User with orcid %s have more than one primary email, so, we are setting the latest modified primary as the primary one", orcid)); } } diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/forms/validate/DateCompare.java b/orcid-web/src/main/java/org/orcid/frontend/web/forms/validate/DateCompare.java index a688d5e1705..198461c7f38 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/forms/validate/DateCompare.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/forms/validate/DateCompare.java @@ -1,7 +1,7 @@ package org.orcid.frontend.web.forms.validate; -import javax.validation.Constraint; -import javax.validation.Payload; +import jakarta.validation.Constraint; +import jakarta.validation.Payload; import java.lang.annotation.Documented; import java.lang.annotation.Retention; import java.lang.annotation.Target; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/forms/validate/FieldMatch.java b/orcid-web/src/main/java/org/orcid/frontend/web/forms/validate/FieldMatch.java index ddbd6ea1f23..b9eba971da0 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/forms/validate/FieldMatch.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/forms/validate/FieldMatch.java @@ -1,7 +1,7 @@ package org.orcid.frontend.web.forms.validate; -import javax.validation.Constraint; -import javax.validation.Payload; +import jakarta.validation.Constraint; +import jakarta.validation.Payload; import java.lang.annotation.Documented; import static java.lang.annotation.ElementType.ANNOTATION_TYPE; import static java.lang.annotation.ElementType.TYPE; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/forms/validate/FieldMatchValidator.java b/orcid-web/src/main/java/org/orcid/frontend/web/forms/validate/FieldMatchValidator.java index 96e49af80dc..b5157120f79 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/forms/validate/FieldMatchValidator.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/forms/validate/FieldMatchValidator.java @@ -1,7 +1,7 @@ package org.orcid.frontend.web.forms.validate; -import javax.validation.ConstraintValidator; -import javax.validation.ConstraintValidatorContext; +import jakarta.validation.ConstraintValidator; +import jakarta.validation.ConstraintValidatorContext; import org.apache.commons.beanutils.BeanUtils; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/forms/validate/FirstIntegerNotHigherThanSecondIntegerValidator.java b/orcid-web/src/main/java/org/orcid/frontend/web/forms/validate/FirstIntegerNotHigherThanSecondIntegerValidator.java index efecd6c1e89..aa4da048c1d 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/forms/validate/FirstIntegerNotHigherThanSecondIntegerValidator.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/forms/validate/FirstIntegerNotHigherThanSecondIntegerValidator.java @@ -1,7 +1,7 @@ package org.orcid.frontend.web.forms.validate; -import javax.validation.ConstraintValidator; -import javax.validation.ConstraintValidatorContext; +import jakarta.validation.ConstraintValidator; +import jakarta.validation.ConstraintValidatorContext; import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.lang.StringUtils; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/forms/validate/IntegerCompare.java b/orcid-web/src/main/java/org/orcid/frontend/web/forms/validate/IntegerCompare.java index b789489782e..54cf415b26e 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/forms/validate/IntegerCompare.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/forms/validate/IntegerCompare.java @@ -8,8 +8,8 @@ import java.lang.annotation.Retention; import java.lang.annotation.Target; -import javax.validation.Constraint; -import javax.validation.Payload; +import jakarta.validation.Constraint; +import jakarta.validation.Payload; @Target( { TYPE, ANNOTATION_TYPE }) @Retention(RUNTIME) diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/forms/validate/IntegerStringCrossField.java b/orcid-web/src/main/java/org/orcid/frontend/web/forms/validate/IntegerStringCrossField.java index f2ee0bb5ef4..993d076a1ad 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/forms/validate/IntegerStringCrossField.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/forms/validate/IntegerStringCrossField.java @@ -8,8 +8,8 @@ import java.lang.annotation.Retention; import java.lang.annotation.Target; -import javax.validation.Constraint; -import javax.validation.Payload; +import jakarta.validation.Constraint; +import jakarta.validation.Payload; @Target( { TYPE, ANNOTATION_TYPE }) @Retention(RUNTIME) diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/forms/validate/IntegerStringCrossFieldValidator.java b/orcid-web/src/main/java/org/orcid/frontend/web/forms/validate/IntegerStringCrossFieldValidator.java index bc774cb01da..753e3b7ed7d 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/forms/validate/IntegerStringCrossFieldValidator.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/forms/validate/IntegerStringCrossFieldValidator.java @@ -2,8 +2,8 @@ import java.lang.reflect.InvocationTargetException; -import javax.validation.ConstraintValidator; -import javax.validation.ConstraintValidatorContext; +import jakarta.validation.ConstraintValidator; +import jakarta.validation.ConstraintValidatorContext; import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.lang.StringUtils; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/forms/validate/StartDateBeforeEndDateValidator.java b/orcid-web/src/main/java/org/orcid/frontend/web/forms/validate/StartDateBeforeEndDateValidator.java index f5d0160ff58..1b0be617c7c 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/forms/validate/StartDateBeforeEndDateValidator.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/forms/validate/StartDateBeforeEndDateValidator.java @@ -5,8 +5,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.validation.ConstraintValidator; -import javax.validation.ConstraintValidatorContext; +import jakarta.validation.ConstraintValidator; +import jakarta.validation.ConstraintValidatorContext; import java.lang.reflect.InvocationTargetException; import java.text.ParseException; import java.text.SimpleDateFormat; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/forms/validate/StringMatchIgnoreCase.java b/orcid-web/src/main/java/org/orcid/frontend/web/forms/validate/StringMatchIgnoreCase.java index ddf80aa6e68..d02ac9607ad 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/forms/validate/StringMatchIgnoreCase.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/forms/validate/StringMatchIgnoreCase.java @@ -1,7 +1,7 @@ package org.orcid.frontend.web.forms.validate; -import javax.validation.Constraint; -import javax.validation.Payload; +import jakarta.validation.Constraint; +import jakarta.validation.Payload; import java.lang.annotation.Documented; import static java.lang.annotation.ElementType.ANNOTATION_TYPE; import static java.lang.annotation.ElementType.TYPE; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/forms/validate/StringMatchIgnoreCaseValidator.java b/orcid-web/src/main/java/org/orcid/frontend/web/forms/validate/StringMatchIgnoreCaseValidator.java index 842b66abc11..bdbb41dfbcd 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/forms/validate/StringMatchIgnoreCaseValidator.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/forms/validate/StringMatchIgnoreCaseValidator.java @@ -1,7 +1,7 @@ package org.orcid.frontend.web.forms.validate; -import javax.validation.ConstraintValidator; -import javax.validation.ConstraintValidatorContext; +import jakarta.validation.ConstraintValidator; +import jakarta.validation.ConstraintValidatorContext; import org.apache.commons.beanutils.BeanUtils; diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/forms/validate/TextPattern.java b/orcid-web/src/main/java/org/orcid/frontend/web/forms/validate/TextPattern.java index fb16e748550..ece5f8c073d 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/forms/validate/TextPattern.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/forms/validate/TextPattern.java @@ -6,10 +6,10 @@ import static java.lang.annotation.ElementType.*; import static java.lang.annotation.ElementType.PARAMETER; import static java.lang.annotation.RetentionPolicy.RUNTIME; -import javax.validation.Constraint; -import javax.validation.Payload; -import javax.validation.constraints.Pattern; -import javax.validation.constraints.Pattern.Flag; +import jakarta.validation.Constraint; +import jakarta.validation.Payload; +import jakarta.validation.constraints.Pattern; +import jakarta.validation.constraints.Pattern.Flag; /** * The annotated Text must match the following regular expression. @@ -38,7 +38,7 @@ /** * @return The error message template. */ - String message() default "{javax.validation.constraints.Pattern.message}"; + String message() default "{jakarta.validation.constraints.Pattern.message}"; /** * @return The groups the constraint belongs to. diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/forms/validate/TextPatternValidator.java b/orcid-web/src/main/java/org/orcid/frontend/web/forms/validate/TextPatternValidator.java index 27820392e6d..a5c295798ce 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/forms/validate/TextPatternValidator.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/forms/validate/TextPatternValidator.java @@ -3,9 +3,9 @@ import java.util.regex.Matcher; import java.util.regex.PatternSyntaxException; -import javax.validation.ConstraintValidator; -import javax.validation.ConstraintValidatorContext; -import javax.validation.constraints.Pattern; +import jakarta.validation.ConstraintValidator; +import jakarta.validation.ConstraintValidatorContext; +import jakarta.validation.constraints.Pattern; import org.orcid.pojo.ajaxForm.Text; diff --git a/orcid-web/src/test/java/org/orcid/frontend/web/forms/validate/AbstractConstraintValidator.java b/orcid-web/src/test/java/org/orcid/frontend/web/forms/validate/AbstractConstraintValidator.java index 13e8c9794f5..4238fb2036b 100644 --- a/orcid-web/src/test/java/org/orcid/frontend/web/forms/validate/AbstractConstraintValidator.java +++ b/orcid-web/src/test/java/org/orcid/frontend/web/forms/validate/AbstractConstraintValidator.java @@ -9,8 +9,8 @@ import java.util.Set; import jakarta.annotation.Resource; -import javax.validation.ConstraintViolation; -import javax.validation.Validator; +import jakarta.validation.ConstraintViolation; +import jakarta.validation.Validator; import org.junit.runner.RunWith; import org.orcid.test.OrcidJUnit4ClassRunner; diff --git a/pom.xml b/pom.xml index 4292dfdd023..4be7c3833a5 100644 --- a/pom.xml +++ b/pom.xml @@ -87,7 +87,7 @@ the software. 3.6.3 - 11 + [11,) @@ -123,8 +123,8 @@ the software. maven-compiler-plugin true - 11 - 11 + 17 + 17 @@ -924,7 +924,7 @@ the software. net.bytebuddy byte-buddy - 1.10.5 + 1.14.12 org.hsqldb From 2a0b9546320b51fa9d4b5383c8283c35bc66ed4b Mon Sep 17 00:00:00 2001 From: Camelia Dumitru Date: Thu, 9 Apr 2026 18:39:13 +0100 Subject: [PATCH 28/77] Fixed the tests and runtime issues for orcid-persistence --- .../org/orcid/core/cli/CorrectBadOrgData.java | 2 +- .../v3/impl/NotificationManagerImpl.java | 4 +- .../manager/OrcidSearchManagerImplTest.java | 5 ++- .../manager/v3/OrcidSearchManagerTest.java | 11 ++--- .../v3/impl/OrcidSearchManagerImplTest.java | 5 ++- .../dao/impl/EventStatsDaoImpl.java | 8 ++-- .../dao/impl/IdentifierTypeDaoImpl.java | 4 +- .../impl/OrgAffiliationRelationDaoImpl.java | 2 +- .../dao/impl/OrgDisambiguatedDaoImpl.java | 4 +- .../dao/impl/PeerReviewDaoImpl.java | 2 +- .../persistence/dao/impl/ProfileDaoImpl.java | 40 +++++++++---------- .../dao/impl/ProfileEventDaoImpl.java | 4 +- .../dao/impl/ProfileFundingDaoImpl.java | 2 +- .../impl/ProfileInterstitialFlagDaoImpl.java | 3 +- .../dao/impl/ProfileKeywordDaoImpl.java | 2 +- .../dao/impl/RecordNameDaoImpl.java | 2 +- .../dao/impl/ResearchResourceDaoImpl.java | 2 +- .../persistence/dao/impl/SpamDaoImpl.java | 2 +- .../persistence/dao/impl/WorkDaoImpl.java | 4 +- .../persistence/dao/NotificationDaoTest.java | 3 +- 20 files changed, 56 insertions(+), 55 deletions(-) diff --git a/orcid-core/src/main/java/org/orcid/core/cli/CorrectBadOrgData.java b/orcid-core/src/main/java/org/orcid/core/cli/CorrectBadOrgData.java index 1804095b9e4..d884f7e3c07 100644 --- a/orcid-core/src/main/java/org/orcid/core/cli/CorrectBadOrgData.java +++ b/orcid-core/src/main/java/org/orcid/core/cli/CorrectBadOrgData.java @@ -196,7 +196,7 @@ private void findDuplicateOrgs() { String city = (String) o[1]; String region = (String) o[2]; String country = (String) o[3]; - Long orgDisambiguatedId = ((BigInteger) o[4]).longValue(); + Long orgDisambiguatedId = ((Number) o[4]).longValue(); duplicateOrgDetails.add(new OrgDetails(name, city, region, country, orgDisambiguatedId)); }); } diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/NotificationManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/NotificationManagerImpl.java index 6f9de9fc10c..763d40b3bf1 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/NotificationManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/NotificationManagerImpl.java @@ -48,7 +48,6 @@ import jakarta.annotation.Resource; import java.io.UnsupportedEncodingException; -import java.math.BigInteger; import java.net.URLEncoder; import java.text.MessageFormat; import java.time.Instant; @@ -782,8 +781,7 @@ public Integer deleteOffsetNotifications() { toDelete = notificationDao.findNotificationsToDeleteByOffset((notificationDeleteOffset == null ? 10000 : notificationDeleteOffset), recordsPerBatch); LOGGER.info("Got batch of {} notifications to delete", toDelete.size()); for (Object[] o : toDelete) { - BigInteger big = (BigInteger) o[0]; - Long id = big.longValue(); + Long id = ((Number) o[0]).longValue(); String orcid = (String) o[1]; LOGGER.info("About to delete old notification: id={}, orcid={}", new Object[] { id, orcid }); notificationDao.deleteNotificationItemByNotificationId(id); diff --git a/orcid-core/src/test/java/org/orcid/core/manager/OrcidSearchManagerImplTest.java b/orcid-core/src/test/java/org/orcid/core/manager/OrcidSearchManagerImplTest.java index 254aee90017..8db8ef9f4b2 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/OrcidSearchManagerImplTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/OrcidSearchManagerImplTest.java @@ -22,6 +22,7 @@ import org.orcid.jaxb.model.message.OrcidMessage; import org.orcid.jaxb.model.search_v2.Search; import org.orcid.test.TargetProxyHelper; +import org.apache.hc.core5.http.ParseException; import org.orcid.core.solr.OrcidSolrResult; import org.orcid.core.solr.OrcidSolrResults; @@ -68,7 +69,7 @@ public void after() { } @Test - public void testFindOrcidIds() { + public void testFindOrcidIds() throws ParseException { when(mockOrcidSolrProfileClient.findByDocumentCriteria(any())).thenReturn(multipleResultsForQuery()); Search search = orcidSearchManager.findOrcidIds(new HashMap<>()); assertNotNull(search); @@ -79,7 +80,7 @@ public void testFindOrcidIds() { } @Test - public void testFindOrcidIdsNoResults() { + public void testFindOrcidIdsNoResults() throws ParseException { when(mockOrcidSolrProfileClient.findByDocumentCriteria(any())).thenReturn(new OrcidSolrResults()); Search search = orcidSearchManager.findOrcidIds(new HashMap<>()); assertNotNull(search); diff --git a/orcid-core/src/test/java/org/orcid/core/manager/v3/OrcidSearchManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/v3/OrcidSearchManagerTest.java index 2c7b447b7dc..1f016c4e207 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/v3/OrcidSearchManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/v3/OrcidSearchManagerTest.java @@ -11,6 +11,7 @@ import jakarta.annotation.Resource; +import org.apache.hc.core5.http.ParseException; import org.apache.solr.common.SolrDocument; import org.junit.After; import org.junit.Before; @@ -73,7 +74,7 @@ public void after() { } @Test - public void testFindOrcidIds() { + public void testFindOrcidIds() throws ParseException { when(mockOrcidSolrProfileClient.findByDocumentCriteria(any())).thenReturn(multipleResultsForQuery()); Search search = orcidSearchManager.findOrcidIds(new HashMap<>()); assertNotNull(search); @@ -84,7 +85,7 @@ public void testFindOrcidIds() { } @Test - public void testFindOrcidIdsNoResults() { + public void testFindOrcidIdsNoResults() throws ParseException { when(mockOrcidSolrProfileClient.findByDocumentCriteria(any())).thenReturn(new OrcidSolrResults()); Search search = orcidSearchManager.findOrcidIds(new HashMap<>()); assertNotNull(search); @@ -93,7 +94,7 @@ public void testFindOrcidIdsNoResults() { } @Test - public void orcidMultipleOrcidsIndexed() { + public void orcidMultipleOrcidsIndexed() throws ParseException { when(mockOrcidSolrProfileClient.findByDocumentCriteria("rndQuery", 0, 0)).thenReturn(multipleResultsForQuery()); Search search = orcidSearchManager.findOrcidsByQuery("rndQuery", 0, 0); assertNotNull(search); @@ -108,7 +109,7 @@ public void orcidMultipleOrcidsIndexed() { } @Test - public void allFineTest() { + public void allFineTest() throws ParseException { when(mockOrcidSolrProfileClient.findByDocumentCriteria("rndQuery", 0, 0)).thenReturn(invalidRecordSearchResult()); Search search = orcidSearchManager.findOrcidsByQuery("rndQuery", 0, 0); @@ -118,7 +119,7 @@ public void allFineTest() { } @Test - public void numFoundTest() { + public void numFoundTest() throws ParseException { OrcidSolrResults osr = multipleResultsForQuery(); osr.setNumFound(500); when(mockOrcidSolrProfileClient.findByDocumentCriteria("rndQuery", 0, 0)).thenReturn(osr); diff --git a/orcid-core/src/test/java/org/orcid/core/manager/v3/impl/OrcidSearchManagerImplTest.java b/orcid-core/src/test/java/org/orcid/core/manager/v3/impl/OrcidSearchManagerImplTest.java index 1a537bd5ea1..eb039dc41ce 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/v3/impl/OrcidSearchManagerImplTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/v3/impl/OrcidSearchManagerImplTest.java @@ -12,6 +12,7 @@ import jakarta.annotation.Resource; +import org.apache.hc.core5.http.ParseException; import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -59,7 +60,7 @@ public void after() { } @Test - public void testFindOrcidIds() { + public void testFindOrcidIds() throws ParseException { when(mockOrcidSolrProfileClient.findByDocumentCriteria(any())).thenReturn(multipleResultsForQuery()); Search search = orcidSearchManager.findOrcidIds(new HashMap<>()); assertNotNull(search); @@ -128,7 +129,7 @@ public void testExpandedSearch() { } @Test - public void testFindOrcidIdsNoResults() { + public void testFindOrcidIdsNoResults() throws ParseException { when(mockOrcidSolrProfileClient.findByDocumentCriteria(any())).thenReturn(new OrcidSolrResults()); Search search = orcidSearchManager.findOrcidIds(new HashMap<>()); assertNotNull(search); diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/EventStatsDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/EventStatsDaoImpl.java index b6434da1171..8c74e17f2c0 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/EventStatsDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/EventStatsDaoImpl.java @@ -10,7 +10,6 @@ import jakarta.persistence.Query; import jakarta.persistence.TypedQuery; -import java.math.BigInteger; import java.util.ArrayList; import java.util.List; @@ -60,8 +59,11 @@ public void createPapiEventStats() { List eventsListToRemove = new ArrayList<>(); if (eventsList.size() > 0) { eventsList.forEach(item -> { - if ("anonymous".equals(item[3]) && item[4] != null && ((BigInteger) item[4]).intValue() < 1000) { - eventsListToRemove.add(item); + if ("anonymous".equals(item[3]) && item[4] != null) { + int count = ((Number) item[4]).intValue(); + if (count < 1000) { + eventsListToRemove.add(item); + } } }); eventsList.removeAll(eventsListToRemove); diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/IdentifierTypeDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/IdentifierTypeDaoImpl.java index 23803b9cc1c..d32628ec412 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/IdentifierTypeDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/IdentifierTypeDaoImpl.java @@ -45,14 +45,14 @@ public IdentifierTypeEntity updateIdentifierType(IdentifierTypeEntity identifier @Override public IdentifierTypeEntity getEntityByName(String idName) { - TypedQuery query = entityManager.createQuery("FROM IdentifierTypeEntity WHERE id_name = :idName", IdentifierTypeEntity.class); + TypedQuery query = entityManager.createQuery("FROM IdentifierTypeEntity WHERE name = :idName", IdentifierTypeEntity.class); query.setParameter("idName", idName); return query.getSingleResult(); } @Override public List getEntities() { - TypedQuery query = entityManager.createQuery("FROM IdentifierTypeEntity order by id_name", IdentifierTypeEntity.class); + TypedQuery query = entityManager.createQuery("FROM IdentifierTypeEntity order by name", IdentifierTypeEntity.class); return query.getResultList(); } diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgAffiliationRelationDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgAffiliationRelationDaoImpl.java index c56a1f3c53c..c8f8c6d8150 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgAffiliationRelationDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgAffiliationRelationDaoImpl.java @@ -377,7 +377,7 @@ public Boolean updateToMaxDisplay(String orcid, Long putCode) { public Boolean hasPublicAffiliations(String orcid) { Query query = entityManager.createNativeQuery("SELECT count(*) FROM org_affiliation_relation WHERE orcid=:orcid AND visibility='PUBLIC'"); query.setParameter("orcid", orcid); - Long result = ((BigInteger) query.getSingleResult()).longValue(); + Long result = ((Number) query.getSingleResult()).longValue(); return (result != null && result > 0); } diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgDisambiguatedDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgDisambiguatedDaoImpl.java index 658026a8a99..5fcf3a5da0a 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgDisambiguatedDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgDisambiguatedDaoImpl.java @@ -140,8 +140,8 @@ public List> findDisambuguatedOrgsWithIncorrectPopularity(in List results = query.getResultList(); List> pairs = new ArrayList<>(); for (Object[] row : results) { - Long id = ((BigInteger) row[0]).longValue(); - Integer popularity = ((BigInteger) row[1]).intValue(); + Long id = ((Number) row[0]).longValue(); + Integer popularity = ((Number) row[1]).intValue(); Pair pair = new ImmutablePair(id, popularity); pairs.add(pair); } diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/PeerReviewDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/PeerReviewDaoImpl.java index 4f0b2e997ef..3bb2d763ac2 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/PeerReviewDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/PeerReviewDaoImpl.java @@ -142,7 +142,7 @@ public void removeAllPeerReviews(String orcid){ public Boolean hasPublicPeerReviews(String orcid) { Query query = entityManager.createNativeQuery("select count(*) from peer_review where orcid=:orcid and visibility='PUBLIC'"); query.setParameter("orcid", orcid); - Long result = ((BigInteger)query.getSingleResult()).longValue(); + Long result = ((Number)query.getSingleResult()).longValue(); return (result != null && result > 0); } diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileDaoImpl.java index 8715f4639af..b0aa913e08b 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileDaoImpl.java @@ -347,7 +347,7 @@ public boolean existsAndNotClaimedAndBelongsTo(String messageOrcid, String clien @Override public IndexingStatus retrieveIndexingStatus(String orcid) { - TypedQuery query = entityManager.createQuery("select indexingStatus from ProfileEntity where orcid = :orcid", IndexingStatus.class); + TypedQuery query = entityManager.createQuery("select indexingStatus from ProfileEntity where id = :orcid", IndexingStatus.class); query.setParameter("orcid", orcid); return query.getSingleResult(); } @@ -357,10 +357,10 @@ public IndexingStatus retrieveIndexingStatus(String orcid) { public void updateIndexingStatus(String orcid, IndexingStatus indexingStatus) { String queryString = null; if (IndexingStatus.DONE.equals(indexingStatus)) { - queryString = "update ProfileEntity set indexingStatus = :indexingStatus, lastIndexedDate = now() where orcid = :orcid"; + queryString = "update ProfileEntity set indexingStatus = :indexingStatus, lastIndexedDate = now() where id = :orcid"; updateWebhookProfileLastUpdate(orcid); } else { - queryString = "update ProfileEntity set indexingStatus = :indexingStatus where orcid = :orcid"; + queryString = "update ProfileEntity set indexingStatus = :indexingStatus where id = :orcid"; } Query query = entityManager.createQuery(queryString); query.setParameter("orcid", orcid); @@ -395,7 +395,7 @@ private void updateWebhookProfileLastUpdate(String orcid) { @Override public String retrieveOrcidType(String orcid) { - TypedQuery query = entityManager.createQuery("select orcidType from ProfileEntity where orcid = :orcid", String.class); + TypedQuery query = entityManager.createQuery("select orcidType from ProfileEntity where id = :orcid", String.class); query.setParameter("orcid", orcid); List results = query.getResultList(); return results.isEmpty() ? null : results.get(0); @@ -411,7 +411,7 @@ public List findInfoForDecryptionAnalysis() { @Override public String retrieveLocale(String orcid) { - TypedQuery query = entityManager.createQuery("select locale from ProfileEntity where orcid = :orcid", String.class); + TypedQuery query = entityManager.createQuery("select locale from ProfileEntity where id = :orcid", String.class); query.setParameter("orcid", orcid); return query.getSingleResult(); } @@ -420,7 +420,7 @@ public String retrieveLocale(String orcid) { @Transactional public void updateLocale(String orcid, String locale) { Query updateQuery = entityManager - .createQuery("update ProfileEntity set lastModified = now(), locale = :locale, indexingStatus = :indexing_status where orcid = :orcid"); + .createQuery("update ProfileEntity set lastModified = now(), locale = :locale, indexingStatus = :indexing_status where id = :orcid"); updateQuery.setParameter("orcid", orcid); updateQuery.setParameter("locale", locale); updateQuery.setParameter("indexing_status", IndexingStatus.PENDING); @@ -435,7 +435,7 @@ public boolean deprecateProfile(String toDeprecate, String primaryOrcid, String if (ProfileEntity.ADMIN_DEPRECATION.equals(deprecatedMethod) && adminUser != null) { queryString.append(", deprecatingAdmin = :deprecatingAdmin"); } - queryString.append(" where orcid = :orcid"); + queryString.append(" where id = :orcid"); Query query = entityManager.createQuery(queryString.toString()); query.setParameter("orcid", toDeprecate); @@ -465,7 +465,7 @@ public String retrievePrimaryAccountOrcid(String deprecatedOrcid) { @Override @Transactional public void changeEncryptedPassword(String orcid, String encryptedPassword) { - Query updateQuery = entityManager.createQuery("update ProfileEntity set encryptedPassword = :encryptedPassword where orcid = :orcid"); + Query updateQuery = entityManager.createQuery("update ProfileEntity set encryptedPassword = :encryptedPassword where id = :orcid"); updateQuery.setParameter("orcid", orcid); updateQuery.setParameter("encryptedPassword", encryptedPassword); updateQuery.executeUpdate(); @@ -483,10 +483,10 @@ public void changeEncryptedPassword(String orcid, String encryptedPassword) { @Override @Transactional public boolean updateDeveloperTools(String orcid, boolean enabled) { - Query query = entityManager.createQuery("update ProfileEntity set enableDeveloperTools=:enabled, lastModified=now() where orcid=:orcid"); + Query query = entityManager.createQuery("update ProfileEntity set enableDeveloperTools=:enabled, lastModified=now() where id=:orcid"); if (enabled) query = entityManager - .createQuery("update ProfileEntity set enableDeveloperTools=:enabled, developerToolsEnabledDate=now(), lastModified=now() where orcid=:orcid"); + .createQuery("update ProfileEntity set enableDeveloperTools=:enabled, developerToolsEnabledDate=now(), lastModified=now() where id=:orcid"); query.setParameter("orcid", orcid); query.setParameter("enabled", enabled); return query.executeUpdate() > 0; @@ -523,7 +523,7 @@ public String getClientType(String orcid) { */ @Override public String getGroupType(String orcid) { - TypedQuery query = entityManager.createQuery("select groupType from ProfileEntity where orcid = :orcid", String.class); + TypedQuery query = entityManager.createQuery("select groupType from ProfileEntity where id = :orcid", String.class); query.setParameter("orcid", orcid); List results = query.getResultList(); return results.isEmpty() ? null : results.get(0); @@ -586,7 +586,7 @@ public boolean unlockProfile(String orcid) { @Override public boolean isLocked(String orcid) { - TypedQuery query = entityManager.createQuery("select recordLocked from ProfileEntity where orcid = :orcid", Boolean.class); + TypedQuery query = entityManager.createQuery("select recordLocked from ProfileEntity where id = :orcid", Boolean.class); query.setParameter("orcid", orcid); Boolean result; try { @@ -599,7 +599,7 @@ public boolean isLocked(String orcid) { @Override public boolean isDeactivated(String orcid) { - TypedQuery query = entityManager.createQuery("select deactivationDate from ProfileEntity where orcid = :orcid", Date.class); + TypedQuery query = entityManager.createQuery("select deactivationDate from ProfileEntity where id = :orcid", Date.class); query.setParameter("orcid", orcid); Date result = query.getSingleResult(); return (result == null) ? false : true; @@ -607,7 +607,7 @@ public boolean isDeactivated(String orcid) { @Override public boolean isReviewed(String orcid) { - TypedQuery query = entityManager.createQuery("select reviewed from ProfileEntity where orcid = :orcid", Boolean.class); + TypedQuery query = entityManager.createQuery("select reviewed from ProfileEntity where id = :orcid", Boolean.class); query.setParameter("orcid", orcid); return query.getSingleResult(); } @@ -652,7 +652,7 @@ public boolean getClaimedStatusByEmailHash(String emailHash) { @Transactional public boolean updateDefaultVisibility(String orcid, String visibility) { Query updateQuery = entityManager - .createQuery("update ProfileEntity set lastModified = now(), activitiesVisibilityDefault = :activitiesVisibilityDefault where orcid = :orcid"); + .createQuery("update ProfileEntity set lastModified = now(), activitiesVisibilityDefault = :activitiesVisibilityDefault where id = :orcid"); updateQuery.setParameter("orcid", orcid); updateQuery.setParameter("activitiesVisibilityDefault", visibility); return updateQuery.executeUpdate() > 0; @@ -677,7 +677,7 @@ public void hashOrcidIds(String orcid, String hashedOrcid) { @Override public Date getLastLogin(String orcid) { - TypedQuery query = entityManager.createQuery("select lastLogin from ProfileEntity where orcid = :orcid", Date.class); + TypedQuery query = entityManager.createQuery("select lastLogin from ProfileEntity where id = :orcid", Date.class); query.setParameter("orcid", orcid); Date result = query.getSingleResult(); return result; @@ -686,7 +686,7 @@ public Date getLastLogin(String orcid) { @Override @Transactional public void disable2FA(String orcid) { - Query query = entityManager.createQuery("update ProfileEntity set lastModified = now(), using2FA = false, secretFor2FA = null where orcid = :orcid"); + Query query = entityManager.createQuery("update ProfileEntity set lastModified = now(), using2FA = false, secretFor2FA = null where id = :orcid"); query.setParameter("orcid", orcid); query.executeUpdate(); } @@ -694,7 +694,7 @@ public void disable2FA(String orcid) { @Override @Transactional public void enable2FA(String orcid) { - Query query = entityManager.createQuery("update ProfileEntity set lastModified = now(), using2FA = true where orcid = :orcid"); + Query query = entityManager.createQuery("update ProfileEntity set lastModified = now(), using2FA = true where id = :orcid"); query.setParameter("orcid", orcid); query.executeUpdate(); } @@ -702,7 +702,7 @@ public void enable2FA(String orcid) { @Override @Transactional public void update2FASecret(String orcid, String secret) { - Query query = entityManager.createQuery("update ProfileEntity set lastModified = now(), secretFor2FA = :secret where orcid = :orcid"); + Query query = entityManager.createQuery("update ProfileEntity set lastModified = now(), secretFor2FA = :secret where id = :orcid"); query.setParameter("orcid", orcid); query.setParameter("secret", secret); query.executeUpdate(); @@ -711,7 +711,7 @@ public void update2FASecret(String orcid, String secret) { @Override @Transactional public boolean deactivate(String orcid) { - Query query = entityManager.createQuery("update ProfileEntity set lastModified = now(), profile_deactivation_date = now() where orcid = :orcid"); + Query query = entityManager.createQuery("update ProfileEntity set lastModified = now(), profile_deactivation_date = now() where id = :orcid"); query.setParameter("orcid", orcid); return query.executeUpdate() > 0; } diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileEventDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileEventDaoImpl.java index b00633e7afe..28050ee0640 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileEventDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileEventDaoImpl.java @@ -1,7 +1,5 @@ package org.orcid.persistence.dao.impl; -import java.math.BigInteger; - import jakarta.persistence.Query; import org.orcid.persistence.dao.ProfileEventDao; @@ -22,7 +20,7 @@ public boolean isAttemptSend(String orcid, ProfileEventType eventType) { Query query = entityManager.createNativeQuery("select count(*) from profile_event where orcid=:orcid and profile_event_type=:eventType"); query.setParameter("orcid", orcid); query.setParameter("eventType", eventType.toString()); - Long result = ((BigInteger)query.getSingleResult()).longValue(); + Long result = ((Number)query.getSingleResult()).longValue(); return (result != null && result > 0); } } diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileFundingDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileFundingDaoImpl.java index 73705281fa7..177f6df0db9 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileFundingDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileFundingDaoImpl.java @@ -286,7 +286,7 @@ public void removeAllFunding(String orcid) { public Boolean hasPublicFunding(String orcid) { Query query = entityManager.createNativeQuery("SELECT count(*) FROM profile_funding WHERE orcid=:orcid AND visibility='PUBLIC'"); query.setParameter("orcid", orcid); - Long result = ((BigInteger)query.getSingleResult()).longValue(); + Long result = ((Number)query.getSingleResult()).longValue(); return (result != null && result > 0); } diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileInterstitialFlagDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileInterstitialFlagDaoImpl.java index 5b62f1cfae6..e800c1942a7 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileInterstitialFlagDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileInterstitialFlagDaoImpl.java @@ -7,7 +7,6 @@ import jakarta.persistence.Query; import jakarta.persistence.TypedQuery; -import java.math.BigInteger; import java.util.List; public class ProfileInterstitialFlagDaoImpl extends GenericDaoImpl implements ProfileInterstitialFlagDao { @@ -31,7 +30,7 @@ public boolean hasInterstitialFlag(String orcid, String interstitialName) { Query query = entityManager.createNativeQuery("select count(*) from profile_interstitial_flag where orcid = :orcid and interstitial_name = :interstitialName"); query.setParameter("orcid", orcid); query.setParameter("interstitialName", interstitialName); - long result = ((BigInteger)query.getSingleResult()).longValue(); + long result = ((Number)query.getSingleResult()).longValue(); return result > 0; } diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileKeywordDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileKeywordDaoImpl.java index e9223653940..5ae21dedf1f 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileKeywordDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileKeywordDaoImpl.java @@ -108,7 +108,7 @@ public boolean deleteProfileKeyword(ProfileKeywordEntity entity) { @Transactional @UpdateProfileLastModifiedAndIndexingStatus public void removeAllKeywords(String orcid) { - Query query = entityManager.createQuery("delete from ProfileKeywordEntity where profile_orcid = :orcid"); + Query query = entityManager.createQuery("delete from ProfileKeywordEntity where orcid = :orcid"); query.setParameter("orcid", orcid); query.executeUpdate(); } diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/RecordNameDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/RecordNameDaoImpl.java index 0a8bc42b587..3c3d9129ced 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/RecordNameDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/RecordNameDaoImpl.java @@ -64,7 +64,7 @@ public boolean updateRecordName(RecordNameEntity recordName) { public boolean exists(String orcid) { Query query = entityManager.createNativeQuery("select count(*) from record_name where orcid=:orcid"); query.setParameter("orcid", orcid); - Long result = ((BigInteger)query.getSingleResult()).longValue(); + Long result = ((Number)query.getSingleResult()).longValue(); return (result != null && result > 0); } diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ResearchResourceDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ResearchResourceDaoImpl.java index c8ecfede062..f624fdcc633 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ResearchResourceDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ResearchResourceDaoImpl.java @@ -94,7 +94,7 @@ public boolean updateToMaxDisplay(String orcid, Long researchResourceId) { public Boolean hasPublicResearchResources(String orcid) { Query query = entityManager.createNativeQuery("SELECT count(*) FROM research_resource WHERE orcid=:orcid AND visibility='PUBLIC'"); query.setParameter("orcid", orcid); - Long result = ((BigInteger)query.getSingleResult()).longValue(); + Long result = ((Number)query.getSingleResult()).longValue(); return (result != null && result > 0); } diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/SpamDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/SpamDaoImpl.java index ae315638fa6..49214ffe525 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/SpamDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/SpamDaoImpl.java @@ -22,7 +22,7 @@ public SpamDaoImpl() { public boolean exists(String orcid) { Query query = entityManager.createNativeQuery("select count(*) from spam where orcid=:orcid"); query.setParameter("orcid", orcid); - Long result = ((BigInteger)query.getSingleResult()).longValue(); + Long result = ((Number)query.getSingleResult()).longValue(); return (result != null && result > 0); } diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/WorkDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/WorkDaoImpl.java index 222f63c178a..cd33706c650 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/WorkDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/WorkDaoImpl.java @@ -267,7 +267,7 @@ public List getWorksByOrcidId(String orcid) { public boolean hasPublicWorks(String orcid) { Query query = entityManager.createNativeQuery("SELECT count(*) FROM work WHERE orcid=:orcid AND visibility='PUBLIC'"); query.setParameter("orcid", orcid); - Long result = ((BigInteger)query.getSingleResult()).longValue(); + Long result = ((Number)query.getSingleResult()).longValue(); return (result != null && result > 0); } @@ -276,7 +276,7 @@ public boolean isPublic(String orcid, List ids) { Query query = entityManager.createNativeQuery("SELECT count(*) FROM work WHERE orcid=:orcid AND visibility='PUBLIC' AND work_id IN :ids"); query.setParameter("orcid", orcid); query.setParameter("ids", ids); - Long result = ((BigInteger)query.getSingleResult()).longValue(); + Long result = ((Number)query.getSingleResult()).longValue(); return result.equals((long) ids.size()); } diff --git a/orcid-persistence/src/test/java/org/orcid/persistence/dao/NotificationDaoTest.java b/orcid-persistence/src/test/java/org/orcid/persistence/dao/NotificationDaoTest.java index 7cdea554dc6..5b79386b14c 100644 --- a/orcid-persistence/src/test/java/org/orcid/persistence/dao/NotificationDaoTest.java +++ b/orcid-persistence/src/test/java/org/orcid/persistence/dao/NotificationDaoTest.java @@ -542,7 +542,8 @@ public void findNotificationsToDeleteByOffsetTest() { int count3 = 0; for(Object [] o : toDelete) { - BigInteger id = (BigInteger) o[0]; + // Handle both Long and BigInteger for Hibernate 6 compatibility + Long id = (o[0] instanceof Long) ? (Long) o[0] : ((BigInteger) o[0]).longValue(); String orcid = (String) o[1]; if("0000-0000-0000-0003".equals(orcid)) { From fed16d88bc7ee0428b39050c9130565607c5fa86 Mon Sep 17 00:00:00 2001 From: Camelia Dumitru Date: Thu, 9 Apr 2026 19:12:07 +0100 Subject: [PATCH 29/77] Jersey6 more upgrades --- orcid-api-common/pom.xml | 2 +- orcid-utils/pom.xml | 7 +------ .../orcid/utils/jersey/OrcidJerseyClientHandler.java | 11 ++++------- pom.xml | 4 ++-- 4 files changed, 8 insertions(+), 16 deletions(-) diff --git a/orcid-api-common/pom.xml b/orcid-api-common/pom.xml index 87a93f1c6fe..5d10296bc0b 100644 --- a/orcid-api-common/pom.xml +++ b/orcid-api-common/pom.xml @@ -61,7 +61,7 @@ org.glassfish.jersey.ext - jersey-spring4 + jersey-spring6 ${jersey.version} diff --git a/orcid-utils/pom.xml b/orcid-utils/pom.xml index 9d07aa67b9a..81bf227c582 100644 --- a/orcid-utils/pom.xml +++ b/orcid-utils/pom.xml @@ -92,12 +92,7 @@ 2.1.1 - - - com.fasterxml.jackson.jaxrs - jackson-jaxrs-json-provider - ${jackson.version} - + com.fasterxml.jackson.core jackson-core diff --git a/orcid-utils/src/main/java/org/orcid/utils/jersey/OrcidJerseyClientHandler.java b/orcid-utils/src/main/java/org/orcid/utils/jersey/OrcidJerseyClientHandler.java index 41cda204981..488ef1aaf41 100644 --- a/orcid-utils/src/main/java/org/orcid/utils/jersey/OrcidJerseyClientHandler.java +++ b/orcid-utils/src/main/java/org/orcid/utils/jersey/OrcidJerseyClientHandler.java @@ -18,8 +18,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider; - import jakarta.ws.rs.client.Client; import jakarta.ws.rs.client.ClientBuilder; @@ -30,10 +28,8 @@ public class OrcidJerseyClientHandler { static Client create(List> bodyReaders, Map properties) { Client client; ClientBuilder builder = ClientBuilder.newBuilder(); - //Always register the json provider - builder.register(JacksonJaxbJsonProvider.class) - // And the DOM provider - .register(W3CDocumentBodyReader.class); + // Register the custom DOM provider + builder.register(W3CDocumentBodyReader.class); for(Class c : bodyReaders) { builder.register(c); } @@ -48,7 +44,8 @@ static Client create(List> bodyReaders, Map properties) public static Client create(boolean isDevelopmentMode, Map properties) { Client client; ClientBuilder builder = ClientBuilder.newBuilder(); - builder.register(JacksonJaxbJsonProvider.class) + // Jersey 3.1.9 provides JSON handling automatically via MoxyJsonProvider + builder .register(V2ActivitiesSummaryBodyReader.class) .register(V2EducationBodyReader.class) .register(V2EmploymentBodyReader.class) diff --git a/pom.xml b/pom.xml index 4be7c3833a5..51697123664 100644 --- a/pom.xml +++ b/pom.xml @@ -28,8 +28,8 @@ the software. 6.0.23 6.0.8 4.9.1 - 2.27 - 2.13.1 + 3.1.9 + 2.15.4 2.1.1 1.9.6 4.4.0 From 0cf69fa5c1d087af28aedf5cb34766056f7a3e5c Mon Sep 17 00:00:00 2001 From: Camelia Dumitru Date: Thu, 9 Apr 2026 21:57:47 +0100 Subject: [PATCH 30/77] Fixed the testcases for core added the alias for bulk delete update operations in order to be compliant with hibernate 6 --- orcid-activemq/pom.xml | 6 +- orcid-activities-indexer/pom.xml | 29 +++-- .../cron/RetryFailedRecords.java | 22 ++-- .../jersey/OrcidJerseyClientHandler.java | 26 +++-- .../orcid/Orcid20APIClient.java | 104 ++++++++++-------- .../util/DevJerseyClientConfig.java | 28 +---- .../orcid-activities-indexer-web-context.xml | 7 +- orcid-core/pom.xml | 7 +- .../orcid/core/cli/DeleteActiveMQQueue.java | 6 +- ...SONExternalIdentifiersConverterV3Test.java | 2 +- ...ingExternalIdentifiersConverterV2Test.java | 2 +- ...ingExternalIdentifiersConverterV3Test.java | 2 +- ...WorkExternalIdentifierConverterV2Test.java | 2 +- ...WorkExternalIdentifierConverterV3Test.java | 2 +- ...orkExternalIdentifiersConverterV2Test.java | 2 +- ...orkExternalIdentifiersConverterV3Test.java | 2 +- .../converter/JaxbContextUtil.java | 59 ++++++++++ orcid-message-listener/pom.xml | 4 +- orcid-persistence/pom.xml | 2 +- .../persistence/dao/impl/AddressDaoImpl.java | 4 +- .../dao/impl/BackupCodeDaoImpl.java | 4 +- .../dao/impl/BiographyDaoImpl.java | 2 +- .../dao/impl/ClientDetailsDaoImpl.java | 18 +-- .../dao/impl/ClientSecretDaoImpl.java | 2 +- .../persistence/dao/impl/EmailDaoImpl.java | 8 +- .../dao/impl/EmailFrequencyDaoImpl.java | 8 +- .../dao/impl/ExternalIdentifierDaoImpl.java | 6 +- .../dao/impl/IdentityProviderDaoImpl.java | 2 +- .../dao/impl/NotificationDaoImpl.java | 14 +-- .../impl/OrcidOauth2TokenDetailDaoImpl.java | 18 +-- .../impl/OrgAffiliationRelationDaoImpl.java | 8 +- .../persistence/dao/impl/OrgDaoImpl.java | 2 +- .../dao/impl/OrgDisambiguatedDaoImpl.java | 2 +- .../dao/impl/OtherNameDaoImpl.java | 4 +- .../dao/impl/PeerReviewDaoImpl.java | 8 +- .../persistence/dao/impl/ProfileDaoImpl.java | 24 ++-- .../dao/impl/ProfileFundingDaoImpl.java | 8 +- .../dao/impl/ProfileKeywordDaoImpl.java | 6 +- .../dao/impl/ProfileLastModifiedDaoImpl.java | 4 +- .../dao/impl/ResearchResourceDaoImpl.java | 10 +- .../dao/impl/ResearcherUrlDaoImpl.java | 2 +- .../dao/impl/ShibbolethAccountDaoImpl.java | 2 +- .../persistence/dao/impl/SpamDaoImpl.java | 2 +- .../dao/impl/UserConnectionDaoImpl.java | 2 +- .../impl/ValidatedPublicProfileDaoImpl.java | 2 +- .../persistence/dao/impl/WorkDaoImpl.java | 2 +- pom.xml | 5 +- 47 files changed, 284 insertions(+), 209 deletions(-) create mode 100644 orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JaxbContextUtil.java diff --git a/orcid-activemq/pom.xml b/orcid-activemq/pom.xml index b059969badc..f5d08347a63 100644 --- a/orcid-activemq/pom.xml +++ b/orcid-activemq/pom.xml @@ -24,18 +24,18 @@ org.apache.activemq activemq-broker - 5.13.3 + ${activemq.version} org.apache.activemq activemq-spring - 5.13.3 + ${activemq.version} org.apache.activemq activemq-kahadb-store - 5.13.3 + ${activemq.version} diff --git a/orcid-activities-indexer/pom.xml b/orcid-activities-indexer/pom.xml index beea9072f95..ab7fba4ae1c 100644 --- a/orcid-activities-indexer/pom.xml +++ b/orcid-activities-indexer/pom.xml @@ -3,7 +3,7 @@ 4.0.0 orcid-activities-indexer - 0.0.1-SNAPSHOT + release-2.0.0 war ORCID - Activities Indexer @@ -22,7 +22,6 @@ org.orcid orcid-model - ${project.version} org.orcid @@ -50,18 +49,34 @@ org.apache.activemq activemq-broker - 5.13.3 + ${activemq.version} org.apache.activemq activemq-spring - 5.13.3 + ${activemq.version} - com.sun.jersey + org.glassfish.jersey.core jersey-client - + ${jersey.version} + + + org.glassfish.jersey.inject + jersey-hk2 + ${jersey.version} + + + org.glassfish.jersey.media + jersey-media-jaxb + ${jersey.version} + + + org.glassfish.jersey.media + jersey-media-json-jackson + ${jersey.version} + org.liquibase @@ -105,7 +120,7 @@ org.orcid orcid-parent - ${project.version} + release-2.0.0 ../pom.xml diff --git a/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/cron/RetryFailedRecords.java b/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/cron/RetryFailedRecords.java index 99cc27ea416..929e6f88f28 100644 --- a/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/cron/RetryFailedRecords.java +++ b/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/cron/RetryFailedRecords.java @@ -7,6 +7,11 @@ import java.util.Map; import jakarta.annotation.Resource; +import jakarta.ws.rs.client.Client; +import jakarta.ws.rs.client.ClientBuilder; +import jakarta.ws.rs.client.Entity; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; import org.apache.commons.lang3.StringUtils; import org.orcid.activitiesindexer.persistence.entities.ActivitiesStatusEntity; @@ -22,9 +27,6 @@ import org.springframework.scheduling.annotation.Scheduled; import com.fasterxml.jackson.databind.ObjectMapper; -import com.sun.jersey.api.client.Client; -import com.sun.jersey.api.client.ClientResponse; -import com.sun.jersey.api.client.WebResource; @Configuration @EnableScheduling @@ -50,7 +52,7 @@ public class RetryFailedRecords { private S3MessageProcessor s3Processor; public RetryFailedRecords() { - client = Client.create(); + client = ClientBuilder.newClient(); mapper = new ObjectMapper(); } @@ -156,11 +158,13 @@ private void sendSystemAlert(String message) { throw new RuntimeException(e); } - WebResource resource = client.resource(webhookUrl); - ClientResponse response = resource.entity(bodyJson).post(ClientResponse.class); - int status = response.getStatus(); - if (status != 200) { - LOGGER.warn("Unable to send message to Slack, status={}, error={}, message={}", new Object[] { status, response.getEntity(String.class), message }); + try (Response response = client.target(webhookUrl) + .request() + .post(Entity.entity(bodyJson, MediaType.APPLICATION_JSON_TYPE))) { + int status = response.getStatus(); + if (status != 200) { + LOGGER.warn("Unable to send message to Slack, status={}, error={}, message={}", new Object[] { status, response.readEntity(String.class), message }); + } } } } diff --git a/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/jersey/OrcidJerseyClientHandler.java b/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/jersey/OrcidJerseyClientHandler.java index bc3d9675707..94bf2d05c00 100644 --- a/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/jersey/OrcidJerseyClientHandler.java +++ b/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/jersey/OrcidJerseyClientHandler.java @@ -16,6 +16,7 @@ */ package org.orcid.activitiesindexer.jersey; +import java.util.HashMap; import java.util.Map; import java.util.Set; @@ -23,30 +24,31 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider; -import com.sun.jersey.api.client.Client; -import com.sun.jersey.api.client.config.ClientConfig; -import com.sun.jersey.api.client.config.DefaultClientConfig; +import org.glassfish.jersey.jackson.JacksonFeature; + +import jakarta.ws.rs.client.Client; +import jakarta.ws.rs.client.ClientBuilder; public class OrcidJerseyClientHandler { private static final Logger LOGGER = LoggerFactory.getLogger(OrcidJerseyClientHandler.class); public static Client create(boolean isDevelopmentMode, Map properties) { - ClientConfig config = null; + ClientBuilder builder = ClientBuilder.newBuilder(); if (isDevelopmentMode) { // DANGER!!! Trust all certs LOGGER.info("TRUSTING ALL SSL CERTS IN DEV MODE!!!"); - config = new DevJerseyClientConfig(); - } else { - config = new DefaultClientConfig(); + DevJerseyClientConfig.apply(builder); } - Set keyset = properties.keySet(); + + Client client = builder.register(JacksonFeature.class).build(); + + Set keyset = new HashMap<>(properties).keySet(); for (String key : keyset) { - config.getProperties().put(key, properties.get(key)); + client.property(key, properties.get(key)); } - config.getClasses().add(JacksonJaxbJsonProvider.class); - return Client.create(config); + + return client; } } diff --git a/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/orcid/Orcid20APIClient.java b/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/orcid/Orcid20APIClient.java index d15e959cd34..40ea50df73e 100644 --- a/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/orcid/Orcid20APIClient.java +++ b/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/orcid/Orcid20APIClient.java @@ -20,6 +20,11 @@ import java.net.URISyntaxException; import jakarta.annotation.Resource; +import jakarta.ws.rs.client.Client; +import jakarta.ws.rs.client.Entity; +import jakarta.ws.rs.client.Invocation; +import jakarta.ws.rs.client.WebTarget; +import jakarta.ws.rs.core.Response; import jakarta.ws.rs.core.MediaType; import org.orcid.activitiesindexer.exception.DeprecatedRecordException; @@ -39,12 +44,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; - -import com.sun.jersey.api.client.Client; -import com.sun.jersey.api.client.ClientResponse; -import com.sun.jersey.api.client.WebResource; -import com.sun.jersey.api.client.WebResource.Builder; -import com.sun.jersey.api.client.config.ClientConfig; +import org.glassfish.jersey.client.ClientProperties; @Component public class Orcid20APIClient { @@ -72,93 +72,103 @@ public Orcid20APIClient(@Value("${org.orcid.message-listener.api20BaseURI}") Str * @return Activities */ public Record fetchPublicRecord(String orcid) throws LockedRecordException, DeprecatedRecordException { - WebResource webResource = jerseyClient.resource(baseUri).path(orcid + "/record"); - webResource.getProperties().put(ClientConfig.PROPERTY_FOLLOW_REDIRECTS, false); - Builder builder = webResource.accept(MediaType.APPLICATION_XML).header("Authorization", "Bearer " + accessToken); - ClientResponse response = builder.get(ClientResponse.class); - if (response.getStatus() != 200) { + WebTarget webTarget = jerseyClient.target(baseUri).path(orcid + "/record"); + Invocation.Builder builder = webTarget.request(MediaType.APPLICATION_XML) + .property(ClientProperties.FOLLOW_REDIRECTS, false) + .header("Authorization", "Bearer " + accessToken); + try (Response response = builder.get()) { + if (response.getStatus() != 200) { OrcidError orcidError = null; switch (response.getStatus()) { case 301: - orcidError = response.getEntity(OrcidError.class); + orcidError = response.readEntity(OrcidError.class); throw new DeprecatedRecordException(orcidError); case 409: - orcidError = response.getEntity(OrcidError.class); + orcidError = response.readEntity(OrcidError.class); throw new LockedRecordException(orcidError); default: LOG.error("Unable to fetch public activities for " + orcid + " on API 2.0 HTTP error code: " + response.getStatus()); throw new RuntimeException("Failed : HTTP error code : " + response.getStatus()); } + } + return response.readEntity(Record.class); } - return response.getEntity(Record.class); } public Affiliation fetchAffiliation(String orcid, Long putCode, AffiliationType type){ - WebResource webResource = jerseyClient.resource(baseUri).path(orcid + "/" + type.value() + "/" + putCode); - webResource.getProperties().put(ClientConfig.PROPERTY_FOLLOW_REDIRECTS, false); - Builder builder = webResource.accept(MediaType.APPLICATION_XML).header("Authorization", "Bearer " + accessToken); - ClientResponse response = builder.get(ClientResponse.class); - if (response.getStatus() != 200) { + WebTarget webTarget = jerseyClient.target(baseUri).path(orcid + "/" + type.value() + "/" + putCode); + Invocation.Builder builder = webTarget.request(MediaType.APPLICATION_XML) + .property(ClientProperties.FOLLOW_REDIRECTS, false) + .header("Authorization", "Bearer " + accessToken); + try (Response response = builder.get()) { + if (response.getStatus() != 200) { switch (response.getStatus()) { default: LOG.error("Unable to fetch affiliation from record " + orcid + "/" + type.value() + "/" + putCode+" on API 2.0 HTTP error code: " + response.getStatus()); throw new RuntimeException("Failed : HTTP error code : " + response.getStatus()); } + } + + Affiliation aff; + + if(AffiliationType.EDUCATION.equals(type)) { + aff = response.readEntity(Education.class); + } else { + aff = response.readEntity(Employment.class); + } + + return aff; } - - Affiliation aff; - - if(AffiliationType.EDUCATION.equals(type)) { - aff = response.getEntity(Education.class); - } else { - aff = response.getEntity(Employment.class); - } - - return aff; } public Funding fetchFunding(String orcid, Long putCode){ - WebResource webResource = jerseyClient.resource(baseUri).path(orcid + "/funding/"+ putCode); - webResource.getProperties().put(ClientConfig.PROPERTY_FOLLOW_REDIRECTS, false); - Builder builder = webResource.accept(MediaType.APPLICATION_XML).header("Authorization", "Bearer " + accessToken); - ClientResponse response = builder.get(ClientResponse.class); - if (response.getStatus() != 200) { + WebTarget webTarget = jerseyClient.target(baseUri).path(orcid + "/funding/"+ putCode); + Invocation.Builder builder = webTarget.request(MediaType.APPLICATION_XML) + .property(ClientProperties.FOLLOW_REDIRECTS, false) + .header("Authorization", "Bearer " + accessToken); + try (Response response = builder.get()) { + if (response.getStatus() != 200) { switch (response.getStatus()) { default: LOG.error("Unable to fetch funding record " + orcid + "/" + putCode+" on API 2.0 HTTP error code: " + response.getStatus()); throw new RuntimeException("Failed : HTTP error code : " + response.getStatus()); } + } + return response.readEntity(Funding.class); } - return response.getEntity(Funding.class); } public Work fetchWork(String orcid, Long putCode){ - WebResource webResource = jerseyClient.resource(baseUri).path(orcid + "/work/"+ putCode); - webResource.getProperties().put(ClientConfig.PROPERTY_FOLLOW_REDIRECTS, false); - Builder builder = webResource.accept(MediaType.APPLICATION_XML).header("Authorization", "Bearer " + accessToken); - ClientResponse response = builder.get(ClientResponse.class); - if (response.getStatus() != 200) { + WebTarget webTarget = jerseyClient.target(baseUri).path(orcid + "/work/"+ putCode); + Invocation.Builder builder = webTarget.request(MediaType.APPLICATION_XML) + .property(ClientProperties.FOLLOW_REDIRECTS, false) + .header("Authorization", "Bearer " + accessToken); + try (Response response = builder.get()) { + if (response.getStatus() != 200) { switch (response.getStatus()) { default: LOG.error("Unable to fetch work from record " + orcid + "/" + putCode+" on API 2.0 HTTP error code: " + response.getStatus()); throw new RuntimeException("Failed : HTTP error code : " + response.getStatus()); } + } + return response.readEntity(Work.class); } - return response.getEntity(Work.class); } public PeerReview fetchPeerReview(String orcid, Long putCode){ - WebResource webResource = jerseyClient.resource(baseUri).path(orcid + "/peer-review/"+ putCode); - webResource.getProperties().put(ClientConfig.PROPERTY_FOLLOW_REDIRECTS, false); - Builder builder = webResource.accept(MediaType.APPLICATION_XML).header("Authorization", "Bearer " + accessToken); - ClientResponse response = builder.get(ClientResponse.class); - if (response.getStatus() != 200) { + WebTarget webTarget = jerseyClient.target(baseUri).path(orcid + "/peer-review/"+ putCode); + Invocation.Builder builder = webTarget.request(MediaType.APPLICATION_XML) + .property(ClientProperties.FOLLOW_REDIRECTS, false) + .header("Authorization", "Bearer " + accessToken); + try (Response response = builder.get()) { + if (response.getStatus() != 200) { switch (response.getStatus()) { default: LOG.error("Unable to fetch peer review from record " + orcid + "/" + putCode+" on API 2.0 HTTP error code: " + response.getStatus()); throw new RuntimeException("Failed : HTTP error code : " + response.getStatus()); } + } + return response.readEntity(PeerReview.class); } - return response.getEntity(PeerReview.class); } } diff --git a/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/util/DevJerseyClientConfig.java b/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/util/DevJerseyClientConfig.java index 57c5f105801..b25767cde15 100644 --- a/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/util/DevJerseyClientConfig.java +++ b/orcid-activities-indexer/src/main/java/org/orcid/activitiesindexer/util/DevJerseyClientConfig.java @@ -29,33 +29,17 @@ import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; -import com.sun.jersey.api.client.config.DefaultClientConfig; -import com.sun.jersey.client.urlconnection.HTTPSProperties; +import jakarta.ws.rs.client.ClientBuilder; /** * DANGER!!! For dev only! */ -public class DevJerseyClientConfig extends DefaultClientConfig { +public class DevJerseyClientConfig { - public DevJerseyClientConfig() { - super(); - init(); - } - - public DevJerseyClientConfig(Class... providers) { - super(providers); - init(); - } - - public DevJerseyClientConfig(Set> providers) { - super(providers); - init(); - } - - public void init() { + public static void apply(ClientBuilder builder) { SSLContext ctx = createSslContext(); HttpsURLConnection.setDefaultSSLSocketFactory(ctx.getSocketFactory()); - getProperties().put(HTTPSProperties.PROPERTY_HTTPS_PROPERTIES, new HTTPSProperties(new HostnameVerifier() { + builder.sslContext(ctx).hostnameVerifier(new HostnameVerifier() { @Override public boolean verify(String hostname, SSLSession sslSession) { if (hostname.equals("localhost")) { @@ -63,10 +47,10 @@ public boolean verify(String hostname, SSLSession sslSession) { } return false; } - }, ctx)); + }); } - private SSLContext createSslContext() { + private static SSLContext createSslContext() { try { // DANGER!!! Accepts all certs! TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() { diff --git a/orcid-activities-indexer/src/main/resources/orcid-activities-indexer-web-context.xml b/orcid-activities-indexer/src/main/resources/orcid-activities-indexer-web-context.xml index dd2ced54d80..c67fdea6081 100644 --- a/orcid-activities-indexer/src/main/resources/orcid-activities-indexer-web-context.xml +++ b/orcid-activities-indexer/src/main/resources/orcid-activities-indexer-web-context.xml @@ -64,12 +64,7 @@ - - - - - + diff --git a/orcid-core/pom.xml b/orcid-core/pom.xml index 2ab83f4d6f6..88112318eb2 100644 --- a/orcid-core/pom.xml +++ b/orcid-core/pom.xml @@ -228,7 +228,7 @@ org.apache.activemq activemq-broker - 5.13.3 + ${activemq.version} @@ -237,6 +237,11 @@ citeproc-java 0.6 + + org.antlr + antlr4-runtime + 4.13.1 + org.mozilla rhino diff --git a/orcid-core/src/main/java/org/orcid/core/cli/DeleteActiveMQQueue.java b/orcid-core/src/main/java/org/orcid/core/cli/DeleteActiveMQQueue.java index bb6a330941c..d95b3140300 100644 --- a/orcid-core/src/main/java/org/orcid/core/cli/DeleteActiveMQQueue.java +++ b/orcid-core/src/main/java/org/orcid/core/cli/DeleteActiveMQQueue.java @@ -1,8 +1,8 @@ package org.orcid.core.cli; -import javax.jms.ConnectionFactory; -import javax.jms.JMSException; -import javax.jms.Session; +import jakarta.jms.ConnectionFactory; +import jakarta.jms.JMSException; +import jakarta.jms.Session; import org.apache.activemq.ActiveMQConnection; import org.apache.activemq.command.ActiveMQDestination; diff --git a/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONExternalIdentifiersConverterV3Test.java b/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONExternalIdentifiersConverterV3Test.java index 28df6d997a6..3f92f7d9520 100644 --- a/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONExternalIdentifiersConverterV3Test.java +++ b/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONExternalIdentifiersConverterV3Test.java @@ -65,7 +65,7 @@ public void testConvertFrom() { private Education getEducation() throws JAXBException { - JAXBContext context = JAXBContext.newInstance(new Class[] { Education.class }); + JAXBContext context = JAXBContext.newInstance(Education.class); Unmarshaller unmarshaller = context.createUnmarshaller(); String name = "/record_3.0/samples/read_samples/education-full-3.0.xml"; InputStream inputStream = getClass().getResourceAsStream(name); diff --git a/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONFundingExternalIdentifiersConverterV2Test.java b/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONFundingExternalIdentifiersConverterV2Test.java index 84eb324aa36..112bda1084f 100644 --- a/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONFundingExternalIdentifiersConverterV2Test.java +++ b/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONFundingExternalIdentifiersConverterV2Test.java @@ -71,7 +71,7 @@ private ProfileFundingEntity getProfileFundingEntity() { } private Funding getFunding() throws JAXBException { - JAXBContext context = JAXBContext.newInstance(new Class[] { Funding.class }); + JAXBContext context = JAXBContext.newInstance(Funding.class); Unmarshaller unmarshaller = context.createUnmarshaller(); String name = "/record_2.0/samples/read_samples/funding-full-2.0.xml"; InputStream inputStream = getClass().getResourceAsStream(name); diff --git a/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONFundingExternalIdentifiersConverterV3Test.java b/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONFundingExternalIdentifiersConverterV3Test.java index 7000774f7b9..4c8b72cdbaa 100644 --- a/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONFundingExternalIdentifiersConverterV3Test.java +++ b/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONFundingExternalIdentifiersConverterV3Test.java @@ -70,7 +70,7 @@ private ProfileFundingEntity getProfileFundingEntity() { } private Funding getFunding() throws JAXBException { - JAXBContext context = JAXBContext.newInstance(new Class[] { Funding.class }); + JAXBContext context = JAXBContext.newInstance(Funding.class); Unmarshaller unmarshaller = context.createUnmarshaller(); String name = "/record_3.0/samples/read_samples/funding-full-3.0.xml"; InputStream inputStream = getClass().getResourceAsStream(name); diff --git a/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONPeerReviewWorkExternalIdentifierConverterV2Test.java b/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONPeerReviewWorkExternalIdentifierConverterV2Test.java index 4599773fc2f..c625c82669e 100644 --- a/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONPeerReviewWorkExternalIdentifierConverterV2Test.java +++ b/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONPeerReviewWorkExternalIdentifierConverterV2Test.java @@ -47,7 +47,7 @@ public void testConvertFrom() { } private PeerReview getPeerReview() throws JAXBException { - JAXBContext context = JAXBContext.newInstance(new Class[] { PeerReview.class }); + JAXBContext context = JAXBContext.newInstance(PeerReview.class); Unmarshaller unmarshaller = context.createUnmarshaller(); String name = "/record_2.0/samples/read_samples/peer-review-full-2.0.xml"; InputStream inputStream = getClass().getResourceAsStream(name); diff --git a/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONPeerReviewWorkExternalIdentifierConverterV3Test.java b/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONPeerReviewWorkExternalIdentifierConverterV3Test.java index 62242f2e8f5..81e92595266 100644 --- a/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONPeerReviewWorkExternalIdentifierConverterV3Test.java +++ b/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONPeerReviewWorkExternalIdentifierConverterV3Test.java @@ -43,7 +43,7 @@ public void testConvertFrom() { } private PeerReview getPeerReview() throws JAXBException { - JAXBContext context = JAXBContext.newInstance(new Class[] { PeerReview.class }); + JAXBContext context = JAXBContext.newInstance(PeerReview.class); Unmarshaller unmarshaller = context.createUnmarshaller(); String name = "/record_3.0/samples/read_samples/peer-review-full-3.0.xml"; InputStream inputStream = getClass().getResourceAsStream(name); diff --git a/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONWorkExternalIdentifiersConverterV2Test.java b/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONWorkExternalIdentifiersConverterV2Test.java index 3c0e59c7475..19702a6e713 100644 --- a/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONWorkExternalIdentifiersConverterV2Test.java +++ b/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONWorkExternalIdentifiersConverterV2Test.java @@ -78,7 +78,7 @@ public void testConvertToWithIdThatBreaksUrlValidation() { } private Work getWork() throws JAXBException { - JAXBContext context = JAXBContext.newInstance(new Class[] { Work.class }); + JAXBContext context = JAXBContext.newInstance(Work.class); Unmarshaller unmarshaller = context.createUnmarshaller(); String name = "/record_2.0/samples/read_samples/work-full-2.0.xml"; InputStream inputStream = getClass().getResourceAsStream(name); diff --git a/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONWorkExternalIdentifiersConverterV3Test.java b/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONWorkExternalIdentifiersConverterV3Test.java index efd21bdf749..a2eb1871626 100644 --- a/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONWorkExternalIdentifiersConverterV3Test.java +++ b/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JSONWorkExternalIdentifiersConverterV3Test.java @@ -147,7 +147,7 @@ public void testConvertToWithIdThatBreaksUrlValidation() { } private Work getWork() throws JAXBException { - JAXBContext context = JAXBContext.newInstance(new Class[] { Work.class }); + JAXBContext context = JAXBContext.newInstance(Work.class); Unmarshaller unmarshaller = context.createUnmarshaller(); String name = "/record_2.0/samples/read_samples/work-full-2.0.xml"; InputStream inputStream = getClass().getResourceAsStream(name); diff --git a/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JaxbContextUtil.java b/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JaxbContextUtil.java new file mode 100644 index 00000000000..84b876eaf94 --- /dev/null +++ b/orcid-core/src/test/java/org/orcid/core/adapter/jsonidentifier/converter/JaxbContextUtil.java @@ -0,0 +1,59 @@ +package org.orcid.core.adapter.jsonidentifier.converter; + +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import java.util.HashMap; +import java.util.Map; +import org.orcid.jaxb.model.v3.release.groupid.GroupIdRecord; +import org.orcid.jaxb.model.v3.release.notification.permission.NotificationPermission; +import org.orcid.jaxb.model.v3.release.record.*; +import org.orcid.jaxb.model.v3.release.record.summary.*; + +/** + * Utility for creating JAXB contexts with v3.release model classes needed for unmarshaling. + * Uses the same approach as OrcidValidationJaxbContextResolver. + */ +public class JaxbContextUtil { + + private static final Map, String> V3_RELEASE_CLASSES_MAP = new HashMap<>(); + static { + V3_RELEASE_CLASSES_MAP.put(GroupIdRecord.class, "v3"); + V3_RELEASE_CLASSES_MAP.put(NotificationPermission.class, "v3"); + V3_RELEASE_CLASSES_MAP.put(org.orcid.jaxb.model.v3.release.record.Address.class, "v3"); + V3_RELEASE_CLASSES_MAP.put(org.orcid.jaxb.model.v3.release.record.Addresses.class, "v3"); + V3_RELEASE_CLASSES_MAP.put(org.orcid.jaxb.model.v3.release.record.Education.class, "v3"); + V3_RELEASE_CLASSES_MAP.put(org.orcid.jaxb.model.v3.release.record.Email.class, "v3"); + V3_RELEASE_CLASSES_MAP.put(org.orcid.jaxb.model.v3.release.record.Employment.class, "v3"); + V3_RELEASE_CLASSES_MAP.put(org.orcid.jaxb.model.v3.release.record.PersonExternalIdentifier.class, "v3"); + V3_RELEASE_CLASSES_MAP.put(org.orcid.jaxb.model.v3.release.record.PersonExternalIdentifiers.class, "v3"); + V3_RELEASE_CLASSES_MAP.put(org.orcid.jaxb.model.v3.release.record.Funding.class, "v3"); + V3_RELEASE_CLASSES_MAP.put(org.orcid.jaxb.model.v3.release.record.Keyword.class, "v3"); + V3_RELEASE_CLASSES_MAP.put(org.orcid.jaxb.model.v3.release.record.Keywords.class, "v3"); + V3_RELEASE_CLASSES_MAP.put(org.orcid.jaxb.model.v3.release.record.Name.class, "v3"); + V3_RELEASE_CLASSES_MAP.put(org.orcid.jaxb.model.v3.release.record.OtherName.class, "v3"); + V3_RELEASE_CLASSES_MAP.put(org.orcid.jaxb.model.v3.release.record.OtherNames.class, "v3"); + V3_RELEASE_CLASSES_MAP.put(org.orcid.jaxb.model.v3.release.record.PeerReview.class, "v3"); + V3_RELEASE_CLASSES_MAP.put(org.orcid.jaxb.model.v3.release.record.ResearcherUrl.class, "v3"); + V3_RELEASE_CLASSES_MAP.put(org.orcid.jaxb.model.v3.release.record.ResearcherUrls.class, "v3"); + V3_RELEASE_CLASSES_MAP.put(org.orcid.jaxb.model.v3.release.record.Work.class, "v3"); + V3_RELEASE_CLASSES_MAP.put(org.orcid.jaxb.model.v3.release.record.WorkBulk.class, "v3"); + V3_RELEASE_CLASSES_MAP.put(org.orcid.jaxb.model.v3.release.record.Educations.class, "v3"); + V3_RELEASE_CLASSES_MAP.put(org.orcid.jaxb.model.v3.release.record.Employments.class, "v3"); + V3_RELEASE_CLASSES_MAP.put(org.orcid.jaxb.model.v3.release.record.Distinction.class, "v3"); + V3_RELEASE_CLASSES_MAP.put(org.orcid.jaxb.model.v3.release.record.InvitedPosition.class, "v3"); + V3_RELEASE_CLASSES_MAP.put(org.orcid.jaxb.model.v3.release.record.Membership.class, "v3"); + V3_RELEASE_CLASSES_MAP.put(org.orcid.jaxb.model.v3.release.record.Qualification.class, "v3"); + V3_RELEASE_CLASSES_MAP.put(org.orcid.jaxb.model.v3.release.record.Service.class, "v3"); + V3_RELEASE_CLASSES_MAP.put(ExternalID.class, "v3"); + V3_RELEASE_CLASSES_MAP.put(ExternalIDs.class, "v3"); + } + + /** + * Create a JAXBContext with essential v3.release model classes for unmarshaling. + * Only includes Education, Funding, Work, PeerReview and their dependencies. + */ + public static JAXBContext createV3ReleaseContext() throws JAXBException { + Class[] classes = V3_RELEASE_CLASSES_MAP.keySet().toArray(new Class[0]); + return JAXBContext.newInstance(classes); + } +} diff --git a/orcid-message-listener/pom.xml b/orcid-message-listener/pom.xml index a0d1bf9d756..760f9088ddb 100644 --- a/orcid-message-listener/pom.xml +++ b/orcid-message-listener/pom.xml @@ -56,12 +56,12 @@ org.apache.activemq activemq-broker - 5.13.3 + ${activemq.version} org.apache.activemq activemq-spring - 5.13.3 + ${activemq.version} diff --git a/orcid-persistence/pom.xml b/orcid-persistence/pom.xml index 91014c4c2ad..cedbcf16980 100644 --- a/orcid-persistence/pom.xml +++ b/orcid-persistence/pom.xml @@ -202,7 +202,7 @@ org.apache.activemq activemq-broker - 5.13.3 + ${activemq.version} diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/AddressDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/AddressDaoImpl.java index f2d894ae118..029f539c19f 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/AddressDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/AddressDaoImpl.java @@ -70,7 +70,7 @@ public List getAddresses(String orcid, String visibility) { @Transactional @UpdateProfileLastModifiedAndIndexingStatus public boolean deleteAddress(String orcid, Long putCode) { - Query query = entityManager.createQuery("DELETE FROM AddressEntity WHERE id=:id and orcid = :orcid"); + Query query = entityManager.createQuery("DELETE FROM AddressEntity a WHERE a.id=:id and a.orcid = :orcid"); query.setParameter("id", putCode); query.setParameter("orcid", orcid); return query.executeUpdate() > 0 ? true : false; @@ -80,7 +80,7 @@ public boolean deleteAddress(String orcid, Long putCode) { @Transactional @UpdateProfileLastModified public void removeAllAddress(String orcid) { - Query query = entityManager.createQuery("delete from AddressEntity where orcid = :orcid"); + Query query = entityManager.createQuery("delete from AddressEntity a where a.orcid = :orcid"); query.setParameter("orcid", orcid); query.executeUpdate(); } diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/BackupCodeDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/BackupCodeDaoImpl.java index ab390fe319a..5798817941f 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/BackupCodeDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/BackupCodeDaoImpl.java @@ -25,7 +25,7 @@ public List getUnusedBackupCodes(String orcid) { @Override @Transactional public void markUsed(String orcid, String hashedCode) { - Query query = entityManager.createQuery("UPDATE BackupCodeEntity SET usedDate = now() WHERE orcid = :orcid AND hashedCode = :hashedCode"); + Query query = entityManager.createQuery("UPDATE BackupCodeEntity b SET b.usedDate = now() WHERE b.orcid = :orcid AND b.hashedCode = :hashedCode"); query.setParameter("orcid", orcid); query.setParameter("hashedCode", hashedCode); query.executeUpdate(); @@ -34,7 +34,7 @@ public void markUsed(String orcid, String hashedCode) { @Override @Transactional public void removedUsedBackupCodes(String orcid) { - Query query = entityManager.createQuery("DELETE FROM BackupCodeEntity WHERE orcid = :orcid AND usedDate IS NULL"); + Query query = entityManager.createQuery("DELETE FROM BackupCodeEntity b WHERE b.orcid = :orcid AND b.usedDate IS NULL"); query.setParameter("orcid", orcid); query.executeUpdate(); } diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/BiographyDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/BiographyDaoImpl.java index baaee21e014..d346b91fc10 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/BiographyDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/BiographyDaoImpl.java @@ -64,7 +64,7 @@ public boolean exists(String orcid) { @Transactional @UpdateProfileLastModifiedAndIndexingStatus public boolean removeForId(String orcid) { - Query query = entityManager.createQuery("DELETE FROM BiographyEntity WHERE orcid = :orcid"); + Query query = entityManager.createQuery("DELETE FROM BiographyEntity b WHERE b.orcid = :orcid"); query.setParameter("orcid", orcid); return query.executeUpdate() > 0 ? true : false; } diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ClientDetailsDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ClientDetailsDaoImpl.java index 2aa80fde2bf..72775c41da9 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ClientDetailsDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ClientDetailsDaoImpl.java @@ -61,7 +61,7 @@ public Date getLastModifiedByIdP(String idp) { @Override @Transactional public void updateLastModified(String clientId) { - Query updateQuery = entityManager.createQuery("update ClientDetailsEntity set lastModified = now() where id = :clientId"); + Query updateQuery = entityManager.createQuery("update ClientDetailsEntity c set c.lastModified = now() where c.id = :clientId"); updateQuery.setParameter("clientId", clientId); updateQuery.executeUpdate(); } @@ -77,7 +77,7 @@ public void updateLastModified(String clientId) { @Override @Transactional public int updateLastModifiedBulk(List clientIds) { - Query updateQuery = entityManager.createQuery("update ClientDetailsEntity set lastModified = now() where id in :clientIds"); + Query updateQuery = entityManager.createQuery("update ClientDetailsEntity c set c.lastModified = now() where c.id in :clientIds"); updateQuery.setParameter("clientIds", clientIds); return updateQuery.executeUpdate(); } @@ -103,14 +103,14 @@ public boolean createClientSecret(String clientId, String clientSecret) { @Override public List getClientSecretsByClientId(String clientId) { - TypedQuery query = entityManager.createQuery("From ClientSecretEntity WHERE client_details_id=:clientId", ClientSecretEntity.class); + TypedQuery query = entityManager.createQuery("From ClientSecretEntity WHERE clientId=:clientId", ClientSecretEntity.class); query.setParameter("clientId", clientId); return query.getResultList(); } @Override public boolean exists(String clientId) { - TypedQuery query = entityManager.createQuery("select count(*) from ClientDetailsEntity where client_details_id=:clientId", Long.class); + TypedQuery query = entityManager.createQuery("select count(*) from ClientDetailsEntity where id=:clientId", Long.class); query.setParameter("clientId", clientId); Long result = query.getSingleResult(); return (result != null && result > 0); @@ -133,7 +133,7 @@ public boolean belongsTo(String clientId, String groupId) { @Override @Transactional public void updateClientType(String clientType, String clientId) { - Query updateQuery = entityManager.createQuery("update ClientDetailsEntity set clientType = :clientType, lastModified = now() where id = :clientId"); + Query updateQuery = entityManager.createQuery("update ClientDetailsEntity c set c.clientType = :clientType, c.lastModified = now() where c.id = :clientId"); updateQuery.setParameter("clientType", clientType); updateQuery.setParameter("clientId", clientId); updateQuery.executeUpdate(); @@ -192,7 +192,7 @@ public String getMemberName(String clientId) { @Override public boolean existsAndIsNotPublicClient(String clientId) { TypedQuery query = entityManager - .createQuery("select count(*) from ClientDetailsEntity where client_details_id=:clientId and client_type != 'PUBLIC_CLIENT'", Long.class); + .createQuery("select count(*) from ClientDetailsEntity where id=:clientId and clientType != 'PUBLIC_CLIENT'", Long.class); query.setParameter("clientId", clientId); Long result = query.getSingleResult(); return (result != null && result > 0); @@ -224,7 +224,7 @@ public List findLegacyClientIds() { @Transactional public void changePersistenceTokensProperty(String clientId, boolean isPersistenTokensEnabled) { Query updateQuery = entityManager - .createQuery("update ClientDetailsEntity set lastModified = now(), persistentTokensEnabled = :isPersistenTokensEnabled where id = :clientId"); + .createQuery("update ClientDetailsEntity c set c.lastModified = now(), c.persistentTokensEnabled = :isPersistenTokensEnabled where c.id = :clientId"); updateQuery.setParameter("clientId", clientId); updateQuery.setParameter("isPersistenTokensEnabled", isPersistenTokensEnabled); updateQuery.executeUpdate(); @@ -234,7 +234,7 @@ public void changePersistenceTokensProperty(String clientId, boolean isPersisten @Transactional public void activateClient(String clientDetailsId) { Query updateQuery = entityManager - .createQuery("update ClientDetailsEntity set lastModified = now(), deactivatedDate = null, deactivatedBy = null where id = :clientId"); + .createQuery("update ClientDetailsEntity c set c.lastModified = now(), c.deactivatedDate = null, c.deactivatedBy = null where c.id = :clientId"); updateQuery.setParameter("clientId", clientDetailsId); updateQuery.executeUpdate(); } @@ -243,7 +243,7 @@ public void activateClient(String clientDetailsId) { @Transactional public void deactivateClient(String clientDetailsId, String deactivatedBy) { Query updateQuery = entityManager - .createQuery("update ClientDetailsEntity set lastModified = now(), deactivatedDate = now(), deactivatedBy = :deactivatedBy where id = :clientId"); + .createQuery("update ClientDetailsEntity c set c.lastModified = now(), c.deactivatedDate = now(), c.deactivatedBy = :deactivatedBy where c.id = :clientId"); updateQuery.setParameter("clientId", clientDetailsId); updateQuery.setParameter("deactivatedBy", deactivatedBy); updateQuery.executeUpdate(); diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ClientSecretDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ClientSecretDaoImpl.java index 16187fa97ab..035f3967609 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ClientSecretDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ClientSecretDaoImpl.java @@ -58,7 +58,7 @@ public boolean createClientSecret(String clientId, String clientSecret) { * */ @Override public List getClientSecretsByClientId(String clientId) { - TypedQuery query = entityManager.createQuery("From ClientSecretEntity WHERE client_details_id=:clientId", ClientSecretEntity.class); + TypedQuery query = entityManager.createQuery("From ClientSecretEntity WHERE clientId=:clientId", ClientSecretEntity.class); query.setParameter("clientId", clientId); return query.getResultList(); } diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/EmailDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/EmailDaoImpl.java index f102b4aaf99..6445d8c6caf 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/EmailDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/EmailDaoImpl.java @@ -182,7 +182,7 @@ public List findByOrcid(String orcid, String visibility) { @Transactional @UpdateProfileLastModifiedAndIndexingStatus public boolean updateVerifySetCurrentAndPrimary(String orcid, String email) { - Query query = entityManager.createQuery("update EmailEntity set current = true, primary = true, verified = true, lastModified=now() where orcid = :orcid and email = :email"); + Query query = entityManager.createQuery("update EmailEntity e set e.current = true, e.primary = true, e.verified = true, e.lastModified=now() where e.orcid = :orcid and e.email = :email"); query.setParameter("orcid", orcid); query.setParameter("email", email); return query.executeUpdate() > 0; @@ -249,7 +249,7 @@ public EmailEntity findPrimaryEmail(String orcid) { @Override @Transactional public boolean hideAllEmails(String orcid) { - Query query = entityManager.createQuery("update EmailEntity set visibility = :visibility, email = null, lastModified=now() where orcid = :orcid"); + Query query = entityManager.createQuery("update EmailEntity e set e.visibility = :visibility, e.email = null, e.lastModified=now() where e.orcid = :orcid"); query.setParameter("orcid", orcid); query.setParameter("visibility", PRIVATE_VISIBILITY); return query.executeUpdate() > 0; @@ -259,7 +259,7 @@ public boolean hideAllEmails(String orcid) { @Transactional @UpdateProfileLastModifiedAndIndexingStatus public boolean updateVisibility(String orcid, String email, String visibility) { - Query query = entityManager.createQuery("update EmailEntity set visibility = :visibility, lastModified=now() where email = :email and orcid = :orcid"); + Query query = entityManager.createQuery("update EmailEntity e set e.visibility = :visibility, e.lastModified=now() where e.email = :email and e.orcid = :orcid"); query.setParameter("orcid", orcid); query.setParameter("email", email); query.setParameter("visibility", visibility); @@ -276,7 +276,7 @@ public List getEmailsToHash(Integer batchSize) { @Override public boolean populateEmailHash(String email, String emailHash) { - Query query = entityManager.createQuery("update EmailEntity set id=:hash where email = :email"); + Query query = entityManager.createQuery("update EmailEntity e set e.id=:hash where e.email = :email"); query.setParameter("email", email); query.setParameter("hash", emailHash); return query.executeUpdate() > 0; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/EmailFrequencyDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/EmailFrequencyDaoImpl.java index 26445c5deed..42a4724741a 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/EmailFrequencyDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/EmailFrequencyDaoImpl.java @@ -32,7 +32,7 @@ public EmailFrequencyEntity findByOrcid(String orcid) { @Transactional @UpdateProfileLastModified public boolean updateSendChangeNotifications(String orcid, SendEmailFrequency frequency) { - Query query = entityManager.createQuery("UPDATE EmailFrequencyEntity SET sendChangeNotifications = :frequency, lastModified=now() WHERE orcid = :orcid"); + Query query = entityManager.createQuery("UPDATE EmailFrequencyEntity ef SET ef.sendChangeNotifications = :frequency, ef.lastModified=now() WHERE ef.orcid = :orcid"); query.setParameter("frequency", Float.valueOf(frequency.value())); query.setParameter("orcid", orcid); return query.executeUpdate() > 0; @@ -42,7 +42,7 @@ public boolean updateSendChangeNotifications(String orcid, SendEmailFrequency fr @Transactional @UpdateProfileLastModified public boolean updateSendAdministrativeChangeNotifications(String orcid, SendEmailFrequency frequency) { - Query query = entityManager.createQuery("UPDATE EmailFrequencyEntity SET sendAdministrativeChangeNotifications = :frequency, lastModified=now() WHERE orcid = :orcid"); + Query query = entityManager.createQuery("UPDATE EmailFrequencyEntity ef SET ef.sendAdministrativeChangeNotifications = :frequency, ef.lastModified=now() WHERE ef.orcid = :orcid"); query.setParameter("frequency", Float.valueOf(frequency.value())); query.setParameter("orcid", orcid); return query.executeUpdate() > 0; @@ -52,7 +52,7 @@ public boolean updateSendAdministrativeChangeNotifications(String orcid, SendEma @Transactional @UpdateProfileLastModified public boolean updateSendMemberUpdateRequests(String orcid, SendEmailFrequency frequency) { - Query query = entityManager.createQuery("UPDATE EmailFrequencyEntity SET sendMemberUpdateRequests = :frequency, lastModified=now() WHERE orcid = :orcid"); + Query query = entityManager.createQuery("UPDATE EmailFrequencyEntity ef SET ef.sendMemberUpdateRequests = :frequency, ef.lastModified=now() WHERE ef.orcid = :orcid"); query.setParameter("frequency", Float.valueOf(frequency.value())); query.setParameter("orcid", orcid); return query.executeUpdate() > 0; @@ -62,7 +62,7 @@ public boolean updateSendMemberUpdateRequests(String orcid, SendEmailFrequency f @Transactional @UpdateProfileLastModified public boolean updateSendQuarterlyTips(String orcid, boolean enabled) { - Query query = entityManager.createQuery("UPDATE EmailFrequencyEntity SET sendQuarterlyTips = :enabled, lastModified=now() WHERE orcid = :orcid"); + Query query = entityManager.createQuery("UPDATE EmailFrequencyEntity ef SET ef.sendQuarterlyTips = :enabled, ef.lastModified=now() WHERE ef.orcid = :orcid"); query.setParameter("enabled", enabled); query.setParameter("orcid", orcid); return query.executeUpdate() > 0; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ExternalIdentifierDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ExternalIdentifierDaoImpl.java index 3c59f08df68..c38a42910d2 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ExternalIdentifierDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ExternalIdentifierDaoImpl.java @@ -33,7 +33,7 @@ public ExternalIdentifierDaoImpl() { @Transactional @UpdateProfileLastModifiedAndIndexingStatus public boolean removeExternalIdentifier(String orcid, String externalIdReference) { - Query query = entityManager.createQuery("delete from ExternalIdentifierEntity where orcid=:orcid and externalIdReference=:externalIdReference"); + Query query = entityManager.createQuery("delete from ExternalIdentifierEntity ei where ei.orcid=:orcid and ei.externalIdReference=:externalIdReference"); query.setParameter("orcid", orcid); query.setParameter("externalIdReference", externalIdReference); return query.executeUpdate() > 0 ? true : false; @@ -84,7 +84,7 @@ public ExternalIdentifierEntity getExternalIdentifierEntity(String orcid, Long i @Transactional @UpdateProfileLastModifiedAndIndexingStatus public boolean removeExternalIdentifier(String orcid, Long id) { - Query query = entityManager.createQuery("delete from ExternalIdentifierEntity where orcid=:orcid and id=:id"); + Query query = entityManager.createQuery("delete from ExternalIdentifierEntity ei where ei.orcid=:orcid and ei.id=:id"); query.setParameter("orcid", orcid); query.setParameter("id", id); return query.executeUpdate() > 0 ? true : false; @@ -94,7 +94,7 @@ public boolean removeExternalIdentifier(String orcid, Long id) { @Transactional @UpdateProfileLastModifiedAndIndexingStatus public void removeAllExternalIdentifiers(String orcid) { - Query query = entityManager.createQuery("delete from ExternalIdentifierEntity where orcid = :orcid"); + Query query = entityManager.createQuery("delete from ExternalIdentifierEntity ei where ei.orcid = :orcid"); query.setParameter("orcid", orcid); query.executeUpdate(); } diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/IdentityProviderDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/IdentityProviderDaoImpl.java index 3095a6af968..790aa233196 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/IdentityProviderDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/IdentityProviderDaoImpl.java @@ -31,7 +31,7 @@ public IdentityProviderEntity findByProviderid(String providerid) { @Override @Transactional public void incrementFailedCount(String providerid) { - Query query = entityManager.createQuery("update IdentityProviderEntity set lastFailed = now(), failedCount = failedCount + 1 where providerid = :providerid"); + Query query = entityManager.createQuery("update IdentityProviderEntity i set i.lastFailed = now(), i.failedCount = i.failedCount + 1 where i.providerid = :providerid"); query.setParameter("providerid", providerid); query.executeUpdate(); } diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/NotificationDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/NotificationDaoImpl.java index c409a913f4d..d7343317749 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/NotificationDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/NotificationDaoImpl.java @@ -111,7 +111,7 @@ public NotificationEntity findByOricdAndId(String orcid, Long id) { @Override @Transactional public void flagAsSent(Long id) { - Query query = entityManager.createQuery("update NotificationEntity set sentDate = now() where id in :id"); + Query query = entityManager.createQuery("update NotificationEntity n set n.sentDate = now() where n.id in :id"); query.setParameter("id", id); query.executeUpdate(); } @@ -119,7 +119,7 @@ public void flagAsSent(Long id) { @Override @Transactional public void flagAsSent(Collection ids) { - Query query = entityManager.createQuery("update NotificationEntity set sentDate = now() where id in :ids"); + Query query = entityManager.createQuery("update NotificationEntity n set n.sentDate = now() where n.id in :ids"); query.setParameter("ids", ids); query.executeUpdate(); } @@ -127,7 +127,7 @@ public void flagAsSent(Collection ids) { @Override @Transactional public void flagAsRead(String orcid, Long id) { - Query query = entityManager.createQuery("update NotificationEntity set readDate = now() where orcid = :orcid and id = :id and readDate is null"); + Query query = entityManager.createQuery("update NotificationEntity n set n.readDate = now() where n.orcid = :orcid and n.id = :id and n.readDate is null"); query.setParameter("orcid", orcid); query.setParameter("id", id); query.executeUpdate(); @@ -136,7 +136,7 @@ public void flagAsRead(String orcid, Long id) { @Override @Transactional public void flagAsArchived(String orcid, Long id) { - Query query = entityManager.createQuery("update NotificationEntity set archivedDate = now() where orcid = :orcid and id = :id and archivedDate is null"); + Query query = entityManager.createQuery("update NotificationEntity n set n.archivedDate = now() where n.orcid = :orcid and n.id = :id and n.archivedDate is null"); query.setParameter("orcid", orcid); query.setParameter("id", id); query.executeUpdate(); @@ -294,7 +294,7 @@ public List findUnsentTips(int batchSize) { @Override public void flagAsSendable(String orcid, Long id) { - Query query = entityManager.createQuery("update NotificationEntity set sendable=true where orcid = :orcid and id = :id"); + Query query = entityManager.createQuery("update NotificationEntity n set n.sendable=true where n.orcid = :orcid and n.id = :id"); query.setParameter("orcid", orcid); query.setParameter("id", id); query.executeUpdate(); @@ -302,7 +302,7 @@ public void flagAsSendable(String orcid, Long id) { @Override public void flagAsNonSendable(String orcid, Long id) { - Query query = entityManager.createQuery("update NotificationEntity set sendable=false where orcid = :orcid and id = :id"); + Query query = entityManager.createQuery("update NotificationEntity n set n.sendable=false where n.orcid = :orcid and n.id = :id"); query.setParameter("orcid", orcid); query.setParameter("id", id); query.executeUpdate(); @@ -310,7 +310,7 @@ public void flagAsNonSendable(String orcid, Long id) { @Override public void updateRetryCount(String orcid, Long id, Long retryCount) { - Query query = entityManager.createQuery("update NotificationEntity set retryCount = :count where orcid = :orcid and id = :id"); + Query query = entityManager.createQuery("update NotificationEntity n set n.retryCount = :count where n.orcid = :orcid and n.id = :id"); query.setParameter("count", retryCount); query.setParameter("orcid", orcid); query.setParameter("id", id); diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrcidOauth2TokenDetailDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrcidOauth2TokenDetailDaoImpl.java index e3576185914..0b546040a56 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrcidOauth2TokenDetailDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrcidOauth2TokenDetailDaoImpl.java @@ -45,7 +45,7 @@ public OrcidOauth2TokenDetail findNonDisabledByTokenValue(String tokenValue) { @Override public void removeByRefreshTokenValue(String refreshTokenValue) { - Query query = entityManager.createQuery("update OrcidOauth2TokenDetail set tokenDisabled = TRUE, revocationDate=now(), revokeReason = 'CLIENT_REVOKED' where refreshTokenValue = :refreshToken"); + Query query = entityManager.createQuery("update OrcidOauth2TokenDetail t set t.tokenDisabled = TRUE, t.revocationDate=now(), t.revokeReason = 'CLIENT_REVOKED' where t.refreshTokenValue = :refreshToken"); query.setParameter("refreshToken", refreshTokenValue); int i = query.executeUpdate(); if (i == 0) { @@ -98,7 +98,7 @@ public List findByClientIdAndUserName(String clientId, S @Override @Transactional public void disableAccessToken(String accessTokenValue) { - Query query = entityManager.createQuery("update OrcidOauth2TokenDetail set tokenDisabled = TRUE, revocationDate=now(), revokeReason = 'CLIENT_REVOKED' where tokenValue = :accessTokenValue"); + Query query = entityManager.createQuery("update OrcidOauth2TokenDetail t set t.tokenDisabled = TRUE, t.revocationDate=now(), t.revokeReason = 'CLIENT_REVOKED' where t.tokenValue = :accessTokenValue"); query.setParameter("accessTokenValue", accessTokenValue); int count = query.executeUpdate(); if (count == 0) { @@ -109,7 +109,7 @@ public void disableAccessToken(String accessTokenValue) { @Override @Transactional public void disableAccessTokenById(Long tokenId, String userOrcid) { - Query query = entityManager.createQuery("update OrcidOauth2TokenDetail set tokenDisabled = TRUE, revocationDate=now(), revokeReason = 'USER_REVOKED' where id = :tokenId and orcid = :userOrcid"); + Query query = entityManager.createQuery("update OrcidOauth2TokenDetail t set t.tokenDisabled = TRUE, t.revocationDate=now(), t.revokeReason = 'USER_REVOKED' where t.id = :tokenId and t.orcid = :userOrcid"); query.setParameter("tokenId", tokenId); query.setParameter("userOrcid", userOrcid); int count = query.executeUpdate(); @@ -121,7 +121,7 @@ public void disableAccessTokenById(Long tokenId, String userOrcid) { @Override @Transactional public void disableAccessTokenByRefreshToken(String refreshTokenValue) { - Query query = entityManager.createQuery("update OrcidOauth2TokenDetail set tokenDisabled = TRUE, revocationDate=now(), revokeReason = 'CLIENT_REVOKED' where refreshTokenValue = :refreshTokenValue"); + Query query = entityManager.createQuery("update OrcidOauth2TokenDetail t set t.tokenDisabled = TRUE, t.revocationDate=now(), t.revokeReason = 'CLIENT_REVOKED' where t.refreshTokenValue = :refreshTokenValue"); query.setParameter("refreshTokenValue", refreshTokenValue); int count = query.executeUpdate(); if (count == 0) { @@ -179,7 +179,7 @@ public boolean hasTokenForClient(String userName, String clientId) { @Override @Transactional public int disableAccessTokenByCodeAndClient(String authorizationCode, String clientId, String reason) { - Query query = entityManager.createQuery("update OrcidOauth2TokenDetail set tokenDisabled = TRUE, revocationDate=now(), revokeReason = :reason, lastModified=now() where clientDetailsId = :clientId and authorizationCode = :authorizationCode"); + Query query = entityManager.createQuery("update OrcidOauth2TokenDetail t set t.tokenDisabled = TRUE, t.revocationDate=now(), t.revokeReason = :reason, t.lastModified=now() where t.clientDetailsId = :clientId and t.authorizationCode = :authorizationCode"); query.setParameter("authorizationCode", authorizationCode); query.setParameter("clientId", clientId); query.setParameter("reason", reason); @@ -198,7 +198,7 @@ public List findAccessTokenByCodeAndClient(String authorizationCode, Str @Override @Transactional public void disableAccessTokenByUserOrcid(String userOrcid, String reason) { - Query query = entityManager.createQuery("update OrcidOauth2TokenDetail set tokenDisabled = TRUE, revocationDate=now(), revokeReason = :reason, lastModified=now() where orcid = :userOrcid AND (tokenDisabled IS NULL OR tokenDisabled = FALSE)"); + Query query = entityManager.createQuery("update OrcidOauth2TokenDetail t set t.tokenDisabled = TRUE, t.revocationDate=now(), t.revokeReason = :reason, t.lastModified=now() where t.orcid = :userOrcid AND (t.tokenDisabled IS NULL OR t.tokenDisabled = FALSE)"); query.setParameter("userOrcid", userOrcid); query.setParameter("reason", reason); query.executeUpdate(); @@ -207,7 +207,7 @@ public void disableAccessTokenByUserOrcid(String userOrcid, String reason) { @Override @Transactional public void revokeAccessToken(String accessToken) { - Query query = entityManager.createQuery("update OrcidOauth2TokenDetail set tokenDisabled = TRUE, revocationDate=now(), revokeReason = 'CLIENT_REVOKED', lastModified=now() where tokenValue = :accessTokenValue"); + Query query = entityManager.createQuery("update OrcidOauth2TokenDetail t set t.tokenDisabled = TRUE, t.revocationDate=now(), t.revokeReason = 'CLIENT_REVOKED', t.lastModified=now() where t.tokenValue = :accessTokenValue"); query.setParameter("accessTokenValue", accessToken); int count = query.executeUpdate(); if (count == 0) { @@ -218,7 +218,7 @@ public void revokeAccessToken(String accessToken) { @Override @Transactional public void disableClientAccessTokensByUserOrcid(String orcid, String clientDetailsId) { - Query query = entityManager.createQuery("update OrcidOauth2TokenDetail set tokenDisabled = TRUE, revocationDate=now(), revokeReason = 'USER_REVOKED', lastModified=now() where clientDetailsId = :clientDetailsId and orcid = :orcid and revokeReason is null"); + Query query = entityManager.createQuery("update OrcidOauth2TokenDetail t set t.tokenDisabled = TRUE, t.revocationDate=now(), t.revokeReason = 'USER_REVOKED', t.lastModified=now() where t.clientDetailsId = :clientDetailsId and t.orcid = :orcid and t.revokeReason is null"); query.setParameter("clientDetailsId", clientDetailsId); query.setParameter("orcid", orcid); int count = query.executeUpdate(); @@ -244,7 +244,7 @@ public OrcidOauth2TokenDetail merge(OrcidOauth2TokenDetail token) { @Override @Transactional public boolean updateScopes(String accessTokenValue, String newScopes) { - Query query = entityManager.createQuery("update OrcidOauth2TokenDetail set scope = :scopes where tokenValue = :accessTokenValue"); + Query query = entityManager.createQuery("update OrcidOauth2TokenDetail t set t.scope = :scopes where t.tokenValue = :accessTokenValue"); query.setParameter("accessTokenValue", accessTokenValue); query.setParameter("scopes", newScopes); return query.executeUpdate() > 0; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgAffiliationRelationDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgAffiliationRelationDaoImpl.java index c8f8c6d8150..3df0a22554c 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgAffiliationRelationDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgAffiliationRelationDaoImpl.java @@ -65,7 +65,7 @@ public OrgAffiliationRelationDaoImpl() { @Transactional @UpdateProfileLastModifiedAndIndexingStatus public boolean removeOrgAffiliationRelation(String userOrcid, Long orgAffiliationRelationId) { - Query query = entityManager.createQuery("delete from OrgAffiliationRelationEntity where orcid=:userOrcid and id=:orgAffiliationRelationId"); + Query query = entityManager.createQuery("delete from OrgAffiliationRelationEntity o where o.orcid=:userOrcid and o.id=:orgAffiliationRelationId"); query.setParameter("userOrcid", userOrcid); query.setParameter("orgAffiliationRelationId", orgAffiliationRelationId); if (query.executeUpdate() > 0) { @@ -119,7 +119,7 @@ private void storeDeletedItemInPanoply(PanoplyDeletedItem item) { @UpdateProfileLastModifiedAndIndexingStatus public boolean updateVisibilityOnOrgAffiliationRelation(String userOrcid, Long orgAffiliationRelationId, String visibility) { Query query = entityManager.createQuery( - "update OrgAffiliationRelationEntity set visibility=:visibility, lastModified=now() where orcid=:userOrcid and id=:orgAffiliationRelationId"); + "update OrgAffiliationRelationEntity o set o.visibility=:visibility, o.lastModified=now() where o.orcid=:userOrcid and o.id=:orgAffiliationRelationId"); query.setParameter("userOrcid", userOrcid); query.setParameter("orgAffiliationRelationId", orgAffiliationRelationId); query.setParameter("visibility", visibility); @@ -156,7 +156,7 @@ public boolean updateVisibilityOnOrgAffiliationRelation(String userOrcid, Long o @Transactional public boolean updateVisibilitiesOnOrgAffiliationRelation(String userOrcid, ArrayList orgAffiliationRelationIds, String visibility) { Query query = entityManager.createQuery( - "update OrgAffiliationRelationEntity set visibility=:visibility, lastModified=now() where orcid=:userOrcid and id in (:orgAffiliationRelationIds)"); + "update OrgAffiliationRelationEntity o set o.visibility=:visibility, o.lastModified=now() where o.orcid=:userOrcid and o.id in (:orgAffiliationRelationIds)"); query.setParameter("userOrcid", userOrcid); query.setParameter("orgAffiliationRelationIds", orgAffiliationRelationIds); query.setParameter("visibility", visibility); @@ -348,7 +348,7 @@ public List getByUser(String orcid) { @Transactional @UpdateProfileLastModifiedAndIndexingStatus public void removeAllAffiliations(String orcid) { - Query query = entityManager.createQuery("delete from OrgAffiliationRelationEntity where orcid = :orcid"); + Query query = entityManager.createQuery("delete from OrgAffiliationRelationEntity o where o.orcid = :orcid"); query.setParameter("orcid", orcid); query.executeUpdate(); if (query.executeUpdate() > 0) { diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgDaoImpl.java index cf0764ee10a..ed597a0acdb 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgDaoImpl.java @@ -231,7 +231,7 @@ public List findByOrgDisambiguatedId(Long orgDisambiguatedId) { @Transactional(propagation = Propagation.REQUIRED) public void updateOrgDisambiguatedId(long deletedOrgDisambiguatedId, long replacementOrgDisambiguatedId) { Query query = entityManager - .createQuery("update OrgEntity set orgDisambiguated.id = :replacementOrgDisambiguatedId where orgDisambiguated.id = :deletedOrgDisambiguatedId"); + .createQuery("update OrgEntity o set o.orgDisambiguated.id = :replacementOrgDisambiguatedId where o.orgDisambiguated.id = :deletedOrgDisambiguatedId"); query.setParameter("deletedOrgDisambiguatedId", deletedOrgDisambiguatedId); query.setParameter("replacementOrgDisambiguatedId", replacementOrgDisambiguatedId); query.executeUpdate(); diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgDisambiguatedDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgDisambiguatedDaoImpl.java index 5fcf3a5da0a..3d10cbe2392 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgDisambiguatedDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgDisambiguatedDaoImpl.java @@ -151,7 +151,7 @@ public List> findDisambuguatedOrgsWithIncorrectPopularity(in @Override @Transactional public void updatePopularity(Long orgDisambiguatedId, Integer popularity) { - Query query = entityManager.createQuery("update OrgDisambiguatedEntity set indexingStatus = 'PENDING', popularity = :popularity where id = :orgDisambiguatedId"); + Query query = entityManager.createQuery("update OrgDisambiguatedEntity od set od.indexingStatus = 'PENDING', od.popularity = :popularity where od.id = :orgDisambiguatedId"); query.setParameter("orgDisambiguatedId", orgDisambiguatedId); query.setParameter("popularity", popularity); query.executeUpdate(); diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OtherNameDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OtherNameDaoImpl.java index 1bedcd7acc9..ac00ed653e0 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OtherNameDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OtherNameDaoImpl.java @@ -92,7 +92,7 @@ public boolean addOtherName(String orcid, String displayName) { @UpdateProfileLastModifiedAndIndexingStatus public boolean deleteOtherName(OtherNameEntity otherName) { Assert.notNull(otherName, "must not be null"); - Query query = entityManager.createQuery("DELETE FROM OtherNameEntity WHERE id=:id"); + Query query = entityManager.createQuery("DELETE FROM OtherNameEntity n WHERE n.id=:id"); query.setParameter("id", otherName.getId()); return query.executeUpdate() > 0 ? true : false; } @@ -109,7 +109,7 @@ public OtherNameEntity getOtherName(String orcid, Long putCode) { @Transactional @UpdateProfileLastModifiedAndIndexingStatus public void removeAllOtherNames(String orcid) { - Query query = entityManager.createQuery("delete from OtherNameEntity where orcid = :orcid"); + Query query = entityManager.createQuery("delete from OtherNameEntity n where n.orcid = :orcid"); query.setParameter("orcid", orcid); query.executeUpdate(); } diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/PeerReviewDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/PeerReviewDaoImpl.java index 3bb2d763ac2..d3b4c1583f2 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/PeerReviewDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/PeerReviewDaoImpl.java @@ -32,7 +32,7 @@ public PeerReviewEntity getPeerReview(String userOrcid, Long peerReviewId) { @Transactional @UpdateProfileLastModifiedAndIndexingStatus public boolean removePeerReview(String userOrcid, Long peerReviewId) { - Query query = entityManager.createQuery("delete from PeerReviewEntity where orcid=:userOrcid and id=:peerReviewId"); + Query query = entityManager.createQuery("delete from PeerReviewEntity pr where pr.orcid=:userOrcid and pr.id=:peerReviewId"); query.setParameter("userOrcid", userOrcid); query.setParameter("peerReviewId", peerReviewId); return query.executeUpdate() > 0 ? true : false; @@ -89,7 +89,7 @@ public boolean updateToMaxDisplay(String orcid, Long peerReviewId) { @UpdateProfileLastModifiedAndIndexingStatus public boolean updateVisibilities(String orcid, ArrayList peerReviewIds, String visibility) { Query query = entityManager - .createQuery("update PeerReviewEntity set visibility=:visibility, lastModified=now() where id in (:peerReviewIds) and orcid=:orcid"); + .createQuery("update PeerReviewEntity pr set pr.visibility=:visibility, pr.lastModified=now() where pr.id in (:peerReviewIds) and pr.orcid=:orcid"); query.setParameter("peerReviewIds", peerReviewIds); query.setParameter("visibility", visibility); query.setParameter("orcid", orcid); @@ -101,7 +101,7 @@ public boolean updateVisibilities(String orcid, ArrayList peerReviewIds, S @UpdateProfileLastModifiedAndIndexingStatus public boolean updateVisibilityByGroupId(String orcid, String groupId, String visibility) { Query query = entityManager - .createQuery("update PeerReviewEntity set visibility=:visibility, lastModified=now() where groupId=:groupId and orcid=:orcid"); + .createQuery("update PeerReviewEntity pr set pr.visibility=:visibility, pr.lastModified=now() where pr.groupId=:groupId and pr.orcid=:orcid"); query.setParameter("groupId", groupId); query.setParameter("visibility", visibility); query.setParameter("orcid", orcid); @@ -133,7 +133,7 @@ public boolean increaseDisplayIndexOnAllElements(String orcid) { @Transactional @UpdateProfileLastModifiedAndIndexingStatus public void removeAllPeerReviews(String orcid){ - Query query = entityManager.createQuery("delete from PeerReviewEntity where orcid = :orcid"); + Query query = entityManager.createQuery("delete from PeerReviewEntity pr where pr.orcid = :orcid"); query.setParameter("orcid", orcid); query.executeUpdate(); } diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileDaoImpl.java index b0aa913e08b..8e90f4364d2 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileDaoImpl.java @@ -420,7 +420,7 @@ public String retrieveLocale(String orcid) { @Transactional public void updateLocale(String orcid, String locale) { Query updateQuery = entityManager - .createQuery("update ProfileEntity set lastModified = now(), locale = :locale, indexingStatus = :indexing_status where id = :orcid"); + .createQuery("update ProfileEntity p set p.lastModified = now(), p.locale = :locale, p.indexingStatus = :indexing_status where p.id = :orcid"); updateQuery.setParameter("orcid", orcid); updateQuery.setParameter("locale", locale); updateQuery.setParameter("indexing_status", IndexingStatus.PENDING); @@ -431,11 +431,11 @@ public void updateLocale(String orcid, String locale) { @Transactional public boolean deprecateProfile(String toDeprecate, String primaryOrcid, String deprecatedMethod, String adminUser) { StringBuilder queryString = new StringBuilder( - "update ProfileEntity set lastModified = now(), deprecatedDate = now(), deactivationDate = now(), indexingStatus = :indexing_status, primaryRecord = :primary_record, activitiesVisibilityDefault = :defaultVisibility, deprecatedMethod = :deprecatedMethod"); + "update ProfileEntity p set p.lastModified = now(), p.deprecatedDate = now(), p.deactivationDate = now(), p.indexingStatus = :indexing_status, p.primaryRecord = :primary_record, p.activitiesVisibilityDefault = :defaultVisibility, p.deprecatedMethod = :deprecatedMethod"); if (ProfileEntity.ADMIN_DEPRECATION.equals(deprecatedMethod) && adminUser != null) { - queryString.append(", deprecatingAdmin = :deprecatingAdmin"); + queryString.append(", p.deprecatingAdmin = :deprecatingAdmin"); } - queryString.append(" where id = :orcid"); + queryString.append(" where p.id = :orcid"); Query query = entityManager.createQuery(queryString.toString()); query.setParameter("orcid", toDeprecate); @@ -465,7 +465,7 @@ public String retrievePrimaryAccountOrcid(String deprecatedOrcid) { @Override @Transactional public void changeEncryptedPassword(String orcid, String encryptedPassword) { - Query updateQuery = entityManager.createQuery("update ProfileEntity set encryptedPassword = :encryptedPassword where id = :orcid"); + Query updateQuery = entityManager.createQuery("update ProfileEntity p set p.encryptedPassword = :encryptedPassword where p.id = :orcid"); updateQuery.setParameter("orcid", orcid); updateQuery.setParameter("encryptedPassword", encryptedPassword); updateQuery.executeUpdate(); @@ -483,10 +483,10 @@ public void changeEncryptedPassword(String orcid, String encryptedPassword) { @Override @Transactional public boolean updateDeveloperTools(String orcid, boolean enabled) { - Query query = entityManager.createQuery("update ProfileEntity set enableDeveloperTools=:enabled, lastModified=now() where id=:orcid"); + Query query = entityManager.createQuery("update ProfileEntity p set p.enableDeveloperTools=:enabled, p.lastModified=now() where p.id=:orcid"); if (enabled) query = entityManager - .createQuery("update ProfileEntity set enableDeveloperTools=:enabled, developerToolsEnabledDate=now(), lastModified=now() where id=:orcid"); + .createQuery("update ProfileEntity p set p.enableDeveloperTools=:enabled, p.developerToolsEnabledDate=now(), p.lastModified=now() where p.id=:orcid"); query.setParameter("orcid", orcid); query.setParameter("enabled", enabled); return query.executeUpdate() > 0; @@ -652,7 +652,7 @@ public boolean getClaimedStatusByEmailHash(String emailHash) { @Transactional public boolean updateDefaultVisibility(String orcid, String visibility) { Query updateQuery = entityManager - .createQuery("update ProfileEntity set lastModified = now(), activitiesVisibilityDefault = :activitiesVisibilityDefault where id = :orcid"); + .createQuery("update ProfileEntity p set p.lastModified = now(), p.activitiesVisibilityDefault = :activitiesVisibilityDefault where p.id = :orcid"); updateQuery.setParameter("orcid", orcid); updateQuery.setParameter("activitiesVisibilityDefault", visibility); return updateQuery.executeUpdate() > 0; @@ -686,7 +686,7 @@ public Date getLastLogin(String orcid) { @Override @Transactional public void disable2FA(String orcid) { - Query query = entityManager.createQuery("update ProfileEntity set lastModified = now(), using2FA = false, secretFor2FA = null where id = :orcid"); + Query query = entityManager.createQuery("update ProfileEntity p set p.lastModified = now(), p.using2FA = false, p.secretFor2FA = null where p.id = :orcid"); query.setParameter("orcid", orcid); query.executeUpdate(); } @@ -694,7 +694,7 @@ public void disable2FA(String orcid) { @Override @Transactional public void enable2FA(String orcid) { - Query query = entityManager.createQuery("update ProfileEntity set lastModified = now(), using2FA = true where id = :orcid"); + Query query = entityManager.createQuery("update ProfileEntity p set p.lastModified = now(), p.using2FA = true where p.id = :orcid"); query.setParameter("orcid", orcid); query.executeUpdate(); } @@ -702,7 +702,7 @@ public void enable2FA(String orcid) { @Override @Transactional public void update2FASecret(String orcid, String secret) { - Query query = entityManager.createQuery("update ProfileEntity set lastModified = now(), secretFor2FA = :secret where id = :orcid"); + Query query = entityManager.createQuery("update ProfileEntity p set p.lastModified = now(), p.secretFor2FA = :secret where p.id = :orcid"); query.setParameter("orcid", orcid); query.setParameter("secret", secret); query.executeUpdate(); @@ -711,7 +711,7 @@ public void update2FASecret(String orcid, String secret) { @Override @Transactional public boolean deactivate(String orcid) { - Query query = entityManager.createQuery("update ProfileEntity set lastModified = now(), profile_deactivation_date = now() where id = :orcid"); + Query query = entityManager.createQuery("update ProfileEntity p set p.lastModified = now(), p.deactivationDate = now() where p.id = :orcid"); query.setParameter("orcid", orcid); return query.executeUpdate() > 0; } diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileFundingDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileFundingDaoImpl.java index 177f6df0db9..0a55b3a53f6 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileFundingDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileFundingDaoImpl.java @@ -51,7 +51,7 @@ public ProfileFundingEntity getProfileFunding(String userOrcid, Long profileFund @Transactional @UpdateProfileLastModifiedAndIndexingStatus public boolean removeProfileFunding(String userOrcid, Long profileFundingId) { - Query query = entityManager.createQuery("delete from ProfileFundingEntity where orcid=:userOrcid and id=:profileFundingId"); + Query query = entityManager.createQuery("delete from ProfileFundingEntity f where f.orcid=:userOrcid and f.id=:profileFundingId"); query.setParameter("userOrcid", userOrcid); query.setParameter("profileFundingId", profileFundingId); return query.executeUpdate() > 0 ? true : false; @@ -75,7 +75,7 @@ public boolean removeProfileFunding(String userOrcid, Long profileFundingId) { @Transactional @UpdateProfileLastModifiedAndIndexingStatus public boolean updateProfileFundingVisibility(String clientOrcid, Long profileFundingId, String visibility) { - Query query = entityManager.createQuery("update ProfileFundingEntity set visibility=:visibility where orcid=:clientOrcid and id=:profileFundingId"); + Query query = entityManager.createQuery("update ProfileFundingEntity f set f.visibility=:visibility where f.orcid=:clientOrcid and f.id=:profileFundingId"); query.setParameter("clientOrcid", clientOrcid); query.setParameter("profileFundingId", profileFundingId); query.setParameter("visibility", visibility); @@ -100,7 +100,7 @@ public boolean updateProfileFundingVisibility(String clientOrcid, Long profileFu @Transactional @UpdateProfileLastModifiedAndIndexingStatus public boolean updateProfileFundingVisibilities(String clientOrcid, ArrayList profileFundingIds, String visibility) { - Query query = entityManager.createQuery("update ProfileFundingEntity set visibility=:visibility where orcid=:clientOrcid and id in (:profileFundingIds)"); + Query query = entityManager.createQuery("update ProfileFundingEntity f set f.visibility=:visibility where f.orcid=:clientOrcid and f.id in (:profileFundingIds)"); query.setParameter("clientOrcid", clientOrcid); query.setParameter("profileFundingIds", profileFundingIds); query.setParameter("visibility", visibility); @@ -277,7 +277,7 @@ public boolean increaseDisplayIndexOnAllElements(String orcid) { @Transactional @UpdateProfileLastModifiedAndIndexingStatus public void removeAllFunding(String orcid) { - Query query = entityManager.createQuery("delete from ProfileFundingEntity where orcid = :orcid"); + Query query = entityManager.createQuery("delete from ProfileFundingEntity f where f.orcid = :orcid"); query.setParameter("orcid", orcid); query.executeUpdate(); } diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileKeywordDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileKeywordDaoImpl.java index 5ae21dedf1f..aae9d77cf74 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileKeywordDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileKeywordDaoImpl.java @@ -61,7 +61,7 @@ public List getProfileKeywords(String orcid, String visibi @Transactional @UpdateProfileLastModifiedAndIndexingStatus public boolean deleteProfileKeyword(String orcid, String keyword) { - Query query = entityManager.createQuery("DELETE FROM ProfileKeywordEntity WHERE orcid = :orcid AND keywordName = :keyword"); + Query query = entityManager.createQuery("DELETE FROM ProfileKeywordEntity k WHERE k.orcid = :orcid AND k.keywordName = :keyword"); query.setParameter("orcid", orcid); query.setParameter("keyword", keyword); return query.executeUpdate() > 0 ? true : false; @@ -99,7 +99,7 @@ public ProfileKeywordEntity getProfileKeyword(String orcid, Long putCode) { @Transactional @UpdateProfileLastModifiedAndIndexingStatus public boolean deleteProfileKeyword(ProfileKeywordEntity entity) { - Query query = entityManager.createQuery("DELETE FROM ProfileKeywordEntity WHERE id=:id"); + Query query = entityManager.createQuery("DELETE FROM ProfileKeywordEntity k WHERE k.id=:id"); query.setParameter("id", entity.getId()); return query.executeUpdate() > 0 ? true : false; } @@ -108,7 +108,7 @@ public boolean deleteProfileKeyword(ProfileKeywordEntity entity) { @Transactional @UpdateProfileLastModifiedAndIndexingStatus public void removeAllKeywords(String orcid) { - Query query = entityManager.createQuery("delete from ProfileKeywordEntity where orcid = :orcid"); + Query query = entityManager.createQuery("delete from ProfileKeywordEntity k where k.orcid = :orcid"); query.setParameter("orcid", orcid); query.executeUpdate(); } diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileLastModifiedDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileLastModifiedDaoImpl.java index 6889fc51f36..63e03b94e95 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileLastModifiedDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileLastModifiedDaoImpl.java @@ -29,7 +29,7 @@ public class ProfileLastModifiedDaoImpl implements ProfileLastModifiedDao { @Override @Transactional public void updateLastModifiedDateAndIndexingStatus(String orcid, IndexingStatus indexingStatus) { - Query updateQuery = entityManager.createQuery("update ProfileEntity set lastModified = now(), indexingStatus = :indexingStatus where orcid = :orcid"); + Query updateQuery = entityManager.createQuery("update ProfileEntity p set p.lastModified = now(), p.indexingStatus = :indexingStatus where p.id = :orcid"); updateQuery.setParameter("orcid", orcid); updateQuery.setParameter("indexingStatus", indexingStatus); // Sets a timeout for this query @@ -57,7 +57,7 @@ public void updateLastModifiedDateWithoutResult(String orcid) { @Override @Transactional public boolean updateIndexingStatus(List orcidIds, IndexingStatus indexingStatus) { - Query updateQuery = entityManager.createQuery("update ProfileEntity set indexingStatus = :indexingStatus where orcid IN :orcid"); + Query updateQuery = entityManager.createQuery("update ProfileEntity p set p.indexingStatus = :indexingStatus where p.id IN :orcid"); updateQuery.setParameter("orcid", orcidIds); updateQuery.setParameter("indexingStatus", indexingStatus); return updateQuery.executeUpdate() > 0; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ResearchResourceDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ResearchResourceDaoImpl.java index f624fdcc633..92711fc771e 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ResearchResourceDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ResearchResourceDaoImpl.java @@ -30,10 +30,10 @@ public ResearchResourceEntity getResearchResource(String userOrcid, Long researc @Transactional @UpdateProfileLastModifiedAndIndexingStatus public boolean removeResearchResource(String userOrcid, Long researchResourceId) { - Query queryItem = entityManager.createQuery("delete from ResearchResourceItemEntity where research_resource_id=:researchResourceId"); + Query queryItem = entityManager.createQuery("delete from ResearchResourceItemEntity ri where ri.research_resource_id=:researchResourceId"); queryItem.setParameter("researchResourceId", researchResourceId); queryItem.executeUpdate(); - Query query = entityManager.createQuery("delete from ResearchResourceEntity where orcid=:userOrcid and id=:researchResourceId"); + Query query = entityManager.createQuery("delete from ResearchResourceEntity r where r.orcid=:userOrcid and r.id=:researchResourceId"); query.setParameter("userOrcid", userOrcid); query.setParameter("researchResourceId", researchResourceId); return query.executeUpdate() > 0 ? true : false; @@ -51,11 +51,11 @@ public List getByUser(String userOrcid, long lastModifie @Transactional @UpdateProfileLastModifiedAndIndexingStatus public void removeResearchResources(String userOrcid) { - Query queryItem = entityManager.createQuery("delete from ResearchResourceItemEntity where research_resource_id in (SELECT id from ResearchResourceEntity where orcid=:userOrcid)"); + Query queryItem = entityManager.createQuery("delete from ResearchResourceItemEntity ri where ri.research_resource_id in (SELECT r.id from ResearchResourceEntity r where r.orcid=:userOrcid)"); queryItem.setParameter("userOrcid", userOrcid); queryItem.executeUpdate(); - Query query = entityManager.createQuery("delete from ResearchResourceEntity where orcid = :userOrcid"); + Query query = entityManager.createQuery("delete from ResearchResourceEntity r where r.orcid = :userOrcid"); query.setParameter("userOrcid", userOrcid); query.executeUpdate(); } @@ -65,7 +65,7 @@ public void removeResearchResources(String userOrcid) { @Transactional public boolean updateVisibilities(String orcid, ArrayList researchResourceIds, String visibility) { Query query = entityManager - .createQuery("update ResearchResourceEntity set visibility=:visibility, lastModified=now() where id in (:researchResourceIds) and orcid=:orcid"); + .createQuery("update ResearchResourceEntity r set r.visibility=:visibility, r.lastModified=now() where r.id in (:researchResourceIds) and r.orcid=:orcid"); query.setParameter("researchResourceIds", researchResourceIds); query.setParameter("visibility", visibility); query.setParameter("orcid", orcid); diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ResearcherUrlDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ResearcherUrlDaoImpl.java index d8cefe47809..ec5fd2ace3c 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ResearcherUrlDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ResearcherUrlDaoImpl.java @@ -108,7 +108,7 @@ public boolean updateResearcherUrl(long id, String newUrl) { @Transactional @UpdateProfileLastModified public void removeAllResearcherUrls(String orcid) { - Query query = entityManager.createQuery("delete from ResearcherUrlEntity where orcid = :orcid"); + Query query = entityManager.createQuery("delete from ResearcherUrlEntity r where r.orcid = :orcid"); query.setParameter("orcid", orcid); query.executeUpdate(); } diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ShibbolethAccountDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ShibbolethAccountDaoImpl.java index 321071cea56..97f48cd35d7 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ShibbolethAccountDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ShibbolethAccountDaoImpl.java @@ -40,7 +40,7 @@ public List findByOrcid(String orcid) { @Override @Transactional public void removeByIdAndOrcid(Long id, String orcid) { - Query query = entityManager.createQuery("delete from ShibbolethAccountEntity where id = :id and orcid = :orcid"); + Query query = entityManager.createQuery("delete from ShibbolethAccountEntity s where s.id = :id and s.orcid = :orcid"); query.setParameter("id", id); query.setParameter("orcid", orcid); query.executeUpdate(); diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/SpamDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/SpamDaoImpl.java index 49214ffe525..ea2db322ca0 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/SpamDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/SpamDaoImpl.java @@ -52,7 +52,7 @@ public void createSpam(SpamEntity spam) { @Transactional @UpdateProfileLastModified public boolean removeSpam(String orcid) { - Query query = entityManager.createQuery("delete from SpamEntity where orcid = :orcid"); + Query query = entityManager.createQuery("delete from SpamEntity s where s.orcid = :orcid"); query.setParameter("orcid", orcid); query.executeUpdate(); return query.executeUpdate() > 0 ? true : false; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/UserConnectionDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/UserConnectionDaoImpl.java index a8f85cfd559..507f75d1245 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/UserConnectionDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/UserConnectionDaoImpl.java @@ -60,7 +60,7 @@ public List findByOrcid(String orcid) { @Override @Transactional public void deleteByOrcid(String orcid) { - Query query = entityManager.createQuery("delete from UserconnectionEntity where orcid = :orcid"); + Query query = entityManager.createQuery("delete from UserconnectionEntity u where u.orcid = :orcid"); query.setParameter("orcid", orcid); query.executeUpdate(); } diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ValidatedPublicProfileDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ValidatedPublicProfileDaoImpl.java index 29121caef65..f7ff690df07 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ValidatedPublicProfileDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ValidatedPublicProfileDaoImpl.java @@ -26,7 +26,7 @@ public List getNextRecordsToValidate(int batchSize) { @Override @Transactional public void removeOldRecords(Date maxAge) { - Query query = entityManager.createQuery("DELETE from ValidatedPublicProfileEntity where dateCreated < :maxAge"); + Query query = entityManager.createQuery("DELETE from ValidatedPublicProfileEntity v where v.dateCreated < :maxAge"); query.setParameter("maxAge", maxAge); query.executeUpdate(); } diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/WorkDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/WorkDaoImpl.java index cd33706c650..14947f72504 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/WorkDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/WorkDaoImpl.java @@ -144,7 +144,7 @@ public boolean removeWork(String orcid, Long workId) { @Override @Transactional public void removeWorks(String orcid) { - Query query = entityManager.createQuery("delete from WorkEntity where orcid = :orcid"); + Query query = entityManager.createQuery("delete from WorkEntity w where w.orcid = :orcid"); query.setParameter("orcid", orcid); query.executeUpdate(); } diff --git a/pom.xml b/pom.xml index 51697123664..6d5bd2dc546 100644 --- a/pom.xml +++ b/pom.xml @@ -30,6 +30,7 @@ the software. 4.9.1 3.1.9 2.15.4 + 6.1.5 2.1.1 1.9.6 4.4.0 @@ -132,7 +133,7 @@ the software. maven-surefire-plugin - -Duser.timezone=GMT + -Duser.timezone=GMT --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.nio=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED alphabetical From 9a6c3b42186a608c0d4f7b8065926b3430de90c2 Mon Sep 17 00:00:00 2001 From: Camelia Dumitru Date: Thu, 9 Apr 2026 23:57:42 +0100 Subject: [PATCH 32/77] Fixed the runtime for biography and changed jackson provider to use jakarta one --- orcid-api-common/pom.xml | 5 +++++ .../orcid/api/common/jaxb/OrcidJacksonJaxbJsonProvider.java | 6 +++--- .../api/common/jaxb/OrcidJacksonJaxbJsonProviderPretty.java | 6 +++--- .../org/orcid/persistence/dao/impl/BiographyDaoImpl.java | 4 +--- 4 files changed, 12 insertions(+), 9 deletions(-) diff --git a/orcid-api-common/pom.xml b/orcid-api-common/pom.xml index 5d10296bc0b..2af7dfb8ffe 100644 --- a/orcid-api-common/pom.xml +++ b/orcid-api-common/pom.xml @@ -54,6 +54,11 @@ org.glassfish.jersey.media jersey-media-json-jackson + + com.fasterxml.jackson.jakarta.rs + jackson-jakarta-rs-json-provider + ${jackson.version} + org.glassfish.jersey.core jersey-server diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/jaxb/OrcidJacksonJaxbJsonProvider.java b/orcid-api-common/src/main/java/org/orcid/api/common/jaxb/OrcidJacksonJaxbJsonProvider.java index e3e5042ca0a..28e1d80e380 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/jaxb/OrcidJacksonJaxbJsonProvider.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/jaxb/OrcidJacksonJaxbJsonProvider.java @@ -23,8 +23,8 @@ import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.jaxrs.cfg.Annotations; -import com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider; +import com.fasterxml.jackson.jakarta.rs.cfg.Annotations; +import com.fasterxml.jackson.jakarta.rs.json.JacksonXmlBindJsonProvider; /** * @author Will Simpson @@ -32,7 +32,7 @@ @Provider @Consumes({ MediaType.APPLICATION_JSON }) @Produces({ MediaType.APPLICATION_JSON }) -public class OrcidJacksonJaxbJsonProvider extends JacksonJaxbJsonProvider { +public class OrcidJacksonJaxbJsonProvider extends JacksonXmlBindJsonProvider { private JSONInputValidator jsonInputValidator = new JSONInputValidator(); diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/jaxb/OrcidJacksonJaxbJsonProviderPretty.java b/orcid-api-common/src/main/java/org/orcid/api/common/jaxb/OrcidJacksonJaxbJsonProviderPretty.java index 2dc77bc59d1..67bd66bb346 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/jaxb/OrcidJacksonJaxbJsonProviderPretty.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/jaxb/OrcidJacksonJaxbJsonProviderPretty.java @@ -26,8 +26,8 @@ import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider; -import com.fasterxml.jackson.jaxrs.cfg.Annotations; +import com.fasterxml.jackson.jakarta.rs.json.JacksonXmlBindJsonProvider; +import com.fasterxml.jackson.jakarta.rs.cfg.Annotations; @@ -38,7 +38,7 @@ @Provider @Consumes({ VND_ORCID_JSON, ORCID_JSON, "text/orcid+json" }) @Produces({ VND_ORCID_JSON, ORCID_JSON, "text/orcid+json" }) -public class OrcidJacksonJaxbJsonProviderPretty extends JacksonJaxbJsonProvider { +public class OrcidJacksonJaxbJsonProviderPretty extends JacksonXmlBindJsonProvider { private JSONInputValidator jsonInputValidator = new JSONInputValidator(); diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/BiographyDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/BiographyDaoImpl.java index d346b91fc10..7975355a7aa 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/BiographyDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/BiographyDaoImpl.java @@ -1,7 +1,5 @@ package org.orcid.persistence.dao.impl; -import java.math.BigInteger; - import jakarta.persistence.Query; import org.apache.commons.lang.StringUtils; @@ -56,7 +54,7 @@ public void persistBiography(String orcid, String biography, String visibility) public boolean exists(String orcid) { Query query = entityManager.createNativeQuery("select count(*) from biography where orcid=:orcid"); query.setParameter("orcid", orcid); - Long result = ((BigInteger)query.getSingleResult()).longValue(); + Long result = ((Number) query.getSingleResult()).longValue(); return (result != null && result > 0); } From d92b2737455ea4264ea9e49966f2552500c44cc0 Mon Sep 17 00:00:00 2001 From: Camelia Dumitru Date: Fri, 10 Apr 2026 08:44:34 +0100 Subject: [PATCH 33/77] Code compiles with jakarta changes left to fix the test suite --- orcid-pub-web/pom.xml | 30 +++++++++++++++++++ .../frontend/oauth2/RevokeController.java | 5 ++-- .../PublicRecordApiExceptionHandler.java | 2 +- pom.xml | 6 ++++ 4 files changed, 40 insertions(+), 3 deletions(-) diff --git a/orcid-pub-web/pom.xml b/orcid-pub-web/pom.xml index e1376807e67..868d2d97f66 100644 --- a/orcid-pub-web/pom.xml +++ b/orcid-pub-web/pom.xml @@ -57,6 +57,36 @@ spring-webmvc + + + jakarta.annotation + jakarta.annotation-api + + + jakarta.servlet + jakarta.servlet-api + + + jakarta.ws.rs + jakarta.ws.rs-api + + + + + org.freemarker + freemarker + + + + + org.apache.httpcomponents.core5 + httpcore5 + + + org.apache.httpcomponents.client5 + httpclient5 + + com.google.guava guava diff --git a/orcid-web/src/main/java/org/orcid/frontend/oauth2/RevokeController.java b/orcid-web/src/main/java/org/orcid/frontend/oauth2/RevokeController.java index ce6a98f0c2d..98a99c3f018 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/oauth2/RevokeController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/oauth2/RevokeController.java @@ -32,13 +32,14 @@ public class RevokeController { @RequestMapping public ResponseEntity revoke(HttpServletRequest request) throws IOException, URISyntaxException, InterruptedException { + String tokenToRevoke = request.getParameter("token"); + Response r = null; + if(Features.OAUTH_TOKEN_VALIDATION.isActive()) { // Forward the request to the authorization server - String tokenToRevoke = request.getParameter("token"); if (PojoUtil.isEmpty(tokenToRevoke)) { throw new IllegalArgumentException("Please provide the token to be param"); } - Response r = null; if(StringUtils.isNotBlank(request.getHeader("Authorization"))) { String authorization = request.getHeader("Authorization"); r = authorizationServerUtil.forwardTokenRevocationRequest(authorization, tokenToRevoke); diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/PublicRecordApiExceptionHandler.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/PublicRecordApiExceptionHandler.java index ce470145d69..6963e9268b4 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/PublicRecordApiExceptionHandler.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/PublicRecordApiExceptionHandler.java @@ -3,7 +3,7 @@ import java.util.Map; import jakarta.annotation.Resource; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import jakarta.ws.rs.core.Response; import org.orcid.core.exception.OrcidCoreExceptionMapper; diff --git a/pom.xml b/pom.xml index 1854e769f6f..39c4edbfc86 100644 --- a/pom.xml +++ b/pom.xml @@ -676,6 +676,12 @@ the software. 6.0.0 compile + + jakarta.annotation + jakarta.annotation-api + 2.1.1 + compile + com.fasterxml.jackson.core jackson-core From 8f9beba5f3d1b0e91626a4a7ad394ce197adfddb Mon Sep 17 00:00:00 2001 From: amontenegro Date: Fri, 10 Apr 2026 07:07:57 -0600 Subject: [PATCH 34/77] Fix the internal api, remove orcid-api-commin dependencies from the orcid-web package --- .../oauth/RevokeTokenEndpointFilter.java | 1 + .../resources/orcid-api-security-context.xml | 2 +- .../impl/InternalApiServiceDelegatorImpl.java | 4 +- .../orcid-internal-api-security-context.xml | 4 +- .../resources/orcid-t1-security-context.xml | 4 +- orcid-web/pom.xml | 5 -- .../resources/orcid-frontend-security.xml | 71 ++----------------- 7 files changed, 13 insertions(+), 78 deletions(-) diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/RevokeTokenEndpointFilter.java b/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/RevokeTokenEndpointFilter.java index e15084080b5..485c1842e2b 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/RevokeTokenEndpointFilter.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/RevokeTokenEndpointFilter.java @@ -20,6 +20,7 @@ import org.springframework.security.web.AuthenticationEntryPoint; import org.springframework.web.filter.GenericFilterBean; +@Deprecated(since = "Since the authorization server is made the default, we dont need this filter", forRemoval = true) public class RevokeTokenEndpointFilter extends GenericFilterBean { @Resource diff --git a/orcid-api-web/src/main/resources/orcid-api-security-context.xml b/orcid-api-web/src/main/resources/orcid-api-security-context.xml index 0978cb354e7..5d16ca69906 100644 --- a/orcid-api-web/src/main/resources/orcid-api-security-context.xml +++ b/orcid-api-web/src/main/resources/orcid-api-security-context.xml @@ -24,7 +24,7 @@ - + diff --git a/orcid-internal-api/src/main/java/org/orcid/internal/server/delegator/impl/InternalApiServiceDelegatorImpl.java b/orcid-internal-api/src/main/java/org/orcid/internal/server/delegator/impl/InternalApiServiceDelegatorImpl.java index 822c43ac477..1b129acf8da 100644 --- a/orcid-internal-api/src/main/java/org/orcid/internal/server/delegator/impl/InternalApiServiceDelegatorImpl.java +++ b/orcid-internal-api/src/main/java/org/orcid/internal/server/delegator/impl/InternalApiServiceDelegatorImpl.java @@ -57,8 +57,8 @@ public Response viewStatusText() { } @Override - @AccessControl(requiredScope = ScopePathType.INTERNAL_PERSON_LAST_MODIFIED, requestComesFromInternalApi = true) public Response viewPersonLastModified(String orcid) { + orcidSecurityManager.checkScopes(ScopePathType.ORCID_WORKS_READ_LIMITED); Date lastModified = profileEntityManagerReadOnly.getLastModifiedDate(orcid); LastModifiedResponse obj = new LastModifiedResponse(orcid, lastModified.toString()); Response response = Response.ok(obj).build(); @@ -91,8 +91,8 @@ public Response viewTogglz() { } @Override - @AccessControl(requiredScope = ScopePathType.INTERNAL, requestComesFromInternalApi = true) public Response findOrcidByEmail(String email) { + orcidSecurityManager.checkScopes(ScopePathType.INTERNAL); if (email != null && !email.isEmpty()) { if (emailManagerReadOnly.emailExists(email)) { String orcid = null; diff --git a/orcid-internal-api/src/main/resources/orcid-internal-api-security-context.xml b/orcid-internal-api/src/main/resources/orcid-internal-api-security-context.xml index 786b72f79da..d3bef2d66a7 100644 --- a/orcid-internal-api/src/main/resources/orcid-internal-api-security-context.xml +++ b/orcid-internal-api/src/main/resources/orcid-internal-api-security-context.xml @@ -7,9 +7,9 @@ - + - + diff --git a/orcid-pub-web/src/main/resources/orcid-t1-security-context.xml b/orcid-pub-web/src/main/resources/orcid-t1-security-context.xml index d394303c65d..07e5b2eeaf3 100644 --- a/orcid-pub-web/src/main/resources/orcid-t1-security-context.xml +++ b/orcid-pub-web/src/main/resources/orcid-t1-security-context.xml @@ -9,8 +9,8 @@ - - + + diff --git a/orcid-web/pom.xml b/orcid-web/pom.xml index aaa83e9bc18..b12ca9043da 100644 --- a/orcid-web/pom.xml +++ b/orcid-web/pom.xml @@ -25,11 +25,6 @@ orcid-utils ${project.parent.version} - - ${project.groupId} - orcid-api-common - ${project.parent.version} - diff --git a/orcid-web/src/main/resources/orcid-frontend-security.xml b/orcid-web/src/main/resources/orcid-frontend-security.xml index a6aa1802e29..c63b801052a 100644 --- a/orcid-web/src/main/resources/orcid-frontend-security.xml +++ b/orcid-web/src/main/resources/orcid-frontend-security.xml @@ -6,9 +6,7 @@ http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> - - - + @@ -17,7 +15,6 @@ xmlns="http://www.springframework.org/schema/beans"> - @@ -157,28 +154,11 @@ - - - - - - - - - - - + + - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From 4975bef140019bbd58349fed72b1890ebaed99a9 Mon Sep 17 00:00:00 2001 From: Camelia Dumitru Date: Mon, 13 Apr 2026 12:26:01 +0100 Subject: [PATCH 35/77] More test fixes --- .../src/main/resources/activemq.xml | 2 +- .../resources/orcid-activemq-web-context.xml | 8 +- .../test-orcid-activemq-web-context.xml | 8 +- .../orcid-activities-indexer-web-context.xml | 12 +-- .../orcid-activities-indexer-test-context.xml | 12 +-- orcid-api-common/pom.xml | 12 ++- .../api/common/jaxb/OrcidExceptionMapper.java | 4 +- .../citeproc/V3WorkToCiteprocTranslator.java | 3 +- .../citeproc/WorkToCiteprocTranslator.java | 3 +- .../orcid-api-common-public-v3-context.xml | 2 +- .../orcid-oauth2-api-common-config.xml | 4 +- .../common/filter/TokenTargetFilterTest.java | 5 +- .../src/test/resources/test-core-context.xml | 6 +- .../src/test/resources/test-db-context.xml | 6 +- .../test-orcid-api-common-context.xml | 6 +- .../resources/orcid-api-security-context.xml | 2 +- .../main/resources/orcid-api-web-context.xml | 4 +- ...mberV2ApiServiceDelegator_GeneralTest.java | 9 +- ...berV2ApiServiceVersionedDelegatorTest.java | 5 +- ...mberV3ApiServiceDelegator_GeneralTest.java | 9 +- .../src/test/resources/test-core-context.xml | 6 +- .../resources/test-orcid-api-web-context.xml | 2 +- orcid-core/pom.xml | 7 +- .../adapter/impl/MapperFacadeFactory.java | 10 +- .../adapter/v3/impl/MapperFacadeFactory.java | 10 +- .../org/orcid/core/oauth/OAuthErrorUtils.java | 4 - .../core/utils/SecurityContextTestUtils.java | 2 + .../resources/orcid-core-cache-config.xml | 4 +- .../src/main/resources/orcid-core-context.xml | 13 ++- .../InstitutionalSignInManagerTest.java | 10 ++ .../src/test/resources/test-core-context.xml | 6 +- .../resources/test-orcid-core-context.xml | 6 +- .../resources/orcid-internal-api-context.xml | 4 +- .../orcid-internal-api-security-context.xml | 2 +- .../src/test/resources/test-core-context.xml | 6 +- .../test-orcid-internal-api-context.xml | 2 +- .../orcid-message-listener-web-context.xml | 12 +-- .../orcid-message-listener-test-context.xml | 12 +-- .../dao/impl/IdentityProviderDaoImpl.java | 2 +- .../dao/impl/UserConnectionDaoImpl.java | 4 +- .../resources/orcid-persistence-context.xml | 10 +- .../src/test/resources/test-db-context.xml | 6 +- .../test-orcid-persistence-context.xml | 8 +- .../resources/orcid-t1-security-context.xml | 2 +- .../main/resources/orcid-t1-web-context.xml | 6 +- .../PublicV2ApiServiceDelegatorTest.java | 11 +- ...licV2ApiServiceVersionedDelegatorTest.java | 5 +- .../PublicV3ApiServiceDelegatorTest.java | 13 +-- .../src/test/resources/test-core-context.xml | 6 +- .../resources/test-orcid-t1-web-context.xml | 2 +- .../resources/orcid-scheduler-context.xml | 8 +- .../src/test/resources/test-core-context.xml | 6 +- .../test-orcid-scheduler-context.xml | 8 +- .../main/java/org/orcid/test/DBUnitTest.java | 11 +- orcid-web/pom.xml | 25 +++++ .../web/controllers/ClaimController.java | 1 - .../resources/orcid-core-context-spam.xml | 13 ++- .../resources/orcid-frontend-security.xml | 12 +-- .../resources/orcid-frontend-web-servlet.xml | 12 +-- .../AdminControllerLegacyTest.java | 100 +++++++++++++----- .../PublicProfileControllerTest.java | 29 +++-- .../src/test/resources/test-core-context.xml | 6 +- .../resources/test-frontend-web-servlet.xml | 6 +- pom.xml | 2 +- 64 files changed, 347 insertions(+), 207 deletions(-) diff --git a/orcid-activemq/src/main/resources/activemq.xml b/orcid-activemq/src/main/resources/activemq.xml index 9bf0447492f..236b83fd855 100644 --- a/orcid-activemq/src/main/resources/activemq.xml +++ b/orcid-activemq/src/main/resources/activemq.xml @@ -5,7 +5,7 @@ xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd - http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd + http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> + http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd + http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms.xsd" > diff --git a/orcid-activemq/src/test/resources/test-orcid-activemq-web-context.xml b/orcid-activemq/src/test/resources/test-orcid-activemq-web-context.xml index 0987f174187..9c6dfe94d2b 100644 --- a/orcid-activemq/src/test/resources/test-orcid-activemq-web-context.xml +++ b/orcid-activemq/src/test/resources/test-orcid-activemq-web-context.xml @@ -4,11 +4,11 @@ xmlns:cache="http://www.springframework.org/schema/cache" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:jms="http://www.springframework.org/schema/jms" xsi:schemaLocation=" - http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd - http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd + http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd + http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd - http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd - http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms-4.3.xsd" > + http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd + http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms.xsd" > diff --git a/orcid-activities-indexer/src/main/resources/orcid-activities-indexer-web-context.xml b/orcid-activities-indexer/src/main/resources/orcid-activities-indexer-web-context.xml index c67fdea6081..9c9a449c66a 100644 --- a/orcid-activities-indexer/src/main/resources/orcid-activities-indexer-web-context.xml +++ b/orcid-activities-indexer/src/main/resources/orcid-activities-indexer-web-context.xml @@ -26,13 +26,13 @@ xmlns:util="http://www.springframework.org/schema/util" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation=" - http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd - http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd + http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd + http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd - http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd - http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms-4.3.xsd - http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd - http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd"> + http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd + http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms.xsd + http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd + http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> diff --git a/orcid-activities-indexer/src/test/resources/orcid-activities-indexer-test-context.xml b/orcid-activities-indexer/src/test/resources/orcid-activities-indexer-test-context.xml index c386579ea2e..24626a41612 100644 --- a/orcid-activities-indexer/src/test/resources/orcid-activities-indexer-test-context.xml +++ b/orcid-activities-indexer/src/test/resources/orcid-activities-indexer-test-context.xml @@ -27,13 +27,13 @@ xmlns:tx="http://www.springframework.org/schema/tx" xmlns:mongo="http://www.springframework.org/schema/data/mongo" xsi:schemaLocation=" - http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd - http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd + http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd + http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd - http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd - http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms-4.3.xsd - http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd - http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd + http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd + http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms.xsd + http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd + http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo.xsd"> diff --git a/orcid-api-common/pom.xml b/orcid-api-common/pom.xml index 2af7dfb8ffe..e5075e57974 100644 --- a/orcid-api-common/pom.xml +++ b/orcid-api-common/pom.xml @@ -139,7 +139,17 @@ de.undercouch citeproc-java - 0.6 + 3.5.0 + + + org.jbibtex + jbibtex + 1.0.20 + + + org.antlr + antlr4-runtime + 4.13.1 org.togglz diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/jaxb/OrcidExceptionMapper.java b/orcid-api-common/src/main/java/org/orcid/api/common/jaxb/OrcidExceptionMapper.java index b6e363413f2..71664edecf0 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/jaxb/OrcidExceptionMapper.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/jaxb/OrcidExceptionMapper.java @@ -15,7 +15,7 @@ import org.apache.commons.lang.StringUtils; import org.apache.commons.lang3.exception.ExceptionUtils; import org.apache.solr.client.solrj.impl.HttpSolrClient.RemoteSolrException; -import org.jbibtex.TokenMgrError; +import org.jbibtex.TokenMgrException; import org.orcid.api.common.exception.JSONInputValidator; import org.orcid.api.common.filter.ApiVersionFilter; import org.orcid.api.common.util.ApiUtils; @@ -117,7 +117,7 @@ public Response toResponse(Throwable t) { logShortError(t, clientId); } else if (t instanceof WebApplicationException) { logShortError(t, clientId); - } else if (t instanceof TokenMgrError) { + } else if (t instanceof TokenMgrException) { logShortError(t, clientId); } else if (t instanceof InvalidPutCodeException) { logShortError(t, clientId); diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/writer/citeproc/V3WorkToCiteprocTranslator.java b/orcid-api-common/src/main/java/org/orcid/api/common/writer/citeproc/V3WorkToCiteprocTranslator.java index 1cc276860cb..1a5e7e45a29 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/writer/citeproc/V3WorkToCiteprocTranslator.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/writer/citeproc/V3WorkToCiteprocTranslator.java @@ -1,6 +1,5 @@ package org.orcid.api.common.writer.citeproc; -import java.io.IOException; import java.lang.reflect.Field; import java.text.Normalizer; import java.util.ArrayList; @@ -108,7 +107,7 @@ private CSLItemData translateFromBibtexCitation(Work work, boolean abreviate) { return item; } else throw new ParseException("Invalid Citation count"); - } catch (IOException | ParseException e) { + } catch (ParseException e) { return null; } } diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/writer/citeproc/WorkToCiteprocTranslator.java b/orcid-api-common/src/main/java/org/orcid/api/common/writer/citeproc/WorkToCiteprocTranslator.java index 53b8236247c..cf6cc7deae6 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/writer/citeproc/WorkToCiteprocTranslator.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/writer/citeproc/WorkToCiteprocTranslator.java @@ -1,6 +1,5 @@ package org.orcid.api.common.writer.citeproc; -import java.io.IOException; import java.lang.reflect.Field; import java.text.Normalizer; import java.util.ArrayList; @@ -108,7 +107,7 @@ private CSLItemData translateFromBibtexCitation(Work work, boolean abreviate) { return item; } else throw new ParseException("Invalid Citation count"); - } catch (IOException | ParseException e) { + } catch (ParseException e) { return null; } } diff --git a/orcid-api-common/src/main/resources/orcid-api-common-public-v3-context.xml b/orcid-api-common/src/main/resources/orcid-api-common-public-v3-context.xml index d0bc50aaf57..131e32d06be 100644 --- a/orcid-api-common/src/main/resources/orcid-api-common-public-v3-context.xml +++ b/orcid-api-common/src/main/resources/orcid-api-common-public-v3-context.xml @@ -2,6 +2,6 @@ + http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> diff --git a/orcid-api-common/src/main/resources/orcid-oauth2-api-common-config.xml b/orcid-api-common/src/main/resources/orcid-oauth2-api-common-config.xml index 00e6f07ad83..4a833ebf092 100644 --- a/orcid-api-common/src/main/resources/orcid-oauth2-api-common-config.xml +++ b/orcid-api-common/src/main/resources/orcid-oauth2-api-common-config.xml @@ -3,8 +3,8 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:sec="http://www.springframework.org/schema/security" xsi:schemaLocation=" - http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd - http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-5.6.xsd"> + http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd + http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-6.0.xsd"> + xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd + http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd + http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd"> + xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd + http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd + http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd"> + xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd + http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd + http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms.xsd"> + http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-6.0.xsd"> diff --git a/orcid-api-web/src/main/resources/orcid-api-web-context.xml b/orcid-api-web/src/main/resources/orcid-api-web-context.xml index 7cc1f32e0a3..1141fe5ad9c 100644 --- a/orcid-api-web/src/main/resources/orcid-api-web-context.xml +++ b/orcid-api-web/src/main/resources/orcid-api-web-context.xml @@ -4,8 +4,8 @@ xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd - http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd - http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd"> + http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd + http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_GeneralTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_GeneralTest.java index 5353847a9c8..c5779e7b6c0 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_GeneralTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_GeneralTest.java @@ -18,6 +18,7 @@ import jakarta.persistence.NoResultException; import jakarta.ws.rs.core.Response; +import org.apache.hc.core5.http.ParseException; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; @@ -808,7 +809,7 @@ public void testOrcidProfileCreate_CAN_CRUDOnUnclaimedAccounts() { } @Test - public void testSearchByQuery() { + public void testSearchByQuery() throws ParseException { Search search = new Search(); Result result = new Result(); result.setOrcidIdentifier(new OrcidIdentifier("some-orcid-id")); @@ -833,7 +834,7 @@ public void testSearchByQuery() { } @Test(expected = OrcidBadRequestException.class) - public void testSearchByQueryTooManyRows() { + public void testSearchByQueryTooManyRows() throws ParseException { Map> params = new HashMap<>(); params.put("rows", Arrays.asList(Integer.toString(OrcidSearchManager.MAX_SEARCH_ROWS + 20))); @@ -850,7 +851,7 @@ public void testSearchByQueryTooManyRows() { } @Test(expected = AccessControlException.class) - public void testSearchByQueryBadScope() { + public void testSearchByQueryBadScope() throws ParseException { OrcidSecurityManager orcidSecurityManager = Mockito.mock(OrcidSecurityManagerImpl.class); Mockito.doThrow(new AccessControlException("some problem with scope")).when(orcidSecurityManager).checkScopes(Mockito.any(ScopePathType.class)); @@ -867,7 +868,7 @@ public void testViewClientNonExistent() { } @Test - public void testViewClient() { + public void testViewClient() throws ParseException { Response response = serviceDelegator.viewClient("APP-6666666666666666"); assertNotNull(response.getEntity()); assertTrue(response.getEntity() instanceof ClientSummary); diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceVersionedDelegatorTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceVersionedDelegatorTest.java index 7da51376b08..9fbdf18ded1 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceVersionedDelegatorTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceVersionedDelegatorTest.java @@ -17,6 +17,7 @@ import jakarta.ws.rs.core.Response; import org.apache.commons.lang.time.DateUtils; +import org.apache.hc.core5.http.ParseException; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; @@ -1508,7 +1509,7 @@ public void test03ViewPerson() { } @Test - public void testSearchByQuery() { + public void testSearchByQuery() throws ParseException { MockitoAnnotations.initMocks(this); Search search = new Search(); Result result = new Result(); @@ -1536,7 +1537,7 @@ public void testViewClientNonExistent() { } @Test - public void testViewClient() { + public void testViewClient() throws ParseException { Response response = serviceDelegator.viewClient("APP-6666666666666666"); assertNotNull(response.getEntity()); assertTrue(response.getEntity() instanceof ClientSummary); diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_GeneralTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_GeneralTest.java index e1cdb08b2c1..1200bbeb4a4 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_GeneralTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_GeneralTest.java @@ -19,6 +19,7 @@ import jakarta.persistence.NoResultException; import jakarta.ws.rs.core.Response; +import org.apache.hc.core5.http.ParseException; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; @@ -807,7 +808,7 @@ public void testOrcidProfileCreate_CAN_CRUDOnUnclaimedAccounts() { } @Test - public void testSearchByQuery() { + public void testSearchByQuery() throws ParseException { Search search = new Search(); Result result = new Result(); result.setOrcidIdentifier(new OrcidIdentifier("some-orcid-id")); @@ -832,7 +833,7 @@ public void testSearchByQuery() { } @Test(expected = OrcidBadRequestException.class) - public void testSearchByQueryTooManyRows() { + public void testSearchByQueryTooManyRows() throws ParseException { Map> params = new HashMap<>(); params.put("rows", Arrays.asList(Integer.toString(OrcidSearchManager.MAX_SEARCH_ROWS + 20))); @@ -849,7 +850,7 @@ public void testSearchByQueryTooManyRows() { } @Test(expected = AccessControlException.class) - public void testSearchByQueryBadScope() { + public void testSearchByQueryBadScope() throws ParseException { OrcidSecurityManager orcidSecurityManager = Mockito.mock(OrcidSecurityManagerImpl.class); Mockito.doThrow(new AccessControlException("some problem with scope")).when(orcidSecurityManager).checkScopes(Mockito.any(ScopePathType.class)); @@ -866,7 +867,7 @@ public void testViewClientNonExistent() { } @Test - public void testViewClient() { + public void testViewClient() throws ParseException { Response response = serviceDelegator.viewClient("APP-6666666666666666"); assertNotNull(response.getEntity()); assertTrue(response.getEntity() instanceof ClientSummary); diff --git a/orcid-api-web/src/test/resources/test-core-context.xml b/orcid-api-web/src/test/resources/test-core-context.xml index 2c1cb08e585..f53e64ed165 100644 --- a/orcid-api-web/src/test/resources/test-core-context.xml +++ b/orcid-api-web/src/test/resources/test-core-context.xml @@ -2,9 +2,9 @@ + xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd + http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd + http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd"> + http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"> de.undercouch citeproc-java - 0.6 + 3.5.0 + + + org.jbibtex + jbibtex + 1.0.20 org.antlr diff --git a/orcid-core/src/main/java/org/orcid/core/adapter/impl/MapperFacadeFactory.java b/orcid-core/src/main/java/org/orcid/core/adapter/impl/MapperFacadeFactory.java index b8cd92758ef..fb82c94c6f0 100644 --- a/orcid-core/src/main/java/org/orcid/core/adapter/impl/MapperFacadeFactory.java +++ b/orcid-core/src/main/java/org/orcid/core/adapter/impl/MapperFacadeFactory.java @@ -153,6 +153,10 @@ public class MapperFacadeFactory implements FactoryBean { @Resource private EncryptionManager encryptionManager; + public void setEncryptionManager(EncryptionManager encryptionManager) { + this.encryptionManager = encryptionManager; + } + @Resource private WorkContributorRoleConverter workContributorsRoleConverter; @@ -1063,7 +1067,11 @@ public void mapBtoA(ClientDetailsEntity b, Client a, MappingContext context) { if (b.getClientSecrets() != null) { for (ClientSecretEntity entity : b.getClientSecrets()) { if (entity.isPrimary()) { - a.setDecryptedSecret(encryptionManager.decryptForInternalUse(entity.getClientSecret())); + String clientSecret = entity.getClientSecret(); + if (encryptionManager != null) { + clientSecret = encryptionManager.decryptForInternalUse(clientSecret); + } + a.setDecryptedSecret(clientSecret); } } } diff --git a/orcid-core/src/main/java/org/orcid/core/adapter/v3/impl/MapperFacadeFactory.java b/orcid-core/src/main/java/org/orcid/core/adapter/v3/impl/MapperFacadeFactory.java index 62594d32709..c5b358d2f84 100644 --- a/orcid-core/src/main/java/org/orcid/core/adapter/v3/impl/MapperFacadeFactory.java +++ b/orcid-core/src/main/java/org/orcid/core/adapter/v3/impl/MapperFacadeFactory.java @@ -185,6 +185,10 @@ public class MapperFacadeFactory implements FactoryBean { @Resource private EncryptionManager encryptionManager; + public void setEncryptionManager(EncryptionManager encryptionManager) { + this.encryptionManager = encryptionManager; + } + @Resource(name = "PIDNormalizationService") private PIDNormalizationService norm; @@ -1221,7 +1225,11 @@ public void mapBtoA(ClientDetailsEntity b, Client a, MappingContext context) { if (b.getClientSecrets() != null) { for (ClientSecretEntity entity : b.getClientSecrets()) { if (entity.isPrimary()) { - a.setDecryptedSecret(encryptionManager.decryptForInternalUse(entity.getClientSecret())); + String clientSecret = entity.getClientSecret(); + if (encryptionManager != null) { + clientSecret = encryptionManager.decryptForInternalUse(clientSecret); + } + a.setDecryptedSecret(clientSecret); } } } diff --git a/orcid-core/src/main/java/org/orcid/core/oauth/OAuthErrorUtils.java b/orcid-core/src/main/java/org/orcid/core/oauth/OAuthErrorUtils.java index 7a4ce53738a..d0fba7fa494 100644 --- a/orcid-core/src/main/java/org/orcid/core/oauth/OAuthErrorUtils.java +++ b/orcid-core/src/main/java/org/orcid/core/oauth/OAuthErrorUtils.java @@ -2,7 +2,6 @@ import jakarta.ws.rs.core.Response.Status; -import de.undercouch.citeproc.helper.tool.MissingArgumentException; import org.orcid.core.exception.ClientDeactivatedException; import org.orcid.core.exception.DeactivatedException; import org.orcid.core.exception.LockedException; @@ -36,9 +35,6 @@ public static OAuthError getOAuthError(Throwable t) { } else if(OrcidDeprecatedException.class.isAssignableFrom(t.getClass())) { error.setError(OAuthError.UNAUTHORIZED_CLIENT); error.setResponseStatus(Status.BAD_REQUEST); - } else if(MissingArgumentException.class.isAssignableFrom(t.getClass())) { - error.setError(OAuthError.UNAUTHORIZED_CLIENT); - error.setResponseStatus(Status.BAD_REQUEST); } else { error.setError(OAuthError.SERVER_ERROR); error.setResponseStatus(Status.INTERNAL_SERVER_ERROR); diff --git a/orcid-core/src/main/java/org/orcid/core/utils/SecurityContextTestUtils.java b/orcid-core/src/main/java/org/orcid/core/utils/SecurityContextTestUtils.java index 818ed373ba1..c3a29955331 100644 --- a/orcid-core/src/main/java/org/orcid/core/utils/SecurityContextTestUtils.java +++ b/orcid-core/src/main/java/org/orcid/core/utils/SecurityContextTestUtils.java @@ -38,6 +38,7 @@ static public void setUpSecurityContext(String userOrcid, String clientId, Scope securityContext.setAuthentication(mockedAuthentication); SecurityContextHolder.setContext(securityContext); when(mockedAuthentication.getPrincipal()).thenReturn(clientId); + when(mockedAuthentication.getName()).thenReturn(clientId); when(mockedAuthentication.getClientId()).thenReturn(clientId); when(mockedAuthentication.getUserOrcid()).thenReturn(userOrcid); Set scopes = new HashSet(); @@ -73,6 +74,7 @@ static public void setUpSecurityContextForClientOnly(String clientId, Set diff --git a/orcid-core/src/main/resources/orcid-core-context.xml b/orcid-core/src/main/resources/orcid-core-context.xml index a65d68f8663..b4e1574a3f5 100644 --- a/orcid-core/src/main/resources/orcid-core-context.xml +++ b/orcid-core/src/main/resources/orcid-core-context.xml @@ -4,11 +4,11 @@ xmlns:cache="http://www.springframework.org/schema/cache" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:jms="http://www.springframework.org/schema/jms" xsi:schemaLocation=" - http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd - http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd + http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd + http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd - http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd - http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms-4.3.xsd"> + http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd + http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms.xsd"> @@ -841,6 +841,7 @@ + @@ -922,7 +923,9 @@ - + + + diff --git a/orcid-core/src/test/java/org/orcid/core/manager/InstitutionalSignInManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/InstitutionalSignInManagerTest.java index ffaa140d2d1..a4d6cf78ad7 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/InstitutionalSignInManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/InstitutionalSignInManagerTest.java @@ -26,6 +26,7 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.orcid.core.utils.JsonUtils; +import org.orcid.core.manager.v3.read_only.ClientDetailsManagerReadOnly; import org.orcid.persistence.dao.UserConnectionDao; import org.orcid.persistence.jpa.entities.ClientDetailsEntity; import org.orcid.persistence.jpa.entities.UserconnectionEntity; @@ -51,6 +52,9 @@ public class InstitutionalSignInManagerTest { @Mock private NotificationManager mock_notificationManager; + @Mock + private ClientDetailsManagerReadOnly mock_clientDetailsManagerReadOnly; + @Resource private UserConnectionDao userConnectionDao; @@ -60,6 +64,9 @@ public class InstitutionalSignInManagerTest { @Resource private NotificationManager notificationManager; + @Resource(name = "clientDetailsManagerReadOnlyV3") + private ClientDetailsManagerReadOnly clientDetailsManagerReadOnly; + @Resource private InstitutionalSignInManager institutionalSignInManager; @@ -69,6 +76,7 @@ public void before() { TargetProxyHelper.injectIntoProxy(institutionalSignInManager, "userConnectionDao", mock_userConnectionDao); TargetProxyHelper.injectIntoProxy(institutionalSignInManager, "clientDetailsEntityCacheManager", mock_clientDetailsEntityCacheManager); TargetProxyHelper.injectIntoProxy(institutionalSignInManager, "notificationManager", mock_notificationManager); + TargetProxyHelper.injectIntoProxy(institutionalSignInManager, "clientDetailsManagerReadOnly", mock_clientDetailsManagerReadOnly); } @After @@ -77,6 +85,7 @@ public void after() { TargetProxyHelper.injectIntoProxy(institutionalSignInManager, "userConnectionDao", userConnectionDao); TargetProxyHelper.injectIntoProxy(institutionalSignInManager, "clientDetailsEntityCacheManager", clientDetailsEntityCacheManager); TargetProxyHelper.injectIntoProxy(institutionalSignInManager, "notificationManager", notificationManager); + TargetProxyHelper.injectIntoProxy(institutionalSignInManager, "clientDetailsManagerReadOnly", clientDetailsManagerReadOnly); } @Test @@ -99,6 +108,7 @@ public void testDontSendNotificationIfClientKnowUser() throws UnsupportedEncodin when(mock_userConnectionDao.findByProviderIdAndProviderUserIdAndIdType(anyString(), anyString(), anyString())).thenReturn(null); when(mock_clientDetailsEntityCacheManager.retrieveByIdP(anyString())).thenReturn(testClient); + when(mock_clientDetailsManagerReadOnly.doesClientKnowUser(clientId, userOrcid)).thenReturn(true); institutionalSignInManager.createUserConnectionAndNotify("idType", "remoteUserId", "displayName", "providerId", userOrcid, Collections. emptyMap()); diff --git a/orcid-core/src/test/resources/test-core-context.xml b/orcid-core/src/test/resources/test-core-context.xml index 2c1cb08e585..f53e64ed165 100644 --- a/orcid-core/src/test/resources/test-core-context.xml +++ b/orcid-core/src/test/resources/test-core-context.xml @@ -2,9 +2,9 @@ + xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd + http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd + http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd"> + xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd + http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd + http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms.xsd"> + http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd + http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> diff --git a/orcid-internal-api/src/main/resources/orcid-internal-api-security-context.xml b/orcid-internal-api/src/main/resources/orcid-internal-api-security-context.xml index d3bef2d66a7..0e798f1a43a 100644 --- a/orcid-internal-api/src/main/resources/orcid-internal-api-security-context.xml +++ b/orcid-internal-api/src/main/resources/orcid-internal-api-security-context.xml @@ -3,7 +3,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:sec="http://www.springframework.org/schema/security" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd - http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-5.6.xsd"> + http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-6.0.xsd"> diff --git a/orcid-internal-api/src/test/resources/test-core-context.xml b/orcid-internal-api/src/test/resources/test-core-context.xml index 2c1cb08e585..f53e64ed165 100644 --- a/orcid-internal-api/src/test/resources/test-core-context.xml +++ b/orcid-internal-api/src/test/resources/test-core-context.xml @@ -2,9 +2,9 @@ + xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd + http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd + http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd"> + http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"> + http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd + http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms.xsd + http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd + http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> diff --git a/orcid-message-listener/src/test/resources/orcid-message-listener-test-context.xml b/orcid-message-listener/src/test/resources/orcid-message-listener-test-context.xml index a4023e110b9..cd8924805cd 100644 --- a/orcid-message-listener/src/test/resources/orcid-message-listener-test-context.xml +++ b/orcid-message-listener/src/test/resources/orcid-message-listener-test-context.xml @@ -9,13 +9,13 @@ xmlns:tx="http://www.springframework.org/schema/tx" xmlns:mongo="http://www.springframework.org/schema/data/mongo" xsi:schemaLocation=" - http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd - http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd + http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd + http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd - http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd - http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms-4.3.xsd - http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd - http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd + http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd + http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms.xsd + http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd + http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo.xsd"> diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/IdentityProviderDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/IdentityProviderDaoImpl.java index 790aa233196..39ae2f7c3d8 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/IdentityProviderDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/IdentityProviderDaoImpl.java @@ -22,7 +22,7 @@ public IdentityProviderDaoImpl() { @Override public IdentityProviderEntity findByProviderid(String providerid) { - TypedQuery query = entityManager.createQuery("from IdentityProviderEntity where providerid = :providerid", IdentityProviderEntity.class); + TypedQuery query = entityManager.createQuery("from IdentityProviderEntity i where i.providerid = :providerid", IdentityProviderEntity.class); query.setParameter("providerid", providerid); List results = query.getResultList(); return results.isEmpty() ? null : results.get(0); diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/UserConnectionDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/UserConnectionDaoImpl.java index 507f75d1245..8c8bd66342e 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/UserConnectionDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/UserConnectionDaoImpl.java @@ -32,7 +32,7 @@ public void updateLoginInformation(UserconnectionPK pk) { @Override public UserconnectionEntity findByProviderIdAndProviderUserId(String providerUserId, String providerId) { TypedQuery query = entityManager - .createQuery("from UserconnectionEntity where id.provideruserid = :providerUserId and providerid = :providerId", UserconnectionEntity.class); + .createQuery("from UserconnectionEntity where id.provideruserid = :providerUserId and id.providerid = :providerId", UserconnectionEntity.class); query.setParameter("providerUserId", providerUserId); query.setParameter("providerId", providerId); List results = query.getResultList(); @@ -42,7 +42,7 @@ public UserconnectionEntity findByProviderIdAndProviderUserId(String providerUse @Override public UserconnectionEntity findByProviderIdAndProviderUserIdAndIdType(String providerUserId, String providerId, String idType) { TypedQuery query = entityManager.createQuery( - "from UserconnectionEntity where id.provideruserid = :providerUserId and providerid = :providerId and idType = :idType", UserconnectionEntity.class); + "from UserconnectionEntity where id.provideruserid = :providerUserId and id.providerid = :providerId and idType = :idType", UserconnectionEntity.class); query.setParameter("providerUserId", providerUserId); query.setParameter("providerId", providerId); query.setParameter("idType", idType); diff --git a/orcid-persistence/src/main/resources/orcid-persistence-context.xml b/orcid-persistence/src/main/resources/orcid-persistence-context.xml index 3bbb6e793ff..8c979469f77 100644 --- a/orcid-persistence/src/main/resources/orcid-persistence-context.xml +++ b/orcid-persistence/src/main/resources/orcid-persistence-context.xml @@ -7,11 +7,11 @@ xmlns:jms="http://www.springframework.org/schema/jms" xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation=" - http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd - http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd - http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd - http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd - http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms-4.3.xsd + http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd + http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd + http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd + http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd + http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd" > diff --git a/orcid-persistence/src/test/resources/test-db-context.xml b/orcid-persistence/src/test/resources/test-db-context.xml index a91fb33d198..dea93d0dbb5 100644 --- a/orcid-persistence/src/test/resources/test-db-context.xml +++ b/orcid-persistence/src/test/resources/test-db-context.xml @@ -2,9 +2,9 @@ + xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd + http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd + http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd"> + xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd + http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd + http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd + http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms.xsd"> + http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-6.0.xsd"> diff --git a/orcid-pub-web/src/main/resources/orcid-t1-web-context.xml b/orcid-pub-web/src/main/resources/orcid-t1-web-context.xml index 61e050efb60..fd0020a3538 100644 --- a/orcid-pub-web/src/main/resources/orcid-t1-web-context.xml +++ b/orcid-pub-web/src/main/resources/orcid-t1-web-context.xml @@ -5,9 +5,9 @@ xmlns:aop="http://www.springframework.org/schema/aop" xmlns:task="http://www.springframework.org/schema/task" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd - http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd - http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd - http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.3.xsd"> + http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd + http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd + http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd"> diff --git a/orcid-pub-web/src/test/java/org/orcid/api/publicV2/server/PublicV2ApiServiceDelegatorTest.java b/orcid-pub-web/src/test/java/org/orcid/api/publicV2/server/PublicV2ApiServiceDelegatorTest.java index 2e71d8ed042..e5a73d9f004 100644 --- a/orcid-pub-web/src/test/java/org/orcid/api/publicV2/server/PublicV2ApiServiceDelegatorTest.java +++ b/orcid-pub-web/src/test/java/org/orcid/api/publicV2/server/PublicV2ApiServiceDelegatorTest.java @@ -15,6 +15,7 @@ import jakarta.ws.rs.WebApplicationException; import jakarta.ws.rs.core.Response; +import org.apache.hc.core5.http.ParseException; import org.junit.*; import org.junit.runner.RunWith; import org.mockito.Matchers; @@ -1178,7 +1179,7 @@ public void testGetPrivateResearcherUrlUsingToken() { } @Test - public void testSearchByQuery() { + public void testSearchByQuery() throws ParseException { Search search = new Search(); Result result = new Result(); result.setOrcidIdentifier(new OrcidIdentifier("some-orcid-id")); @@ -1203,7 +1204,7 @@ public void testSearchByQuery() { } @Test(expected = OrcidBadRequestException.class) - public void testSearchByQueryTooManyRows() { + public void testSearchByQueryTooManyRows() throws ParseException { Map> params = new HashMap<>(); params.put("rows", Arrays.asList(Integer.toString(OrcidSearchManager.MAX_SEARCH_ROWS + 20))); @@ -1216,7 +1217,7 @@ public void testSearchByQueryTooManyRows() { } @Test(expected = SearchStartParameterLimitExceededException.class) - public void testSearchByQueryIllegalStart() { + public void testSearchByQueryIllegalStart() throws ParseException { Map> params = new HashMap<>(); params.put("start", Arrays.asList(Integer.toString(OrcidSearchManager.MAX_SEARCH_START + 20))); @@ -1233,7 +1234,7 @@ public void testSearchByQueryIllegalStart() { } @Test - public void testSearchByQueryLegalStart() { + public void testSearchByQueryLegalStart() throws ParseException { Map> params = new HashMap<>(); params.put("start", Arrays.asList(Integer.toString(OrcidSearchManager.MAX_SEARCH_START))); @@ -1261,7 +1262,7 @@ public void testViewClientNonExistent() { } @Test - public void testViewClient() { + public void testViewClient() throws ParseException { Response response = serviceDelegator.viewClient("APP-6666666666666666"); assertNotNull(response.getEntity()); assertTrue(response.getEntity() instanceof ClientSummary); diff --git a/orcid-pub-web/src/test/java/org/orcid/api/publicV2/server/PublicV2ApiServiceVersionedDelegatorTest.java b/orcid-pub-web/src/test/java/org/orcid/api/publicV2/server/PublicV2ApiServiceVersionedDelegatorTest.java index 1b977755d49..2923396203c 100644 --- a/orcid-pub-web/src/test/java/org/orcid/api/publicV2/server/PublicV2ApiServiceVersionedDelegatorTest.java +++ b/orcid-pub-web/src/test/java/org/orcid/api/publicV2/server/PublicV2ApiServiceVersionedDelegatorTest.java @@ -18,6 +18,7 @@ import jakarta.ws.rs.core.Response; import org.apache.commons.lang.time.DateUtils; +import org.apache.hc.core5.http.ParseException; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; @@ -778,7 +779,7 @@ public void test03ViewPerson() { } @Test - public void testSearchByQuery() { + public void testSearchByQuery() throws ParseException { MockitoAnnotations.initMocks(this); Search search = new Search(); Result result = new Result(); @@ -806,7 +807,7 @@ public void testViewClientNonExistent() { } @Test - public void testViewClient() { + public void testViewClient() throws ParseException { Response response = serviceDelegator.viewClient("APP-6666666666666666"); assertNotNull(response.getEntity()); assertTrue(response.getEntity() instanceof ClientSummary); diff --git a/orcid-pub-web/src/test/java/org/orcid/api/publicV3/server/PublicV3ApiServiceDelegatorTest.java b/orcid-pub-web/src/test/java/org/orcid/api/publicV3/server/PublicV3ApiServiceDelegatorTest.java index 9d80075c524..f1bd4e59461 100644 --- a/orcid-pub-web/src/test/java/org/orcid/api/publicV3/server/PublicV3ApiServiceDelegatorTest.java +++ b/orcid-pub-web/src/test/java/org/orcid/api/publicV3/server/PublicV3ApiServiceDelegatorTest.java @@ -22,6 +22,7 @@ import jakarta.ws.rs.WebApplicationException; import jakarta.ws.rs.core.Response; +import org.apache.hc.core5.http.ParseException; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; @@ -1214,7 +1215,7 @@ public void testGetPrivateResearcherUrlUsingToken() { } @Test - public void testSearchByQuery() { + public void testSearchByQuery() throws ParseException { Search search = new Search(); Result result = new Result(); result.setOrcidIdentifier(new OrcidIdentifier("some-orcid-id")); @@ -1239,7 +1240,7 @@ public void testSearchByQuery() { } @Test(expected = OrcidBadRequestException.class) - public void testSearchByQueryTooManyRows() { + public void testSearchByQueryTooManyRows() throws ParseException { Map> params = new HashMap<>(); params.put("rows", Arrays.asList(Integer.toString(OrcidSearchManager.MAX_SEARCH_ROWS + 20))); @@ -1252,7 +1253,7 @@ public void testSearchByQueryTooManyRows() { } @Test(expected = SearchStartParameterLimitExceededException.class) - public void testSearchByQueryIllegalStart() { + public void testSearchByQueryIllegalStart() throws ParseException { Map> params = new HashMap<>(); params.put("start", Arrays.asList(Integer.toString(OrcidSearchManager.MAX_SEARCH_START + 20))); @@ -1269,7 +1270,7 @@ public void testSearchByQueryIllegalStart() { } @Test - public void testSearchByQueryLegalStart() { + public void testSearchByQueryLegalStart() throws ParseException { Map> params = new HashMap<>(); params.put("start", Arrays.asList(Integer.toString(OrcidSearchManager.MAX_SEARCH_START))); @@ -1297,7 +1298,7 @@ public void testViewClientNonExistent() { } @Test - public void testViewClientSummary() { + public void testViewClientSummary() throws ParseException { Response response = serviceDelegator.viewClient("APP-6666666666666666"); assertNotNull(response.getEntity()); assertTrue(response.getEntity() instanceof ClientSummary); @@ -2162,7 +2163,7 @@ public void testViewClient() { } @Test - public void testExpandedSearchByQueryNoRowsParamSet() { + public void testExpandedSearchByQueryNoRowsParamSet() throws ParseException { ExpandedSearch search = new ExpandedSearch(); ExpandedResult result = new ExpandedResult(); search.getResults().add(result); diff --git a/orcid-pub-web/src/test/resources/test-core-context.xml b/orcid-pub-web/src/test/resources/test-core-context.xml index 2c1cb08e585..f53e64ed165 100644 --- a/orcid-pub-web/src/test/resources/test-core-context.xml +++ b/orcid-pub-web/src/test/resources/test-core-context.xml @@ -2,9 +2,9 @@ + xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd + http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd + http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd"> + http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"> + xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd + http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd + http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms.xsd + http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd"> diff --git a/orcid-scheduler-web/src/test/resources/test-core-context.xml b/orcid-scheduler-web/src/test/resources/test-core-context.xml index 2c1cb08e585..f53e64ed165 100644 --- a/orcid-scheduler-web/src/test/resources/test-core-context.xml +++ b/orcid-scheduler-web/src/test/resources/test-core-context.xml @@ -2,9 +2,9 @@ + xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd + http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd + http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd"> + xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd + http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd + http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd + http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms.xsd"> flatXMLDataFiles) throws Exception { diff --git a/orcid-web/pom.xml b/orcid-web/pom.xml index b12ca9043da..6b6e567058c 100644 --- a/orcid-web/pom.xml +++ b/orcid-web/pom.xml @@ -25,6 +25,25 @@ orcid-utils ${project.parent.version} + + ${project.parent.groupId} + orcid-model + + + ${project.parent.groupId} + orcid-core + ${project.parent.version} + + + ${project.parent.groupId} + orcid-persistence + ${project.parent.version} + + + ${project.parent.groupId} + orcid-api-common + ${project.parent.version} + @@ -146,6 +165,12 @@ jakarta.validation jakarta.validation-api + + org.glassfish + jakarta.el + 4.0.2 + runtime + org.freemarker freemarker diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/ClaimController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/ClaimController.java index daed9a7c6b3..df1cc9ed3b2 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/ClaimController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/ClaimController.java @@ -11,7 +11,6 @@ import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.codec.binary.Base64; -import org.apache.jena.sparql.function.library.e; import org.jasypt.exceptions.EncryptionOperationNotPossibleException; import org.orcid.core.exception.OrcidBadRequestException; import org.orcid.core.manager.EncryptionManager; diff --git a/orcid-web/src/main/resources/orcid-core-context-spam.xml b/orcid-web/src/main/resources/orcid-core-context-spam.xml index 87fcfeedcc0..c216ad75f24 100644 --- a/orcid-web/src/main/resources/orcid-core-context-spam.xml +++ b/orcid-web/src/main/resources/orcid-core-context-spam.xml @@ -4,11 +4,11 @@ xmlns:cache="http://www.springframework.org/schema/cache" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:jms="http://www.springframework.org/schema/jms" xsi:schemaLocation=" - http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd - http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd + http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd + http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd - http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd - http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms-4.3.xsd"> + http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd + http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms.xsd"> @@ -820,6 +820,7 @@ + @@ -901,7 +902,9 @@ - + + + diff --git a/orcid-web/src/main/resources/orcid-frontend-security.xml b/orcid-web/src/main/resources/orcid-frontend-security.xml index c63b801052a..18d8725ef17 100644 --- a/orcid-web/src/main/resources/orcid-frontend-security.xml +++ b/orcid-web/src/main/resources/orcid-frontend-security.xml @@ -2,7 +2,7 @@ @@ -161,7 +161,7 @@ - @@ -172,7 +172,7 @@ - @@ -201,7 +201,7 @@ - @@ -223,7 +223,7 @@ - @@ -328,7 +328,7 @@ + method="POST" access="ROLE_USER" /> + http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd + http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd + http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> diff --git a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/AdminControllerLegacyTest.java b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/AdminControllerLegacyTest.java index a7963d916ae..011c311b6c8 100644 --- a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/AdminControllerLegacyTest.java +++ b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/AdminControllerLegacyTest.java @@ -55,6 +55,8 @@ import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.web.WebAppConfiguration; import org.springframework.test.util.ReflectionTestUtils; +import org.springframework.transaction.PlatformTransactionManager; +import org.springframework.transaction.support.TransactionTemplate; import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; @@ -89,6 +91,12 @@ public class AdminControllerLegacyTest extends BaseControllerTest { @Resource(name = "profileEntityManagerV3") private ProfileEntityManager profileEntityManager; + + @Resource + private EncryptionManager encryptionManager; + + @Resource(name = "transactionManager") + private PlatformTransactionManager transactionManager; @Mock private EmailManager mockEmailManager; @@ -481,40 +489,82 @@ public void findIdsTest() { @Test public void resetPasswordTest() throws IllegalAccessException, UnsupportedEncodingException { - ProfileEntity p = profileEntityManager.findByOrcid("4444-4444-4444-4441"); - assertEquals("e9adO9I4UpBwqI5tGR+qDodvAZ7mlcISn+T+kyqXPf2Z6PPevg7JijqYr6KGO8VOskOYqVOEK2FEDwebxWKGDrV/TQ9gRfKWZlzxssxsOnA=", p.getPassword()); - AdminChangePassword form = new AdminChangePassword(); - form.setOrcidOrEmail("4444-4444-4444-4441"); - form.setPassword("password1"); - adminController.resetPassword(mockRequest, mockResponse, form); - p = profileEntityManager.findByOrcid("4444-4444-4444-4441"); - assertFalse("e9adO9I4UpBwqI5tGR+qDodvAZ7mlcISn+T+kyqXPf2Z6PPevg7JijqYr6KGO8VOskOYqVOEK2FEDwebxWKGDrV/TQ9gRfKWZlzxssxsOnA=".equals(p.getPassword())); + String newPassword = "brandNewPass123"; + TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager); + transactionTemplate.execute(status -> { + try { + ProfileEntity p = profileEntityManager.findByOrcid("4444-4444-4444-4441"); + assertEquals("e9adO9I4UpBwqI5tGR+qDodvAZ7mlcISn+T+kyqXPf2Z6PPevg7JijqYr6KGO8VOskOYqVOEK2FEDwebxWKGDrV/TQ9gRfKWZlzxssxsOnA=", p.getPassword()); + AdminChangePassword form = new AdminChangePassword(); + form.setOrcidOrEmail("4444-4444-4444-4441"); + form.setPassword(newPassword); + adminController.resetPassword(mockRequest, mockResponse, form); + assertNull(form.getError()); + } catch (IllegalAccessException | UnsupportedEncodingException e) { + throw new RuntimeException(e); + } + return null; + }); + + transactionTemplate.execute(status -> { + ProfileEntity p = profileEntityManager.findByOrcid("4444-4444-4444-4441"); + assertTrue(encryptionManager.hashMatches(newPassword, p.getPassword())); + return null; + }); } @Test public void resetPasswordUsingEmailTest() throws IllegalAccessException, UnsupportedEncodingException { TargetProxyHelper.injectIntoProxy(adminController, "emailManagerReadOnly", mockEmailManagerReadOnly); - - ProfileEntity p = profileEntityManager.findByOrcid("4444-4444-4444-4442"); - assertEquals("e9adO9I4UpBwqI5tGR+qDodvAZ7mlcISn+T+kyqXPf2Z6PPevg7JijqYr6KGO8VOskOYqVOEK2FEDwebxWKGDrV/TQ9gRfKWZlzxssxsOnA=", p.getPassword()); - AdminChangePassword form = new AdminChangePassword(); - form.setOrcidOrEmail("michael@bentine.com"); - form.setPassword("password1"); - adminController.resetPassword(mockRequest, mockResponse, form); - p = profileEntityManager.findByOrcid("4444-4444-4444-4442"); - assertFalse("e9adO9I4UpBwqI5tGR+qDodvAZ7mlcISn+T+kyqXPf2Z6PPevg7JijqYr6KGO8VOskOYqVOEK2FEDwebxWKGDrV/TQ9gRfKWZlzxssxsOnA=".equals(p.getPassword())); + String newPassword = "brandNewPass123"; + + TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager); + transactionTemplate.execute(status -> { + try { + ProfileEntity p = profileEntityManager.findByOrcid("4444-4444-4444-4442"); + assertEquals("e9adO9I4UpBwqI5tGR+qDodvAZ7mlcISn+T+kyqXPf2Z6PPevg7JijqYr6KGO8VOskOYqVOEK2FEDwebxWKGDrV/TQ9gRfKWZlzxssxsOnA=", p.getPassword()); + AdminChangePassword form = new AdminChangePassword(); + form.setOrcidOrEmail("michael@bentine.com"); + form.setPassword(newPassword); + adminController.resetPassword(mockRequest, mockResponse, form); + assertNull(form.getError()); + } catch (IllegalAccessException | UnsupportedEncodingException e) { + throw new RuntimeException(e); + } + return null; + }); + + transactionTemplate.execute(status -> { + ProfileEntity p = profileEntityManager.findByOrcid("4444-4444-4444-4442"); + assertTrue(encryptionManager.hashMatches(newPassword, p.getPassword())); + return null; + }); } @Test public void resetPasswordTestOrcidURL() throws IllegalAccessException, UnsupportedEncodingException { - ProfileEntity p = profileEntityManager.findByOrcid("4444-4444-4444-4443"); - assertEquals("e9adO9I4UpBwqI5tGR+qDodvAZ7mlcISn+T+kyqXPf2Z6PPevg7JijqYr6KGO8VOskOYqVOEK2FEDwebxWKGDrV/TQ9gRfKWZlzxssxsOnA=", p.getPassword()); - AdminChangePassword form = new AdminChangePassword(); - form.setOrcidOrEmail("https://orcid.org/4444-4444-4444-4443"); - form.setPassword("password1"); - adminController.resetPassword(mockRequest, mockResponse, form); - p = profileEntityManager.findByOrcid("4444-4444-4444-4443"); - assertFalse("e9adO9I4UpBwqI5tGR+qDodvAZ7mlcISn+T+kyqXPf2Z6PPevg7JijqYr6KGO8VOskOYqVOEK2FEDwebxWKGDrV/TQ9gRfKWZlzxssxsOnA=".equals(p.getPassword())); + String newPassword = "brandNewPass123"; + TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager); + transactionTemplate.execute(status -> { + try { + ProfileEntity p = profileEntityManager.findByOrcid("4444-4444-4444-4443"); + assertEquals("e9adO9I4UpBwqI5tGR+qDodvAZ7mlcISn+T+kyqXPf2Z6PPevg7JijqYr6KGO8VOskOYqVOEK2FEDwebxWKGDrV/TQ9gRfKWZlzxssxsOnA=", p.getPassword()); + AdminChangePassword form = new AdminChangePassword(); + form.setOrcidOrEmail("https://orcid.org/4444-4444-4444-4443"); + form.setPassword(newPassword); + adminController.resetPassword(mockRequest, mockResponse, form); + assertNull(form.getError()); + } catch (IllegalAccessException | UnsupportedEncodingException e) { + throw new RuntimeException(e); + } + return null; + }); + + transactionTemplate.execute(status -> { + ProfileEntity p = profileEntityManager.findByOrcid("4444-4444-4444-4443"); + assertTrue(encryptionManager.hashMatches(newPassword, p.getPassword())); + return null; + }); } @Test diff --git a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/PublicProfileControllerTest.java b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/PublicProfileControllerTest.java index d7799f5a406..ad6c58ea362 100644 --- a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/PublicProfileControllerTest.java +++ b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/PublicProfileControllerTest.java @@ -51,6 +51,8 @@ import org.orcid.test.TargetProxyHelper; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.web.WebAppConfiguration; +import org.springframework.transaction.PlatformTransactionManager; +import org.springframework.transaction.support.TransactionTemplate; import org.springframework.web.server.MethodNotAllowedException; import org.springframework.web.servlet.ModelAndView; @@ -91,6 +93,9 @@ public class PublicProfileControllerTest extends DBUnitTest { @Resource private EncryptionManager encryptionManager; + + @Resource(name = "transactionManager") + private PlatformTransactionManager transactionManager; @Mock private HttpServletRequest request = Mockito.mock(HttpServletRequest.class); @@ -235,11 +240,16 @@ public void testViewValidUser() { @Test public void testViewClaimedUserWhenIsLongEnough() { + TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager); + //Update the submission date so it is long enough - ProfileEntity profileEntity = profileDao.find(unclaimedUserOrcid); - profileEntity.setSubmissionDate(DateUtils.addDays(new Date(), -10)); - profileDao.merge(profileEntity); - profileDao.flush(); + transactionTemplate.execute(status -> { + ProfileEntity profileEntity = profileDao.find(unclaimedUserOrcid); + profileEntity.setSubmissionDate(DateUtils.addDays(new Date(), -10)); + profileDao.merge(profileEntity); + profileDao.flush(); + return null; + }); ModelAndView mav = publicProfileController.publicPreview(request, response, 1, 0, 15, unclaimedUserOrcid); assertEquals("public_profile_v3", mav.getViewName()); Map model = mav.getModel(); @@ -251,10 +261,13 @@ public void testViewClaimedUserWhenIsLongEnough() { assertFalse(model.containsKey("noIndex")); //Update the submission date so it is not long enough - profileEntity = profileDao.find(unclaimedUserOrcid); - profileEntity.setSubmissionDate(new Date()); - profileDao.merge(profileEntity); - profileDao.flush(); + transactionTemplate.execute(status -> { + ProfileEntity profileEntity = profileDao.find(unclaimedUserOrcid); + profileEntity.setSubmissionDate(new Date()); + profileDao.merge(profileEntity); + profileDao.flush(); + return null; + }); } @Test diff --git a/orcid-web/src/test/resources/test-core-context.xml b/orcid-web/src/test/resources/test-core-context.xml index 2c1cb08e585..f53e64ed165 100644 --- a/orcid-web/src/test/resources/test-core-context.xml +++ b/orcid-web/src/test/resources/test-core-context.xml @@ -2,9 +2,9 @@ + xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd + http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd + http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd"> + xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd + http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd + http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd"> org.jbibtex jbibtex - 1.0.7 + 1.0.20 net.sf.opencsv From 34abfefcb49f53d14440370c575d3337269e638a Mon Sep 17 00:00:00 2001 From: Camelia Dumitru Date: Mon, 13 Apr 2026 15:42:43 +0100 Subject: [PATCH 36/77] test fixes for public and member api from broken tests related with spring6 and hibernate upgrade --- .../main/resources/orcid-api-web-context.xml | 2 ++ ...berV2ApiServiceVersionedDelegatorTest.java | 19 +++++++++--- ...MemberV3ApiServiceDelegatorErrorsTest.java | 19 +++++++++--- .../impl/OrcidSecurityManagerImpl.java | 7 ++++- .../core/manager/impl/OrcidUrlManager.java | 31 +++++++++++++++++++ .../core/manager/NotificationManagerTest.java | 7 +++++ .../manager/v3/FindMyStuffManagerTest.java | 7 +++++ .../manager/v3/NotificationManagerTest.java | 7 +++++ .../orcid/core/oauth/OAuthErrorUtilsTest.java | 9 +++--- .../main/resources/orcid-t1-web-context.xml | 2 ++ ...licV2ApiServiceVersionedDelegatorTest.java | 19 +++++++++--- .../resources/orcid-frontend-web-servlet.xml | 2 ++ 12 files changed, 111 insertions(+), 20 deletions(-) diff --git a/orcid-api-web/src/main/resources/orcid-api-web-context.xml b/orcid-api-web/src/main/resources/orcid-api-web-context.xml index 1141fe5ad9c..38e48372d16 100644 --- a/orcid-api-web/src/main/resources/orcid-api-web-context.xml +++ b/orcid-api-web/src/main/resources/orcid-api-web-context.xml @@ -11,6 +11,8 @@ + + diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceVersionedDelegatorTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceVersionedDelegatorTest.java index 9fbdf18ded1..f0e4a850319 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceVersionedDelegatorTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceVersionedDelegatorTest.java @@ -64,6 +64,8 @@ import org.orcid.test.TargetProxyHelper; import org.springframework.beans.factory.annotation.Value; import org.springframework.test.context.ContextConfiguration; +import org.springframework.transaction.PlatformTransactionManager; +import org.springframework.transaction.support.TransactionTemplate; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) @@ -88,6 +90,9 @@ public class MemberV2ApiServiceVersionedDelegatorTest extends DBUnitTest { @Resource private ProfileDao profileDao; + + @Resource + private PlatformTransactionManager transactionManager; @Resource private V2VersionConverterChain v2VersionConverterChain; @@ -1994,10 +1999,14 @@ private void assertProtocol(String url, boolean isHttps) { } private void updateProfileSubmissionDate(String orcid, int increment) { - // Update the submission date so it is long enough - ProfileEntity profileEntity = profileDao.find(orcid); - profileEntity.setSubmissionDate(DateUtils.addDays(new Date(), increment)); - profileDao.merge(profileEntity); - profileDao.flush(); + TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager); + transactionTemplate.execute(status -> { + // Update the submission date so it is long enough + ProfileEntity profileEntity = profileDao.find(orcid); + profileEntity.setSubmissionDate(DateUtils.addDays(new Date(), increment)); + profileDao.merge(profileEntity); + profileDao.flush(); + return null; + }); } } diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegatorErrorsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegatorErrorsTest.java index 5ed40a4dfbb..cea91278298 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegatorErrorsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegatorErrorsTest.java @@ -63,6 +63,8 @@ import org.orcid.test.OrcidJUnit4ClassRunner; import org.springframework.beans.factory.annotation.Value; import org.springframework.test.context.ContextConfiguration; +import org.springframework.transaction.PlatformTransactionManager; +import org.springframework.transaction.support.TransactionTemplate; @RunWith(OrcidJUnit4ClassRunner.class) @@ -79,6 +81,9 @@ public class MemberV3ApiServiceDelegatorErrorsTest extends DBUnitTest { @Resource private ProfileDao profileDao; + @Resource + private PlatformTransactionManager transactionManager; + @Value("${org.orcid.core.works.bulk.read.max:100}") private Long bulkReadSize; @@ -2083,10 +2088,14 @@ private void assertProtocol(String url) { } private void updateProfileSubmissionDate(String orcid, int increment) { - // Update the submission date so it is long enough - ProfileEntity profileEntity = profileDao.find(orcid); - profileEntity.setSubmissionDate(DateUtils.addDays(new Date(), increment)); - profileDao.merge(profileEntity); - profileDao.flush(); + TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager); + transactionTemplate.execute(status -> { + // Update the submission date so it is long enough + ProfileEntity profileEntity = profileDao.find(orcid); + profileEntity.setSubmissionDate(DateUtils.addDays(new Date(), increment)); + profileDao.merge(profileEntity); + profileDao.flush(); + return null; + }); } } diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/OrcidSecurityManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/OrcidSecurityManagerImpl.java index 55c43ff10a4..894dbefe264 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/OrcidSecurityManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/OrcidSecurityManagerImpl.java @@ -702,7 +702,12 @@ private void isMyToken(String orcid) { if(OrcidBearerTokenAuthentication.class.isAssignableFrom(authentication.getClass())) { OrcidBearerTokenAuthentication authDetails = (OrcidBearerTokenAuthentication) authentication; - if (orcid.equals(authDetails.getUserOrcid())) { + String userOrcid = authDetails.getUserOrcid(); + // Client credentials flow (no user ORCID) – allow through + if (userOrcid == null) { + return; + } + if (orcid.equals(userOrcid)) { return; } } diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/OrcidUrlManager.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/OrcidUrlManager.java index 2a00a0f3815..8790dfab096 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/OrcidUrlManager.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/OrcidUrlManager.java @@ -2,6 +2,8 @@ import java.net.URI; import java.net.URISyntaxException; +import java.util.ArrayList; +import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -27,6 +29,7 @@ public class OrcidUrlManager { private static Pattern fileNamePattern = Pattern.compile("https{0,1}:\\/\\/[^\\/]*(.*){0,1}"); private static String PROTOCALL_PATTREN = "http[s]{0,1}:\\/\\/"; + private static final String SAVED_REQUEST_CONTINUE_PARAM = "continue"; public static Pattern SAVED_REQUEST_PATTERN = Pattern .compile("/(my-orcid|inbox|account|account/confirm-deactivate-orcid/[^/]+|developer-tools|self-service(/[^/]+)?|manage-members|admin-actions)(\\?|$)|(oauth/(?![^?]*\\.json))"); @@ -231,6 +234,7 @@ public String determineFullTargetUrlFromSavedRequest(HttpServletRequest request, } if (url != null) { + url = stripSavedRequestInternalParameters(url); String contextPath = request.getContextPath(); // Remove the context path if it looks like we are configured to // run behind nginx. @@ -247,4 +251,31 @@ public String determineFullTargetUrlFromSavedRequest(HttpServletRequest request, return url; } + + private String stripSavedRequestInternalParameters(String url) { + try { + URI uri = new URI(url); + String query = uri.getRawQuery(); + if (query == null || query.isEmpty()) { + return url; + } + + List keptParameters = new ArrayList<>(); + for (String parameter : query.split("&")) { + if (!SAVED_REQUEST_CONTINUE_PARAM.equals(parameter) && !parameter.startsWith(SAVED_REQUEST_CONTINUE_PARAM + "=")) { + keptParameters.add(parameter); + } + } + + if (keptParameters.size() == query.split("&").length) { + return url; + } + + String rebuiltQuery = keptParameters.isEmpty() ? null : String.join("&", keptParameters); + return new URI(uri.getScheme(), uri.getAuthority(), uri.getPath(), rebuiltQuery, uri.getFragment()).toString(); + } catch (URISyntaxException e) { + LOGGER.debug("Unable to strip saved request parameters from {}", url, e); + return url; + } + } } diff --git a/orcid-core/src/test/java/org/orcid/core/manager/NotificationManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/NotificationManagerTest.java index 43f11cee835..5750ec8afec 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/NotificationManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/NotificationManagerTest.java @@ -41,6 +41,7 @@ import org.orcid.core.api.OrcidApiConstants; import org.orcid.core.manager.impl.NotificationManagerImpl; import org.orcid.core.manager.read_only.EmailManagerReadOnly; +import org.orcid.core.manager.v3.read_only.ClientDetailsManagerReadOnly; import org.orcid.jaxb.model.common_v2.Locale; import org.orcid.jaxb.model.common_v2.Source; import org.orcid.jaxb.model.notification.amended_v2.AmendedSection; @@ -97,6 +98,9 @@ public class NotificationManagerTest extends DBUnitTest { @Mock private JpaJaxbNotificationAdapter mockNotificationAdapter; + + @Mock + private ClientDetailsManagerReadOnly clientDetailsManagerReadOnly; @Resource private ProfileDao profileDao; @@ -142,6 +146,8 @@ public void initMocks() throws Exception { TargetProxyHelper.injectIntoProxy(notificationManager, "encryptionManager", encryptionManager); TargetProxyHelper.injectIntoProxy(notificationManager, "profileEventDao", profileEventDao); TargetProxyHelper.injectIntoProxy(notificationManager, "sourceManager", sourceManager); + TargetProxyHelper.injectIntoProxy(notificationManager, "clientDetailsManagerReadOnly", clientDetailsManagerReadOnly); + when(clientDetailsManagerReadOnly.doesClientKnowUser(anyString(), anyString())).thenReturn(false); } @After @@ -207,6 +213,7 @@ public void testFindPermissionsByOrcidAndClient() { public void filterActionedNotificationAlertsTest() { TargetProxyHelper.injectIntoProxy(notificationManager, "notificationDao", mockNotificationDao); when(mockNotificationDao.findByOricdAndId(Matchers.anyString(), Matchers.anyLong())).thenReturn(null); + when(clientDetailsManagerReadOnly.doesClientKnowUser("0000-0000-0000-0000", "some-orcid")).thenReturn(true); List notifications = IntStream.range(0, 10).mapToObj(new IntFunction () { @Override public Notification apply(int value) { diff --git a/orcid-core/src/test/java/org/orcid/core/manager/v3/FindMyStuffManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/v3/FindMyStuffManagerTest.java index 898617d5adb..278a100b27a 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/v3/FindMyStuffManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/v3/FindMyStuffManagerTest.java @@ -21,6 +21,7 @@ import org.orcid.core.manager.ClientDetailsEntityCacheManager; import org.orcid.core.manager.impl.OrcidUrlManager; import org.orcid.core.manager.v3.read_only.WorkManagerReadOnly; +import org.orcid.core.manager.v3.read_only.ClientDetailsManagerReadOnly; import org.orcid.core.utils.v3.identifiers.finders.DataciteFinder; import org.orcid.core.utils.v3.identifiers.finders.Finder; import org.orcid.jaxb.model.clientgroup.RedirectUriType; @@ -69,6 +70,9 @@ public class FindMyStuffManagerTest extends DBUnitTest{ @Mock private DataciteFinder dataciteFinder; + + @Mock + private ClientDetailsManagerReadOnly clientDetailsManagerReadOnly; @Resource List finders = new ArrayList(); @@ -83,6 +87,8 @@ public void initMocks() throws Exception { TargetProxyHelper.injectIntoProxy(findMyStuffManager, "notificationManager", notificationManager); TargetProxyHelper.injectIntoProxy(findMyStuffManager, "clientDetailsEntityCacheManager", clientDetailsEntityCacheManager); TargetProxyHelper.injectIntoProxy(findMyStuffManager, "findMyStuffHistoryDao", findMyStuffHistoryDao); + TargetProxyHelper.injectIntoProxy(findMyStuffManager, "clientDetailsManagerReadOnly", clientDetailsManagerReadOnly); + when(clientDetailsManagerReadOnly.doesClientKnowUser(Matchers.anyString(), Matchers.anyString())).thenReturn(false); //Finder mock List f = Lists.newArrayList(); @@ -191,6 +197,7 @@ public void testFindIfAppropriateExistingPerms(){ //user with existing permissions when(workManagerReadOnly.getAllExternalIDs(Matchers.contains(""))).thenReturn(new ExternalIDs()); when(findMyStuffHistoryDao.findAll(Matchers.contains(""))).thenReturn(new ArrayList()); + when(clientDetailsManagerReadOnly.doesClientKnowUser("x", "0000-0000-0000-0000")).thenReturn(true); findMyStuffManager.findIfAppropriate("0000-0000-0000-0000"); //check finder not invoked diff --git a/orcid-core/src/test/java/org/orcid/core/manager/v3/NotificationManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/v3/NotificationManagerTest.java index 1b8eb9a7735..355bab9ddb9 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/v3/NotificationManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/v3/NotificationManagerTest.java @@ -14,6 +14,7 @@ import org.orcid.core.manager.EncryptionManager; import org.orcid.core.manager.ProfileEntityCacheManager; import org.orcid.core.manager.v3.impl.NotificationManagerImpl; +import org.orcid.core.manager.v3.read_only.ClientDetailsManagerReadOnly; import org.orcid.jaxb.model.common.AvailableLocales; import org.orcid.jaxb.model.v3.release.common.Source; import org.orcid.jaxb.model.v3.release.notification.Notification; @@ -80,6 +81,9 @@ public class NotificationManagerTest extends DBUnitTest { @Mock private JpaJaxbNotificationAdapter mockNotificationAdapter; + @Mock + private ClientDetailsManagerReadOnly clientDetailsManagerReadOnly; + @Resource(name = "profileDao") private ProfileDao profileDao; @@ -129,6 +133,8 @@ public void initMocks() throws Exception { TargetProxyHelper.injectIntoProxy(notificationManager, "profileDao", mockProfileDao); TargetProxyHelper.injectIntoProxy(notificationManager, "notificationDao", mockNotificationDao); TargetProxyHelper.injectIntoProxy(notificationManager, "notificationAdapter", mockNotificationAdapter); + TargetProxyHelper.injectIntoProxy(notificationManager, "clientDetailsManagerReadOnly", clientDetailsManagerReadOnly); + when(clientDetailsManagerReadOnly.doesClientKnowUser(anyString(), anyString())).thenReturn(false); } @After @@ -286,6 +292,7 @@ public void testFindPermissionsByOrcidAndClient() { public void filterActionedNotificationAlertsTest() { TargetProxyHelper.injectIntoProxy(notificationManager, "notificationDao", mockNotificationDao); when(mockNotificationDao.findByOricdAndId(Matchers.anyString(), Matchers.anyLong())).thenReturn(null); + when(clientDetailsManagerReadOnly.doesClientKnowUser("0000-0000-0000-0000", "some-orcid")).thenReturn(true); List notifications = IntStream.range(0, 10).mapToObj(new IntFunction() { @Override public Notification apply(int value) { diff --git a/orcid-core/src/test/java/org/orcid/core/oauth/OAuthErrorUtilsTest.java b/orcid-core/src/test/java/org/orcid/core/oauth/OAuthErrorUtilsTest.java index 1b3d1fe37ce..cab699ab915 100644 --- a/orcid-core/src/test/java/org/orcid/core/oauth/OAuthErrorUtilsTest.java +++ b/orcid-core/src/test/java/org/orcid/core/oauth/OAuthErrorUtilsTest.java @@ -20,6 +20,7 @@ import jakarta.ws.rs.core.Response.Status; import org.junit.Test; +import org.orcid.core.exception.ClientDeactivatedException; import org.orcid.core.exception.DeactivatedException; import org.orcid.core.exception.LockedException; import org.orcid.core.exception.OrcidDeprecatedException; @@ -37,11 +38,11 @@ public void testGetOAuthErrorForLockedException() { } @Test - public void testGetOAuthErrorForUnsupportedGrantTypeException() { - OAuthError error = OAuthErrorUtils.getOAuthError(new IllegalArgumentException("message here")); - assertEquals(OAuthError.UNSUPPORTED_GRANT_TYPE, error.getError()); + public void testGetOAuthErrorForClientDeactivatedException() { + OAuthError error = OAuthErrorUtils.getOAuthError(new ClientDeactivatedException("client-id")); + assertEquals(OAuthError.UNAUTHORIZED_CLIENT, error.getError()); assertEquals(Status.BAD_REQUEST, error.getResponseStatus()); - assertEquals("message here", error.getErrorDescription()); + assertEquals("Client client-id is deactivated", error.getErrorDescription()); } @Test diff --git a/orcid-pub-web/src/main/resources/orcid-t1-web-context.xml b/orcid-pub-web/src/main/resources/orcid-t1-web-context.xml index fd0020a3538..debab7d9b4e 100644 --- a/orcid-pub-web/src/main/resources/orcid-t1-web-context.xml +++ b/orcid-pub-web/src/main/resources/orcid-t1-web-context.xml @@ -12,6 +12,8 @@ + + diff --git a/orcid-pub-web/src/test/java/org/orcid/api/publicV2/server/PublicV2ApiServiceVersionedDelegatorTest.java b/orcid-pub-web/src/test/java/org/orcid/api/publicV2/server/PublicV2ApiServiceVersionedDelegatorTest.java index 2923396203c..c0e70bde46b 100644 --- a/orcid-pub-web/src/test/java/org/orcid/api/publicV2/server/PublicV2ApiServiceVersionedDelegatorTest.java +++ b/orcid-pub-web/src/test/java/org/orcid/api/publicV2/server/PublicV2ApiServiceVersionedDelegatorTest.java @@ -56,6 +56,8 @@ import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.test.context.ContextConfiguration; +import org.springframework.transaction.PlatformTransactionManager; +import org.springframework.transaction.support.TransactionTemplate; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-t1-web-context.xml" }) @@ -77,6 +79,9 @@ public class PublicV2ApiServiceVersionedDelegatorTest extends DBUnitTest { @Resource private ProfileDao profileDao; + @Resource + private PlatformTransactionManager transactionManager; + @Resource private V2VersionConverterChain v2VersionConverterChain; @@ -837,11 +842,15 @@ public void testViewBulkWorksNonExistentUser() { } private void updateProfileSubmissionDate(String orcid, int increment) { - // Update the submission date so it is long enough - ProfileEntity profileEntity = profileDao.find(orcid); - profileEntity.setSubmissionDate(DateUtils.addDays(new Date(), increment)); - profileDao.merge(profileEntity); - profileDao.flush(); + TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager); + transactionTemplate.execute(status -> { + // Update the submission date so it is long enough + ProfileEntity profileEntity = profileDao.find(orcid); + profileEntity.setSubmissionDate(DateUtils.addDays(new Date(), increment)); + profileDao.merge(profileEntity); + profileDao.flush(); + return null; + }); } /** diff --git a/orcid-web/src/main/resources/orcid-frontend-web-servlet.xml b/orcid-web/src/main/resources/orcid-frontend-web-servlet.xml index dea33772b7e..dfc56a4f873 100644 --- a/orcid-web/src/main/resources/orcid-frontend-web-servlet.xml +++ b/orcid-web/src/main/resources/orcid-frontend-web-servlet.xml @@ -19,6 +19,8 @@ + + From e9b639751fabdae7d834b990317ded5d8006c291 Mon Sep 17 00:00:00 2001 From: Camelia Dumitru Date: Mon, 13 Apr 2026 16:50:27 +0100 Subject: [PATCH 37/77] Added more transactional annotation as spirng6/hibernate are more strict --- .../MemberV2ApiServiceDelegator_ActivitiesSummaryTest.java | 2 ++ .../delegator/MemberV2ApiServiceDelegator_AddressesTest.java | 2 ++ .../delegator/MemberV2ApiServiceDelegator_BiogrphyTest.java | 2 ++ .../delegator/MemberV2ApiServiceDelegator_EducationsTest.java | 2 ++ .../delegator/MemberV2ApiServiceDelegator_EmailsTest.java | 2 ++ .../delegator/MemberV2ApiServiceDelegator_EmploymentsTest.java | 2 ++ .../MemberV2ApiServiceDelegator_ExternalIdentifiersTest.java | 2 ++ .../delegator/MemberV2ApiServiceDelegator_FundingTest.java | 2 ++ .../delegator/MemberV2ApiServiceDelegator_GeneralTest.java | 2 ++ .../delegator/MemberV2ApiServiceDelegator_GroupIdTest.java | 2 ++ .../delegator/MemberV2ApiServiceDelegator_KeywordsTest.java | 2 ++ .../delegator/MemberV2ApiServiceDelegator_OtherNamesTest.java | 2 ++ .../delegator/MemberV2ApiServiceDelegator_PeerReviewsTest.java | 2 ++ .../MemberV2ApiServiceDelegator_PersonalDetailsTest.java | 2 ++ .../delegator/MemberV2ApiServiceDelegator_ReadPersonTest.java | 2 ++ .../delegator/MemberV2ApiServiceDelegator_ReadRecordTest.java | 2 ++ .../MemberV2ApiServiceDelegator_ResearcherUrlsTest.java | 2 ++ .../server/delegator/MemberV2ApiServiceDelegator_WorksTest.java | 2 ++ .../server/delegator/MemberV3ApiServiceDelegatorErrorsTest.java | 2 ++ .../MemberV3ApiServiceDelegator_ActivitiesSummaryTest.java | 2 ++ .../delegator/MemberV3ApiServiceDelegator_AddressesTest.java | 2 ++ .../delegator/MemberV3ApiServiceDelegator_BiogrphyTest.java | 2 ++ .../delegator/MemberV3ApiServiceDelegator_DistinctionsTest.java | 2 ++ .../delegator/MemberV3ApiServiceDelegator_EducationsTest.java | 2 ++ .../delegator/MemberV3ApiServiceDelegator_EmailsTest.java | 2 ++ .../delegator/MemberV3ApiServiceDelegator_EmploymentsTest.java | 2 ++ .../MemberV3ApiServiceDelegator_ExternalIdentifiersTest.java | 2 ++ .../delegator/MemberV3ApiServiceDelegator_FundingTest.java | 2 ++ .../delegator/MemberV3ApiServiceDelegator_GeneralTest.java | 2 ++ .../delegator/MemberV3ApiServiceDelegator_GroupIdTest.java | 2 ++ .../MemberV3ApiServiceDelegator_InvitedPositionsTest.java | 2 ++ .../delegator/MemberV3ApiServiceDelegator_KeywordsTest.java | 2 ++ .../delegator/MemberV3ApiServiceDelegator_MembershipsTest.java | 2 ++ .../delegator/MemberV3ApiServiceDelegator_OtherNamesTest.java | 2 ++ .../delegator/MemberV3ApiServiceDelegator_PeerReviewsTest.java | 2 ++ .../MemberV3ApiServiceDelegator_PersonalDetailsTest.java | 2 ++ .../MemberV3ApiServiceDelegator_QualificationsTest.java | 2 ++ .../delegator/MemberV3ApiServiceDelegator_ReadPersonTest.java | 2 ++ .../delegator/MemberV3ApiServiceDelegator_ReadRecordTest.java | 2 ++ .../MemberV3ApiServiceDelegator_ResearcherUrlsTest.java | 2 ++ .../delegator/MemberV3ApiServiceDelegator_ServicesTest.java | 2 ++ .../server/delegator/MemberV3ApiServiceDelegator_WorksTest.java | 2 ++ 42 files changed, 84 insertions(+) diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ActivitiesSummaryTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ActivitiesSummaryTest.java index 3b188cc168b..472a67fc005 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ActivitiesSummaryTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ActivitiesSummaryTest.java @@ -53,9 +53,11 @@ import org.orcid.test.helper.Utils; import org.orcid.utils.DateUtils; import org.springframework.test.context.ContextConfiguration; +import org.springframework.transaction.annotation.Transactional; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) +@Transactional public class MemberV2ApiServiceDelegator_ActivitiesSummaryTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/WorksEntityData.xml", "/data/ClientDetailsEntityData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_AddressesTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_AddressesTest.java index fa8119565b5..2b19cba0788 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_AddressesTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_AddressesTest.java @@ -48,9 +48,11 @@ import org.orcid.test.OrcidJUnit4ClassRunner; import org.orcid.test.helper.Utils; import org.springframework.test.context.ContextConfiguration; +import org.springframework.transaction.annotation.Transactional; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) +@Transactional public class MemberV2ApiServiceDelegator_AddressesTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/RecordNameEntityData.xml", "/data/BiographyEntityData.xml"); diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_BiogrphyTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_BiogrphyTest.java index b3e57a4fcb7..f9e41829e73 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_BiogrphyTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_BiogrphyTest.java @@ -35,9 +35,11 @@ import org.orcid.test.OrcidJUnit4ClassRunner; import org.orcid.test.helper.Utils; import org.springframework.test.context.ContextConfiguration; +import org.springframework.transaction.annotation.Transactional; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) +@Transactional public class MemberV2ApiServiceDelegator_BiogrphyTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/WorksEntityData.xml", "/data/ClientDetailsEntityData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_EducationsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_EducationsTest.java index e9b18cec5e0..9099cb71ab8 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_EducationsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_EducationsTest.java @@ -56,9 +56,11 @@ import org.orcid.test.TargetProxyHelper; import org.orcid.test.helper.Utils; import org.springframework.test.context.ContextConfiguration; +import org.springframework.transaction.annotation.Transactional; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) +@Transactional public class MemberV2ApiServiceDelegator_EducationsTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/WorksEntityData.xml", "/data/ClientDetailsEntityData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_EmailsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_EmailsTest.java index f1d3309cb12..02d5b28a12d 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_EmailsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_EmailsTest.java @@ -34,11 +34,13 @@ import org.orcid.test.OrcidJUnit4ClassRunner; import org.orcid.test.helper.Utils; import org.springframework.test.context.ContextConfiguration; +import org.springframework.transaction.annotation.Transactional; import static org.junit.Assert.*; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) +@Transactional public class MemberV2ApiServiceDelegator_EmailsTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/ClientDetailsEntityData.xml", "/data/RecordNameEntityData.xml", "/data/BiographyEntityData.xml"); diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_EmploymentsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_EmploymentsTest.java index 4ad4701e881..73ffa226344 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_EmploymentsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_EmploymentsTest.java @@ -57,9 +57,11 @@ import org.orcid.test.OrcidJUnit4ClassRunner; import org.orcid.test.TargetProxyHelper; import org.springframework.test.context.ContextConfiguration; +import org.springframework.transaction.annotation.Transactional; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) +@Transactional public class MemberV2ApiServiceDelegator_EmploymentsTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/WorksEntityData.xml", "/data/ClientDetailsEntityData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ExternalIdentifiersTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ExternalIdentifiersTest.java index 7e4c706c5a2..eb67b0c13a9 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ExternalIdentifiersTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ExternalIdentifiersTest.java @@ -47,9 +47,11 @@ import org.orcid.test.OrcidJUnit4ClassRunner; import org.orcid.test.helper.Utils; import org.springframework.test.context.ContextConfiguration; +import org.springframework.transaction.annotation.Transactional; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) +@Transactional public class MemberV2ApiServiceDelegator_ExternalIdentifiersTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/WorksEntityData.xml", "/data/ClientDetailsEntityData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_FundingTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_FundingTest.java index 6a7f0083370..8dbcce1d798 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_FundingTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_FundingTest.java @@ -63,9 +63,11 @@ import org.orcid.test.OrcidJUnit4ClassRunner; import org.orcid.test.TargetProxyHelper; import org.springframework.test.context.ContextConfiguration; +import org.springframework.transaction.annotation.Transactional; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) +@Transactional public class MemberV2ApiServiceDelegator_FundingTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/WorksEntityData.xml", "/data/ClientDetailsEntityData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_GeneralTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_GeneralTest.java index c5779e7b6c0..33796b3e77e 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_GeneralTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_GeneralTest.java @@ -71,10 +71,12 @@ import org.orcid.test.TargetProxyHelper; import org.orcid.test.helper.Utils; import org.springframework.test.context.ContextConfiguration; +import org.springframework.transaction.annotation.Transactional; import org.springframework.test.util.ReflectionTestUtils; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) +@Transactional public class MemberV2ApiServiceDelegator_GeneralTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/WorksEntityData.xml", "/data/ClientDetailsEntityData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_GroupIdTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_GroupIdTest.java index 4a5a791a59d..de6660b90b1 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_GroupIdTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_GroupIdTest.java @@ -51,10 +51,12 @@ import org.orcid.test.helper.Utils; import org.orcid.utils.DateUtils; import org.springframework.test.context.ContextConfiguration; +import org.springframework.transaction.annotation.Transactional; import org.springframework.test.util.ReflectionTestUtils; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) +@Transactional public class MemberV2ApiServiceDelegator_GroupIdTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/WorksEntityData.xml", "/data/ClientDetailsEntityData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_KeywordsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_KeywordsTest.java index 011a7f723e9..f900df629b3 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_KeywordsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_KeywordsTest.java @@ -31,6 +31,7 @@ import org.orcid.jaxb.model.common_v2.Visibility; import org.orcid.jaxb.model.groupid_v2.GroupIdRecord; import org.orcid.jaxb.model.message.ScopePathType; +import org.springframework.transaction.annotation.Transactional; import org.orcid.jaxb.model.record_v2.Address; import org.orcid.jaxb.model.record_v2.Education; import org.orcid.jaxb.model.record_v2.Employment; @@ -50,6 +51,7 @@ @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) +@Transactional public class MemberV2ApiServiceDelegator_KeywordsTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/ClientDetailsEntityData.xml", "/data/RecordNameEntityData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_OtherNamesTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_OtherNamesTest.java index 3f884bf7471..5567eb2a698 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_OtherNamesTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_OtherNamesTest.java @@ -46,9 +46,11 @@ import org.orcid.jaxb.model.record_v2.WorkBulk; import org.orcid.test.OrcidJUnit4ClassRunner; import org.springframework.test.context.ContextConfiguration; +import org.springframework.transaction.annotation.Transactional; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) +@Transactional public class MemberV2ApiServiceDelegator_OtherNamesTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/ClientDetailsEntityData.xml", "/data/RecordNameEntityData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_PeerReviewsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_PeerReviewsTest.java index 87150f14f42..e1d0bbfbb0f 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_PeerReviewsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_PeerReviewsTest.java @@ -29,6 +29,7 @@ import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; import org.orcid.core.common.manager.EmailFrequencyManager; +import org.springframework.transaction.annotation.Transactional; import org.orcid.core.exception.ActivityIdentifierValidationException; import org.orcid.core.exception.OrcidAccessControlException; import org.orcid.core.exception.OrcidDuplicatedActivityException; @@ -79,6 +80,7 @@ @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) +@Transactional public class MemberV2ApiServiceDelegator_PeerReviewsTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/ClientDetailsEntityData.xml", "/data/Oauth2TokenDetailsData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_PersonalDetailsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_PersonalDetailsTest.java index d526f828ffe..90fa6b92ad2 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_PersonalDetailsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_PersonalDetailsTest.java @@ -38,9 +38,11 @@ import org.orcid.test.OrcidJUnit4ClassRunner; import org.orcid.test.helper.Utils; import org.springframework.test.context.ContextConfiguration; +import org.springframework.transaction.annotation.Transactional; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) +@Transactional public class MemberV2ApiServiceDelegator_PersonalDetailsTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/ClientDetailsEntityData.xml", "/data/Oauth2TokenDetailsData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ReadPersonTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ReadPersonTest.java index 1b5e5b707ad..e3f06541a0f 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ReadPersonTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ReadPersonTest.java @@ -41,11 +41,13 @@ import org.orcid.test.OrcidJUnit4ClassRunner; import org.orcid.test.helper.Utils; import org.springframework.test.context.ContextConfiguration; +import org.springframework.transaction.annotation.Transactional; import static org.junit.Assert.*; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) +@Transactional public class MemberV2ApiServiceDelegator_ReadPersonTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/ClientDetailsEntityData.xml", "/data/Oauth2TokenDetailsData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ReadRecordTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ReadRecordTest.java index 7865fbd55a5..cae37cfba08 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ReadRecordTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ReadRecordTest.java @@ -59,11 +59,13 @@ import org.orcid.test.OrcidJUnit4ClassRunner; import org.orcid.test.helper.Utils; import org.springframework.test.context.ContextConfiguration; +import org.springframework.transaction.annotation.Transactional; import static org.junit.Assert.*; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) +@Transactional public class MemberV2ApiServiceDelegator_ReadRecordTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/WorksEntityData.xml", "/data/ClientDetailsEntityData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ResearcherUrlsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ResearcherUrlsTest.java index 0c04054faa4..e7490968543 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ResearcherUrlsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ResearcherUrlsTest.java @@ -50,9 +50,11 @@ import org.orcid.test.OrcidJUnit4ClassRunner; import org.orcid.test.helper.Utils; import org.springframework.test.context.ContextConfiguration; +import org.springframework.transaction.annotation.Transactional; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) +@Transactional public class MemberV2ApiServiceDelegator_ResearcherUrlsTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/ClientDetailsEntityData.xml", "/data/Oauth2TokenDetailsData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_WorksTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_WorksTest.java index 3abda0414d1..cedaf0fb037 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_WorksTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_WorksTest.java @@ -79,12 +79,14 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.test.context.ContextConfiguration; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.context.request.RequestAttributes; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) +@Transactional public class MemberV2ApiServiceDelegator_WorksTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/WorksEntityData.xml", "/data/ClientDetailsEntityData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegatorErrorsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegatorErrorsTest.java index cea91278298..ae887ceafd6 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegatorErrorsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegatorErrorsTest.java @@ -63,12 +63,14 @@ import org.orcid.test.OrcidJUnit4ClassRunner; import org.springframework.beans.factory.annotation.Value; import org.springframework.test.context.ContextConfiguration; +import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.support.TransactionTemplate; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) +@Transactional public class MemberV3ApiServiceDelegatorErrorsTest extends DBUnitTest { private static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/WorksEntityData.xml", "/data/ClientDetailsEntityData.xml", "/data/Oauth2TokenDetailsData.xml", "/data/OrgsEntityData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ActivitiesSummaryTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ActivitiesSummaryTest.java index 5e2ed1fd92b..c36fcaef173 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ActivitiesSummaryTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ActivitiesSummaryTest.java @@ -66,9 +66,11 @@ import org.orcid.test.OrcidJUnit4ClassRunner; import org.orcid.test.helper.v3.Utils; import org.springframework.test.context.ContextConfiguration; +import org.springframework.transaction.annotation.Transactional; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) +@Transactional public class MemberV3ApiServiceDelegator_ActivitiesSummaryTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/WorksEntityData.xml", "/data/ClientDetailsEntityData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_AddressesTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_AddressesTest.java index 35847844494..c0755f943c8 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_AddressesTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_AddressesTest.java @@ -55,9 +55,11 @@ import org.orcid.test.OrcidJUnit4ClassRunner; import org.orcid.test.helper.v3.Utils; import org.springframework.test.context.ContextConfiguration; +import org.springframework.transaction.annotation.Transactional; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) +@Transactional public class MemberV3ApiServiceDelegator_AddressesTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/RecordNameEntityData.xml", "/data/BiographyEntityData.xml"); diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_BiogrphyTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_BiogrphyTest.java index dea0a4203ec..f59b0654f19 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_BiogrphyTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_BiogrphyTest.java @@ -41,9 +41,11 @@ import org.orcid.test.OrcidJUnit4ClassRunner; import org.orcid.test.helper.v3.Utils; import org.springframework.test.context.ContextConfiguration; +import org.springframework.transaction.annotation.Transactional; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) +@Transactional public class MemberV3ApiServiceDelegator_BiogrphyTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/WorksEntityData.xml", "/data/ClientDetailsEntityData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_DistinctionsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_DistinctionsTest.java index dc656efbe8f..536634998c5 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_DistinctionsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_DistinctionsTest.java @@ -61,9 +61,11 @@ import org.orcid.test.OrcidJUnit4ClassRunner; import org.orcid.test.helper.v3.Utils; import org.springframework.test.context.ContextConfiguration; +import org.springframework.transaction.annotation.Transactional; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) +@Transactional public class MemberV3ApiServiceDelegator_DistinctionsTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/WorksEntityData.xml", "/data/ClientDetailsEntityData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_EducationsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_EducationsTest.java index ec21287dd65..e80a4f02996 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_EducationsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_EducationsTest.java @@ -63,9 +63,11 @@ import org.orcid.test.OrcidJUnit4ClassRunner; import org.orcid.test.helper.v3.Utils; import org.springframework.test.context.ContextConfiguration; +import org.springframework.transaction.annotation.Transactional; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) +@Transactional public class MemberV3ApiServiceDelegator_EducationsTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/WorksEntityData.xml", "/data/ClientDetailsEntityData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_EmailsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_EmailsTest.java index 0de07fc6b68..c3ba3adae03 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_EmailsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_EmailsTest.java @@ -45,9 +45,11 @@ import org.orcid.test.OrcidJUnit4ClassRunner; import org.orcid.test.helper.v3.Utils; import org.springframework.test.context.ContextConfiguration; +import org.springframework.transaction.annotation.Transactional; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) +@Transactional public class MemberV3ApiServiceDelegator_EmailsTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/ClientDetailsEntityData.xml", "/data/RecordNameEntityData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_EmploymentsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_EmploymentsTest.java index 842b5e56847..1ccd7cc2a09 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_EmploymentsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_EmploymentsTest.java @@ -61,9 +61,11 @@ import org.orcid.test.OrcidJUnit4ClassRunner; import org.orcid.test.helper.v3.Utils; import org.springframework.test.context.ContextConfiguration; +import org.springframework.transaction.annotation.Transactional; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) +@Transactional public class MemberV3ApiServiceDelegator_EmploymentsTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/WorksEntityData.xml", "/data/ClientDetailsEntityData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ExternalIdentifiersTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ExternalIdentifiersTest.java index 4c6154e44f2..80cd8850bec 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ExternalIdentifiersTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ExternalIdentifiersTest.java @@ -53,9 +53,11 @@ import org.orcid.test.OrcidJUnit4ClassRunner; import org.orcid.test.helper.v3.Utils; import org.springframework.test.context.ContextConfiguration; +import org.springframework.transaction.annotation.Transactional; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) +@Transactional public class MemberV3ApiServiceDelegator_ExternalIdentifiersTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/WorksEntityData.xml", "/data/ClientDetailsEntityData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_FundingTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_FundingTest.java index 1f713d42302..25c5dd5b158 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_FundingTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_FundingTest.java @@ -70,9 +70,11 @@ import org.orcid.test.TargetProxyHelper; import org.orcid.test.helper.v3.Utils; import org.springframework.test.context.ContextConfiguration; +import org.springframework.transaction.annotation.Transactional; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) +@Transactional public class MemberV3ApiServiceDelegator_FundingTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/WorksEntityData.xml", "/data/ClientDetailsEntityData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_GeneralTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_GeneralTest.java index 1200bbeb4a4..c219fa30475 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_GeneralTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_GeneralTest.java @@ -83,10 +83,12 @@ import org.orcid.test.TargetProxyHelper; import org.orcid.test.helper.v3.Utils; import org.springframework.test.context.ContextConfiguration; +import org.springframework.transaction.annotation.Transactional; import org.springframework.test.util.ReflectionTestUtils; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) +@Transactional public class MemberV3ApiServiceDelegator_GeneralTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/WorksEntityData.xml", "/data/ClientDetailsEntityData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_GroupIdTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_GroupIdTest.java index 0dfec01b63a..120f7e36d33 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_GroupIdTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_GroupIdTest.java @@ -57,10 +57,12 @@ import org.orcid.test.helper.v3.Utils; import org.orcid.utils.DateUtils; import org.springframework.test.context.ContextConfiguration; +import org.springframework.transaction.annotation.Transactional; import org.springframework.test.util.ReflectionTestUtils; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) +@Transactional public class MemberV3ApiServiceDelegator_GroupIdTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/WorksEntityData.xml", "/data/ClientDetailsEntityData.xml", "/data/Oauth2TokenDetailsData.xml", "/data/OrgsEntityData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_InvitedPositionsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_InvitedPositionsTest.java index 9ebe3029d4f..200abed7d9f 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_InvitedPositionsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_InvitedPositionsTest.java @@ -61,9 +61,11 @@ import org.orcid.test.OrcidJUnit4ClassRunner; import org.orcid.test.helper.v3.Utils; import org.springframework.test.context.ContextConfiguration; +import org.springframework.transaction.annotation.Transactional; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) +@Transactional public class MemberV3ApiServiceDelegator_InvitedPositionsTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/WorksEntityData.xml", "/data/ClientDetailsEntityData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_KeywordsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_KeywordsTest.java index 8aaa445cb20..ca7dd3b577d 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_KeywordsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_KeywordsTest.java @@ -53,9 +53,11 @@ import org.orcid.test.OrcidJUnit4ClassRunner; import org.orcid.test.helper.v3.Utils; import org.springframework.test.context.ContextConfiguration; +import org.springframework.transaction.annotation.Transactional; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) +@Transactional public class MemberV3ApiServiceDelegator_KeywordsTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/ClientDetailsEntityData.xml", "/data/RecordNameEntityData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_MembershipsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_MembershipsTest.java index 22e43c0ea0e..d0110086d32 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_MembershipsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_MembershipsTest.java @@ -61,9 +61,11 @@ import org.orcid.test.OrcidJUnit4ClassRunner; import org.orcid.test.helper.v3.Utils; import org.springframework.test.context.ContextConfiguration; +import org.springframework.transaction.annotation.Transactional; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) +@Transactional public class MemberV3ApiServiceDelegator_MembershipsTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/WorksEntityData.xml", "/data/ClientDetailsEntityData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_OtherNamesTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_OtherNamesTest.java index 2f894a170d0..940f2ff9727 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_OtherNamesTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_OtherNamesTest.java @@ -53,9 +53,11 @@ import org.orcid.test.OrcidJUnit4ClassRunner; import org.orcid.test.helper.v3.Utils; import org.springframework.test.context.ContextConfiguration; +import org.springframework.transaction.annotation.Transactional; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) +@Transactional public class MemberV3ApiServiceDelegator_OtherNamesTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/ClientDetailsEntityData.xml", "/data/RecordNameEntityData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_PeerReviewsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_PeerReviewsTest.java index d0696ea6998..34ce60f191f 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_PeerReviewsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_PeerReviewsTest.java @@ -84,9 +84,11 @@ import org.orcid.test.TargetProxyHelper; import org.orcid.test.helper.v3.Utils; import org.springframework.test.context.ContextConfiguration; +import org.springframework.transaction.annotation.Transactional; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) +@Transactional public class MemberV3ApiServiceDelegator_PeerReviewsTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/ClientDetailsEntityData.xml", "/data/Oauth2TokenDetailsData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_PersonalDetailsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_PersonalDetailsTest.java index 026cb556be6..568d187aa17 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_PersonalDetailsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_PersonalDetailsTest.java @@ -44,9 +44,11 @@ import org.orcid.test.OrcidJUnit4ClassRunner; import org.orcid.test.helper.v3.Utils; import org.springframework.test.context.ContextConfiguration; +import org.springframework.transaction.annotation.Transactional; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) +@Transactional public class MemberV3ApiServiceDelegator_PersonalDetailsTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/ClientDetailsEntityData.xml", "/data/Oauth2TokenDetailsData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_QualificationsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_QualificationsTest.java index 71aaa4cf20b..3840c67b6ed 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_QualificationsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_QualificationsTest.java @@ -61,9 +61,11 @@ import org.orcid.test.OrcidJUnit4ClassRunner; import org.orcid.test.helper.v3.Utils; import org.springframework.test.context.ContextConfiguration; +import org.springframework.transaction.annotation.Transactional; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) +@Transactional public class MemberV3ApiServiceDelegator_QualificationsTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/WorksEntityData.xml", "/data/ClientDetailsEntityData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ReadPersonTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ReadPersonTest.java index 921f0602b67..487a4dc2b23 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ReadPersonTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ReadPersonTest.java @@ -22,11 +22,13 @@ import org.orcid.test.OrcidJUnit4ClassRunner; import org.orcid.test.helper.v3.Utils; import org.springframework.test.context.ContextConfiguration; +import org.springframework.transaction.annotation.Transactional; import static org.junit.Assert.*; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) +@Transactional public class MemberV3ApiServiceDelegator_ReadPersonTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/ClientDetailsEntityData.xml", "/data/Oauth2TokenDetailsData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ReadRecordTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ReadRecordTest.java index d9160768901..c0e2b7b86a3 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ReadRecordTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ReadRecordTest.java @@ -71,11 +71,13 @@ import org.orcid.test.OrcidJUnit4ClassRunner; import org.orcid.test.helper.v3.Utils; import org.springframework.test.context.ContextConfiguration; +import org.springframework.transaction.annotation.Transactional; import static org.junit.Assert.*; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) +@Transactional public class MemberV3ApiServiceDelegator_ReadRecordTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/WorksEntityData.xml", "/data/ClientDetailsEntityData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ResearcherUrlsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ResearcherUrlsTest.java index 52c3eca0f37..f37c4399f36 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ResearcherUrlsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ResearcherUrlsTest.java @@ -56,9 +56,11 @@ import org.orcid.test.OrcidJUnit4ClassRunner; import org.orcid.test.helper.v3.Utils; import org.springframework.test.context.ContextConfiguration; +import org.springframework.transaction.annotation.Transactional; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) +@Transactional public class MemberV3ApiServiceDelegator_ResearcherUrlsTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/ClientDetailsEntityData.xml", "/data/Oauth2TokenDetailsData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ServicesTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ServicesTest.java index cd273519423..616ae0211a7 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ServicesTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ServicesTest.java @@ -61,9 +61,11 @@ import org.orcid.test.OrcidJUnit4ClassRunner; import org.orcid.test.helper.v3.Utils; import org.springframework.test.context.ContextConfiguration; +import org.springframework.transaction.annotation.Transactional; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) +@Transactional public class MemberV3ApiServiceDelegator_ServicesTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/WorksEntityData.xml", "/data/ClientDetailsEntityData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_WorksTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_WorksTest.java index d7f03364db3..654c230cb0e 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_WorksTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_WorksTest.java @@ -85,12 +85,14 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.test.context.ContextConfiguration; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.context.request.RequestAttributes; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) +@Transactional public class MemberV3ApiServiceDelegator_WorksTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/WorksEntityData.xml", "/data/ClientDetailsEntityData.xml", From b4cbe2c4e27d221f66cfe045801f66167c6adf28 Mon Sep 17 00:00:00 2001 From: Camelia Dumitru Date: Mon, 13 Apr 2026 23:12:34 +0100 Subject: [PATCH 38/77] Rolled back Transactional annotation in Test Suite for orcid-web ( deadlock in tests) added the transactiontemplate in side profileLastModifiedDao --- ...erV2ApiServiceDelegator_ActivitiesSummaryTest.java | 2 -- .../MemberV2ApiServiceDelegator_AddressesTest.java | 2 -- .../MemberV2ApiServiceDelegator_BiogrphyTest.java | 2 -- .../MemberV2ApiServiceDelegator_EducationsTest.java | 2 -- .../MemberV2ApiServiceDelegator_EmailsTest.java | 2 -- .../MemberV2ApiServiceDelegator_EmploymentsTest.java | 2 -- ...V2ApiServiceDelegator_ExternalIdentifiersTest.java | 2 -- .../MemberV2ApiServiceDelegator_FundingTest.java | 2 -- .../MemberV2ApiServiceDelegator_GeneralTest.java | 2 -- .../MemberV2ApiServiceDelegator_GroupIdTest.java | 2 -- .../MemberV2ApiServiceDelegator_KeywordsTest.java | 3 --- .../MemberV2ApiServiceDelegator_OtherNamesTest.java | 2 -- .../MemberV2ApiServiceDelegator_PeerReviewsTest.java | 2 -- ...mberV2ApiServiceDelegator_PersonalDetailsTest.java | 2 -- .../MemberV2ApiServiceDelegator_ReadPersonTest.java | 2 -- .../MemberV2ApiServiceDelegator_ReadRecordTest.java | 2 -- ...emberV2ApiServiceDelegator_ResearcherUrlsTest.java | 2 -- .../MemberV2ApiServiceDelegator_WorksTest.java | 2 -- .../MemberV3ApiServiceDelegatorErrorsTest.java | 2 -- ...erV3ApiServiceDelegator_ActivitiesSummaryTest.java | 2 -- .../MemberV3ApiServiceDelegator_AddressesTest.java | 2 -- .../MemberV3ApiServiceDelegator_BiogrphyTest.java | 2 -- .../MemberV3ApiServiceDelegator_DistinctionsTest.java | 2 -- .../MemberV3ApiServiceDelegator_EducationsTest.java | 2 -- .../MemberV3ApiServiceDelegator_EmailsTest.java | 2 -- .../MemberV3ApiServiceDelegator_EmploymentsTest.java | 2 -- ...V3ApiServiceDelegator_ExternalIdentifiersTest.java | 2 -- .../MemberV3ApiServiceDelegator_FundingTest.java | 2 -- .../MemberV3ApiServiceDelegator_GeneralTest.java | 2 -- .../MemberV3ApiServiceDelegator_GroupIdTest.java | 2 -- ...berV3ApiServiceDelegator_InvitedPositionsTest.java | 2 -- .../MemberV3ApiServiceDelegator_KeywordsTest.java | 2 -- .../MemberV3ApiServiceDelegator_MembershipsTest.java | 2 -- .../MemberV3ApiServiceDelegator_OtherNamesTest.java | 2 -- .../MemberV3ApiServiceDelegator_PeerReviewsTest.java | 2 -- ...mberV3ApiServiceDelegator_PersonalDetailsTest.java | 2 -- ...emberV3ApiServiceDelegator_QualificationsTest.java | 2 -- .../MemberV3ApiServiceDelegator_ReadPersonTest.java | 2 -- .../MemberV3ApiServiceDelegator_ReadRecordTest.java | 2 -- ...emberV3ApiServiceDelegator_ResearcherUrlsTest.java | 2 -- .../MemberV3ApiServiceDelegator_ServicesTest.java | 2 -- .../MemberV3ApiServiceDelegator_WorksTest.java | 2 -- .../org/orcid/core/aop/ProfileLastModifiedAspect.java | 11 +++++++++-- .../persistence/dao/impl/GroupIdRecordDaoImpl.java | 4 ++-- .../org/orcid/api/filters/ApiRateLimitFilter.java | 3 +++ 45 files changed, 14 insertions(+), 89 deletions(-) diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ActivitiesSummaryTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ActivitiesSummaryTest.java index 472a67fc005..3b188cc168b 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ActivitiesSummaryTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ActivitiesSummaryTest.java @@ -53,11 +53,9 @@ import org.orcid.test.helper.Utils; import org.orcid.utils.DateUtils; import org.springframework.test.context.ContextConfiguration; -import org.springframework.transaction.annotation.Transactional; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) -@Transactional public class MemberV2ApiServiceDelegator_ActivitiesSummaryTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/WorksEntityData.xml", "/data/ClientDetailsEntityData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_AddressesTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_AddressesTest.java index 2b19cba0788..fa8119565b5 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_AddressesTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_AddressesTest.java @@ -48,11 +48,9 @@ import org.orcid.test.OrcidJUnit4ClassRunner; import org.orcid.test.helper.Utils; import org.springframework.test.context.ContextConfiguration; -import org.springframework.transaction.annotation.Transactional; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) -@Transactional public class MemberV2ApiServiceDelegator_AddressesTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/RecordNameEntityData.xml", "/data/BiographyEntityData.xml"); diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_BiogrphyTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_BiogrphyTest.java index f9e41829e73..b3e57a4fcb7 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_BiogrphyTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_BiogrphyTest.java @@ -35,11 +35,9 @@ import org.orcid.test.OrcidJUnit4ClassRunner; import org.orcid.test.helper.Utils; import org.springframework.test.context.ContextConfiguration; -import org.springframework.transaction.annotation.Transactional; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) -@Transactional public class MemberV2ApiServiceDelegator_BiogrphyTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/WorksEntityData.xml", "/data/ClientDetailsEntityData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_EducationsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_EducationsTest.java index 9099cb71ab8..e9b18cec5e0 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_EducationsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_EducationsTest.java @@ -56,11 +56,9 @@ import org.orcid.test.TargetProxyHelper; import org.orcid.test.helper.Utils; import org.springframework.test.context.ContextConfiguration; -import org.springframework.transaction.annotation.Transactional; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) -@Transactional public class MemberV2ApiServiceDelegator_EducationsTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/WorksEntityData.xml", "/data/ClientDetailsEntityData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_EmailsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_EmailsTest.java index 02d5b28a12d..f1d3309cb12 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_EmailsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_EmailsTest.java @@ -34,13 +34,11 @@ import org.orcid.test.OrcidJUnit4ClassRunner; import org.orcid.test.helper.Utils; import org.springframework.test.context.ContextConfiguration; -import org.springframework.transaction.annotation.Transactional; import static org.junit.Assert.*; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) -@Transactional public class MemberV2ApiServiceDelegator_EmailsTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/ClientDetailsEntityData.xml", "/data/RecordNameEntityData.xml", "/data/BiographyEntityData.xml"); diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_EmploymentsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_EmploymentsTest.java index 73ffa226344..4ad4701e881 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_EmploymentsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_EmploymentsTest.java @@ -57,11 +57,9 @@ import org.orcid.test.OrcidJUnit4ClassRunner; import org.orcid.test.TargetProxyHelper; import org.springframework.test.context.ContextConfiguration; -import org.springframework.transaction.annotation.Transactional; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) -@Transactional public class MemberV2ApiServiceDelegator_EmploymentsTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/WorksEntityData.xml", "/data/ClientDetailsEntityData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ExternalIdentifiersTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ExternalIdentifiersTest.java index eb67b0c13a9..7e4c706c5a2 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ExternalIdentifiersTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ExternalIdentifiersTest.java @@ -47,11 +47,9 @@ import org.orcid.test.OrcidJUnit4ClassRunner; import org.orcid.test.helper.Utils; import org.springframework.test.context.ContextConfiguration; -import org.springframework.transaction.annotation.Transactional; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) -@Transactional public class MemberV2ApiServiceDelegator_ExternalIdentifiersTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/WorksEntityData.xml", "/data/ClientDetailsEntityData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_FundingTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_FundingTest.java index 8dbcce1d798..6a7f0083370 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_FundingTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_FundingTest.java @@ -63,11 +63,9 @@ import org.orcid.test.OrcidJUnit4ClassRunner; import org.orcid.test.TargetProxyHelper; import org.springframework.test.context.ContextConfiguration; -import org.springframework.transaction.annotation.Transactional; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) -@Transactional public class MemberV2ApiServiceDelegator_FundingTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/WorksEntityData.xml", "/data/ClientDetailsEntityData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_GeneralTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_GeneralTest.java index 33796b3e77e..c5779e7b6c0 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_GeneralTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_GeneralTest.java @@ -71,12 +71,10 @@ import org.orcid.test.TargetProxyHelper; import org.orcid.test.helper.Utils; import org.springframework.test.context.ContextConfiguration; -import org.springframework.transaction.annotation.Transactional; import org.springframework.test.util.ReflectionTestUtils; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) -@Transactional public class MemberV2ApiServiceDelegator_GeneralTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/WorksEntityData.xml", "/data/ClientDetailsEntityData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_GroupIdTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_GroupIdTest.java index de6660b90b1..4a5a791a59d 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_GroupIdTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_GroupIdTest.java @@ -51,12 +51,10 @@ import org.orcid.test.helper.Utils; import org.orcid.utils.DateUtils; import org.springframework.test.context.ContextConfiguration; -import org.springframework.transaction.annotation.Transactional; import org.springframework.test.util.ReflectionTestUtils; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) -@Transactional public class MemberV2ApiServiceDelegator_GroupIdTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/WorksEntityData.xml", "/data/ClientDetailsEntityData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_KeywordsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_KeywordsTest.java index f900df629b3..e54d9d1255e 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_KeywordsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_KeywordsTest.java @@ -11,7 +11,6 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; -import java.util.Map; import jakarta.annotation.Resource; import jakarta.persistence.NoResultException; @@ -31,7 +30,6 @@ import org.orcid.jaxb.model.common_v2.Visibility; import org.orcid.jaxb.model.groupid_v2.GroupIdRecord; import org.orcid.jaxb.model.message.ScopePathType; -import org.springframework.transaction.annotation.Transactional; import org.orcid.jaxb.model.record_v2.Address; import org.orcid.jaxb.model.record_v2.Education; import org.orcid.jaxb.model.record_v2.Employment; @@ -51,7 +49,6 @@ @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) -@Transactional public class MemberV2ApiServiceDelegator_KeywordsTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/ClientDetailsEntityData.xml", "/data/RecordNameEntityData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_OtherNamesTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_OtherNamesTest.java index 5567eb2a698..3f884bf7471 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_OtherNamesTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_OtherNamesTest.java @@ -46,11 +46,9 @@ import org.orcid.jaxb.model.record_v2.WorkBulk; import org.orcid.test.OrcidJUnit4ClassRunner; import org.springframework.test.context.ContextConfiguration; -import org.springframework.transaction.annotation.Transactional; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) -@Transactional public class MemberV2ApiServiceDelegator_OtherNamesTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/ClientDetailsEntityData.xml", "/data/RecordNameEntityData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_PeerReviewsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_PeerReviewsTest.java index e1d0bbfbb0f..87150f14f42 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_PeerReviewsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_PeerReviewsTest.java @@ -29,7 +29,6 @@ import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; import org.orcid.core.common.manager.EmailFrequencyManager; -import org.springframework.transaction.annotation.Transactional; import org.orcid.core.exception.ActivityIdentifierValidationException; import org.orcid.core.exception.OrcidAccessControlException; import org.orcid.core.exception.OrcidDuplicatedActivityException; @@ -80,7 +79,6 @@ @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) -@Transactional public class MemberV2ApiServiceDelegator_PeerReviewsTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/ClientDetailsEntityData.xml", "/data/Oauth2TokenDetailsData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_PersonalDetailsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_PersonalDetailsTest.java index 90fa6b92ad2..d526f828ffe 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_PersonalDetailsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_PersonalDetailsTest.java @@ -38,11 +38,9 @@ import org.orcid.test.OrcidJUnit4ClassRunner; import org.orcid.test.helper.Utils; import org.springframework.test.context.ContextConfiguration; -import org.springframework.transaction.annotation.Transactional; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) -@Transactional public class MemberV2ApiServiceDelegator_PersonalDetailsTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/ClientDetailsEntityData.xml", "/data/Oauth2TokenDetailsData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ReadPersonTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ReadPersonTest.java index e3f06541a0f..1b5e5b707ad 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ReadPersonTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ReadPersonTest.java @@ -41,13 +41,11 @@ import org.orcid.test.OrcidJUnit4ClassRunner; import org.orcid.test.helper.Utils; import org.springframework.test.context.ContextConfiguration; -import org.springframework.transaction.annotation.Transactional; import static org.junit.Assert.*; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) -@Transactional public class MemberV2ApiServiceDelegator_ReadPersonTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/ClientDetailsEntityData.xml", "/data/Oauth2TokenDetailsData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ReadRecordTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ReadRecordTest.java index cae37cfba08..7865fbd55a5 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ReadRecordTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ReadRecordTest.java @@ -59,13 +59,11 @@ import org.orcid.test.OrcidJUnit4ClassRunner; import org.orcid.test.helper.Utils; import org.springframework.test.context.ContextConfiguration; -import org.springframework.transaction.annotation.Transactional; import static org.junit.Assert.*; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) -@Transactional public class MemberV2ApiServiceDelegator_ReadRecordTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/WorksEntityData.xml", "/data/ClientDetailsEntityData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ResearcherUrlsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ResearcherUrlsTest.java index e7490968543..0c04054faa4 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ResearcherUrlsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_ResearcherUrlsTest.java @@ -50,11 +50,9 @@ import org.orcid.test.OrcidJUnit4ClassRunner; import org.orcid.test.helper.Utils; import org.springframework.test.context.ContextConfiguration; -import org.springframework.transaction.annotation.Transactional; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) -@Transactional public class MemberV2ApiServiceDelegator_ResearcherUrlsTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/ClientDetailsEntityData.xml", "/data/Oauth2TokenDetailsData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_WorksTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_WorksTest.java index cedaf0fb037..3abda0414d1 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_WorksTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_WorksTest.java @@ -79,14 +79,12 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.test.context.ContextConfiguration; -import org.springframework.transaction.annotation.Transactional; import org.springframework.web.context.request.RequestAttributes; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) -@Transactional public class MemberV2ApiServiceDelegator_WorksTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/WorksEntityData.xml", "/data/ClientDetailsEntityData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegatorErrorsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegatorErrorsTest.java index ae887ceafd6..cea91278298 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegatorErrorsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegatorErrorsTest.java @@ -63,14 +63,12 @@ import org.orcid.test.OrcidJUnit4ClassRunner; import org.springframework.beans.factory.annotation.Value; import org.springframework.test.context.ContextConfiguration; -import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.support.TransactionTemplate; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) -@Transactional public class MemberV3ApiServiceDelegatorErrorsTest extends DBUnitTest { private static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/WorksEntityData.xml", "/data/ClientDetailsEntityData.xml", "/data/Oauth2TokenDetailsData.xml", "/data/OrgsEntityData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ActivitiesSummaryTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ActivitiesSummaryTest.java index c36fcaef173..5e2ed1fd92b 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ActivitiesSummaryTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ActivitiesSummaryTest.java @@ -66,11 +66,9 @@ import org.orcid.test.OrcidJUnit4ClassRunner; import org.orcid.test.helper.v3.Utils; import org.springframework.test.context.ContextConfiguration; -import org.springframework.transaction.annotation.Transactional; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) -@Transactional public class MemberV3ApiServiceDelegator_ActivitiesSummaryTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/WorksEntityData.xml", "/data/ClientDetailsEntityData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_AddressesTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_AddressesTest.java index c0755f943c8..35847844494 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_AddressesTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_AddressesTest.java @@ -55,11 +55,9 @@ import org.orcid.test.OrcidJUnit4ClassRunner; import org.orcid.test.helper.v3.Utils; import org.springframework.test.context.ContextConfiguration; -import org.springframework.transaction.annotation.Transactional; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) -@Transactional public class MemberV3ApiServiceDelegator_AddressesTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/RecordNameEntityData.xml", "/data/BiographyEntityData.xml"); diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_BiogrphyTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_BiogrphyTest.java index f59b0654f19..dea0a4203ec 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_BiogrphyTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_BiogrphyTest.java @@ -41,11 +41,9 @@ import org.orcid.test.OrcidJUnit4ClassRunner; import org.orcid.test.helper.v3.Utils; import org.springframework.test.context.ContextConfiguration; -import org.springframework.transaction.annotation.Transactional; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) -@Transactional public class MemberV3ApiServiceDelegator_BiogrphyTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/WorksEntityData.xml", "/data/ClientDetailsEntityData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_DistinctionsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_DistinctionsTest.java index 536634998c5..dc656efbe8f 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_DistinctionsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_DistinctionsTest.java @@ -61,11 +61,9 @@ import org.orcid.test.OrcidJUnit4ClassRunner; import org.orcid.test.helper.v3.Utils; import org.springframework.test.context.ContextConfiguration; -import org.springframework.transaction.annotation.Transactional; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) -@Transactional public class MemberV3ApiServiceDelegator_DistinctionsTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/WorksEntityData.xml", "/data/ClientDetailsEntityData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_EducationsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_EducationsTest.java index e80a4f02996..ec21287dd65 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_EducationsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_EducationsTest.java @@ -63,11 +63,9 @@ import org.orcid.test.OrcidJUnit4ClassRunner; import org.orcid.test.helper.v3.Utils; import org.springframework.test.context.ContextConfiguration; -import org.springframework.transaction.annotation.Transactional; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) -@Transactional public class MemberV3ApiServiceDelegator_EducationsTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/WorksEntityData.xml", "/data/ClientDetailsEntityData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_EmailsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_EmailsTest.java index c3ba3adae03..0de07fc6b68 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_EmailsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_EmailsTest.java @@ -45,11 +45,9 @@ import org.orcid.test.OrcidJUnit4ClassRunner; import org.orcid.test.helper.v3.Utils; import org.springframework.test.context.ContextConfiguration; -import org.springframework.transaction.annotation.Transactional; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) -@Transactional public class MemberV3ApiServiceDelegator_EmailsTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/ClientDetailsEntityData.xml", "/data/RecordNameEntityData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_EmploymentsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_EmploymentsTest.java index 1ccd7cc2a09..842b5e56847 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_EmploymentsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_EmploymentsTest.java @@ -61,11 +61,9 @@ import org.orcid.test.OrcidJUnit4ClassRunner; import org.orcid.test.helper.v3.Utils; import org.springframework.test.context.ContextConfiguration; -import org.springframework.transaction.annotation.Transactional; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) -@Transactional public class MemberV3ApiServiceDelegator_EmploymentsTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/WorksEntityData.xml", "/data/ClientDetailsEntityData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ExternalIdentifiersTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ExternalIdentifiersTest.java index 80cd8850bec..4c6154e44f2 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ExternalIdentifiersTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ExternalIdentifiersTest.java @@ -53,11 +53,9 @@ import org.orcid.test.OrcidJUnit4ClassRunner; import org.orcid.test.helper.v3.Utils; import org.springframework.test.context.ContextConfiguration; -import org.springframework.transaction.annotation.Transactional; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) -@Transactional public class MemberV3ApiServiceDelegator_ExternalIdentifiersTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/WorksEntityData.xml", "/data/ClientDetailsEntityData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_FundingTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_FundingTest.java index 25c5dd5b158..1f713d42302 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_FundingTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_FundingTest.java @@ -70,11 +70,9 @@ import org.orcid.test.TargetProxyHelper; import org.orcid.test.helper.v3.Utils; import org.springframework.test.context.ContextConfiguration; -import org.springframework.transaction.annotation.Transactional; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) -@Transactional public class MemberV3ApiServiceDelegator_FundingTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/WorksEntityData.xml", "/data/ClientDetailsEntityData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_GeneralTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_GeneralTest.java index c219fa30475..1200bbeb4a4 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_GeneralTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_GeneralTest.java @@ -83,12 +83,10 @@ import org.orcid.test.TargetProxyHelper; import org.orcid.test.helper.v3.Utils; import org.springframework.test.context.ContextConfiguration; -import org.springframework.transaction.annotation.Transactional; import org.springframework.test.util.ReflectionTestUtils; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) -@Transactional public class MemberV3ApiServiceDelegator_GeneralTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/WorksEntityData.xml", "/data/ClientDetailsEntityData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_GroupIdTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_GroupIdTest.java index 120f7e36d33..0dfec01b63a 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_GroupIdTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_GroupIdTest.java @@ -57,12 +57,10 @@ import org.orcid.test.helper.v3.Utils; import org.orcid.utils.DateUtils; import org.springframework.test.context.ContextConfiguration; -import org.springframework.transaction.annotation.Transactional; import org.springframework.test.util.ReflectionTestUtils; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) -@Transactional public class MemberV3ApiServiceDelegator_GroupIdTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/WorksEntityData.xml", "/data/ClientDetailsEntityData.xml", "/data/Oauth2TokenDetailsData.xml", "/data/OrgsEntityData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_InvitedPositionsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_InvitedPositionsTest.java index 200abed7d9f..9ebe3029d4f 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_InvitedPositionsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_InvitedPositionsTest.java @@ -61,11 +61,9 @@ import org.orcid.test.OrcidJUnit4ClassRunner; import org.orcid.test.helper.v3.Utils; import org.springframework.test.context.ContextConfiguration; -import org.springframework.transaction.annotation.Transactional; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) -@Transactional public class MemberV3ApiServiceDelegator_InvitedPositionsTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/WorksEntityData.xml", "/data/ClientDetailsEntityData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_KeywordsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_KeywordsTest.java index ca7dd3b577d..8aaa445cb20 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_KeywordsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_KeywordsTest.java @@ -53,11 +53,9 @@ import org.orcid.test.OrcidJUnit4ClassRunner; import org.orcid.test.helper.v3.Utils; import org.springframework.test.context.ContextConfiguration; -import org.springframework.transaction.annotation.Transactional; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) -@Transactional public class MemberV3ApiServiceDelegator_KeywordsTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/ClientDetailsEntityData.xml", "/data/RecordNameEntityData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_MembershipsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_MembershipsTest.java index d0110086d32..22e43c0ea0e 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_MembershipsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_MembershipsTest.java @@ -61,11 +61,9 @@ import org.orcid.test.OrcidJUnit4ClassRunner; import org.orcid.test.helper.v3.Utils; import org.springframework.test.context.ContextConfiguration; -import org.springframework.transaction.annotation.Transactional; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) -@Transactional public class MemberV3ApiServiceDelegator_MembershipsTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/WorksEntityData.xml", "/data/ClientDetailsEntityData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_OtherNamesTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_OtherNamesTest.java index 940f2ff9727..2f894a170d0 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_OtherNamesTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_OtherNamesTest.java @@ -53,11 +53,9 @@ import org.orcid.test.OrcidJUnit4ClassRunner; import org.orcid.test.helper.v3.Utils; import org.springframework.test.context.ContextConfiguration; -import org.springframework.transaction.annotation.Transactional; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) -@Transactional public class MemberV3ApiServiceDelegator_OtherNamesTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/ClientDetailsEntityData.xml", "/data/RecordNameEntityData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_PeerReviewsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_PeerReviewsTest.java index 34ce60f191f..d0696ea6998 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_PeerReviewsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_PeerReviewsTest.java @@ -84,11 +84,9 @@ import org.orcid.test.TargetProxyHelper; import org.orcid.test.helper.v3.Utils; import org.springframework.test.context.ContextConfiguration; -import org.springframework.transaction.annotation.Transactional; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) -@Transactional public class MemberV3ApiServiceDelegator_PeerReviewsTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/ClientDetailsEntityData.xml", "/data/Oauth2TokenDetailsData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_PersonalDetailsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_PersonalDetailsTest.java index 568d187aa17..026cb556be6 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_PersonalDetailsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_PersonalDetailsTest.java @@ -44,11 +44,9 @@ import org.orcid.test.OrcidJUnit4ClassRunner; import org.orcid.test.helper.v3.Utils; import org.springframework.test.context.ContextConfiguration; -import org.springframework.transaction.annotation.Transactional; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) -@Transactional public class MemberV3ApiServiceDelegator_PersonalDetailsTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/ClientDetailsEntityData.xml", "/data/Oauth2TokenDetailsData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_QualificationsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_QualificationsTest.java index 3840c67b6ed..71aaa4cf20b 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_QualificationsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_QualificationsTest.java @@ -61,11 +61,9 @@ import org.orcid.test.OrcidJUnit4ClassRunner; import org.orcid.test.helper.v3.Utils; import org.springframework.test.context.ContextConfiguration; -import org.springframework.transaction.annotation.Transactional; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) -@Transactional public class MemberV3ApiServiceDelegator_QualificationsTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/WorksEntityData.xml", "/data/ClientDetailsEntityData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ReadPersonTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ReadPersonTest.java index 487a4dc2b23..921f0602b67 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ReadPersonTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ReadPersonTest.java @@ -22,13 +22,11 @@ import org.orcid.test.OrcidJUnit4ClassRunner; import org.orcid.test.helper.v3.Utils; import org.springframework.test.context.ContextConfiguration; -import org.springframework.transaction.annotation.Transactional; import static org.junit.Assert.*; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) -@Transactional public class MemberV3ApiServiceDelegator_ReadPersonTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/ClientDetailsEntityData.xml", "/data/Oauth2TokenDetailsData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ReadRecordTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ReadRecordTest.java index c0e2b7b86a3..d9160768901 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ReadRecordTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ReadRecordTest.java @@ -71,13 +71,11 @@ import org.orcid.test.OrcidJUnit4ClassRunner; import org.orcid.test.helper.v3.Utils; import org.springframework.test.context.ContextConfiguration; -import org.springframework.transaction.annotation.Transactional; import static org.junit.Assert.*; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) -@Transactional public class MemberV3ApiServiceDelegator_ReadRecordTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/WorksEntityData.xml", "/data/ClientDetailsEntityData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ResearcherUrlsTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ResearcherUrlsTest.java index f37c4399f36..52c3eca0f37 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ResearcherUrlsTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ResearcherUrlsTest.java @@ -56,11 +56,9 @@ import org.orcid.test.OrcidJUnit4ClassRunner; import org.orcid.test.helper.v3.Utils; import org.springframework.test.context.ContextConfiguration; -import org.springframework.transaction.annotation.Transactional; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) -@Transactional public class MemberV3ApiServiceDelegator_ResearcherUrlsTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/ClientDetailsEntityData.xml", "/data/Oauth2TokenDetailsData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ServicesTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ServicesTest.java index 616ae0211a7..cd273519423 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ServicesTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_ServicesTest.java @@ -61,11 +61,9 @@ import org.orcid.test.OrcidJUnit4ClassRunner; import org.orcid.test.helper.v3.Utils; import org.springframework.test.context.ContextConfiguration; -import org.springframework.transaction.annotation.Transactional; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) -@Transactional public class MemberV3ApiServiceDelegator_ServicesTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/WorksEntityData.xml", "/data/ClientDetailsEntityData.xml", diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_WorksTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_WorksTest.java index 654c230cb0e..d7f03364db3 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_WorksTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_WorksTest.java @@ -85,14 +85,12 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.test.context.ContextConfiguration; -import org.springframework.transaction.annotation.Transactional; import org.springframework.web.context.request.RequestAttributes; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-orcid-api-web-context.xml" }) -@Transactional public class MemberV3ApiServiceDelegator_WorksTest extends DBUnitTest { protected static final List DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/WorksEntityData.xml", "/data/ClientDetailsEntityData.xml", diff --git a/orcid-core/src/main/java/org/orcid/core/aop/ProfileLastModifiedAspect.java b/orcid-core/src/main/java/org/orcid/core/aop/ProfileLastModifiedAspect.java index 410c9c2cb9c..c06501d4da1 100644 --- a/orcid-core/src/main/java/org/orcid/core/aop/ProfileLastModifiedAspect.java +++ b/orcid-core/src/main/java/org/orcid/core/aop/ProfileLastModifiedAspect.java @@ -17,6 +17,8 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.PriorityOrdered; +import org.springframework.transaction.PlatformTransactionManager; +import org.springframework.transaction.support.TransactionTemplate; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; @@ -46,6 +48,9 @@ public class ProfileLastModifiedAspect implements PriorityOrdered { @Resource private RedisClient redisClient; + + @Resource + private PlatformTransactionManager transactionManager; @Value("${org.orcid.core.utils.cache.redis.summary.enabled:false}") private boolean isSummaryCacheEnabled; @@ -128,7 +133,8 @@ public void updateLastModifiedDateAndIndexingStatus(String orcid) { return; } try { - profileLastModifiedDao.updateLastModifiedDateAndIndexingStatus(orcid, IndexingStatus.PENDING); + new TransactionTemplate(transactionManager) + .executeWithoutResult(status -> profileLastModifiedDao.updateLastModifiedDateAndIndexingStatus(orcid, IndexingStatus.PENDING)); } catch(Exception e) { LOGGER.error("Unable to update last modified and indexing status for " + orcid, e); } @@ -150,7 +156,8 @@ public void updateLastModifiedDate(String orcid) { return; } try { - profileLastModifiedDao.updateLastModifiedDateWithoutResult(orcid); + new TransactionTemplate(transactionManager) + .executeWithoutResult(status -> profileLastModifiedDao.updateLastModifiedDateWithoutResult(orcid)); } catch(Exception e) { LOGGER.error("Unable to update last modified for " + orcid, e); } diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/GroupIdRecordDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/GroupIdRecordDaoImpl.java index 76f961caf4e..fde234531f1 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/GroupIdRecordDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/GroupIdRecordDaoImpl.java @@ -46,9 +46,9 @@ public GroupIdRecordEntity findByGroupId(String groupId) { @Override public GroupIdRecordEntity findByName(String name) { - TypedQuery query = entityManager.createQuery("from GroupIdRecordEntity where trim(lower(group_name)) = trim(lower(:group_name))", + TypedQuery query = entityManager.createQuery("from GroupIdRecordEntity where trim(lower(groupName)) = trim(lower(:groupName))", GroupIdRecordEntity.class); - query.setParameter("group_name", name); + query.setParameter("groupName", name); GroupIdRecordEntity result = query.getSingleResult(); return result; } diff --git a/orcid-pub-web/src/main/java/org/orcid/api/filters/ApiRateLimitFilter.java b/orcid-pub-web/src/main/java/org/orcid/api/filters/ApiRateLimitFilter.java index 0223a4e2a2c..f00fa899749 100644 --- a/orcid-pub-web/src/main/java/org/orcid/api/filters/ApiRateLimitFilter.java +++ b/orcid-pub-web/src/main/java/org/orcid/api/filters/ApiRateLimitFilter.java @@ -6,6 +6,7 @@ import java.util.*; import jakarta.annotation.Resource; +import jakarta.persistence.NoResultException; import jakarta.servlet.FilterChain; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; @@ -150,6 +151,8 @@ public void doFilterInternal(HttpServletRequest httpServletRequest, HttpServletR if(token != null) { clientId = token.getClientDetailsId(); } + } catch (NoResultException ex) { + LOG.debug("No client found for token value, treating request as anonymous client"); } catch (Exception ex) { LOG.error("Exception when trying to get the client id from token value, ignoring and treating as anonymous client", ex); } From 6211b459ebbe0d84681d9da9ac1c75ac4e8415dd Mon Sep 17 00:00:00 2001 From: Camelia Dumitru Date: Tue, 14 Apr 2026 00:32:47 +0100 Subject: [PATCH 39/77] Fixed member api test case suite --- .../MemberV2ApiServiceDelegator_GeneralTest.java | 1 + .../MemberV2ApiServiceDelegator_WorksTest.java | 7 +++---- .../MemberV3ApiServiceDelegator_GeneralTest.java | 1 + .../MemberV3ApiServiceDelegator_WorksTest.java | 9 ++++++--- .../manager/impl/OrcidSecurityManagerImpl.java | 7 +++++++ .../manager/v3/impl/OrcidSecurityManagerImpl.java | 14 +++++++++++++- 6 files changed, 31 insertions(+), 8 deletions(-) diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_GeneralTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_GeneralTest.java index c5779e7b6c0..11f7208f137 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_GeneralTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_GeneralTest.java @@ -110,6 +110,7 @@ public class MemberV2ApiServiceDelegator_GeneralTest extends DBUnitTest { @Before public void before() throws Exception { + initDBUnitData(DATA_FILES); MockitoAnnotations.initMocks(this); Map map = new HashMap(); map.put(EmailFrequencyManager.ADMINISTRATIVE_CHANGE_NOTIFICATIONS, String.valueOf(Float.MAX_VALUE)); diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_WorksTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_WorksTest.java index 3abda0414d1..ac9c4ad87db 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_WorksTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/delegator/MemberV2ApiServiceDelegator_WorksTest.java @@ -110,7 +110,8 @@ public class MemberV2ApiServiceDelegator_WorksTest extends DBUnitTest { private NotificationManager notificationManager; @Before - public void before() { + public void before() throws Exception { + initDBUnitData(DATA_FILES); MockitoAnnotations.initMocks(this); Map map = new HashMap(); map.put(EmailFrequencyManager.ADMINISTRATIVE_CHANGE_NOTIFICATIONS, String.valueOf(Float.MAX_VALUE)); @@ -667,7 +668,7 @@ public void testUpdateWorkLeavingVisibilityNullTest() { assertEquals(Visibility.PUBLIC, work.getVisibility()); } - @Test(expected = NoResultException.class) + @Test public void testDeleteWork() { SecurityContextTestUtils.setUpSecurityContext("4444-4444-4444-4447", ScopePathType.READ_LIMITED, ScopePathType.ACTIVITIES_UPDATE); Response response = serviceDelegator.viewWork("4444-4444-4444-4447", 9L); @@ -678,8 +679,6 @@ public void testDeleteWork() { response = serviceDelegator.deleteWork("4444-4444-4444-4447", 9L); assertNotNull(response); assertEquals(Response.Status.NO_CONTENT.getStatusCode(), response.getStatus()); - - serviceDelegator.viewWork("4444-4444-4444-4447", 9L); } @Test diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_GeneralTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_GeneralTest.java index 1200bbeb4a4..9010bbc6078 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_GeneralTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_GeneralTest.java @@ -119,6 +119,7 @@ public class MemberV3ApiServiceDelegator_GeneralTest extends DBUnitTest { @Before public void before() throws Exception { + initDBUnitData(DATA_FILES); MockitoAnnotations.initMocks(this); IssnValidator mockIssnValidator = Mockito.mock(IssnValidator.class); when(mockIssnValidator.issnValid(Mockito.anyString())).thenReturn(true); diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_WorksTest.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_WorksTest.java index d7f03364db3..12819562718 100644 --- a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_WorksTest.java +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/delegator/MemberV3ApiServiceDelegator_WorksTest.java @@ -120,6 +120,11 @@ public static void removeDBUnitData() throws Exception { removeDBUnitData(DATA_FILES); } + @Before + public void resetDBUnitDataBeforeEachTest() throws Exception { + initDBUnitData(DATA_FILES); + } + @Test(expected = OrcidUnauthorizedException.class) public void testViewWorkWrongToken() { SecurityContextTestUtils.setUpSecurityContext("some-other-user", ScopePathType.READ_LIMITED); @@ -650,7 +655,7 @@ public void testUpdateWorkLeavingVisibilityNullTest() { assertEquals(Visibility.PUBLIC, work.getVisibility()); } - @Test(expected = NoResultException.class) + @Test public void testDeleteWork() { SecurityContextTestUtils.setUpSecurityContext("4444-4444-4444-4447", ScopePathType.READ_LIMITED, ScopePathType.ACTIVITIES_UPDATE); Response response = serviceDelegator.viewWork("4444-4444-4444-4447", 9L); @@ -661,8 +666,6 @@ public void testDeleteWork() { response = serviceDelegator.deleteWork("4444-4444-4444-4447", 9L); assertNotNull(response); assertEquals(Response.Status.NO_CONTENT.getStatusCode(), response.getStatus()); - - serviceDelegator.viewWork("4444-4444-4444-4447", 9L); } @Test diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/OrcidSecurityManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/OrcidSecurityManagerImpl.java index 894dbefe264..2f81cf9e1b0 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/OrcidSecurityManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/OrcidSecurityManagerImpl.java @@ -705,6 +705,13 @@ private void isMyToken(String orcid) { String userOrcid = authDetails.getUserOrcid(); // Client credentials flow (no user ORCID) – allow through if (userOrcid == null) { + Set scopes = authDetails.getScopes(); + if (scopes != null && scopes.contains(ScopePathType.ORCID_PROFILE_CREATE.value())) { + ProfileEntity profile = profileEntityCacheManager.retrieve(orcid); + if (profile != null && Boolean.TRUE.equals(profile.getClaimed())) { + throw new IllegalStateException("Non client credential scope found in client request"); + } + } return; } if (orcid.equals(userOrcid)) { diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/OrcidSecurityManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/OrcidSecurityManagerImpl.java index 893c8d07afb..3e8987f695c 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/OrcidSecurityManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/OrcidSecurityManagerImpl.java @@ -789,7 +789,19 @@ private void isMyToken(String orcid) { if(OrcidBearerTokenAuthentication.class.isAssignableFrom(authentication.getClass())) { OrcidBearerTokenAuthentication authDetails = (OrcidBearerTokenAuthentication) authentication; - if (orcid.equals(authDetails.getUserOrcid())) { + String userOrcid = authDetails.getUserOrcid(); + // Client credentials flow (no user ORCID) – allow through + if (userOrcid == null) { + Set scopes = authDetails.getScopes(); + if (scopes != null && scopes.contains(ScopePathType.ORCID_PROFILE_CREATE.value())) { + ProfileEntity profile = profileEntityCacheManager.retrieve(orcid); + if (profile != null && Boolean.TRUE.equals(profile.getClaimed())) { + throw new IllegalStateException("Non client credential scope found in client request"); + } + } + return; + } + if (orcid.equals(userOrcid)) { return; } } From 3702d477a135b86355cf1247c6f7478aad79e830 Mon Sep 17 00:00:00 2001 From: Camelia Dumitru Date: Tue, 14 Apr 2026 00:33:02 +0100 Subject: [PATCH 40/77] Added org.eclipse.angus:angus-activation is the current reference implementation used in modern Jakarta ecosystems. --- orcid-core/pom.xml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/orcid-core/pom.xml b/orcid-core/pom.xml index 96ff2aef8ec..7271c58511b 100644 --- a/orcid-core/pom.xml +++ b/orcid-core/pom.xml @@ -130,7 +130,12 @@ jakarta.activation jakarta.activation-api 2.1.0 - + + + org.eclipse.angus + angus-activation + 2.0.2 + com.sun.xml.bind jaxb-impl From ad2221d1f0eae50c66534c745313e4ae5a3cbc80 Mon Sep 17 00:00:00 2001 From: Camelia Dumitru Date: Tue, 14 Apr 2026 00:59:37 +0100 Subject: [PATCH 41/77] Fixed internal API --- .../delegator/impl/InternalApiServiceDelegatorImpl.java | 2 +- .../src/main/resources/orcid-internal-api-context.xml | 2 ++ .../internal/server/InternalApiServiceDelegatorTest.java | 4 ++-- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/orcid-internal-api/src/main/java/org/orcid/internal/server/delegator/impl/InternalApiServiceDelegatorImpl.java b/orcid-internal-api/src/main/java/org/orcid/internal/server/delegator/impl/InternalApiServiceDelegatorImpl.java index 1b129acf8da..69415c012b3 100644 --- a/orcid-internal-api/src/main/java/org/orcid/internal/server/delegator/impl/InternalApiServiceDelegatorImpl.java +++ b/orcid-internal-api/src/main/java/org/orcid/internal/server/delegator/impl/InternalApiServiceDelegatorImpl.java @@ -58,7 +58,7 @@ public Response viewStatusText() { @Override public Response viewPersonLastModified(String orcid) { - orcidSecurityManager.checkScopes(ScopePathType.ORCID_WORKS_READ_LIMITED); + orcidSecurityManager.checkScopes(ScopePathType.INTERNAL_PERSON_LAST_MODIFIED); Date lastModified = profileEntityManagerReadOnly.getLastModifiedDate(orcid); LastModifiedResponse obj = new LastModifiedResponse(orcid, lastModified.toString()); Response response = Response.ok(obj).build(); diff --git a/orcid-internal-api/src/main/resources/orcid-internal-api-context.xml b/orcid-internal-api/src/main/resources/orcid-internal-api-context.xml index 457a1008708..cfce58c59f0 100644 --- a/orcid-internal-api/src/main/resources/orcid-internal-api-context.xml +++ b/orcid-internal-api/src/main/resources/orcid-internal-api-context.xml @@ -10,6 +10,8 @@ + + diff --git a/orcid-internal-api/src/test/java/org/orcid/internal/server/InternalApiServiceDelegatorTest.java b/orcid-internal-api/src/test/java/org/orcid/internal/server/InternalApiServiceDelegatorTest.java index c574e7de784..21c448b2324 100644 --- a/orcid-internal-api/src/test/java/org/orcid/internal/server/InternalApiServiceDelegatorTest.java +++ b/orcid-internal-api/src/test/java/org/orcid/internal/server/InternalApiServiceDelegatorTest.java @@ -5,7 +5,6 @@ import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; -import java.security.AccessControlException; import java.util.Arrays; import java.util.List; @@ -15,6 +14,7 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.orcid.core.exception.OrcidAccessControlException; import org.orcid.core.manager.v3.read_only.ProfileEntityManagerReadOnly; import org.orcid.core.utils.SecurityContextTestUtils; import org.orcid.internal.server.delegator.InternalApiServiceDelegator; @@ -115,7 +115,7 @@ public void findOrcidByEmailTest() { assertEquals("", info.getOrcid()); } - @Test(expected = AccessControlException.class) + @Test(expected = OrcidAccessControlException.class) public void findOrcidByEmailWrongScopeTest() { SecurityContextTestUtils.setUpSecurityContextForClientOnly("APP-5555555555555555", ScopePathType.INTERNAL_PERSON_LAST_MODIFIED); internalApiServiceDelegator.findOrcidByEmail("5555-5555-5555-5558@user.com"); From 8594f0da2d6c59df23943b3db8c4755aed9211e9 Mon Sep 17 00:00:00 2001 From: Camelia Dumitru Date: Tue, 14 Apr 2026 09:33:42 +0100 Subject: [PATCH 42/77] Test fixes for citeproc literal and number cast in api record status --- .../writer/citeproc/WorkToCiteprocTranslatorTest.java | 6 +++--- .../listener/persistence/dao/Api20RecordStatusDao.java | 5 ++--- .../listener/persistence/dao/Api30RecordStatusDao.java | 5 ++--- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/orcid-api-common/src/test/java/org/orcid/api/common/writer/citeproc/WorkToCiteprocTranslatorTest.java b/orcid-api-common/src/test/java/org/orcid/api/common/writer/citeproc/WorkToCiteprocTranslatorTest.java index 6b4ba537b97..88469d5702d 100644 --- a/orcid-api-common/src/test/java/org/orcid/api/common/writer/citeproc/WorkToCiteprocTranslatorTest.java +++ b/orcid-api-common/src/test/java/org/orcid/api/common/writer/citeproc/WorkToCiteprocTranslatorTest.java @@ -49,9 +49,9 @@ public void testBibtexWorkTranslationHyperAuthorLiteralAndMissingDOI(){ WorkToCiteprocTranslator t = new WorkToCiteprocTranslator(); CSLItemData d = t.toCiteproc(w, null, true ); - Assert.assertEquals(d.getAuthor().length, 1); - Assert.assertEquals(d.getAuthor()[0].getLiteral(), "Altshuler, D.M. and Durbin, R.M. and Abecasis, G.R. and Bentley, D.R. and Chakravarti, A. and Clark, A.G. and Donnelly, P. and Eichler, E.E. and Flicek, P. and Gabriel, S.B. and Gibbs, R.A. and Gre..."); - Assert.assertEquals(d.getDOI(), "10.1234/1234"); + Assert.assertEquals(1, d.getAuthor().length); + Assert.assertEquals("D.M. Altshuler et all.", d.getAuthor()[0].getLiteral()); + Assert.assertEquals("10.1234/1234", d.getDOI()); } @Test diff --git a/orcid-message-listener/src/main/java/org/orcid/listener/persistence/dao/Api20RecordStatusDao.java b/orcid-message-listener/src/main/java/org/orcid/listener/persistence/dao/Api20RecordStatusDao.java index cf171385880..2bad64c5b75 100644 --- a/orcid-message-listener/src/main/java/org/orcid/listener/persistence/dao/Api20RecordStatusDao.java +++ b/orcid-message-listener/src/main/java/org/orcid/listener/persistence/dao/Api20RecordStatusDao.java @@ -1,6 +1,5 @@ package org.orcid.listener.persistence.dao; -import java.math.BigInteger; import java.util.Date; import java.util.List; @@ -29,8 +28,8 @@ public Api20RecordStatusEntity get(String orcid) { public boolean exists(String orcid) { Query query = entityManager.createNativeQuery("SELECT count(*) FROM api_2_0_record_status WHERE orcid=:orcid"); query.setParameter("orcid", orcid); - Long result = ((BigInteger) query.getSingleResult()).longValue(); - return (result != null && result > 0); + Number result = (Number) query.getSingleResult(); + return (result != null && result.longValue() > 0L); } @Transactional diff --git a/orcid-message-listener/src/main/java/org/orcid/listener/persistence/dao/Api30RecordStatusDao.java b/orcid-message-listener/src/main/java/org/orcid/listener/persistence/dao/Api30RecordStatusDao.java index 516fc08bdec..7a9a028e43b 100644 --- a/orcid-message-listener/src/main/java/org/orcid/listener/persistence/dao/Api30RecordStatusDao.java +++ b/orcid-message-listener/src/main/java/org/orcid/listener/persistence/dao/Api30RecordStatusDao.java @@ -1,6 +1,5 @@ package org.orcid.listener.persistence.dao; -import java.math.BigInteger; import java.util.Date; import java.util.List; @@ -29,8 +28,8 @@ public Api30RecordStatusEntity get(String orcid) { public boolean exists(String orcid) { Query query = entityManager.createNativeQuery("SELECT count(*) FROM api_3_0_record_status WHERE orcid=:orcid"); query.setParameter("orcid", orcid); - Long result = ((BigInteger) query.getSingleResult()).longValue(); - return (result != null && result > 0); + Number result = (Number) query.getSingleResult(); + return (result != null && result.longValue() > 0L); } @Transactional From 133dd24275def55c42c96abb3847b628e6b44b3e Mon Sep 17 00:00:00 2001 From: Camelia Dumitru Date: Fri, 29 May 2026 09:16:38 +0100 Subject: [PATCH 43/77] Fixes for runtime errors mostly related to hibernate and spring6 --- .../resources/message-listener.properties | 4 +- orcid-api-common/pom.xml | 5 + .../api/common/filter/TokenTargetFilter.java | 33 +++++ .../oauth/OrcidBearerTokenFilter.java | 128 ++++++++++++++++-- orcid-api-web/pom.xml | 5 + .../core/aop/ProfileLastModifiedAspect.java | 72 ++++++---- .../v3/impl/ProfileEntityManagerImpl.java | 1 + .../AuthorizationServerUtil.java | 16 ++- .../src/main/resources/orcid-core-context.xml | 2 +- .../dao/impl/BackupCodeDaoImpl.java | 4 +- .../dao/impl/ClientDetailsDaoImpl.java | 20 ++- .../persistence/dao/impl/EmailDaoImpl.java | 10 +- .../dao/impl/EmailFrequencyDaoImpl.java | 14 +- .../dao/impl/IdentityProviderDaoImpl.java | 4 +- .../dao/impl/NotificationDaoImpl.java | 12 +- .../impl/OrcidOauth2TokenDetailDaoImpl.java | 32 +++-- .../dao/impl/OrgDisambiguatedDaoImpl.java | 8 +- .../dao/impl/PeerReviewDaoImpl.java | 7 +- .../persistence/dao/impl/ProfileDaoImpl.java | 42 ++++-- .../dao/impl/ProfileLastModifiedDaoImpl.java | 3 +- .../dao/impl/ResearchResourceDaoImpl.java | 4 +- .../resources/orcid-persistence-context.xml | 4 +- orcid-pub-web/log4j2.xml | 3 + orcid-pub-web/pom.xml | 5 + .../resources/orcid-t1-security-context.xml | 2 +- .../nginx/snippets/proxy_frontend.conf | 11 +- orcid-web-proxy/nginx/snippets/proxy_ui.conf | 12 +- .../AjaxAuthenticationFailureHandler.java | 2 + .../spring/OrcidAccessDeniedHandler.java | 42 ++++++ .../configuration/SessionCacheConfig.java | 9 +- .../web/controllers/CsrfController.java | 27 +++- .../resources/orcid-core-context-spam.xml | 2 +- .../resources/orcid-frontend-security.xml | 13 +- .../resources/orcid-frontend-web-servlet.xml | 3 + pom.xml | 2 +- 35 files changed, 457 insertions(+), 106 deletions(-) diff --git a/orcid-activemq/src/main/resources/message-listener.properties b/orcid-activemq/src/main/resources/message-listener.properties index f4d5343a573..03e897ecbe9 100644 --- a/orcid-activemq/src/main/resources/message-listener.properties +++ b/orcid-activemq/src/main/resources/message-listener.properties @@ -1,5 +1,5 @@ -org.orcid.message-listener.api20BaseURI: https://pub.qa.orcid.org/v2.0/ -org.orcid.message-listener.api30BaseURI: https://pub.qa.orcid.org/v3.0/ +org.orcid.message-listener.api20BaseURI=https://pub.dev.orcid.org/v2.0/ +org.orcid.message-listener.api30BaseURI=https://pub.dev.orcid.org/v3.0/ # API access token org.orcid.message-listener.api.read_public_access_token={TOKEN} diff --git a/orcid-api-common/pom.xml b/orcid-api-common/pom.xml index e5075e57974..8248694cd51 100644 --- a/orcid-api-common/pom.xml +++ b/orcid-api-common/pom.xml @@ -54,6 +54,11 @@ org.glassfish.jersey.media jersey-media-json-jackson + + org.glassfish.jersey.media + jersey-media-jaxb + ${jersey.version} + com.fasterxml.jackson.jakarta.rs jackson-jakarta-rs-json-provider diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/filter/TokenTargetFilter.java b/orcid-api-common/src/main/java/org/orcid/api/common/filter/TokenTargetFilter.java index ffb9feb3dff..c001c36d0e8 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/filter/TokenTargetFilter.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/filter/TokenTargetFilter.java @@ -1,5 +1,7 @@ package org.orcid.api.common.filter; +import java.util.Collection; +import java.util.Set; import java.security.AccessControlException; import java.util.regex.Matcher; @@ -10,11 +12,14 @@ import org.orcid.core.oauth.OrcidBearerTokenAuthentication; import org.orcid.utils.OrcidStringUtils; import org.springframework.security.core.Authentication; +import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.context.SecurityContext; import org.springframework.security.core.context.SecurityContextHolder; @Provider public class TokenTargetFilter implements ContainerRequestFilter { + private static final String READ_PUBLIC_SCOPE = "/read-public"; + private static final String ROLE_PUBLIC = "ROLE_PUBLIC"; //TODO: this method is doing exactly the same that the OrcidSecutiryManagerImpl.isMyToken does, so, lets review it and leave only one. @@ -35,6 +40,10 @@ private void validateTargetRecord(String targetOrcid) { if (OrcidBearerTokenAuthentication.class.isAssignableFrom(authentication.getClass())) { OrcidBearerTokenAuthentication authDetails = (OrcidBearerTokenAuthentication) authentication; if (authDetails != null) { + if (isClientOnlyPublicReadToken(authDetails)) { + return; + } + if (!targetOrcid.equals(authDetails.getUserOrcid())) { throw new AccessControlException("You do not have the required permissions."); } @@ -43,4 +52,28 @@ private void validateTargetRecord(String targetOrcid) { } } + private boolean isClientOnlyPublicReadToken(OrcidBearerTokenAuthentication authDetails) { + if (authDetails == null || authDetails.getUserOrcid() != null) { + return false; + } + + Set scopes = authDetails.getScopes(); + if (scopes != null && scopes.contains(READ_PUBLIC_SCOPE)) { + return true; + } + + Collection authorities = authDetails.getAuthorities(); + if (authorities == null) { + return false; + } + + for (GrantedAuthority authority : authorities) { + if (authority != null && ROLE_PUBLIC.equals(authority.getAuthority())) { + return true; + } + } + + return false; + } + } diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidBearerTokenFilter.java b/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidBearerTokenFilter.java index 3e44aab21c2..d1f5d3f2a6b 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidBearerTokenFilter.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidBearerTokenFilter.java @@ -6,7 +6,6 @@ import org.apache.log4j.Logger; import org.codehaus.jettison.json.JSONException; import org.codehaus.jettison.json.JSONObject; -import org.orcid.core.exception.InvalidTokenException; import org.orcid.core.oauth.OrcidBearerTokenAuthentication; import org.orcid.core.oauth.authorizationServer.AuthorizationServerUtil; import org.springframework.security.core.authority.SimpleGrantedAuthority; @@ -24,11 +23,18 @@ import java.security.AccessControlException; import java.util.Arrays; import java.util.Enumeration; +import java.util.HashSet; import java.util.Set; import java.util.stream.Collectors; public class OrcidBearerTokenFilter implements Filter { private static final Logger logger = Logger.getLogger(OrcidBearerTokenFilter.class); + private static final String CLIENT_GRANTED_AUTHORITY = "clientGrantedAuthority"; + private static final String ROLE_PUBLIC = "ROLE_PUBLIC"; + private static final String READ_PUBLIC_SCOPE = "/read-public"; + private static final String ACTIVE = "active"; + private static final String USERNAME = "username"; + private static final String ORCID = "orcid"; @Resource private AuthorizationServerUtil authorizationServerUtil; @@ -42,18 +48,32 @@ public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) final HttpServletResponse response = (HttpServletResponse) res; String tokenValue = extractToken(request); + + logger.debug("OrcidBearerTokenFilter request: method=" + request.getMethod() + " uri=" + request.getRequestURI() + " tokenPresent=" + StringUtils.isNotBlank(tokenValue) + " token=" + tokenFingerprint(tokenValue)); + + if(StringUtils.isBlank(tokenValue)) { // If the token is not present, continue the chain chain.doFilter(request, response); + return; } try { JSONObject tokenData = authorizationServerUtil.tokenIntrospection(tokenValue); + logger.debug("Token introspection successful for token=" + tokenData); + + logger.debug("Token introspection response: token=" + tokenFingerprint(tokenValue) + + " active=" + safeGet(tokenData, ACTIVE) + + " client_id=" + safeGet(tokenData, "client_id") + + " username=" + safeGet(tokenData, "username") + + " scope=" + safeGet(tokenData, "scope") + + " clientGrantedAuthority=" + safeGet(tokenData, CLIENT_GRANTED_AUTHORITY)); OrcidBearerTokenAuthentication authentication = validateTokenData(tokenValue, tokenData); SecurityContextHolder.getContext().setAuthentication(authentication); chain.doFilter(request, response); - } catch (URISyntaxException | InterruptedException | JSONException e) { + } catch (IOException | URISyntaxException | InterruptedException | JSONException e) { //TODO: Define error message and add exception type to it + logger.warn("Token introspection failed for token=" + tokenFingerprint(tokenValue), e); apiAuthenticationEntryPoint.commence(request, response, null); return; } @@ -65,7 +85,7 @@ private OrcidBearerTokenAuthentication validateTokenData(String accessTokenValue throw new AccessControlException("Invalid access token: Unable to obtain information from the authorization server"); } - boolean isTokenActive = tokenInfo.getBoolean("active"); + boolean isTokenActive = tokenInfo.getBoolean(ACTIVE); if(isTokenActive) { // If the token is user revoked it might be used for DELETE requests return buildAuthentication(accessTokenValue, tokenInfo); @@ -82,6 +102,7 @@ private OrcidBearerTokenAuthentication validateTokenData(String accessTokenValue } } } catch(AccessControlException i) { + logger.warn("Access control failure for token=" + tokenFingerprint(accessTokenValue) + " reason=" + i.getMessage()); throw i; } catch(Exception e) { logger.error("Exception validating token from authorization server", e); @@ -91,19 +112,43 @@ private OrcidBearerTokenAuthentication validateTokenData(String accessTokenValue private OrcidBearerTokenAuthentication buildAuthentication(String accessTokenValue, JSONObject tokenInfo) throws JSONException { String clientId = tokenInfo.getString("client_id"); - String userOrcid = tokenInfo.getString("username"); + String userOrcid = resolveUserOrcid(tokenInfo); + boolean isClientOnlyToken = StringUtils.isBlank(userOrcid); OrcidBearerTokenAuthentication.Builder builder = OrcidBearerTokenAuthentication.builder(clientId, userOrcid, accessTokenValue); - Set scopes = Arrays.stream(tokenInfo.getString("scope").split("[\\s,]+")) - .collect(Collectors.toSet()); + Set scopes = tokenizeSpaceOrCsvField(tokenInfo, "scope"); builder.scopes(scopes); - // Set granted authorities - if(tokenInfo.has("clientGrantedAuthority")) { - builder.authorities(Sets.newHashSet(new SimpleGrantedAuthority(tokenInfo.getString("clientGrantedAuthority")))); + // Set granted authorities from token introspection when present. + Set authorities = new HashSet<>(); + if(tokenInfo.has(CLIENT_GRANTED_AUTHORITY)) { + String grantedAuthorities = tokenInfo.getString(CLIENT_GRANTED_AUTHORITY); + if(StringUtils.isNotBlank(grantedAuthorities)) { + Arrays.stream(grantedAuthorities.split("[\\s,]+")) + .filter(StringUtils::isNotBlank) + .map(SimpleGrantedAuthority::new) + .forEach(authorities::add); + } + } + + // Fallback for public API tokens: if introspection does not include a granted authority + // but the token can read public data, treat it as ROLE_PUBLIC. + if(authorities.isEmpty() && scopes.contains(READ_PUBLIC_SCOPE)) { + authorities.add(new SimpleGrantedAuthority(ROLE_PUBLIC)); + } + + if(!authorities.isEmpty()) { + builder.authorities(Sets.newHashSet(authorities)); } + logger.debug("Built authentication for token=" + tokenFingerprint(accessTokenValue) + + " clientId=" + clientId + + " userOrcid=" + userOrcid + + " clientOnly=" + isClientOnlyToken + + " scopes=" + scopes + + " authorities=" + authorities); + if(tokenInfo.has("OBO_CLIENT_ID")) { String oboClientId = tokenInfo.getString("OBO_CLIENT_ID"); builder.oboClientId(oboClientId); @@ -112,6 +157,45 @@ private OrcidBearerTokenAuthentication buildAuthentication(String accessTokenVal return builder.build(); } + private String resolveUserOrcid(JSONObject tokenInfo) { + String username = extractOptionalString(tokenInfo, USERNAME); + if(StringUtils.isNotBlank(username)) { + return username; + } + + // Some introspection responses expose the user ORCID in "orcid" instead of "username". + String orcid = extractOptionalString(tokenInfo, ORCID); + if(StringUtils.isNotBlank(orcid)) { + return orcid; + } + + return null; + } + + private Set tokenizeSpaceOrCsvField(JSONObject tokenInfo, String fieldName) { + String rawValue = extractOptionalString(tokenInfo, fieldName); + if(StringUtils.isBlank(rawValue)) { + return new HashSet<>(); + } + + return Arrays.stream(rawValue.split("[\\s,]+")) + .filter(StringUtils::isNotBlank) + .collect(Collectors.toSet()); + } + + private String extractOptionalString(JSONObject tokenInfo, String fieldName) { + if(tokenInfo == null || StringUtils.isBlank(fieldName) || !tokenInfo.has(fieldName)) { + return null; + } + + try { + String value = tokenInfo.getString(fieldName); + return StringUtils.isBlank(value) ? null : value; + } catch(JSONException e) { + return null; + } + } + private String extractToken(HttpServletRequest request) { // first check the header... String token = extractHeaderToken(request); @@ -144,4 +228,30 @@ private String extractHeaderToken(HttpServletRequest request) { return null; } + + private String safeGet(JSONObject tokenInfo, String field) { + if (tokenInfo == null || StringUtils.isBlank(field) || !tokenInfo.has(field)) { + return ""; + } + + try { + Object value = tokenInfo.get(field); + return value == null ? "" : String.valueOf(value); + } catch (JSONException e) { + return ""; + } + } + + private String tokenFingerprint(String token) { + if (StringUtils.isBlank(token)) { + return ""; + } + + int len = token.length(); + if (len <= 8) { + return "***" + token; + } + + return "***" + token.substring(len - 8); + } } diff --git a/orcid-api-web/pom.xml b/orcid-api-web/pom.xml index f8391c91993..683fcf24d4a 100644 --- a/orcid-api-web/pom.xml +++ b/orcid-api-web/pom.xml @@ -56,6 +56,11 @@ com.google.guava guava + + org.glassfish.jersey.media + jersey-media-jaxb + ${jersey.version} + org.togglz togglz-core diff --git a/orcid-core/src/main/java/org/orcid/core/aop/ProfileLastModifiedAspect.java b/orcid-core/src/main/java/org/orcid/core/aop/ProfileLastModifiedAspect.java index c06501d4da1..b0f6ca6f1a7 100644 --- a/orcid-core/src/main/java/org/orcid/core/aop/ProfileLastModifiedAspect.java +++ b/orcid-core/src/main/java/org/orcid/core/aop/ProfileLastModifiedAspect.java @@ -71,52 +71,48 @@ public void setName(String name) { this.name = name; } - @AfterReturning(UPDATE_PROFILE_LAST_MODIFIED + " && args(orcid, ..)") - public void updateProfileLastModified(JoinPoint joinPoint, String orcid) { + @AfterReturning(UPDATE_PROFILE_LAST_MODIFIED) + public void updateProfileLastModified(JoinPoint joinPoint) { if (!enabled) { return; } + String orcid = resolveOrcid(joinPoint.getArgs()); + if (StringUtils.isEmpty(orcid)) { + LOGGER.debug("Skipping last modified update: no ORCID argument found for join point={}", joinPoint); + return; + } if (LOGGER.isDebugEnabled()) { if (!OrcidStringUtils.isValidOrcid(orcid)) { LOGGER.debug("Invalid ORCID for last modified date update: orcid={}, join point={}", orcid, joinPoint); } } + Date before = safeRetrieveLastModifiedDate(orcid); this.updateLastModifiedDate(orcid); - } - - @AfterReturning(UPDATE_PROFILE_LAST_MODIFIED + " && args(orcidAware, ..)") - public void updateProfileLastModified(JoinPoint joinPoint, OrcidAware orcidAware) { - if (!enabled) { - return; - } - String orcid = orcidAware.getOrcid(); - if(!StringUtils.isEmpty(orcid)) { - updateProfileLastModified(joinPoint, orcid); - } + Date after = safeRetrieveLastModifiedDate(orcid); + LOGGER.info("ProfileLastModifiedAspect updateLastModifiedDate source={} orcid={} before={} after={}", + joinPoint.getSignature().toShortString(), orcid, before, after); } - @AfterReturning(UPDATE_PROFILE_LAST_MODIFIED_AND_INDEXING_STATUS + " && args(orcid, ..)") - public void updateProfileLastModifiedAndIndexingStatus(JoinPoint joinPoint, String orcid) { + @AfterReturning(UPDATE_PROFILE_LAST_MODIFIED_AND_INDEXING_STATUS) + public void updateProfileLastModifiedAndIndexingStatus(JoinPoint joinPoint) { if (!enabled) { return; } + String orcid = resolveOrcid(joinPoint.getArgs()); + if (StringUtils.isEmpty(orcid)) { + LOGGER.debug("Skipping last modified/indexing update: no ORCID argument found for join point={}", joinPoint); + return; + } if (LOGGER.isDebugEnabled()) { if (!OrcidStringUtils.isValidOrcid(orcid)) { LOGGER.debug("Invalid ORCID for last modified date update: orcid={}, join point={}", orcid, joinPoint); } } + Date before = safeRetrieveLastModifiedDate(orcid); this.updateLastModifiedDateAndIndexingStatus(orcid); - } - - @AfterReturning(UPDATE_PROFILE_LAST_MODIFIED_AND_INDEXING_STATUS + " && args(orcidAware, ..)") - public void updateProfileLastModifiedAndIndexingStatus(JoinPoint joinPoint, OrcidAware orcidAware) { - if (!enabled) { - return; - } - String orcid = orcidAware.getOrcid(); - if(!StringUtils.isEmpty(orcid)) { - updateProfileLastModifiedAndIndexingStatus(joinPoint, orcid); - } + Date after = safeRetrieveLastModifiedDate(orcid); + LOGGER.info("ProfileLastModifiedAspect updateLastModifiedDateAndIndexingStatus source={} orcid={} before={} after={}", + joinPoint.getSignature().toShortString(), orcid, before, after); } @Override @@ -192,6 +188,30 @@ public Date retrieveLastModifiedDate(String orcid) { private String sraKey(String orcid) { return REQUEST_PROFILE_LAST_MODIFIED + '_' + name + '_' + orcid; } + + private Date safeRetrieveLastModifiedDate(String orcid) { + try { + return profileLastModifiedDao.retrieveLastModifiedDate(orcid); + } catch (Exception e) { + LOGGER.warn("Unable to read last modified date for diagnostics. orcid={}", orcid, e); + return null; + } + } + + private String resolveOrcid(Object[] args) { + if (args == null) { + return null; + } + for (Object arg : args) { + if (arg instanceof String str && OrcidStringUtils.isValidOrcid(str)) { + return str; + } + if (arg instanceof OrcidAware orcidAware && !StringUtils.isEmpty(orcidAware.getOrcid())) { + return orcidAware.getOrcid(); + } + } + return null; + } public void evictCaches(String orcid) { // Evict the summary cache diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/ProfileEntityManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/ProfileEntityManagerImpl.java index 2c24615ac43..cc783710a69 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/ProfileEntityManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/impl/ProfileEntityManagerImpl.java @@ -524,6 +524,7 @@ public boolean isProfileDeprecated(String orcid) { } @Override + @Transactional public void updateLastLoginDetails(String orcid, String ipAddress) { profileDao.updateLastLoginDetails(orcid, ipAddress); } diff --git a/orcid-core/src/main/java/org/orcid/core/oauth/authorizationServer/AuthorizationServerUtil.java b/orcid-core/src/main/java/org/orcid/core/oauth/authorizationServer/AuthorizationServerUtil.java index f19e9caf12a..2e67720102d 100644 --- a/orcid-core/src/main/java/org/orcid/core/oauth/authorizationServer/AuthorizationServerUtil.java +++ b/orcid-core/src/main/java/org/orcid/core/oauth/authorizationServer/AuthorizationServerUtil.java @@ -15,7 +15,6 @@ import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.Response; import java.io.IOException; -import java.io.UnsupportedEncodingException; import java.net.URISyntaxException; import java.net.http.HttpResponse; import java.nio.charset.StandardCharsets; @@ -282,11 +281,24 @@ public JSONObject tokenIntrospection(String tokenValue) throws IOException, URIS Response response = this.doPost(this.authorizationServerIntrospectionEndpoint, basicAuthorizationHeaderForTokenIntrospection, parameters); - if (response != null && (response.getStatus() == 200)) { + if (response == null) { + logger.warn("Token introspection returned null response from endpoint=" + authorizationServerIntrospectionEndpoint); + return null; + } + + if (response.getStatus() == 200) { String responseString = (String) response.getEntity(); return new JSONObject(responseString); } + String responseBody = response.getEntity() == null ? "" : String.valueOf(response.getEntity()); + if (responseBody.length() > 300) { + responseBody = responseBody.substring(0, 300) + "..."; + } + logger.warn("Token introspection non-200 response. endpoint=" + authorizationServerIntrospectionEndpoint + + " status=" + response.getStatus() + + " body=" + responseBody); + return null; } diff --git a/orcid-core/src/main/resources/orcid-core-context.xml b/orcid-core/src/main/resources/orcid-core-context.xml index b4e1574a3f5..e2429d326cb 100644 --- a/orcid-core/src/main/resources/orcid-core-context.xml +++ b/orcid-core/src/main/resources/orcid-core-context.xml @@ -24,7 +24,7 @@ org.orcid.core.security, org.orcid.core.messaging, org.orcid.core.togglz, org.orcid.core.utils.v3.identifiers, org.orcid.core.groupIds, org.orcid.core.solr, org.orcid.core.orgs, org.orcid.core.contributors, org.orcid.core.oauth.authorizationServer" /> - + diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/BackupCodeDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/BackupCodeDaoImpl.java index 5798817941f..dc24969a7af 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/BackupCodeDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/BackupCodeDaoImpl.java @@ -1,5 +1,6 @@ package org.orcid.persistence.dao.impl; +import java.util.Date; import java.util.List; import jakarta.persistence.Query; @@ -25,9 +26,10 @@ public List getUnusedBackupCodes(String orcid) { @Override @Transactional public void markUsed(String orcid, String hashedCode) { - Query query = entityManager.createQuery("UPDATE BackupCodeEntity b SET b.usedDate = now() WHERE b.orcid = :orcid AND b.hashedCode = :hashedCode"); + Query query = entityManager.createQuery("UPDATE BackupCodeEntity b SET b.usedDate = :usedDate WHERE b.orcid = :orcid AND b.hashedCode = :hashedCode"); query.setParameter("orcid", orcid); query.setParameter("hashedCode", hashedCode); + query.setParameter("usedDate", new Date()); query.executeUpdate(); } diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ClientDetailsDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ClientDetailsDaoImpl.java index 72775c41da9..37efafbbcb3 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ClientDetailsDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ClientDetailsDaoImpl.java @@ -61,7 +61,8 @@ public Date getLastModifiedByIdP(String idp) { @Override @Transactional public void updateLastModified(String clientId) { - Query updateQuery = entityManager.createQuery("update ClientDetailsEntity c set c.lastModified = now() where c.id = :clientId"); + Query updateQuery = entityManager.createQuery("update ClientDetailsEntity c set c.lastModified = :lastModified where c.id = :clientId"); + updateQuery.setParameter("lastModified", new Date()); updateQuery.setParameter("clientId", clientId); updateQuery.executeUpdate(); } @@ -77,7 +78,8 @@ public void updateLastModified(String clientId) { @Override @Transactional public int updateLastModifiedBulk(List clientIds) { - Query updateQuery = entityManager.createQuery("update ClientDetailsEntity c set c.lastModified = now() where c.id in :clientIds"); + Query updateQuery = entityManager.createQuery("update ClientDetailsEntity c set c.lastModified = :lastModified where c.id in :clientIds"); + updateQuery.setParameter("lastModified", new Date()); updateQuery.setParameter("clientIds", clientIds); return updateQuery.executeUpdate(); } @@ -133,8 +135,9 @@ public boolean belongsTo(String clientId, String groupId) { @Override @Transactional public void updateClientType(String clientType, String clientId) { - Query updateQuery = entityManager.createQuery("update ClientDetailsEntity c set c.clientType = :clientType, c.lastModified = now() where c.id = :clientId"); + Query updateQuery = entityManager.createQuery("update ClientDetailsEntity c set c.clientType = :clientType, c.lastModified = :lastModified where c.id = :clientId"); updateQuery.setParameter("clientType", clientType); + updateQuery.setParameter("lastModified", new Date()); updateQuery.setParameter("clientId", clientId); updateQuery.executeUpdate(); } @@ -224,8 +227,9 @@ public List findLegacyClientIds() { @Transactional public void changePersistenceTokensProperty(String clientId, boolean isPersistenTokensEnabled) { Query updateQuery = entityManager - .createQuery("update ClientDetailsEntity c set c.lastModified = now(), c.persistentTokensEnabled = :isPersistenTokensEnabled where c.id = :clientId"); + .createQuery("update ClientDetailsEntity c set c.lastModified = :lastModified, c.persistentTokensEnabled = :isPersistenTokensEnabled where c.id = :clientId"); updateQuery.setParameter("clientId", clientId); + updateQuery.setParameter("lastModified", new Date()); updateQuery.setParameter("isPersistenTokensEnabled", isPersistenTokensEnabled); updateQuery.executeUpdate(); } @@ -234,8 +238,9 @@ public void changePersistenceTokensProperty(String clientId, boolean isPersisten @Transactional public void activateClient(String clientDetailsId) { Query updateQuery = entityManager - .createQuery("update ClientDetailsEntity c set c.lastModified = now(), c.deactivatedDate = null, c.deactivatedBy = null where c.id = :clientId"); + .createQuery("update ClientDetailsEntity c set c.lastModified = :lastModified, c.deactivatedDate = null, c.deactivatedBy = null where c.id = :clientId"); updateQuery.setParameter("clientId", clientDetailsId); + updateQuery.setParameter("lastModified", new Date()); updateQuery.executeUpdate(); } @@ -243,8 +248,11 @@ public void activateClient(String clientDetailsId) { @Transactional public void deactivateClient(String clientDetailsId, String deactivatedBy) { Query updateQuery = entityManager - .createQuery("update ClientDetailsEntity c set c.lastModified = now(), c.deactivatedDate = now(), c.deactivatedBy = :deactivatedBy where c.id = :clientId"); + .createQuery("update ClientDetailsEntity c set c.lastModified = :lastModified, c.deactivatedDate = :deactivatedDate, c.deactivatedBy = :deactivatedBy where c.id = :clientId"); updateQuery.setParameter("clientId", clientDetailsId); + Date now = new Date(); + updateQuery.setParameter("lastModified", now); + updateQuery.setParameter("deactivatedDate", now); updateQuery.setParameter("deactivatedBy", deactivatedBy); updateQuery.executeUpdate(); } diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/EmailDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/EmailDaoImpl.java index 6445d8c6caf..ea4bf659939 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/EmailDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/EmailDaoImpl.java @@ -1,5 +1,6 @@ package org.orcid.persistence.dao.impl; +import java.util.Date; import java.util.List; import jakarta.persistence.Query; @@ -182,9 +183,10 @@ public List findByOrcid(String orcid, String visibility) { @Transactional @UpdateProfileLastModifiedAndIndexingStatus public boolean updateVerifySetCurrentAndPrimary(String orcid, String email) { - Query query = entityManager.createQuery("update EmailEntity e set e.current = true, e.primary = true, e.verified = true, e.lastModified=now() where e.orcid = :orcid and e.email = :email"); + Query query = entityManager.createQuery("update EmailEntity e set e.current = true, e.primary = true, e.verified = true, e.lastModified = :lastModified where e.orcid = :orcid and e.email = :email"); query.setParameter("orcid", orcid); query.setParameter("email", email); + query.setParameter("lastModified", new Date()); return query.executeUpdate() > 0; } @@ -249,9 +251,10 @@ public EmailEntity findPrimaryEmail(String orcid) { @Override @Transactional public boolean hideAllEmails(String orcid) { - Query query = entityManager.createQuery("update EmailEntity e set e.visibility = :visibility, e.email = null, e.lastModified=now() where e.orcid = :orcid"); + Query query = entityManager.createQuery("update EmailEntity e set e.visibility = :visibility, e.email = null, e.lastModified = :lastModified where e.orcid = :orcid"); query.setParameter("orcid", orcid); query.setParameter("visibility", PRIVATE_VISIBILITY); + query.setParameter("lastModified", new Date()); return query.executeUpdate() > 0; } @@ -259,10 +262,11 @@ public boolean hideAllEmails(String orcid) { @Transactional @UpdateProfileLastModifiedAndIndexingStatus public boolean updateVisibility(String orcid, String email, String visibility) { - Query query = entityManager.createQuery("update EmailEntity e set e.visibility = :visibility, e.lastModified=now() where e.email = :email and e.orcid = :orcid"); + Query query = entityManager.createQuery("update EmailEntity e set e.visibility = :visibility, e.lastModified = :lastModified where e.email = :email and e.orcid = :orcid"); query.setParameter("orcid", orcid); query.setParameter("email", email); query.setParameter("visibility", visibility); + query.setParameter("lastModified", new Date()); return query.executeUpdate() > 0; } diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/EmailFrequencyDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/EmailFrequencyDaoImpl.java index 42a4724741a..38045aba89c 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/EmailFrequencyDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/EmailFrequencyDaoImpl.java @@ -1,5 +1,7 @@ package org.orcid.persistence.dao.impl; +import java.util.Date; + import jakarta.persistence.Query; import org.orcid.persistence.aop.UpdateProfileLastModified; @@ -32,9 +34,10 @@ public EmailFrequencyEntity findByOrcid(String orcid) { @Transactional @UpdateProfileLastModified public boolean updateSendChangeNotifications(String orcid, SendEmailFrequency frequency) { - Query query = entityManager.createQuery("UPDATE EmailFrequencyEntity ef SET ef.sendChangeNotifications = :frequency, ef.lastModified=now() WHERE ef.orcid = :orcid"); + Query query = entityManager.createQuery("UPDATE EmailFrequencyEntity ef SET ef.sendChangeNotifications = :frequency, ef.lastModified = :lastModified WHERE ef.orcid = :orcid"); query.setParameter("frequency", Float.valueOf(frequency.value())); query.setParameter("orcid", orcid); + query.setParameter("lastModified", new Date()); return query.executeUpdate() > 0; } @@ -42,9 +45,10 @@ public boolean updateSendChangeNotifications(String orcid, SendEmailFrequency fr @Transactional @UpdateProfileLastModified public boolean updateSendAdministrativeChangeNotifications(String orcid, SendEmailFrequency frequency) { - Query query = entityManager.createQuery("UPDATE EmailFrequencyEntity ef SET ef.sendAdministrativeChangeNotifications = :frequency, ef.lastModified=now() WHERE ef.orcid = :orcid"); + Query query = entityManager.createQuery("UPDATE EmailFrequencyEntity ef SET ef.sendAdministrativeChangeNotifications = :frequency, ef.lastModified = :lastModified WHERE ef.orcid = :orcid"); query.setParameter("frequency", Float.valueOf(frequency.value())); query.setParameter("orcid", orcid); + query.setParameter("lastModified", new Date()); return query.executeUpdate() > 0; } @@ -52,9 +56,10 @@ public boolean updateSendAdministrativeChangeNotifications(String orcid, SendEma @Transactional @UpdateProfileLastModified public boolean updateSendMemberUpdateRequests(String orcid, SendEmailFrequency frequency) { - Query query = entityManager.createQuery("UPDATE EmailFrequencyEntity ef SET ef.sendMemberUpdateRequests = :frequency, ef.lastModified=now() WHERE ef.orcid = :orcid"); + Query query = entityManager.createQuery("UPDATE EmailFrequencyEntity ef SET ef.sendMemberUpdateRequests = :frequency, ef.lastModified = :lastModified WHERE ef.orcid = :orcid"); query.setParameter("frequency", Float.valueOf(frequency.value())); query.setParameter("orcid", orcid); + query.setParameter("lastModified", new Date()); return query.executeUpdate() > 0; } @@ -62,9 +67,10 @@ public boolean updateSendMemberUpdateRequests(String orcid, SendEmailFrequency f @Transactional @UpdateProfileLastModified public boolean updateSendQuarterlyTips(String orcid, boolean enabled) { - Query query = entityManager.createQuery("UPDATE EmailFrequencyEntity ef SET ef.sendQuarterlyTips = :enabled, ef.lastModified=now() WHERE ef.orcid = :orcid"); + Query query = entityManager.createQuery("UPDATE EmailFrequencyEntity ef SET ef.sendQuarterlyTips = :enabled, ef.lastModified = :lastModified WHERE ef.orcid = :orcid"); query.setParameter("enabled", enabled); query.setParameter("orcid", orcid); + query.setParameter("lastModified", new Date()); return query.executeUpdate() > 0; } diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/IdentityProviderDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/IdentityProviderDaoImpl.java index 39ae2f7c3d8..381467c1d84 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/IdentityProviderDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/IdentityProviderDaoImpl.java @@ -1,5 +1,6 @@ package org.orcid.persistence.dao.impl; +import java.util.Date; import java.util.List; import jakarta.persistence.Query; @@ -31,7 +32,8 @@ public IdentityProviderEntity findByProviderid(String providerid) { @Override @Transactional public void incrementFailedCount(String providerid) { - Query query = entityManager.createQuery("update IdentityProviderEntity i set i.lastFailed = now(), i.failedCount = i.failedCount + 1 where i.providerid = :providerid"); + Query query = entityManager.createQuery("update IdentityProviderEntity i set i.lastFailed = :lastFailed, i.failedCount = i.failedCount + 1 where i.providerid = :providerid"); + query.setParameter("lastFailed", new Date()); query.setParameter("providerid", providerid); query.executeUpdate(); } diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/NotificationDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/NotificationDaoImpl.java index d7343317749..f855927576c 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/NotificationDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/NotificationDaoImpl.java @@ -111,7 +111,8 @@ public NotificationEntity findByOricdAndId(String orcid, Long id) { @Override @Transactional public void flagAsSent(Long id) { - Query query = entityManager.createQuery("update NotificationEntity n set n.sentDate = now() where n.id in :id"); + Query query = entityManager.createQuery("update NotificationEntity n set n.sentDate = :sentDate where n.id in :id"); + query.setParameter("sentDate", new Date()); query.setParameter("id", id); query.executeUpdate(); } @@ -119,7 +120,8 @@ public void flagAsSent(Long id) { @Override @Transactional public void flagAsSent(Collection ids) { - Query query = entityManager.createQuery("update NotificationEntity n set n.sentDate = now() where n.id in :ids"); + Query query = entityManager.createQuery("update NotificationEntity n set n.sentDate = :sentDate where n.id in :ids"); + query.setParameter("sentDate", new Date()); query.setParameter("ids", ids); query.executeUpdate(); } @@ -127,7 +129,8 @@ public void flagAsSent(Collection ids) { @Override @Transactional public void flagAsRead(String orcid, Long id) { - Query query = entityManager.createQuery("update NotificationEntity n set n.readDate = now() where n.orcid = :orcid and n.id = :id and n.readDate is null"); + Query query = entityManager.createQuery("update NotificationEntity n set n.readDate = :readDate where n.orcid = :orcid and n.id = :id and n.readDate is null"); + query.setParameter("readDate", new Date()); query.setParameter("orcid", orcid); query.setParameter("id", id); query.executeUpdate(); @@ -136,7 +139,8 @@ public void flagAsRead(String orcid, Long id) { @Override @Transactional public void flagAsArchived(String orcid, Long id) { - Query query = entityManager.createQuery("update NotificationEntity n set n.archivedDate = now() where n.orcid = :orcid and n.id = :id and n.archivedDate is null"); + Query query = entityManager.createQuery("update NotificationEntity n set n.archivedDate = :archivedDate where n.orcid = :orcid and n.id = :id and n.archivedDate is null"); + query.setParameter("archivedDate", new Date()); query.setParameter("orcid", orcid); query.setParameter("id", id); query.executeUpdate(); diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrcidOauth2TokenDetailDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrcidOauth2TokenDetailDaoImpl.java index 0b546040a56..bbe52ebc27e 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrcidOauth2TokenDetailDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrcidOauth2TokenDetailDaoImpl.java @@ -45,7 +45,8 @@ public OrcidOauth2TokenDetail findNonDisabledByTokenValue(String tokenValue) { @Override public void removeByRefreshTokenValue(String refreshTokenValue) { - Query query = entityManager.createQuery("update OrcidOauth2TokenDetail t set t.tokenDisabled = TRUE, t.revocationDate=now(), t.revokeReason = 'CLIENT_REVOKED' where t.refreshTokenValue = :refreshToken"); + Query query = entityManager.createQuery("update OrcidOauth2TokenDetail t set t.tokenDisabled = TRUE, t.revocationDate = :revocationDate, t.revokeReason = 'CLIENT_REVOKED' where t.refreshTokenValue = :refreshToken"); + query.setParameter("revocationDate", new Date()); query.setParameter("refreshToken", refreshTokenValue); int i = query.executeUpdate(); if (i == 0) { @@ -98,7 +99,8 @@ public List findByClientIdAndUserName(String clientId, S @Override @Transactional public void disableAccessToken(String accessTokenValue) { - Query query = entityManager.createQuery("update OrcidOauth2TokenDetail t set t.tokenDisabled = TRUE, t.revocationDate=now(), t.revokeReason = 'CLIENT_REVOKED' where t.tokenValue = :accessTokenValue"); + Query query = entityManager.createQuery("update OrcidOauth2TokenDetail t set t.tokenDisabled = TRUE, t.revocationDate = :revocationDate, t.revokeReason = 'CLIENT_REVOKED' where t.tokenValue = :accessTokenValue"); + query.setParameter("revocationDate", new Date()); query.setParameter("accessTokenValue", accessTokenValue); int count = query.executeUpdate(); if (count == 0) { @@ -109,7 +111,8 @@ public void disableAccessToken(String accessTokenValue) { @Override @Transactional public void disableAccessTokenById(Long tokenId, String userOrcid) { - Query query = entityManager.createQuery("update OrcidOauth2TokenDetail t set t.tokenDisabled = TRUE, t.revocationDate=now(), t.revokeReason = 'USER_REVOKED' where t.id = :tokenId and t.orcid = :userOrcid"); + Query query = entityManager.createQuery("update OrcidOauth2TokenDetail t set t.tokenDisabled = TRUE, t.revocationDate = :revocationDate, t.revokeReason = 'USER_REVOKED' where t.id = :tokenId and t.orcid = :userOrcid"); + query.setParameter("revocationDate", new Date()); query.setParameter("tokenId", tokenId); query.setParameter("userOrcid", userOrcid); int count = query.executeUpdate(); @@ -121,7 +124,8 @@ public void disableAccessTokenById(Long tokenId, String userOrcid) { @Override @Transactional public void disableAccessTokenByRefreshToken(String refreshTokenValue) { - Query query = entityManager.createQuery("update OrcidOauth2TokenDetail t set t.tokenDisabled = TRUE, t.revocationDate=now(), t.revokeReason = 'CLIENT_REVOKED' where t.refreshTokenValue = :refreshTokenValue"); + Query query = entityManager.createQuery("update OrcidOauth2TokenDetail t set t.tokenDisabled = TRUE, t.revocationDate = :revocationDate, t.revokeReason = 'CLIENT_REVOKED' where t.refreshTokenValue = :refreshTokenValue"); + query.setParameter("revocationDate", new Date()); query.setParameter("refreshTokenValue", refreshTokenValue); int count = query.executeUpdate(); if (count == 0) { @@ -179,10 +183,13 @@ public boolean hasTokenForClient(String userName, String clientId) { @Override @Transactional public int disableAccessTokenByCodeAndClient(String authorizationCode, String clientId, String reason) { - Query query = entityManager.createQuery("update OrcidOauth2TokenDetail t set t.tokenDisabled = TRUE, t.revocationDate=now(), t.revokeReason = :reason, t.lastModified=now() where t.clientDetailsId = :clientId and t.authorizationCode = :authorizationCode"); + Query query = entityManager.createQuery("update OrcidOauth2TokenDetail t set t.tokenDisabled = TRUE, t.revocationDate = :revocationDate, t.revokeReason = :reason, t.lastModified = :lastModified where t.clientDetailsId = :clientId and t.authorizationCode = :authorizationCode"); query.setParameter("authorizationCode", authorizationCode); query.setParameter("clientId", clientId); query.setParameter("reason", reason); + Date now = new Date(); + query.setParameter("revocationDate", now); + query.setParameter("lastModified", now); return query.executeUpdate(); } @@ -198,16 +205,22 @@ public List findAccessTokenByCodeAndClient(String authorizationCode, Str @Override @Transactional public void disableAccessTokenByUserOrcid(String userOrcid, String reason) { - Query query = entityManager.createQuery("update OrcidOauth2TokenDetail t set t.tokenDisabled = TRUE, t.revocationDate=now(), t.revokeReason = :reason, t.lastModified=now() where t.orcid = :userOrcid AND (t.tokenDisabled IS NULL OR t.tokenDisabled = FALSE)"); + Query query = entityManager.createQuery("update OrcidOauth2TokenDetail t set t.tokenDisabled = TRUE, t.revocationDate = :revocationDate, t.revokeReason = :reason, t.lastModified = :lastModified where t.orcid = :userOrcid AND (t.tokenDisabled IS NULL OR t.tokenDisabled = FALSE)"); query.setParameter("userOrcid", userOrcid); query.setParameter("reason", reason); + Date now = new Date(); + query.setParameter("revocationDate", now); + query.setParameter("lastModified", now); query.executeUpdate(); } @Override @Transactional public void revokeAccessToken(String accessToken) { - Query query = entityManager.createQuery("update OrcidOauth2TokenDetail t set t.tokenDisabled = TRUE, t.revocationDate=now(), t.revokeReason = 'CLIENT_REVOKED', t.lastModified=now() where t.tokenValue = :accessTokenValue"); + Query query = entityManager.createQuery("update OrcidOauth2TokenDetail t set t.tokenDisabled = TRUE, t.revocationDate = :revocationDate, t.revokeReason = 'CLIENT_REVOKED', t.lastModified = :lastModified where t.tokenValue = :accessTokenValue"); + Date now = new Date(); + query.setParameter("revocationDate", now); + query.setParameter("lastModified", now); query.setParameter("accessTokenValue", accessToken); int count = query.executeUpdate(); if (count == 0) { @@ -218,7 +231,10 @@ public void revokeAccessToken(String accessToken) { @Override @Transactional public void disableClientAccessTokensByUserOrcid(String orcid, String clientDetailsId) { - Query query = entityManager.createQuery("update OrcidOauth2TokenDetail t set t.tokenDisabled = TRUE, t.revocationDate=now(), t.revokeReason = 'USER_REVOKED', t.lastModified=now() where t.clientDetailsId = :clientDetailsId and t.orcid = :orcid and t.revokeReason is null"); + Query query = entityManager.createQuery("update OrcidOauth2TokenDetail t set t.tokenDisabled = TRUE, t.revocationDate = :revocationDate, t.revokeReason = 'USER_REVOKED', t.lastModified = :lastModified where t.clientDetailsId = :clientDetailsId and t.orcid = :orcid and t.revokeReason is null"); + Date now = new Date(); + query.setParameter("revocationDate", now); + query.setParameter("lastModified", now); query.setParameter("clientDetailsId", clientDetailsId); query.setParameter("orcid", orcid); int count = query.executeUpdate(); diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgDisambiguatedDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgDisambiguatedDaoImpl.java index 3d10cbe2392..6df2e20ac26 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgDisambiguatedDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgDisambiguatedDaoImpl.java @@ -2,6 +2,7 @@ import java.math.BigInteger; import java.util.ArrayList; +import java.util.Date; import java.util.List; import jakarta.persistence.Query; @@ -118,15 +119,18 @@ public List findOrgsPendingIndexing(int maxResult) { @Override @Transactional public void updateIndexingStatus(Long orgDisambiguatedId, IndexingStatus indexingStatus) { - String queryString = null; + String queryString; if (IndexingStatus.DONE.equals(indexingStatus)) { - queryString = "update OrgDisambiguatedEntity set indexingStatus = :indexingStatus, lastIndexedDate = now() where id = :orgDisambiguatedId"; + queryString = "update OrgDisambiguatedEntity set indexingStatus = :indexingStatus, lastIndexedDate = :lastIndexedDate where id = :orgDisambiguatedId"; } else { queryString = "update OrgDisambiguatedEntity set indexingStatus = :indexingStatus where id = :orgDisambiguatedId"; } Query query = entityManager.createQuery(queryString); query.setParameter("orgDisambiguatedId", orgDisambiguatedId); query.setParameter("indexingStatus", indexingStatus); + if (IndexingStatus.DONE.equals(indexingStatus)) { + query.setParameter("lastIndexedDate", new Date()); + } query.executeUpdate(); } diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/PeerReviewDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/PeerReviewDaoImpl.java index d3b4c1583f2..6de72669ad6 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/PeerReviewDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/PeerReviewDaoImpl.java @@ -2,6 +2,7 @@ import java.math.BigInteger; import java.util.ArrayList; +import java.util.Date; import java.util.List; import jakarta.persistence.Query; @@ -89,10 +90,11 @@ public boolean updateToMaxDisplay(String orcid, Long peerReviewId) { @UpdateProfileLastModifiedAndIndexingStatus public boolean updateVisibilities(String orcid, ArrayList peerReviewIds, String visibility) { Query query = entityManager - .createQuery("update PeerReviewEntity pr set pr.visibility=:visibility, pr.lastModified=now() where pr.id in (:peerReviewIds) and pr.orcid=:orcid"); + .createQuery("update PeerReviewEntity pr set pr.visibility=:visibility, pr.lastModified = :lastModified where pr.id in (:peerReviewIds) and pr.orcid=:orcid"); query.setParameter("peerReviewIds", peerReviewIds); query.setParameter("visibility", visibility); query.setParameter("orcid", orcid); + query.setParameter("lastModified", new Date()); return query.executeUpdate() > 0 ? true : false; } @@ -101,10 +103,11 @@ public boolean updateVisibilities(String orcid, ArrayList peerReviewIds, S @UpdateProfileLastModifiedAndIndexingStatus public boolean updateVisibilityByGroupId(String orcid, String groupId, String visibility) { Query query = entityManager - .createQuery("update PeerReviewEntity pr set pr.visibility=:visibility, pr.lastModified=now() where pr.groupId=:groupId and pr.orcid=:orcid"); + .createQuery("update PeerReviewEntity pr set pr.visibility=:visibility, pr.lastModified = :lastModified where pr.groupId=:groupId and pr.orcid=:orcid"); query.setParameter("groupId", groupId); query.setParameter("visibility", visibility); query.setParameter("orcid", orcid); + query.setParameter("lastModified", new Date()); return query.executeUpdate() > 0 ? true : false; } diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileDaoImpl.java index 8e90f4364d2..d9d1b910085 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileDaoImpl.java @@ -355,9 +355,9 @@ public IndexingStatus retrieveIndexingStatus(String orcid) { @Override @Transactional public void updateIndexingStatus(String orcid, IndexingStatus indexingStatus) { - String queryString = null; + String queryString; if (IndexingStatus.DONE.equals(indexingStatus)) { - queryString = "update ProfileEntity set indexingStatus = :indexingStatus, lastIndexedDate = now() where id = :orcid"; + queryString = "update ProfileEntity set indexingStatus = :indexingStatus, lastIndexedDate = :lastIndexedDate where id = :orcid"; updateWebhookProfileLastUpdate(orcid); } else { queryString = "update ProfileEntity set indexingStatus = :indexingStatus where id = :orcid"; @@ -365,6 +365,9 @@ public void updateIndexingStatus(String orcid, IndexingStatus indexingStatus) { Query query = entityManager.createQuery(queryString); query.setParameter("orcid", orcid); query.setParameter("indexingStatus", indexingStatus); + if (IndexingStatus.DONE.equals(indexingStatus)) { + query.setParameter("lastIndexedDate", new Date()); + } // Sets a timeout for this query query.setHint("jakarta.persistence.query.timeout", queryTimeout); query.executeUpdate(); @@ -420,8 +423,9 @@ public String retrieveLocale(String orcid) { @Transactional public void updateLocale(String orcid, String locale) { Query updateQuery = entityManager - .createQuery("update ProfileEntity p set p.lastModified = now(), p.locale = :locale, p.indexingStatus = :indexing_status where p.id = :orcid"); + .createQuery("update ProfileEntity p set p.lastModified = :lastModified, p.locale = :locale, p.indexingStatus = :indexing_status where p.id = :orcid"); updateQuery.setParameter("orcid", orcid); + updateQuery.setParameter("lastModified", new Date()); updateQuery.setParameter("locale", locale); updateQuery.setParameter("indexing_status", IndexingStatus.PENDING); updateQuery.executeUpdate(); @@ -431,7 +435,7 @@ public void updateLocale(String orcid, String locale) { @Transactional public boolean deprecateProfile(String toDeprecate, String primaryOrcid, String deprecatedMethod, String adminUser) { StringBuilder queryString = new StringBuilder( - "update ProfileEntity p set p.lastModified = now(), p.deprecatedDate = now(), p.deactivationDate = now(), p.indexingStatus = :indexing_status, p.primaryRecord = :primary_record, p.activitiesVisibilityDefault = :defaultVisibility, p.deprecatedMethod = :deprecatedMethod"); + "update ProfileEntity p set p.lastModified = :lastModified, p.deprecatedDate = :deprecatedDate, p.deactivationDate = :deactivationDate, p.indexingStatus = :indexing_status, p.primaryRecord = :primary_record, p.activitiesVisibilityDefault = :defaultVisibility, p.deprecatedMethod = :deprecatedMethod"); if (ProfileEntity.ADMIN_DEPRECATION.equals(deprecatedMethod) && adminUser != null) { queryString.append(", p.deprecatingAdmin = :deprecatingAdmin"); } @@ -443,6 +447,10 @@ public boolean deprecateProfile(String toDeprecate, String primaryOrcid, String query.setParameter("primary_record", new ProfileEntity(primaryOrcid)); query.setParameter("defaultVisibility", PRIVATE_VISIBILITY); query.setParameter("deprecatedMethod", deprecatedMethod); + Date now = new Date(); + query.setParameter("lastModified", now); + query.setParameter("deprecatedDate", now); + query.setParameter("deactivationDate", now); if (ProfileEntity.ADMIN_DEPRECATION.equals(deprecatedMethod) && adminUser != null) { query.setParameter("deprecatingAdmin", adminUser); } @@ -483,12 +491,17 @@ public void changeEncryptedPassword(String orcid, String encryptedPassword) { @Override @Transactional public boolean updateDeveloperTools(String orcid, boolean enabled) { - Query query = entityManager.createQuery("update ProfileEntity p set p.enableDeveloperTools=:enabled, p.lastModified=now() where p.id=:orcid"); + Query query = entityManager.createQuery("update ProfileEntity p set p.enableDeveloperTools=:enabled, p.lastModified = :lastModified where p.id=:orcid"); if (enabled) query = entityManager - .createQuery("update ProfileEntity p set p.enableDeveloperTools=:enabled, p.developerToolsEnabledDate=now(), p.lastModified=now() where p.id=:orcid"); + .createQuery("update ProfileEntity p set p.enableDeveloperTools=:enabled, p.developerToolsEnabledDate = :developerToolsEnabledDate, p.lastModified = :lastModified where p.id=:orcid"); query.setParameter("orcid", orcid); query.setParameter("enabled", enabled); + Date now = new Date(); + query.setParameter("lastModified", now); + if (enabled) { + query.setParameter("developerToolsEnabledDate", now); + } return query.executeUpdate() > 0; } @@ -652,8 +665,9 @@ public boolean getClaimedStatusByEmailHash(String emailHash) { @Transactional public boolean updateDefaultVisibility(String orcid, String visibility) { Query updateQuery = entityManager - .createQuery("update ProfileEntity p set p.lastModified = now(), p.activitiesVisibilityDefault = :activitiesVisibilityDefault where p.id = :orcid"); + .createQuery("update ProfileEntity p set p.lastModified = :lastModified, p.activitiesVisibilityDefault = :activitiesVisibilityDefault where p.id = :orcid"); updateQuery.setParameter("orcid", orcid); + updateQuery.setParameter("lastModified", new Date()); updateQuery.setParameter("activitiesVisibilityDefault", visibility); return updateQuery.executeUpdate() > 0; } @@ -686,7 +700,8 @@ public Date getLastLogin(String orcid) { @Override @Transactional public void disable2FA(String orcid) { - Query query = entityManager.createQuery("update ProfileEntity p set p.lastModified = now(), p.using2FA = false, p.secretFor2FA = null where p.id = :orcid"); + Query query = entityManager.createQuery("update ProfileEntity p set p.lastModified = :lastModified, p.using2FA = false, p.secretFor2FA = null where p.id = :orcid"); + query.setParameter("lastModified", new Date()); query.setParameter("orcid", orcid); query.executeUpdate(); } @@ -694,7 +709,8 @@ public void disable2FA(String orcid) { @Override @Transactional public void enable2FA(String orcid) { - Query query = entityManager.createQuery("update ProfileEntity p set p.lastModified = now(), p.using2FA = true where p.id = :orcid"); + Query query = entityManager.createQuery("update ProfileEntity p set p.lastModified = :lastModified, p.using2FA = true where p.id = :orcid"); + query.setParameter("lastModified", new Date()); query.setParameter("orcid", orcid); query.executeUpdate(); } @@ -702,7 +718,8 @@ public void enable2FA(String orcid) { @Override @Transactional public void update2FASecret(String orcid, String secret) { - Query query = entityManager.createQuery("update ProfileEntity p set p.lastModified = now(), p.secretFor2FA = :secret where p.id = :orcid"); + Query query = entityManager.createQuery("update ProfileEntity p set p.lastModified = :lastModified, p.secretFor2FA = :secret where p.id = :orcid"); + query.setParameter("lastModified", new Date()); query.setParameter("orcid", orcid); query.setParameter("secret", secret); query.executeUpdate(); @@ -711,7 +728,10 @@ public void update2FASecret(String orcid, String secret) { @Override @Transactional public boolean deactivate(String orcid) { - Query query = entityManager.createQuery("update ProfileEntity p set p.lastModified = now(), p.deactivationDate = now() where p.id = :orcid"); + Query query = entityManager.createQuery("update ProfileEntity p set p.lastModified = :lastModified, p.deactivationDate = :deactivationDate where p.id = :orcid"); + Date now = new Date(); + query.setParameter("lastModified", now); + query.setParameter("deactivationDate", now); query.setParameter("orcid", orcid); return query.executeUpdate() > 0; } diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileLastModifiedDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileLastModifiedDaoImpl.java index 63e03b94e95..9a31ef7f45e 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileLastModifiedDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileLastModifiedDaoImpl.java @@ -29,7 +29,8 @@ public class ProfileLastModifiedDaoImpl implements ProfileLastModifiedDao { @Override @Transactional public void updateLastModifiedDateAndIndexingStatus(String orcid, IndexingStatus indexingStatus) { - Query updateQuery = entityManager.createQuery("update ProfileEntity p set p.lastModified = now(), p.indexingStatus = :indexingStatus where p.id = :orcid"); + Query updateQuery = entityManager.createQuery( + "update ProfileEntity p set p.lastModified = CURRENT_TIMESTAMP, p.indexingStatus = :indexingStatus where p.id = :orcid"); updateQuery.setParameter("orcid", orcid); updateQuery.setParameter("indexingStatus", indexingStatus); // Sets a timeout for this query diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ResearchResourceDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ResearchResourceDaoImpl.java index 768251edd4b..63665783220 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ResearchResourceDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ResearchResourceDaoImpl.java @@ -2,6 +2,7 @@ import java.math.BigInteger; import java.util.ArrayList; +import java.util.Date; import java.util.List; import jakarta.persistence.Query; @@ -65,10 +66,11 @@ public void removeResearchResources(String userOrcid) { @Transactional public boolean updateVisibilities(String orcid, ArrayList researchResourceIds, String visibility) { Query query = entityManager - .createQuery("update ResearchResourceEntity r set r.visibility=:visibility, r.lastModified=now() where r.id in (:researchResourceIds) and r.orcid=:orcid"); + .createQuery("update ResearchResourceEntity r set r.visibility=:visibility, r.lastModified = :lastModified where r.id in (:researchResourceIds) and r.orcid=:orcid"); query.setParameter("researchResourceIds", researchResourceIds); query.setParameter("visibility", visibility); query.setParameter("orcid", orcid); + query.setParameter("lastModified", new Date()); return query.executeUpdate() > 0 ? true : false; } diff --git a/orcid-persistence/src/main/resources/orcid-persistence-context.xml b/orcid-persistence/src/main/resources/orcid-persistence-context.xml index 8c979469f77..34f899cc22b 100644 --- a/orcid-persistence/src/main/resources/orcid-persistence-context.xml +++ b/orcid-persistence/src/main/resources/orcid-persistence-context.xml @@ -16,12 +16,12 @@ - + - + diff --git a/orcid-pub-web/log4j2.xml b/orcid-pub-web/log4j2.xml index 3991f386bf4..f646ff15c04 100644 --- a/orcid-pub-web/log4j2.xml +++ b/orcid-pub-web/log4j2.xml @@ -27,6 +27,9 @@ + + + diff --git a/orcid-pub-web/pom.xml b/orcid-pub-web/pom.xml index 868d2d97f66..0a4e237dc56 100644 --- a/orcid-pub-web/pom.xml +++ b/orcid-pub-web/pom.xml @@ -56,6 +56,11 @@ org.springframework spring-webmvc + + org.glassfish.jersey.media + jersey-media-jaxb + ${jersey.version} + diff --git a/orcid-pub-web/src/main/resources/orcid-t1-security-context.xml b/orcid-pub-web/src/main/resources/orcid-t1-security-context.xml index 242aa49bb70..1f0274cb410 100644 --- a/orcid-pub-web/src/main/resources/orcid-t1-security-context.xml +++ b/orcid-pub-web/src/main/resources/orcid-t1-security-context.xml @@ -18,7 +18,7 @@ - + diff --git a/orcid-web-proxy/nginx/snippets/proxy_frontend.conf b/orcid-web-proxy/nginx/snippets/proxy_frontend.conf index e7631956891..33f2a6e3a30 100644 --- a/orcid-web-proxy/nginx/snippets/proxy_frontend.conf +++ b/orcid-web-proxy/nginx/snippets/proxy_frontend.conf @@ -4,11 +4,12 @@ proxy_read_timeout 120; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $http_host; -# make cookies secure -proxy_cookie_path / "/; secure;"; -# Tomcat has no trailing slash after the cookie path (by default) from version 8.0.37 onwards -# strip /orcid-web from the cookie path -proxy_cookie_path /orcid-web "/; secure;"; +# Tomcat may return cookies with Path=/orcid-web-frontend (with and without +# trailing slash). Rewrite app-specific paths first, then apply the generic +# rule. Keep path rewrites attribute-free to avoid malformed Set-Cookie values. +proxy_cookie_path /orcid-web-frontend/ "/"; +proxy_cookie_path /orcid-web-frontend "/"; +proxy_cookie_path / "/"; resolver 127.0.0.11; diff --git a/orcid-web-proxy/nginx/snippets/proxy_ui.conf b/orcid-web-proxy/nginx/snippets/proxy_ui.conf index c11d74a3d98..f7f89754bbb 100644 --- a/orcid-web-proxy/nginx/snippets/proxy_ui.conf +++ b/orcid-web-proxy/nginx/snippets/proxy_ui.conf @@ -4,11 +4,13 @@ proxy_read_timeout 120; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $http_host; -# make cookies secure -proxy_cookie_path / "/; secure;"; -# Tomcat has no trailing slash after the cookie path (by default) from version 8.0.37 onwards -# strip /orcid-web from the cookie path -proxy_cookie_path /orcid-web "/; secure;"; +# Tomcat may return cookies with Path=/orcid-web (with and without trailing slash). +# Rewrite app-specific paths first, then apply the generic rule. +# Keep path rewrites attribute-free; appending attributes here can produce +# malformed Set-Cookie values (for example, duplicate/invalid Secure flags). +proxy_cookie_path /orcid-web/ "/"; +proxy_cookie_path /orcid-web "/"; +proxy_cookie_path / "/"; resolver 127.0.0.11; diff --git a/orcid-web/src/main/java/org/orcid/frontend/spring/AjaxAuthenticationFailureHandler.java b/orcid-web/src/main/java/org/orcid/frontend/spring/AjaxAuthenticationFailureHandler.java index 07de5a122cb..f466167f6cc 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/spring/AjaxAuthenticationFailureHandler.java +++ b/orcid-web/src/main/java/org/orcid/frontend/spring/AjaxAuthenticationFailureHandler.java @@ -26,6 +26,8 @@ public class AjaxAuthenticationFailureHandler extends SimpleUrlAuthenticationFailureHandler { public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException exception) throws IOException, ServletException { + response.setHeader("X-ORCID-AUTH-DEBUG", "ajax-auth-failure-handler"); + response.setHeader("X-ORCID-AUTH-EXCEPTION", exception.getClass().getSimpleName()); response.setContentType("application/json"); PrintWriter writer = response.getWriter(); writer.println("{"); diff --git a/orcid-web/src/main/java/org/orcid/frontend/spring/OrcidAccessDeniedHandler.java b/orcid-web/src/main/java/org/orcid/frontend/spring/OrcidAccessDeniedHandler.java index d58acb110ac..45cb5cbea69 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/spring/OrcidAccessDeniedHandler.java +++ b/orcid-web/src/main/java/org/orcid/frontend/spring/OrcidAccessDeniedHandler.java @@ -4,6 +4,7 @@ import jakarta.annotation.Resource; import jakarta.servlet.ServletException; +import jakarta.servlet.http.Cookie; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; @@ -33,7 +34,27 @@ public void handle(HttpServletRequest request, HttpServletResponse response, Acc response.getWriter().println("{\"loggedIn\":false}"); } else { String sessionId = RequestContextHolder.currentRequestAttributes().getSessionId(); + String headerToken = request.getHeader("x-xsrf-token"); + String cookieToken = getCookieValue(request, "XSRF-TOKEN"); + String authCookieToken = getCookieValue(request, "AUTH-XSRF-TOKEN"); + String jsessionId = getCookieValue(request, "JSESSIONID"); LOGGER.error("Path: {} Session: {} Message: {}", new Object[] { path, sessionId, accessDeniedException.getMessage() }); + LOGGER.warn( + "CSRF diagnostics path={} method={} session={} origin={} referer={} x-xsrf-token={} cookie-xsrf={} cookie-auth-xsrf={}", + path, + request.getMethod(), + sessionId, + request.getHeader("Origin"), + request.getHeader("Referer"), + maskToken(headerToken), + maskToken(cookieToken), + maskToken(authCookieToken) + ); + response.setHeader("X-ORCID-CSRF-DEBUG", "access-denied-handler"); + response.setHeader("X-ORCID-CSRF-HDR-PRESENT", String.valueOf(headerToken != null && !headerToken.isBlank())); + response.setHeader("X-ORCID-CSRF-COOKIE-PRESENT", String.valueOf(cookieToken != null && !cookieToken.isBlank())); + response.setHeader("X-ORCID-CSRF-HDR-COOKIE-MATCH", String.valueOf(headerToken != null && headerToken.equals(cookieToken))); + response.setHeader("X-ORCID-JSESSIONID-PRESENT", String.valueOf(jsessionId != null && !jsessionId.isBlank())); response.setStatus(HttpServletResponse.SC_FORBIDDEN); response.getWriter().println("Oops an error happened!"); response.getWriter().println("403"); @@ -52,4 +73,25 @@ public void handle(HttpServletRequest request, HttpServletResponse response, Acc super.handle(request, response, accessDeniedException); } + + private String getCookieValue(HttpServletRequest request, String cookieName) { + Cookie[] cookies = request.getCookies(); + if (cookies == null) { + return null; + } + for (Cookie cookie : cookies) { + if (cookieName.equals(cookie.getName())) { + return cookie.getValue(); + } + } + return null; + } + + private String maskToken(String token) { + if (token == null || token.isBlank()) { + return ""; + } + int visible = Math.min(8, token.length()); + return token.substring(0, visible) + "...(" + token.length() + ")"; + } } diff --git a/orcid-web/src/main/java/org/orcid/frontend/spring/configuration/SessionCacheConfig.java b/orcid-web/src/main/java/org/orcid/frontend/spring/configuration/SessionCacheConfig.java index b298b251f1d..2c561cdd11f 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/spring/configuration/SessionCacheConfig.java +++ b/orcid-web/src/main/java/org/orcid/frontend/spring/configuration/SessionCacheConfig.java @@ -36,6 +36,8 @@ public class SessionCacheConfig extends AbstractHttpSessionApplicationInitialize private String password; @Value("${org.orcid.core.utils.cache.session.redis.connection_timeout_millis:2000}") private int connectionTimeoutMillis; + @Value("${org.orcid.core.utils.cache.session.redis.ssl.enabled:true}") + private boolean redisSslEnabled; @Value("${org.orcid.core.session.cookie.domain:dev.orcid.org}") private String cookieDomain; @@ -55,7 +57,12 @@ public JedisConnectionFactory connectionFactory() { poolConfig.setMaxWaitMillis(this.poolWaitMillis); JedisClientConfiguration.JedisClientConfigurationBuilder jedisClientConfigurationBuilder = JedisClientConfiguration.builder(); - jedisClientConfigurationBuilder.useSsl().and().connectTimeout(timeoutDuration).usePooling().poolConfig(poolConfig).build(); + + if (redisSslEnabled) { + jedisClientConfigurationBuilder.useSsl(); + } + + jedisClientConfigurationBuilder.connectTimeout(timeoutDuration).usePooling().poolConfig(poolConfig).build(); return new JedisConnectionFactory(redisStandaloneConfiguration, jedisClientConfigurationBuilder.build()); } diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/CsrfController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/CsrfController.java index ba5404f5c4d..956a1059f19 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/CsrfController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/CsrfController.java @@ -3,9 +3,14 @@ import java.util.Collections; import java.util.Map; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import jakarta.ws.rs.Produces; import jakarta.ws.rs.core.MediaType; +import org.springframework.security.web.csrf.CsrfToken; +import org.springframework.security.web.csrf.CsrfTokenRepository; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @@ -24,11 +29,27 @@ @Controller public class CsrfController { + @Resource(name = "csrfTokenRepo") + private CsrfTokenRepository csrfTokenRepository; + @RequestMapping(value = "/csrf.json", method = RequestMethod.GET) @Produces(value = { MediaType.APPLICATION_JSON }) - public @ResponseBody Map getCsrf() { - // No work needed here. The Spring Security CSRF filter ensures the - // token is generated and the cookie is written on the response. + public @ResponseBody Map getCsrf(HttpServletRequest request, HttpServletResponse response) { + // Reuse existing token when available; only generate/save when missing. + CsrfToken csrfToken = csrfTokenRepository.loadToken(request); + if (csrfToken == null) { + csrfToken = (CsrfToken) request.getAttribute(CsrfToken.class.getName()); + } + if (csrfToken == null) { + csrfToken = (CsrfToken) request.getAttribute("_csrf"); + } + if (csrfToken == null) { + csrfToken = csrfTokenRepository.generateToken(request); + csrfTokenRepository.saveToken(csrfToken, request, response); + } + if (csrfToken != null) { + csrfToken.getToken(); + } return Collections.emptyMap(); } } diff --git a/orcid-web/src/main/resources/orcid-core-context-spam.xml b/orcid-web/src/main/resources/orcid-core-context-spam.xml index c216ad75f24..918d029ecc6 100644 --- a/orcid-web/src/main/resources/orcid-core-context-spam.xml +++ b/orcid-web/src/main/resources/orcid-core-context-spam.xml @@ -21,7 +21,7 @@ - + diff --git a/orcid-web/src/main/resources/orcid-frontend-security.xml b/orcid-web/src/main/resources/orcid-frontend-security.xml index 18d8725ef17..15114f107bd 100644 --- a/orcid-web/src/main/resources/orcid-frontend-security.xml +++ b/orcid-web/src/main/resources/orcid-frontend-security.xml @@ -95,6 +95,13 @@ + + + @@ -176,7 +183,7 @@ access-decision-manager-ref="accessDecisionManager" create-session="ifRequired" request-matcher="regex"> - + - + - + diff --git a/orcid-web/src/main/resources/orcid-frontend-web-servlet.xml b/orcid-web/src/main/resources/orcid-frontend-web-servlet.xml index dfc56a4f873..d4867573d46 100644 --- a/orcid-web/src/main/resources/orcid-frontend-web-servlet.xml +++ b/orcid-web/src/main/resources/orcid-frontend-web-servlet.xml @@ -95,6 +95,9 @@ + + + diff --git a/pom.xml b/pom.xml index d8a946ede9c..37ee679a98f 100644 --- a/pom.xml +++ b/pom.xml @@ -43,7 +43,7 @@ the software. 4.13.2 ${project.basedir} 1.1.5-SNAPSHOT - 3.3.3 + 4.4.0 From 0a6991002186eeeefc8c2189365b1b10fbfcaae8 Mon Sep 17 00:00:00 2001 From: Camelia Dumitru Date: Mon, 1 Jun 2026 12:44:54 +0100 Subject: [PATCH 44/77] Fixed runtime error in webhooks --- .../jpa/entities/WebhookEntity.java | 2 +- orcid-pub-web/README_ENDPOINTS.md | 145 ++++++++++++++++++ 2 files changed, 146 insertions(+), 1 deletion(-) create mode 100644 orcid-pub-web/README_ENDPOINTS.md diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/WebhookEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/WebhookEntity.java index 92b3ab3daf2..71764906b20 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/WebhookEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/WebhookEntity.java @@ -24,7 +24,7 @@ @NamedNativeQueries( { @NamedNativeQuery(name = WebhookEntity.COUNT_WEBHOOKS_READY_TO_PROCESS, query = "SELECT COUNT(*) webhook_count " + WebhookEntity.WEBHOOKS_READY_TO_PROCESS_FROM_CLAUSE, resultSetMapping = "countMapping"), - @NamedNativeQuery(name = WebhookEntity.FIND_WEBHOOKS_READY_TO_PROCESS, query = "SELECT * " + WebhookEntity.WEBHOOKS_READY_TO_PROCESS_FROM_CLAUSE + @NamedNativeQuery(name = WebhookEntity.FIND_WEBHOOKS_READY_TO_PROCESS, query = "SELECT w.* " + WebhookEntity.WEBHOOKS_READY_TO_PROCESS_FROM_CLAUSE + " ORDER BY w.profile_last_modified", resultClass = WebhookEntity.class) }) @SqlResultSetMapping(name = "countMapping", columns = @ColumnResult(name = "webhook_count")) public class WebhookEntity extends BaseEntity { diff --git a/orcid-pub-web/README_ENDPOINTS.md b/orcid-pub-web/README_ENDPOINTS.md new file mode 100644 index 00000000000..c0c830c3be6 --- /dev/null +++ b/orcid-pub-web/README_ENDPOINTS.md @@ -0,0 +1,145 @@ + + +## Curl Examples with Bearer Token Authentication + +These examples show the same endpoints with an `Authorization: Bearer` header for authenticated requests. Replace `$ACCESS_TOKEN` with your actual bearer token. + +System and docs: + +```bash +curl -sS -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/" +curl -sS -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/status" +curl -sS -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/v3.0/pubStatus" +``` + +Record and activities: + +```bash +curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID" +curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/record" +curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/activities" +``` + +Search: + +```bash +curl -sS -H "Authorization: Bearer $ACCESS_TOKEN" -G "$BASE_URL/$API_VERSION/search" --data-urlencode "q=$QUERY" +curl -sS -H "Authorization: Bearer $ACCESS_TOKEN" -G "$BASE_URL/v3.0/csv-search" --data-urlencode "q=$QUERY" +curl -sS -H "Authorization: Bearer $ACCESS_TOKEN" -G "$BASE_URL/v3.0/expanded-search" --data-urlencode "q=$QUERY" +``` + +Client: + +```bash +curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/client/$CLIENT_ID" +``` + +Work: + +```bash +curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/works" +curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/works/$PUT_CODES" +curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/work/$PUT_CODE" +curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/work/summary/$PUT_CODE" +curl -sS -H "Accept: application/vnd.citationstyles.csl+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/work/$PUT_CODE" +``` + +Funding: + +```bash +curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/fundings" +curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/funding/$PUT_CODE" +curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/funding/summary/$PUT_CODE" +``` + +Education: + +```bash +curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/educations" +curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/education/$PUT_CODE" +curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/education/summary/$PUT_CODE" +``` + +Employment: + +```bash +curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/employments" +curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/employment/$PUT_CODE" +curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/employment/summary/$PUT_CODE" +``` + +Peer review: + +```bash +curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/peer-reviews" +curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/peer-review/$PUT_CODE" +curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/peer-review/summary/$PUT_CODE" +``` + +Personal profile endpoints: + +```bash +curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/person" +curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/personal-details" +curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/biography" +curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/email" + +curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/address" +curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/address/$PUT_CODE" + +curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/keywords" +curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/keywords/$PUT_CODE" + +curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/other-names" +curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/other-names/$PUT_CODE" + +curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/external-identifiers" +curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/external-identifiers/$PUT_CODE" + +curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/researcher-urls" +curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/researcher-urls/$PUT_CODE" +``` + +v3.0 additional affiliation endpoints: + +```bash +curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/v3.0/$ORCID_ID/distinctions" +curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/v3.0/$ORCID_ID/distinction/$PUT_CODE" +curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/v3.0/$ORCID_ID/distinction/summary/$PUT_CODE" + +curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/v3.0/$ORCID_ID/invited-positions" +curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/v3.0/$ORCID_ID/invited-position/$PUT_CODE" +curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/v3.0/$ORCID_ID/invited-position/summary/$PUT_CODE" + +curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/v3.0/$ORCID_ID/memberships" +curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/v3.0/$ORCID_ID/membership/$PUT_CODE" +curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/v3.0/$ORCID_ID/membership/summary/$PUT_CODE" + +curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/v3.0/$ORCID_ID/qualifications" +curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/v3.0/$ORCID_ID/qualification/$PUT_CODE" +curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/v3.0/$ORCID_ID/qualification/summary/$PUT_CODE" + +curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/v3.0/$ORCID_ID/services" +curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/v3.0/$ORCID_ID/service/$PUT_CODE" +curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/v3.0/$ORCID_ID/service/summary/$PUT_CODE" + +curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/v3.0/$ORCID_ID/research-resources" +curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/v3.0/$ORCID_ID/research-resource/$PUT_CODE" +curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/v3.0/$ORCID_ID/research-resource/summary/$PUT_CODE" +``` + +Identifier API: + +```bash +curl -sS -H "Authorization: Bearer $ACCESS_TOKEN" -G "$BASE_URL/v3.0/identifiers" --data-urlencode "locale=$LOCALE" +curl -sS -H "Authorization: Bearer $ACCESS_TOKEN" -G "$BASE_URL/v2.1/identifiers" --data-urlencode "locale=$LOCALE" +curl -sS -H "Authorization: Bearer $ACCESS_TOKEN" -G "$BASE_URL/v2.0/identifiers" --data-urlencode "locale=$LOCALE" +``` + +Experimental RDF API: + +```bash +curl -sS -H "Accept: application/rdf+xml" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/experimental_rdf_v1/$ORCID_ID" +curl -sS -H "Accept: text/turtle" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/experimental_rdf_v1/$ORCID_ID" +curl -sS -H "Accept: application/ld+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/experimental_rdf_v1/$ORCID_ID" +``` From 52619557762ccbdaf6e6557e74fb158af9aa5fd5 Mon Sep 17 00:00:00 2001 From: Camelia Dumitru Date: Mon, 1 Jun 2026 12:47:07 +0100 Subject: [PATCH 45/77] removed the readme doc as it is in slite --- orcid-pub-web/README_ENDPOINTS.md | 145 ------------------------------ 1 file changed, 145 deletions(-) delete mode 100644 orcid-pub-web/README_ENDPOINTS.md diff --git a/orcid-pub-web/README_ENDPOINTS.md b/orcid-pub-web/README_ENDPOINTS.md deleted file mode 100644 index c0c830c3be6..00000000000 --- a/orcid-pub-web/README_ENDPOINTS.md +++ /dev/null @@ -1,145 +0,0 @@ - - -## Curl Examples with Bearer Token Authentication - -These examples show the same endpoints with an `Authorization: Bearer` header for authenticated requests. Replace `$ACCESS_TOKEN` with your actual bearer token. - -System and docs: - -```bash -curl -sS -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/" -curl -sS -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/status" -curl -sS -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/v3.0/pubStatus" -``` - -Record and activities: - -```bash -curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID" -curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/record" -curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/activities" -``` - -Search: - -```bash -curl -sS -H "Authorization: Bearer $ACCESS_TOKEN" -G "$BASE_URL/$API_VERSION/search" --data-urlencode "q=$QUERY" -curl -sS -H "Authorization: Bearer $ACCESS_TOKEN" -G "$BASE_URL/v3.0/csv-search" --data-urlencode "q=$QUERY" -curl -sS -H "Authorization: Bearer $ACCESS_TOKEN" -G "$BASE_URL/v3.0/expanded-search" --data-urlencode "q=$QUERY" -``` - -Client: - -```bash -curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/client/$CLIENT_ID" -``` - -Work: - -```bash -curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/works" -curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/works/$PUT_CODES" -curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/work/$PUT_CODE" -curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/work/summary/$PUT_CODE" -curl -sS -H "Accept: application/vnd.citationstyles.csl+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/work/$PUT_CODE" -``` - -Funding: - -```bash -curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/fundings" -curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/funding/$PUT_CODE" -curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/funding/summary/$PUT_CODE" -``` - -Education: - -```bash -curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/educations" -curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/education/$PUT_CODE" -curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/education/summary/$PUT_CODE" -``` - -Employment: - -```bash -curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/employments" -curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/employment/$PUT_CODE" -curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/employment/summary/$PUT_CODE" -``` - -Peer review: - -```bash -curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/peer-reviews" -curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/peer-review/$PUT_CODE" -curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/peer-review/summary/$PUT_CODE" -``` - -Personal profile endpoints: - -```bash -curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/person" -curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/personal-details" -curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/biography" -curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/email" - -curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/address" -curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/address/$PUT_CODE" - -curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/keywords" -curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/keywords/$PUT_CODE" - -curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/other-names" -curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/other-names/$PUT_CODE" - -curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/external-identifiers" -curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/external-identifiers/$PUT_CODE" - -curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/researcher-urls" -curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/$API_VERSION/$ORCID_ID/researcher-urls/$PUT_CODE" -``` - -v3.0 additional affiliation endpoints: - -```bash -curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/v3.0/$ORCID_ID/distinctions" -curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/v3.0/$ORCID_ID/distinction/$PUT_CODE" -curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/v3.0/$ORCID_ID/distinction/summary/$PUT_CODE" - -curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/v3.0/$ORCID_ID/invited-positions" -curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/v3.0/$ORCID_ID/invited-position/$PUT_CODE" -curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/v3.0/$ORCID_ID/invited-position/summary/$PUT_CODE" - -curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/v3.0/$ORCID_ID/memberships" -curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/v3.0/$ORCID_ID/membership/$PUT_CODE" -curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/v3.0/$ORCID_ID/membership/summary/$PUT_CODE" - -curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/v3.0/$ORCID_ID/qualifications" -curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/v3.0/$ORCID_ID/qualification/$PUT_CODE" -curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/v3.0/$ORCID_ID/qualification/summary/$PUT_CODE" - -curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/v3.0/$ORCID_ID/services" -curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/v3.0/$ORCID_ID/service/$PUT_CODE" -curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/v3.0/$ORCID_ID/service/summary/$PUT_CODE" - -curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/v3.0/$ORCID_ID/research-resources" -curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/v3.0/$ORCID_ID/research-resource/$PUT_CODE" -curl -sS -H "Accept: application/vnd.orcid+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/v3.0/$ORCID_ID/research-resource/summary/$PUT_CODE" -``` - -Identifier API: - -```bash -curl -sS -H "Authorization: Bearer $ACCESS_TOKEN" -G "$BASE_URL/v3.0/identifiers" --data-urlencode "locale=$LOCALE" -curl -sS -H "Authorization: Bearer $ACCESS_TOKEN" -G "$BASE_URL/v2.1/identifiers" --data-urlencode "locale=$LOCALE" -curl -sS -H "Authorization: Bearer $ACCESS_TOKEN" -G "$BASE_URL/v2.0/identifiers" --data-urlencode "locale=$LOCALE" -``` - -Experimental RDF API: - -```bash -curl -sS -H "Accept: application/rdf+xml" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/experimental_rdf_v1/$ORCID_ID" -curl -sS -H "Accept: text/turtle" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/experimental_rdf_v1/$ORCID_ID" -curl -sS -H "Accept: application/ld+json" -H "Authorization: Bearer $ACCESS_TOKEN" "$BASE_URL/experimental_rdf_v1/$ORCID_ID" -``` From 5746687c39a43a0474135ec1a4c05cfe59ffc9f7 Mon Sep 17 00:00:00 2001 From: Camelia Dumitru Date: Mon, 1 Jun 2026 15:17:04 +0100 Subject: [PATCH 46/77] Runtime errors fixes after merging main --- .../OrcidOauth2TokenDetailServiceImpl.java | 17 +- .../OrcidRandomValueTokenServicesImpl.java | 556 ------------------ .../core/utils/http/HttpRequestUtils.java | 2 +- .../OrcidOauth2TokenDetailServiceTest.java | 10 +- .../impl/OrgAffiliationRelationDaoImpl.java | 7 +- .../resources/freemarker/common/includes.ftl | 2 +- 6 files changed, 21 insertions(+), 573 deletions(-) delete mode 100644 orcid-core/src/main/java/org/orcid/core/oauth/service/OrcidRandomValueTokenServicesImpl.java diff --git a/orcid-core/src/main/java/org/orcid/core/oauth/service/OrcidOauth2TokenDetailServiceImpl.java b/orcid-core/src/main/java/org/orcid/core/oauth/service/OrcidOauth2TokenDetailServiceImpl.java index 73b9099eb39..4dc1ded2eee 100644 --- a/orcid-core/src/main/java/org/orcid/core/oauth/service/OrcidOauth2TokenDetailServiceImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/oauth/service/OrcidOauth2TokenDetailServiceImpl.java @@ -4,14 +4,14 @@ import java.util.Date; import java.util.List; import java.util.Set; +import java.util.TreeSet; -import javax.annotation.Resource; -import javax.persistence.NoResultException; +import jakarta.annotation.Resource; +import jakarta.persistence.NoResultException; import org.apache.commons.lang3.StringUtils; import org.orcid.core.constants.RevokeReason; import org.orcid.core.oauth.OrcidOauth2TokenDetailService; -import org.orcid.core.utils.cache.redis.RedisClient; import org.orcid.jaxb.model.message.ScopePathType; import org.orcid.persistence.dao.OrcidOauth2TokenDetailDao; import org.orcid.persistence.jpa.entities.OrcidOauth2TokenDetail; @@ -20,7 +20,6 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.cache.annotation.Cacheable; -import org.springframework.security.oauth2.common.util.OAuth2Utils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -250,6 +249,14 @@ public void disableAccessTokenByUserOrcid(String userOrcid, RevokeReason reason) @Override @Transactional public boolean updateScopes(String acessToken, Set newScopes) { - return orcidOauth2TokenDetailDao.updateScopes(acessToken, OAuth2Utils.formatParameterList(newScopes)); + return orcidOauth2TokenDetailDao.updateScopes(acessToken, formatScopeList(newScopes)); + } + + private String formatScopeList(Set scopes) { + if (scopes == null || scopes.isEmpty()) { + return null; + } + + return String.join(" ", new TreeSet<>(scopes)); } } diff --git a/orcid-core/src/main/java/org/orcid/core/oauth/service/OrcidRandomValueTokenServicesImpl.java b/orcid-core/src/main/java/org/orcid/core/oauth/service/OrcidRandomValueTokenServicesImpl.java deleted file mode 100644 index dd14b0fa79d..00000000000 --- a/orcid-core/src/main/java/org/orcid/core/oauth/service/OrcidRandomValueTokenServicesImpl.java +++ /dev/null @@ -1,556 +0,0 @@ -package org.orcid.core.oauth.service; - -import java.util.*; - -import javax.annotation.Resource; -import javax.persistence.PersistenceException; - -import javassist.compiler.SyntaxError; -import org.apache.commons.lang3.StringUtils; -import org.codehaus.jettison.json.JSONException; -import org.codehaus.jettison.json.JSONObject; -import org.hibernate.exception.ConstraintViolationException; -import org.orcid.core.constants.OrcidOauth2Constants; -import org.orcid.core.constants.RevokeReason; -import org.orcid.core.exception.ClientDeactivatedException; -import org.orcid.core.exception.LockedException; -import org.orcid.core.manager.ClientDetailsEntityCacheManager; -import org.orcid.core.manager.ProfileEntityManager; -import org.orcid.core.oauth.*; -import org.orcid.core.oauth.authorizationServer.AuthorizationServerUtil; -import org.orcid.core.togglz.Features; -import org.orcid.core.utils.JsonUtils; -import org.orcid.core.utils.cache.redis.RedisClient; -import org.orcid.jaxb.model.message.ScopePathType; -import org.orcid.persistence.dao.OrcidOauth2AuthoriziationCodeDetailDao; -import org.orcid.persistence.dao.OrcidOauth2TokenDetailDao; -import org.orcid.persistence.jpa.entities.ClientDetailsEntity; -import org.orcid.persistence.jpa.entities.OrcidOauth2TokenDetail; -import org.orcid.persistence.jpa.entities.ProfileEntity; -import org.orcid.pojo.ajaxForm.PojoUtil; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.AuthenticationException; -import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.core.authority.SimpleGrantedAuthority; -import org.springframework.security.oauth2.common.DefaultOAuth2AccessToken; -import org.springframework.security.oauth2.common.DefaultOAuth2RefreshToken; -import org.springframework.security.oauth2.common.OAuth2AccessToken; -import org.springframework.security.oauth2.common.OAuth2RefreshToken; -import org.springframework.security.oauth2.common.exceptions.InvalidGrantException; -import org.springframework.security.oauth2.common.exceptions.InvalidTokenException; -import org.springframework.security.oauth2.common.util.OAuth2Utils; -import org.springframework.security.oauth2.provider.AuthorizationRequest; -import org.springframework.security.oauth2.provider.OAuth2Authentication; -import org.springframework.security.oauth2.provider.OAuth2Request; -import org.springframework.security.oauth2.provider.TokenRequest; -import org.springframework.security.oauth2.provider.token.AuthenticationKeyGenerator; -import org.springframework.security.oauth2.provider.token.DefaultTokenServices; -import org.springframework.security.oauth2.provider.token.TokenEnhancer; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.context.request.RequestContextHolder; -import org.springframework.web.context.request.ServletRequestAttributes; - -import com.google.common.collect.Sets; - -/** - * @author Declan Newman (declan) Date: 11/05/2012 - */ -public class OrcidRandomValueTokenServicesImpl extends DefaultTokenServices implements OrcidRandomValueTokenServices { - private static final Logger LOGGER = LoggerFactory.getLogger(OrcidRandomValueTokenServicesImpl.class); - - @Value("${org.orcid.core.token.write_validity_seconds:3600}") - private int writeValiditySeconds; - @Value("${org.orcid.core.token.read_validity_seconds:631138519}") - private int readValiditySeconds; - @Value("${org.orcid.core.token.implicit_validity_seconds:600}") - private int implicitValiditySeconds; - @Value("${org.orcid.core.token.write_validity_seconds:3600}") - private int ietfTokenExchangeValiditySeconds; - - private OrcidTokenStore orcidTokenStore; - - private TokenEnhancer customTokenEnhancer; - - @Resource(name="orcidOauth2AuthoriziationCodeDetailDaoReadOnly") - private OrcidOauth2AuthoriziationCodeDetailDao orcidOauth2AuthoriziationCodeDetailDaoReadOnly; - - @Resource - private OrcidOAuth2RequestValidator orcidOAuth2RequestValidator; - @Resource - private ClientDetailsEntityCacheManager clientDetailsEntityCacheManager; - - private boolean customSupportRefreshToken; - - @Resource(name="orcidOauth2TokenDetailDao") - private OrcidOauth2TokenDetailDao orcidOauth2TokenDetailDao; - - @Resource - private ProfileEntityManager profileEntityManager; - - @Resource - private AuthenticationKeyGenerator authenticationKeyGenerator; - - @Resource - private RedisClient redisClient; - - @Value("${org.orcid.core.utils.cache.redis.enabled:true}") - private boolean isTokenCacheEnabled; - - @Resource - private AuthorizationServerUtil authorizationServerUtil; - - public void setCustomSupportRefreshToken(boolean customSupportRefreshToken) { - this.customSupportRefreshToken = customSupportRefreshToken; - } - - @Override - public OAuth2AccessToken createAccessToken(OAuth2Authentication authentication) throws AuthenticationException { - - //Do we have an implicit request with update permissions? - if (OrcidOauth2Constants.IMPLICIT_GRANT_TYPE.equals(authentication.getOAuth2Request().getGrantType())) { - // authentication.getOAuth2Request().getResponseTypes().contains("token")) { - Collection combinedStrings = ScopePathType.getCombinedScopesFromStringsAsStrings(authentication.getOAuth2Request().getScope()); - Set requestedScopes = ScopePathType.getScopesFromStrings(combinedStrings); - Set allowedScopes = Sets.newHashSet(); - for (ScopePathType s: requestedScopes) { - if (ScopePathType.AUTHENTICATE.equals(s) || ScopePathType.READ_PUBLIC.equals(s) || ScopePathType.OPENID.equals(s)) { - allowedScopes.add(s.value()); - } - } - //If so, create a long life update token in the background - if (requestedScopes.size() != allowedScopes.size()) { - //create token behind the scenes. - DefaultOAuth2AccessToken accessToken = new DefaultOAuth2AccessToken(UUID.randomUUID().toString()); - accessToken.setExpiration(new Date(System.currentTimeMillis() + (readValiditySeconds * 1000L))); - accessToken.setScope(authentication.getOAuth2Request().getScope()); - accessToken = new DefaultOAuth2AccessToken(customTokenEnhancer.enhance(accessToken, authentication)); - //accessToken.setAdditionalInformation(Maps.newHashMap()); - orcidTokenStore.storeAccessToken(accessToken, authentication); - - //create a read only token request - OAuth2Request r = authentication.getOAuth2Request().narrowScope(allowedScopes); - authentication = new OAuth2Authentication(r, authentication.getUserAuthentication()); - } - } - - //create the regular token - DefaultOAuth2AccessToken accessToken = generateAccessToken(authentication); - try { - orcidTokenStore.storeAccessToken(accessToken, authentication); - } catch(PersistenceException e) { - // In the unlikely case that there is a constraint violation, lets try to generate the token one more time - if(e.getCause() instanceof ConstraintViolationException) { - accessToken = generateAccessToken(authentication); - try { - orcidTokenStore.storeAccessToken(accessToken, authentication); - return accessToken; - } catch(Exception e2) { - // Just throw the first exception - } - - } - OrcidOauth2AuthInfo authInfo = new OrcidOauth2AuthInfo(authentication); - LOGGER.error("Exception creating access token for client {}, scopes {} and user {}", new Object[] {authInfo.getClientId(), authInfo.getScopes(), authInfo.getUserOrcid()}); - LOGGER.error("Error info", e); - throw e; - } - return accessToken; - } - - private DefaultOAuth2AccessToken generateAccessToken(OAuth2Authentication authentication) { - DefaultOAuth2AccessToken accessToken = new DefaultOAuth2AccessToken(UUID.randomUUID().toString()); - int validitySeconds = getAccessTokenValiditySeconds(authentication.getOAuth2Request()); - if (validitySeconds > 0) { - accessToken.setExpiration(new Date(System.currentTimeMillis() + (validitySeconds * 1000L))); - } - accessToken.setScope(authentication.getOAuth2Request().getScope()); - - if(customTokenEnhancer != null) { - accessToken = new DefaultOAuth2AccessToken(customTokenEnhancer.enhance(accessToken, authentication)); - } - - if(!OrcidOauth2Constants.IETF_EXCHANGE_GRANT_TYPE.equals(authentication.getOAuth2Request().getGrantType()) - && this.isSupportRefreshToken(authentication.getOAuth2Request())) { - OAuth2RefreshToken refreshToken = new DefaultOAuth2RefreshToken(UUID.randomUUID().toString()); - accessToken.setRefreshToken(refreshToken); - } - return accessToken; - } - - /** - * The access token validity period in seconds - * - * @param authorizationRequest - * the current authorization request - * @return the access token validity period in seconds - */ - @Override - protected int getAccessTokenValiditySeconds(OAuth2Request authorizationRequest) { - Set requestedScopes = ScopePathType.getScopesFromStrings(authorizationRequest.getScope()); - if (isClientCredentialsGrantType(authorizationRequest)) { - boolean allAreClientCredentialsScopes = true; - - if (requestedScopes.size() == 1) { - if (requestedScopes.stream().findFirst().get().isInternalScope()) { - return readValiditySeconds; - } - } - - for (ScopePathType scope : requestedScopes) { - if (!scope.isClientCreditalScope()) { - allAreClientCredentialsScopes = false; - break; - } - } - - if (allAreClientCredentialsScopes) { - return readValiditySeconds; - } - } else if(OrcidOauth2Constants.IMPLICIT_GRANT_TYPE.equals(authorizationRequest.getGrantType())){ - return implicitValiditySeconds; - } else if(OrcidOauth2Constants.IETF_EXCHANGE_GRANT_TYPE.equals(authorizationRequest.getGrantType())) { - return ietfTokenExchangeValiditySeconds; - } else if (isPersistentTokenEnabled(authorizationRequest)) { - return readValiditySeconds; - } - - return writeValiditySeconds; - } - - public int getWriteValiditySeconds() { - return writeValiditySeconds; - } - - public int getReadValiditySeconds() { - return readValiditySeconds; - } - - /** - * Checks the authorization code to verify if the user enable the persistent - * token or not - * */ - private boolean isPersistentTokenEnabled(OAuth2Request authorizationRequest) { - if (authorizationRequest != null) { - Map params = authorizationRequest.getRequestParameters(); - if (params != null) { - if (params.containsKey(OrcidOauth2Constants.IS_PERSISTENT)) { - String isPersistent = params.get(OrcidOauth2Constants.IS_PERSISTENT); - if (Boolean.valueOf(isPersistent)) { - return true; - } - } else if (params.containsKey("code")) { - String code = params.get("code"); - if (orcidOauth2AuthoriziationCodeDetailDaoReadOnly.find(code) != null) { - if (orcidOauth2AuthoriziationCodeDetailDaoReadOnly.isPersistentToken(code)) { - return true; - } - } - } - } - } - - return false; - } - - /** - * Checks if the authorization request grant type is client_credentials - * */ - private boolean isClientCredentialsGrantType(OAuth2Request authorizationRequest) { - Map params = authorizationRequest.getRequestParameters(); - if (params != null) { - if (params.containsKey(OrcidOauth2Constants.GRANT_TYPE)) { - String grantType = params.get(OrcidOauth2Constants.GRANT_TYPE); - if (OrcidOauth2Constants.GRANT_TYPE_CLIENT_CREDENTIALS.equals(grantType)) - return true; - } - } - return false; - } - - private OAuth2Authentication loadAuthenticationFromAuthorizationServer(String accessTokenValue) { - try { - JSONObject tokenInfo = authorizationServerUtil.tokenIntrospection(accessTokenValue); - if(tokenInfo == null) { - throw new InvalidTokenException("Invalid access token: Unable to obtain information from the authorization server"); - } - - boolean isTokenActive = tokenInfo.getBoolean("active"); - if(isTokenActive) { - // If the token is user revoked it might be used for DELETE requests - return buildAuthentication(accessTokenValue, tokenInfo); - } else { - ServletRequestAttributes attr = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); - if(RequestMethod.DELETE.name().equals(attr.getRequest().getMethod())) { - if(tokenInfo.has("USER_REVOKED") && tokenInfo.getBoolean("USER_REVOKED") == true) { - return buildAuthentication(accessTokenValue, tokenInfo); - } else { - throw new InvalidTokenException("Invalid access token: " + accessTokenValue); - } - } else { - throw new InvalidTokenException("Invalid access token: " + accessTokenValue); - } - } - } catch(IllegalArgumentException | InvalidTokenException i) { - throw i; - } catch(Exception e) { - LOGGER.error("Exception validating token from authorization server", e); - throw new RuntimeException("Exception validating token from authorization server", e); - } - } - - private OrcidOAuth2Authentication buildAuthentication(String accessTokenValue, JSONObject tokenInfo) throws JSONException { - // What will we get when the token does not exists? - String clientId = tokenInfo.getString("client_id"); - Authentication authentication = null; - Set scopes = OAuth2Utils.parseParameterList(tokenInfo.getString("scope")); - AuthorizationRequest request = new AuthorizationRequest(clientId, scopes); - request.setApproved(true); - if(tokenInfo.has("username")) { - String orcid = tokenInfo.getString("username"); - ProfileEntity profile = new ProfileEntity(orcid); - authentication = new OrcidOauth2UserAuthentication(profile, true); - } - // `orcid` is the only resource id and it is applied to all clients - request.setResourceIds(Set.of("orcid")); - - // Set granted authorities - if(tokenInfo.has("clientGrantedAuthority")) { - GrantedAuthority ga = new SimpleGrantedAuthority(tokenInfo.getString("clientGrantedAuthority")); - request.setAuthorities(List.of(ga)); - } - - if(tokenInfo.has("OBO_CLIENT_ID")) { - String oboClientId = tokenInfo.getString("OBO_CLIENT_ID"); - return new OrcidOboOAuth2Authentication(oboClientId, request, authentication, accessTokenValue); - } - - return new OrcidOAuth2Authentication(request, authentication, accessTokenValue); - } - - @Override - public OAuth2Authentication loadAuthentication(String accessTokenValue) throws AuthenticationException { - if(Features.OAUTH_TOKEN_VALIDATION.isActive()) { - if(LOGGER.isTraceEnabled()) { - LOGGER.trace("Using the auth server to validate token"); - } - return loadAuthenticationFromAuthorizationServer(accessTokenValue); - } else { - ServletRequestAttributes attr = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); - // Feature flag: If the request is to delete an element, allow - if (RequestMethod.DELETE.name().equals(attr.getRequest().getMethod())) { - OrcidOauth2TokenDetail orcidAccessToken = orcidTokenStore.readOrcidOauth2TokenDetail(accessTokenValue); - if (orcidAccessToken == null) { - // Access token not found - throw new InvalidTokenException("Invalid access token: " + accessTokenValue); - } - String revokeReason = orcidAccessToken.getRevokeReason(); - if (PojoUtil.isEmpty(revokeReason) || RevokeReason.USER_REVOKED.equals(RevokeReason.valueOf(revokeReason))) { - OAuth2AccessToken accessToken = orcidTokenStore.readEvenDisabledAccessToken(accessTokenValue); - validateTokenExpirationAndClientStatus(accessToken, accessTokenValue); - return orcidTokenStore.readAuthenticationEvenOnDisabledTokens(accessTokenValue); - } else { - throw new InvalidTokenException("Invalid access token: " + accessTokenValue + ", revoke reason: " + revokeReason); - } - } else { - // Get the token from the cache - Map cachedAccessToken = getTokenFromCache(accessTokenValue); - if (cachedAccessToken != null) { - return orcidTokenStore.readAuthenticationFromCachedToken(cachedAccessToken); - } else { - // Fallback to database if it is not in the cache - OAuth2AccessToken accessToken = orcidTokenStore.readAccessToken(accessTokenValue); - validateTokenExpirationAndClientStatus(accessToken, accessTokenValue); - return orcidTokenStore.readAuthentication(accessTokenValue); - } - } - } - } - - private Map getTokenFromCache(String accessTokenValue) { - if(isTokenCacheEnabled) { - String tokenJsonInfo = redisClient.get(accessTokenValue); - if(StringUtils.isNotBlank(tokenJsonInfo)) { - return JsonUtils.readObjectFromJsonString(tokenJsonInfo, HashMap.class); - } - } - return null; - } - - private void validateTokenExpirationAndClientStatus(OAuth2AccessToken accessToken, String tokenValue) { - // Throw an exception if access token is not found - if (accessToken != null) { - // Throw an exception if the token is expired - if (accessToken.isExpired()) { - orcidTokenStore.removeAccessToken(accessToken); - throw new InvalidTokenException("Access token expired: " + tokenValue); - } - Map additionalInfo = accessToken.getAdditionalInformation(); - if (additionalInfo != null) { - String clientId = (String) additionalInfo.get(OrcidOauth2Constants.CLIENT_ID); - orcidTokenStore.isClientEnabled(clientId); - } - } else { - // Access token not found - throw new InvalidTokenException("Invalid access token: " + tokenValue); - } - } - - public void setOrcidtokenStore(OrcidTokenStore orcidTokenStore) { - super.setTokenStore(orcidTokenStore); - this.orcidTokenStore = orcidTokenStore; - } - - public void setCustomTokenEnhancer(TokenEnhancer customTokenEnhancer) { - super.setTokenEnhancer(customTokenEnhancer); - this.customTokenEnhancer = customTokenEnhancer; - } - - public boolean longLifeTokenExist(String clientId, String userId, Collection scopes) { - Collection existingTokens = orcidTokenStore.findTokensByClientIdAndUserName(clientId, userId); - - if(existingTokens == null || existingTokens.isEmpty()) { - return false; - } - - for(OAuth2AccessToken token : existingTokens) { - if (token.getAdditionalInformation().get(OrcidOauth2Constants.PERSISTENT) != null && Boolean.valueOf((token.getAdditionalInformation().get("persistent").toString()))){ - if(token.getScope().containsAll(scopes) && scopes.containsAll(token.getScope())) { - return true; - } - } - } - - return false; - } - - //see https://github.com/spring-projects/spring-security-oauth/pull/957#issuecomment-304729865 - @Override - @Transactional - public OAuth2AccessToken refreshAccessToken(String refreshTokenValue, TokenRequest tokenRequest) throws AuthenticationException { - String parentTokenValue = tokenRequest.getRequestParameters().get(OrcidOauth2Constants.AUTHORIZATION); - String clientId = tokenRequest.getClientId(); - String scopes = tokenRequest.getRequestParameters().get(OAuth2Utils.SCOPE); - Long expiresIn = tokenRequest.getRequestParameters().containsKey(OrcidOauth2Constants.EXPIRES_IN) - ? Long.valueOf(tokenRequest.getRequestParameters().get(OrcidOauth2Constants.EXPIRES_IN)) : 0L; - Boolean revokeOld = tokenRequest.getRequestParameters().containsKey(OrcidOauth2Constants.REVOKE_OLD) ? Boolean.valueOf(tokenRequest.getRequestParameters().get(OrcidOauth2Constants.REVOKE_OLD)) : true; - - // Check if the refresh token is enabled - if (!customSupportRefreshToken) { - throw new InvalidGrantException("Invalid refresh token: " + refreshTokenValue); - } - // Check if the client support refresh token - ClientDetailsEntity clientDetails = clientDetailsEntityCacheManager.retrieve(clientId); - if (!clientDetails.getAuthorizedGrantTypes().contains(OrcidOauth2Constants.REFRESH_TOKEN)) { - throw new InvalidGrantException("Client " + clientId + " doesnt have refresh token enabled"); - } - - OrcidOauth2TokenDetail parentToken = orcidOauth2TokenDetailDao.findByRefreshTokenValue(refreshTokenValue); - - ProfileEntity profileEntity = new ProfileEntity(parentToken.getOrcid()); - OrcidOauth2TokenDetail newToken = new OrcidOauth2TokenDetail(); - - newToken.setApproved(true); - newToken.setClientDetailsId(clientId); - newToken.setPersistent(parentToken.isPersistent()); - newToken.setOrcid(parentToken.getOrcid()); - newToken.setRedirectUri(parentToken.getRedirectUri()); - newToken.setRefreshTokenValue(UUID.randomUUID().toString()); - newToken.setResourceId(parentToken.getResourceId()); - newToken.setResponseType(parentToken.getResponseType()); - newToken.setState(parentToken.getState()); - newToken.setTokenDisabled(false); - if(expiresIn <= 0) { - //If expiresIn is 0 or less, set the parent token - newToken.setTokenExpiration(parentToken.getTokenExpiration()); - } else { - //Assumes expireIn already contains the real expired time expressed in millis - newToken.setTokenExpiration(new Date(expiresIn)); - } - newToken.setTokenType(parentToken.getTokenType()); - newToken.setTokenValue(UUID.randomUUID().toString()); - newToken.setVersion(parentToken.getVersion()); - - if (PojoUtil.isEmpty(scopes)) { - newToken.setScope(parentToken.getScope()); - } else { - newToken.setScope(scopes); - } - - //Generate an authentication object to be able to generate the authentication key - Set scopesSet = OAuth2Utils.parseParameterList(newToken.getScope()); - AuthorizationRequest request = new AuthorizationRequest(clientId, scopesSet); - request.setApproved(true); - Authentication authentication = new OrcidOauth2UserAuthentication(profileEntity, true); - OrcidOAuth2Authentication orcidAuthentication = new OrcidOAuth2Authentication(request, authentication, newToken.getTokenValue()); - newToken.setAuthenticationKey(authenticationKeyGenerator.extractKey(orcidAuthentication)); - - // Store the new token and return it - orcidOauth2TokenDetailDao.persist(newToken); - - // Revoke the old token when required - if (revokeOld) { - orcidOauth2TokenDetailDao.disableAccessToken(parentTokenValue); - } - - // Save the changes - orcidOauth2TokenDetailDao.flush(); - - // Transform the OrcidOauth2TokenDetail into a OAuth2AccessToken - // and return it - return toOAuth2AccessToken(newToken); - } - - private OAuth2AccessToken toOAuth2AccessToken(OrcidOauth2TokenDetail token) { - DefaultOAuth2AccessToken result = new DefaultOAuth2AccessToken(token.getTokenValue()); - result.setExpiration(token.getTokenExpiration()); - result.setRefreshToken(new DefaultOAuth2RefreshToken(token.getRefreshTokenValue())); - result.setScope(OAuth2Utils.parseParameterList(token.getScope())); - result.setTokenType(token.getTokenType()); - result.setValue(token.getTokenValue()); - - Map additionalInfo = new HashMap(); - if(token.getOrcid() != null) { - additionalInfo.put(OrcidOauth2Constants.ORCID, token.getOrcid()); - additionalInfo.put(OrcidOauth2Constants.NAME, profileEntityManager.retrivePublicDisplayName(token.getOrcid())); - } - - result.setAdditionalInformation(additionalInfo); - return result; - } - - @Override - public OAuth2AccessToken createRevokedAccessToken(OAuth2Authentication authentication, RevokeReason revokeReason) throws AuthenticationException { - // create the regular token - DefaultOAuth2AccessToken accessToken = generateAccessToken(authentication); - try { - if(accessToken.getAdditionalInformation() == null) { - accessToken.setAdditionalInformation(Collections.emptyMap()); - } - accessToken.getAdditionalInformation().put(OrcidOauth2Constants.TOKEN_DISABLED, true); - orcidTokenStore.storeRevokedAccessToken(accessToken, authentication, revokeReason); - } catch (PersistenceException e) { - // In the unlikely case that there is a constraint violation, lets - // try to generate the token one more time - if (e.getCause() instanceof ConstraintViolationException) { - accessToken = generateAccessToken(authentication); - try { - orcidTokenStore.storeRevokedAccessToken(accessToken, authentication, revokeReason); - return accessToken; - } catch (Exception e2) { - // Just throw the first exception - } - - } - OrcidOauth2AuthInfo authInfo = new OrcidOauth2AuthInfo(authentication); - LOGGER.error("Exception creating revoked access token for client {}, scopes {} and user {}", - new Object[] { authInfo.getClientId(), authInfo.getScopes(), authInfo.getUserOrcid() }); - LOGGER.error("Error info", e); - throw e; - } - return accessToken; - } -} diff --git a/orcid-core/src/main/java/org/orcid/core/utils/http/HttpRequestUtils.java b/orcid-core/src/main/java/org/orcid/core/utils/http/HttpRequestUtils.java index a3af3ffe68a..b1598cb3152 100644 --- a/orcid-core/src/main/java/org/orcid/core/utils/http/HttpRequestUtils.java +++ b/orcid-core/src/main/java/org/orcid/core/utils/http/HttpRequestUtils.java @@ -14,7 +14,7 @@ import java.util.Map; import java.util.stream.Collectors; -import javax.annotation.PostConstruct; +import jakarta.annotation.PostConstruct; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Value; diff --git a/orcid-core/src/test/java/org/orcid/core/oauth/service/OrcidOauth2TokenDetailServiceTest.java b/orcid-core/src/test/java/org/orcid/core/oauth/service/OrcidOauth2TokenDetailServiceTest.java index b9535861529..ff2237e92e3 100644 --- a/orcid-core/src/test/java/org/orcid/core/oauth/service/OrcidOauth2TokenDetailServiceTest.java +++ b/orcid-core/src/test/java/org/orcid/core/oauth/service/OrcidOauth2TokenDetailServiceTest.java @@ -11,30 +11,24 @@ import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; import java.util.Arrays; import java.util.Date; import java.util.List; -import javax.annotation.Resource; -import javax.persistence.NoResultException; +import jakarta.annotation.Resource; +import jakarta.persistence.NoResultException; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.Mock; import org.mockito.MockitoAnnotations; -import org.orcid.core.common.manager.EmailFrequencyManager; import org.orcid.core.constants.RevokeReason; import org.orcid.core.oauth.OrcidOauth2TokenDetailService; -import org.orcid.core.utils.cache.redis.RedisClient; import org.orcid.persistence.dao.OrcidOauth2TokenDetailDao; import org.orcid.persistence.jpa.entities.OrcidOauth2TokenDetail; -import org.orcid.persistence.jpa.entities.ProfileEntity; import org.orcid.test.DBUnitTest; import org.orcid.test.OrcidJUnit4ClassRunner; import org.orcid.test.TargetProxyHelper; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgAffiliationRelationDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgAffiliationRelationDaoImpl.java index 3df0a22554c..c6eb92841ce 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgAffiliationRelationDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgAffiliationRelationDaoImpl.java @@ -2,6 +2,7 @@ import java.math.BigInteger; import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.concurrent.CompletableFuture; @@ -119,10 +120,11 @@ private void storeDeletedItemInPanoply(PanoplyDeletedItem item) { @UpdateProfileLastModifiedAndIndexingStatus public boolean updateVisibilityOnOrgAffiliationRelation(String userOrcid, Long orgAffiliationRelationId, String visibility) { Query query = entityManager.createQuery( - "update OrgAffiliationRelationEntity o set o.visibility=:visibility, o.lastModified=now() where o.orcid=:userOrcid and o.id=:orgAffiliationRelationId"); + "update OrgAffiliationRelationEntity o set o.visibility=:visibility, o.lastModified=:lastModified where o.orcid=:userOrcid and o.id=:orgAffiliationRelationId"); query.setParameter("userOrcid", userOrcid); query.setParameter("orgAffiliationRelationId", orgAffiliationRelationId); query.setParameter("visibility", visibility); + query.setParameter("lastModified", new Date()); boolean updated = query.executeUpdate() > 0 ? true : false; // If changing to PRIVATE or LIMITED, clear featured flag on that affiliation if (updated && !"PUBLIC".equals(visibility)) { @@ -156,10 +158,11 @@ public boolean updateVisibilityOnOrgAffiliationRelation(String userOrcid, Long o @Transactional public boolean updateVisibilitiesOnOrgAffiliationRelation(String userOrcid, ArrayList orgAffiliationRelationIds, String visibility) { Query query = entityManager.createQuery( - "update OrgAffiliationRelationEntity o set o.visibility=:visibility, o.lastModified=now() where o.orcid=:userOrcid and o.id in (:orgAffiliationRelationIds)"); + "update OrgAffiliationRelationEntity o set o.visibility=:visibility, o.lastModified=:lastModified where o.orcid=:userOrcid and o.id in (:orgAffiliationRelationIds)"); query.setParameter("userOrcid", userOrcid); query.setParameter("orgAffiliationRelationIds", orgAffiliationRelationIds); query.setParameter("visibility", visibility); + query.setParameter("lastModified", new Date()); boolean updated = query.executeUpdate() > 0 ? true : false; // If changing to PRIVATE or LIMITED, clear featured flag on affected affiliations if (updated && !"PUBLIC".equals(visibility)) { diff --git a/orcid-web/src/main/resources/freemarker/common/includes.ftl b/orcid-web/src/main/resources/freemarker/common/includes.ftl index fb4c075e3df..da051e41cf7 100644 --- a/orcid-web/src/main/resources/freemarker/common/includes.ftl +++ b/orcid-web/src/main/resources/freemarker/common/includes.ftl @@ -2,4 +2,4 @@ <#include "/layout/protected-layout.ftl" /> <#import "/spring.ftl" as spring /> <#import "/macros/orcid.ftl" as orcid /> -<#global security = JspTaglibs["http://www.springframework.org/security/tags"] /> \ No newline at end of file +<#global security = (JspTaglibs!{})["http://www.springframework.org/security/tags"]!{} /> \ No newline at end of file From e71bbcebc0a225f5d9b4ee134cc408295ec57e17 Mon Sep 17 00:00:00 2001 From: Camelia Dumitru Date: Mon, 1 Jun 2026 18:08:52 +0100 Subject: [PATCH 47/77] Code compiling and unit tests passed for jdk 21 --- orcid-api-common/pom.xml | 11 ----------- orcid-api-web/pom.xml | 10 ---------- orcid-core/pom.xml | 9 --------- .../core/common/manager/SummaryManagerTest.java | 1 - orcid-message-listener/pom.xml | 2 +- orcid-persistence/pom.xml | 9 --------- orcid-pub-web/pom.xml | 9 --------- orcid-test/pom.xml | 17 ++++++++--------- .../service/TrustedPartiesServiceImpl.java | 4 ++-- .../service/TrustedPartiesServiceImplTest.java | 2 +- pom.xml | 6 +++--- 11 files changed, 15 insertions(+), 65 deletions(-) diff --git a/orcid-api-common/pom.xml b/orcid-api-common/pom.xml index 8248694cd51..3de153f1bd4 100644 --- a/orcid-api-common/pom.xml +++ b/orcid-api-common/pom.xml @@ -178,17 +178,6 @@ ${project.artifactId} - - - org.apache.maven.plugins - maven-compiler-plugin - false - - 17 - 17 - - - org.codehaus.mojo build-helper-maven-plugin diff --git a/orcid-api-web/pom.xml b/orcid-api-web/pom.xml index 683fcf24d4a..2379d667abe 100644 --- a/orcid-api-web/pom.xml +++ b/orcid-api-web/pom.xml @@ -90,16 +90,6 @@ ${project.artifactId} - - - org.apache.maven.plugins - maven-compiler-plugin - false - - 17 - 17 - - org.codehaus.mojo tomcat-maven-plugin diff --git a/orcid-core/pom.xml b/orcid-core/pom.xml index 7271c58511b..066d7385495 100644 --- a/orcid-core/pom.xml +++ b/orcid-core/pom.xml @@ -336,15 +336,6 @@ - - org.apache.maven.plugins - maven-compiler-plugin - false - - 17 - 17 - - diff --git a/orcid-core/src/test/java/org/orcid/core/common/manager/SummaryManagerTest.java b/orcid-core/src/test/java/org/orcid/core/common/manager/SummaryManagerTest.java index 1d351e563fc..29a9e296c3e 100644 --- a/orcid-core/src/test/java/org/orcid/core/common/manager/SummaryManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/common/manager/SummaryManagerTest.java @@ -15,7 +15,6 @@ import jakarta.annotation.Resource; import javax.xml.datatype.XMLGregorianCalendar; -import com.oracle.truffle.api.profiles.Profile; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; diff --git a/orcid-message-listener/pom.xml b/orcid-message-listener/pom.xml index 760f9088ddb..2b77cb66613 100644 --- a/orcid-message-listener/pom.xml +++ b/orcid-message-listener/pom.xml @@ -184,7 +184,7 @@ 3.6.3 - 11 + ${java.version} diff --git a/orcid-persistence/pom.xml b/orcid-persistence/pom.xml index f854b0870ca..81300d38534 100644 --- a/orcid-persistence/pom.xml +++ b/orcid-persistence/pom.xml @@ -41,15 +41,6 @@ - - org.apache.maven.plugins - maven-compiler-plugin - false - - 17 - 17 - - diff --git a/orcid-pub-web/pom.xml b/orcid-pub-web/pom.xml index 0a4e237dc56..8cffa2ebc89 100644 --- a/orcid-pub-web/pom.xml +++ b/orcid-pub-web/pom.xml @@ -124,15 +124,6 @@ ${project.artifactId} - - org.apache.maven.plugins - maven-compiler-plugin - false - - 17 - 17 - - org.codehaus.mojo tomcat-maven-plugin diff --git a/orcid-test/pom.xml b/orcid-test/pom.xml index cc14ce574ea..e5145e2dabf 100644 --- a/orcid-test/pom.xml +++ b/orcid-test/pom.xml @@ -2,6 +2,12 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 + + org.orcid + orcid-parent + release-2.0.0 + ../pom.xml + org.orcid orcid-test release-2.0.0 @@ -42,7 +48,7 @@ 3.6.3 - 11 + ${java.version} @@ -65,14 +71,6 @@ false - - org.apache.maven.plugins - maven-compiler-plugin - true - - 11 - - org.apache.maven.plugins maven-surefire-plugin @@ -187,6 +185,7 @@ junit junit ${junit.version} + compile org.glassfish.web diff --git a/orcid-web/src/main/java/org/orcid/frontend/service/TrustedPartiesServiceImpl.java b/orcid-web/src/main/java/org/orcid/frontend/service/TrustedPartiesServiceImpl.java index ec4b2529467..0fc4b75b309 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/service/TrustedPartiesServiceImpl.java +++ b/orcid-web/src/main/java/org/orcid/frontend/service/TrustedPartiesServiceImpl.java @@ -7,8 +7,8 @@ import org.slf4j.LoggerFactory; import org.springframework.transaction.annotation.Transactional; -import javax.annotation.Resource; -import javax.persistence.NoResultException; +import jakarta.annotation.Resource; +import jakarta.persistence.NoResultException; import java.util.Date; import java.util.List; import java.util.stream.Collectors; diff --git a/orcid-web/src/test/java/org/orcid/frontend/service/TrustedPartiesServiceImplTest.java b/orcid-web/src/test/java/org/orcid/frontend/service/TrustedPartiesServiceImplTest.java index 781dfe0ee0b..882d3fb5975 100644 --- a/orcid-web/src/test/java/org/orcid/frontend/service/TrustedPartiesServiceImplTest.java +++ b/orcid-web/src/test/java/org/orcid/frontend/service/TrustedPartiesServiceImplTest.java @@ -13,7 +13,7 @@ import java.util.Date; import java.util.List; -import javax.persistence.NoResultException; +import jakarta.persistence.NoResultException; import org.junit.Before; import org.junit.Test; diff --git a/pom.xml b/pom.xml index 37ee679a98f..d6915336894 100644 --- a/pom.xml +++ b/pom.xml @@ -25,6 +25,7 @@ the software. The parent ORCID pom that all sub-projects reside under + 21 6.0.23 6.0.8 4.9.1 @@ -88,7 +89,7 @@ the software. 3.6.3 - [11,) + ${java.version} @@ -124,8 +125,7 @@ the software. maven-compiler-plugin true - 17 - 17 + ${java.version} From c2a262170e39233b9a42cd1457bc0c74e97562e6 Mon Sep 17 00:00:00 2001 From: Camelia Dumitru Date: Mon, 1 Jun 2026 20:40:44 +0100 Subject: [PATCH 48/77] Fixed vulnerabilities --- .../orcid-oauth2-api-common-config.xml | 2 +- .../resources/orcid-api-security-context.xml | 4 ++-- orcid-core/pom.xml | 4 ++-- .../src/main/resources/orcid-core-context.xml | 2 +- .../orcid-internal-api-security-context.xml | 4 ++-- .../resources/orcid-t1-security-context.xml | 4 ++-- orcid-test/pom.xml | 2 +- .../resources/orcid-frontend-security.xml | 2 +- pom.xml | 20 +++++++++++-------- 9 files changed, 24 insertions(+), 20 deletions(-) diff --git a/orcid-api-common/src/main/resources/orcid-oauth2-api-common-config.xml b/orcid-api-common/src/main/resources/orcid-oauth2-api-common-config.xml index 4a833ebf092..fea74d3b950 100644 --- a/orcid-api-common/src/main/resources/orcid-oauth2-api-common-config.xml +++ b/orcid-api-common/src/main/resources/orcid-oauth2-api-common-config.xml @@ -4,7 +4,7 @@ xmlns:sec="http://www.springframework.org/schema/security" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd - http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-6.0.xsd"> + http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-6.5.xsd"> + xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd + http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-6.5.xsd"> diff --git a/orcid-core/pom.xml b/orcid-core/pom.xml index 066d7385495..a13b0e6f439 100644 --- a/orcid-core/pom.xml +++ b/orcid-core/pom.xml @@ -82,7 +82,7 @@ org.springframework spring-web - 6.0.23 + ${spring.version} org.springframework.security @@ -99,7 +99,7 @@ com.sun.mail jakarta.mail - 2.0.1 + 2.0.2 commons-io diff --git a/orcid-core/src/main/resources/orcid-core-context.xml b/orcid-core/src/main/resources/orcid-core-context.xml index 0934fd315f4..4d7c5946600 100644 --- a/orcid-core/src/main/resources/orcid-core-context.xml +++ b/orcid-core/src/main/resources/orcid-core-context.xml @@ -746,7 +746,7 @@ - diff --git a/orcid-internal-api/src/main/resources/orcid-internal-api-security-context.xml b/orcid-internal-api/src/main/resources/orcid-internal-api-security-context.xml index 0e798f1a43a..973ea303cab 100644 --- a/orcid-internal-api/src/main/resources/orcid-internal-api-security-context.xml +++ b/orcid-internal-api/src/main/resources/orcid-internal-api-security-context.xml @@ -2,8 +2,8 @@ + xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd + http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-6.5.xsd"> diff --git a/orcid-pub-web/src/main/resources/orcid-t1-security-context.xml b/orcid-pub-web/src/main/resources/orcid-t1-security-context.xml index 1f0274cb410..30a62792f8a 100644 --- a/orcid-pub-web/src/main/resources/orcid-t1-security-context.xml +++ b/orcid-pub-web/src/main/resources/orcid-t1-security-context.xml @@ -2,8 +2,8 @@ + xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd + http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-6.5.xsd"> diff --git a/orcid-test/pom.xml b/orcid-test/pom.xml index e5145e2dabf..cf6cb3e0baa 100644 --- a/orcid-test/pom.xml +++ b/orcid-test/pom.xml @@ -15,7 +15,7 @@ Test utilities that can be brought in to other modules with the test scope - 6.0.23 + 6.2.7 5.6.2 4.13.2 ${project.basedir} diff --git a/orcid-web/src/main/resources/orcid-frontend-security.xml b/orcid-web/src/main/resources/orcid-frontend-security.xml index 15114f107bd..d9add9fd7d8 100644 --- a/orcid-web/src/main/resources/orcid-frontend-security.xml +++ b/orcid-web/src/main/resources/orcid-frontend-security.xml @@ -2,7 +2,7 @@ diff --git a/pom.xml b/pom.xml index d6915336894..f1bf9ec69ed 100644 --- a/pom.xml +++ b/pom.xml @@ -26,10 +26,10 @@ the software. 21 - 6.0.23 - 6.0.8 + 6.2.7 + 6.5.9 4.9.1 - 3.1.9 + 3.1.10 2.15.4 6.1.5 2.1.1 @@ -126,6 +126,10 @@ the software. true ${java.version} + true + + -parameters + @@ -371,17 +375,17 @@ the software. org.apache.logging.log4j log4j-core - 2.17.1 + 2.25.4 org.apache.logging.log4j log4j-slf4j-impl - 2.17.1 + 2.25.4 org.apache.logging.log4j log4j-1.2-api - 2.17.1 + 2.25.4 commons-lang @@ -432,7 +436,7 @@ the software. commons-beanutils commons-beanutils - 1.9.4 + 1.11.0 compile @@ -667,7 +671,7 @@ the software. org.freemarker freemarker - 2.3.25-incubating + 2.3.34 compile From 5f1e2ba0dad0a03344b5a632d4f2299a3b11ce8f Mon Sep 17 00:00:00 2001 From: Camelia Dumitru Date: Mon, 1 Jun 2026 21:12:21 +0100 Subject: [PATCH 49/77] More vulnerabilities fixes --- .../org/orcid/core/manager/impl/CountryManagerImpl.java | 8 ++------ pom.xml | 4 ++-- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/CountryManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/CountryManagerImpl.java index dd606a9ea99..901f192661c 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/CountryManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/CountryManagerImpl.java @@ -1,6 +1,6 @@ package org.orcid.core.manager.impl; -import java.io.IOException; +import java.nio.charset.StandardCharsets; import java.util.Collections; import java.util.Comparator; import java.util.LinkedHashMap; @@ -32,11 +32,7 @@ public class CountryManagerImpl implements CountryManager { @Cacheable("country-list") @Deprecated public List retrieveCountries() { - try { - return IOUtils.readLines(getClass().getResourceAsStream("countries.txt")); - } catch (IOException e) { - throw new RuntimeException("Problem reading countries.txt from classpath", e); - } + return IOUtils.readLines(getClass().getResourceAsStream("countries.txt"), StandardCharsets.UTF_8); } @Override diff --git a/pom.xml b/pom.xml index f1bf9ec69ed..24bb5b0f400 100644 --- a/pom.xml +++ b/pom.xml @@ -31,7 +31,7 @@ the software. 4.9.1 3.1.10 2.15.4 - 6.1.5 + 6.2.4 2.1.1 1.9.6 4.4.0 @@ -841,7 +841,7 @@ the software. commons-io commons-io - 2.7 + 2.14.0 compile From 688e179c863cc92107df546b16bbf2240df89606 Mon Sep 17 00:00:00 2001 From: Camelia Dumitru Date: Wed, 3 Jun 2026 10:39:15 +0100 Subject: [PATCH 50/77] Fixed compilation errors after the main merge --- .../ContributorsRolesAndSequencesConverter.java | 7 ++----- .../v3/read_only/impl/WorkManagerReadOnlyImpl.java | 9 +++------ .../orcid/core/manager/v3/validator/PersonValidator.java | 2 -- .../java/org/orcid/core/utils/v3/ContributorUtils.java | 2 +- 4 files changed, 6 insertions(+), 14 deletions(-) diff --git a/orcid-core/src/main/java/org/orcid/core/adapter/v3/converter/ContributorsRolesAndSequencesConverter.java b/orcid-core/src/main/java/org/orcid/core/adapter/v3/converter/ContributorsRolesAndSequencesConverter.java index 9f79a278390..762b4be53e3 100644 --- a/orcid-core/src/main/java/org/orcid/core/adapter/v3/converter/ContributorsRolesAndSequencesConverter.java +++ b/orcid-core/src/main/java/org/orcid/core/adapter/v3/converter/ContributorsRolesAndSequencesConverter.java @@ -16,7 +16,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import java.util.ArrayList; import java.util.List; @@ -27,9 +27,6 @@ public class ContributorsRolesAndSequencesConverter extends BidirectionalConvert @Resource(name = "workContributorRoleConverter") private ContributorRoleConverter workContributorRoleConverter; - @Resource(name = "contributorUtilsV3") - private ContributorUtils contributorUtils; - @Override public String convertTo(List source, Type destinationType) { return JsonUtils.convertToJsonString(source); @@ -55,7 +52,7 @@ public List getContributorsRolesAndSequencesList( if (cr != null) { providedRoleValue = cr.name(); } - crs.setContributorRole(contributorUtils.getCreditRole(workContributorRoleConverter.toRoleValue(providedRoleValue))); + crs.setContributorRole(ContributorUtils.getCreditRole(workContributorRoleConverter.toRoleValue(providedRoleValue))); } } } diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/WorkManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/WorkManagerReadOnlyImpl.java index 2f0b8a974f9..dad6fe32ca0 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/WorkManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/WorkManagerReadOnlyImpl.java @@ -4,8 +4,11 @@ import java.sql.Timestamp; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; import java.util.concurrent.ForkJoinPool; import java.util.List; +import java.util.Map; import java.util.Set; import java.util.stream.Collectors; @@ -51,12 +54,6 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; -import javax.annotation.Resource; -import java.math.BigInteger; -import java.sql.Timestamp; -import java.util.*; -import java.util.stream.Collectors; - import static org.orcid.pojo.ajaxForm.PojoUtil.getWorkForm; public class WorkManagerReadOnlyImpl extends ManagerReadOnlyBaseImpl implements WorkManagerReadOnly { diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/validator/PersonValidator.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/validator/PersonValidator.java index a19335dfc79..275f5ceb385 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/validator/PersonValidator.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/validator/PersonValidator.java @@ -22,8 +22,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.annotation.Resource; - public class PersonValidator { private static final Logger LOGGER = LoggerFactory.getLogger(PersonValidator.class); diff --git a/orcid-core/src/main/java/org/orcid/core/utils/v3/ContributorUtils.java b/orcid-core/src/main/java/org/orcid/core/utils/v3/ContributorUtils.java index 8c910bc2e85..f6c4248b3cc 100644 --- a/orcid-core/src/main/java/org/orcid/core/utils/v3/ContributorUtils.java +++ b/orcid-core/src/main/java/org/orcid/core/utils/v3/ContributorUtils.java @@ -12,7 +12,7 @@ import org.orcid.pojo.ContributorsRolesAndSequences; import org.orcid.pojo.ajaxForm.PojoUtil; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; From 0cbc099a88c6f41400a3f3950d4324d65f36f549 Mon Sep 17 00:00:00 2001 From: Camelia Dumitru Date: Wed, 10 Jun 2026 13:41:35 +0100 Subject: [PATCH 51/77] Fixed compilation issue java 21 --- .../src/main/java/org/orcid/utils/sms/TwilioSmsSender.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/orcid-utils/src/main/java/org/orcid/utils/sms/TwilioSmsSender.java b/orcid-utils/src/main/java/org/orcid/utils/sms/TwilioSmsSender.java index 8cd0589808f..f7ecbef0399 100644 --- a/orcid-utils/src/main/java/org/orcid/utils/sms/TwilioSmsSender.java +++ b/orcid-utils/src/main/java/org/orcid/utils/sms/TwilioSmsSender.java @@ -1,6 +1,6 @@ package org.orcid.utils.sms; -import javax.annotation.PostConstruct; +import jakarta.annotation.PostConstruct; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Value; From 05ffd27ba051d5fb541962e67fb9d960b92ba91d Mon Sep 17 00:00:00 2001 From: Camelia Dumitru Date: Wed, 10 Jun 2026 14:04:27 +0100 Subject: [PATCH 52/77] More compilation errors fixed --- .../frontend/web/controllers/PublicRecordApiController.java | 2 ++ .../orcid/frontend/web/controllers/SmsPocController.java | 6 +++--- .../web/controllers/PublicRecordApiControllerTest.java | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/PublicRecordApiController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/PublicRecordApiController.java index 54d3128f556..2d85de8ae8f 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/PublicRecordApiController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/PublicRecordApiController.java @@ -25,6 +25,8 @@ import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; +import jakarta.servlet.http.HttpServletRequest; + @Controller public class PublicRecordApiController { diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/SmsPocController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/SmsPocController.java index c65fc080899..426079409f1 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/SmsPocController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/SmsPocController.java @@ -1,11 +1,11 @@ package org.orcid.frontend.web.controllers; -import javax.annotation.Resource; -import javax.ws.rs.core.MediaType; +import jakarta.annotation.Resource; import org.orcid.frontend.sms.SmsPocRequest; import org.orcid.frontend.sms.SmsPocResponse; import org.orcid.frontend.sms.SmsPocService; +import org.springframework.http.MediaType; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -19,7 +19,7 @@ public class SmsPocController { @Resource private SmsPocService smsPocService; - @RequestMapping(value = "/send.json", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON) + @RequestMapping(value = "/send.json", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE) public @ResponseBody SmsPocResponse send(@RequestBody SmsPocRequest request) { return smsPocService.send(request); } diff --git a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/PublicRecordApiControllerTest.java b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/PublicRecordApiControllerTest.java index 6841a4c9704..f471c33e62c 100644 --- a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/PublicRecordApiControllerTest.java +++ b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/PublicRecordApiControllerTest.java @@ -8,7 +8,7 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.junit.Before; import org.junit.Test; From 8c3d30f2a56d960f75aeb673137a41cf76731d49 Mon Sep 17 00:00:00 2001 From: Camelia Dumitru Date: Mon, 15 Jun 2026 19:23:47 +0100 Subject: [PATCH 53/77] Fixes for null at runtime for source entity utils --- .../adapter/impl/MapperFacadeFactory.java | 6 +-- .../adapter/v3/impl/MapperFacadeFactory.java | 49 ++++++++++++++----- .../src/main/resources/orcid-core-context.xml | 2 - .../resources/orcid-core-context-spam.xml | 2 - 4 files changed, 38 insertions(+), 21 deletions(-) diff --git a/orcid-core/src/main/java/org/orcid/core/adapter/impl/MapperFacadeFactory.java b/orcid-core/src/main/java/org/orcid/core/adapter/impl/MapperFacadeFactory.java index fb82c94c6f0..403a8e44530 100644 --- a/orcid-core/src/main/java/org/orcid/core/adapter/impl/MapperFacadeFactory.java +++ b/orcid-core/src/main/java/org/orcid/core/adapter/impl/MapperFacadeFactory.java @@ -150,13 +150,9 @@ public class MapperFacadeFactory implements FactoryBean { @Resource private IdentityProviderManager identityProviderManager; - @Resource + @Resource(name = "encryptionManager") private EncryptionManager encryptionManager; - public void setEncryptionManager(EncryptionManager encryptionManager) { - this.encryptionManager = encryptionManager; - } - @Resource private WorkContributorRoleConverter workContributorsRoleConverter; diff --git a/orcid-core/src/main/java/org/orcid/core/adapter/v3/impl/MapperFacadeFactory.java b/orcid-core/src/main/java/org/orcid/core/adapter/v3/impl/MapperFacadeFactory.java index 92aa4b518a4..40ef36a92cd 100644 --- a/orcid-core/src/main/java/org/orcid/core/adapter/v3/impl/MapperFacadeFactory.java +++ b/orcid-core/src/main/java/org/orcid/core/adapter/v3/impl/MapperFacadeFactory.java @@ -50,6 +50,8 @@ import org.orcid.jaxb.model.v3.release.common.OrganizationAddress; import org.orcid.jaxb.model.v3.release.common.PublicationDate; import org.orcid.jaxb.model.v3.release.common.Source; +import org.orcid.jaxb.model.v3.release.common.SourceClientId; +import org.orcid.jaxb.model.v3.release.common.SourceOrcid; import org.orcid.jaxb.model.v3.release.common.Title; import org.orcid.jaxb.model.v3.release.common.Year; import org.orcid.jaxb.model.v3.release.groupid.GroupIdRecord; @@ -169,13 +171,9 @@ public class MapperFacadeFactory implements FactoryBean { @Resource private IdentityProviderManager identityProviderManager; - @Resource + @Resource(name = "encryptionManager") private EncryptionManager encryptionManager; - public void setEncryptionManager(EncryptionManager encryptionManager) { - this.encryptionManager = encryptionManager; - } - @Resource(name = "PIDNormalizationService") private PIDNormalizationService norm; @@ -191,7 +189,7 @@ public void setEncryptionManager(EncryptionManager encryptionManager) { @Resource private FundingContributorRoleConverter fundingContributorsRoleConverter; - @Resource + @Resource(name = "sourceEntityUtils") private SourceEntityUtils sourceEntityUtils; @Resource @@ -387,19 +385,46 @@ private class SourceMapper extends CustomMapper b, SourceAware a, MappingContext context) { + if (b == null || a == null) { + return; + } + + Source source = null; if (context != null && context.getProperty(SourceEntityUtils.SOURCE_MAP) != null) { // The source map is set in the context, so we can use it to set the source. Map sourceMap = (Map) context.getProperty(SourceEntityUtils.SOURCE_MAP); - Source source = sourceMap.get(sourceEntityUtils.getSourceKey(b)); - a.setSource(source); - } else { - // We have to manually build the source elements - Source source = sourceEntityUtils.extractSourceFromEntityComplete(b); - a.setSource(source); + source = sourceMap.get(SourceEntityUtils.getSourceKey(b)); + } + + if (source == null) { + // Fall back to direct extraction when no source map is available. + if (sourceEntityUtils != null) { + source = sourceEntityUtils.extractSourceFromEntityComplete(b); + } else { + source = extractSourceFromEntityWithoutUtils(b); + } } + + a.setSource(source); } } + private Source extractSourceFromEntityWithoutUtils(SourceAwareEntity entity) { + Source source = new Source(); + + if (StringUtils.isNotBlank(entity.getSourceId())) { + source.setSourceOrcid(new SourceOrcid(entity.getSourceId())); + } + if (StringUtils.isNotBlank(entity.getClientSourceId())) { + source.setSourceClientId(new SourceClientId(entity.getClientSourceId())); + } + if (StringUtils.isNotBlank(entity.getAssertionOriginClientSourceId())) { + source.setAssertionOriginClientId(new SourceClientId(entity.getAssertionOriginClientSourceId())); + } + + return source; + } + public MapperFacade getExternalIdentifierMapperFacade() { MapperFactory mapperFactory = new DefaultMapperFactory.Builder().build(); mapperFactory.getConverterFactory().registerConverter("visibilityConverter", new VisibilityConverter()); diff --git a/orcid-core/src/main/resources/orcid-core-context.xml b/orcid-core/src/main/resources/orcid-core-context.xml index 4c4847c6586..f86fe815f4c 100644 --- a/orcid-core/src/main/resources/orcid-core-context.xml +++ b/orcid-core/src/main/resources/orcid-core-context.xml @@ -824,7 +824,6 @@ - @@ -907,7 +906,6 @@ - diff --git a/orcid-web/src/main/resources/orcid-core-context-spam.xml b/orcid-web/src/main/resources/orcid-core-context-spam.xml index 97bd4a9ea68..52d59220fb5 100644 --- a/orcid-web/src/main/resources/orcid-core-context-spam.xml +++ b/orcid-web/src/main/resources/orcid-core-context-spam.xml @@ -799,7 +799,6 @@ - @@ -882,7 +881,6 @@ - From fe28349e534d12d5e3266d1e099e9b6c63cef04d Mon Sep 17 00:00:00 2001 From: Camelia Dumitru Date: Tue, 16 Jun 2026 15:10:22 +0100 Subject: [PATCH 54/77] fixed the ClassCastException --- .../java/org/orcid/persistence/dao/impl/MiscDaoImpl.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/MiscDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/MiscDaoImpl.java index b5648b6c959..3dd7946e618 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/MiscDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/MiscDaoImpl.java @@ -1,5 +1,6 @@ package org.orcid.persistence.dao.impl; +import java.time.Instant; import java.util.Date; import jakarta.annotation.Resource; @@ -23,7 +24,13 @@ public void setEntityManager(EntityManager entityManager) { @Override public Date retrieveDatabaseDatetime() { Query query = entityManager.createNativeQuery("SELECT now()"); - return (Date) query.getSingleResult(); + Object result = query.getSingleResult(); + + // Handle both java.time.Instant and java.util.Date returns + if (result instanceof Instant) { + return Date.from((Instant) result); + } + return (Date) result; } } From d3eb59626ad548b16502a422ad13c112bf42ca44 Mon Sep 17 00:00:00 2001 From: Camelia Dumitru Date: Wed, 17 Jun 2026 12:51:32 +0100 Subject: [PATCH 55/77] Added the lazy load for one to many queries that clogged the postgres tmp log --- .../orcid/persistence/dao/impl/GenericDaoImpl.java | 3 +++ .../orcid/persistence/dao/impl/ProfileDaoImpl.java | 3 +++ .../jpa/entities/ClientDetailsEntity.java | 12 ++++++------ 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/GenericDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/GenericDaoImpl.java index 8f91ea9f6ec..1aea45ad3a0 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/GenericDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/GenericDaoImpl.java @@ -34,12 +34,14 @@ public GenericDaoImpl(Class clazz) { } @Override + @Transactional(readOnly = true, propagation = Propagation.REQUIRED) public E find(I id) { return entityManager.find(clazz, id); } @SuppressWarnings("unchecked") @Override + @Transactional(readOnly = true, propagation = Propagation.REQUIRED) public List findLastModifiedBefore(Date latestDate, int maxResults) { Query query = entityManager.createQuery("from " + clazz.getSimpleName() + " where lastModified <= :latestDate"); query.setParameter("latestDate", latestDate); @@ -49,6 +51,7 @@ public List findLastModifiedBefore(Date latestDate, int maxResults) { @SuppressWarnings("unchecked") @Override + @Transactional(readOnly = true, propagation = Propagation.REQUIRED) public List getAll() { return entityManager.createQuery("from " + clazz.getSimpleName()).getResultList(); } diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileDaoImpl.java index d9d1b910085..07635c07cf4 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileDaoImpl.java @@ -308,6 +308,7 @@ public List findOrcidsNeedingEmailMigration(int maxResults) { } @Override + @Transactional(readOnly = true, propagation = Propagation.REQUIRED) public List findProfilesThatMissedIndexing(int maxResults) { TypedQuery query = entityManager.createQuery( "from ProfileEntity where (lastModified > lastIndexedDate or lastIndexedDate is null) and indexingStatus not in ('PENDING', 'IGNORE') order by lastModified", @@ -754,6 +755,7 @@ public List getProfileEvents(String orcid, List query = entityManager.createQuery("FROM ProfileEntity where orcid = :orcid", ProfileEntity.class); query.setParameter("orcid", orcid); @@ -761,6 +763,7 @@ public ProfileEntity getLockedReason(String orcid) { } @Override + @Transactional(readOnly = true, propagation = Propagation.REQUIRED) public List findByOrcidType(String orcidType) { TypedQuery query = entityManager.createQuery("FROM ProfileEntity where orcidType = :orcidType", ProfileEntity.class); query.setParameter("orcidType", orcidType); diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ClientDetailsEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ClientDetailsEntity.java index 4b60eb5f042..0c7a728e6b2 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ClientDetailsEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ClientDetailsEntity.java @@ -131,7 +131,7 @@ public void setClientWebsite(String clientWebsite) { this.clientWebsite = clientWebsite; } - @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, mappedBy = "clientId", orphanRemoval = true) + @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY, mappedBy = "clientId", orphanRemoval = true) public Set getClientScopes() { return clientScopes; } @@ -140,7 +140,7 @@ public void setClientScopes(Set clientScopes) { this.clientScopes = clientScopes; } - @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, mappedBy = "clientId", orphanRemoval = true) + @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY, mappedBy = "clientId", orphanRemoval = true) public Set getClientResourceIds() { return clientResourceIds; } @@ -149,7 +149,7 @@ public void setClientResourceIds(Set clientResourceIds) this.clientResourceIds = clientResourceIds; } - @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, mappedBy = "clientId", orphanRemoval = true) + @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY, mappedBy = "clientId", orphanRemoval = true) public Set getClientAuthorizedGrantTypes() { return clientAuthorizedGrantTypes; } @@ -158,7 +158,7 @@ public void setClientAuthorizedGrantTypes(Set c this.clientAuthorizedGrantTypes = clientAuthorizedGrantTypes; } - @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, mappedBy = "clientId", orphanRemoval = true) + @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY, mappedBy = "clientId", orphanRemoval = true) @SortNatural public SortedSet getClientRegisteredRedirectUris() { return clientRegisteredRedirectUris; @@ -168,7 +168,7 @@ public void setClientRegisteredRedirectUris(SortedSet c this.clientRegisteredRedirectUris = clientRegisteredRedirectUris; } - @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, mappedBy = "clientId", orphanRemoval = true) + @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY, mappedBy = "clientId", orphanRemoval = true) public List getClientGrantedAuthorities() { return clientGrantedAuthorities; } @@ -235,7 +235,7 @@ public String getClientSecret() { return getDecryptedClientSecret(); } - @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, mappedBy = "clientId", orphanRemoval = true) + @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY, mappedBy = "clientId", orphanRemoval = true) @SortNatural public Set getClientSecrets() { return clientSecrets; From 2aa6661a080f0325f48b35f9679f8ed30cd08b62 Mon Sep 17 00:00:00 2001 From: Camelia Dumitru Date: Wed, 17 Jun 2026 13:15:33 +0100 Subject: [PATCH 56/77] More lazy loading transactional fixes for reads --- .../orcid/persistence/dao/impl/IdentifierTypeDaoImpl.java | 2 ++ .../org/orcid/persistence/dao/impl/NotificationDaoImpl.java | 5 +++++ .../persistence/dao/impl/OrgAffiliationRelationDaoImpl.java | 2 ++ .../main/java/org/orcid/persistence/dao/impl/OrgDaoImpl.java | 1 + .../orcid/persistence/dao/impl/OrgDisambiguatedDaoImpl.java | 2 ++ .../org/orcid/persistence/dao/impl/PeerReviewDaoImpl.java | 2 ++ .../java/org/orcid/persistence/dao/impl/ProfileDaoImpl.java | 1 + .../orcid/persistence/dao/impl/ProfileFundingDaoImpl.java | 2 ++ .../orcid/persistence/dao/impl/ResearchResourceDaoImpl.java | 2 ++ .../persistence/jpa/entities/EmailDomainToOrgIdEntity.java | 4 ++-- .../orcid/persistence/jpa/entities/IdentifierTypeEntity.java | 2 +- .../persistence/jpa/entities/IdentityProviderNameEntity.java | 2 +- .../persistence/jpa/entities/NotificationAddItemsEntity.java | 2 +- .../persistence/jpa/entities/NotificationAmendedEntity.java | 2 +- .../persistence/jpa/entities/NotificationWorkEntity.java | 4 ++-- .../jpa/entities/OrgAffiliationRelationEntity.java | 2 +- .../persistence/jpa/entities/OrgDisambiguatedEntity.java | 4 ++-- .../java/org/orcid/persistence/jpa/entities/OrgEntity.java | 2 +- .../org/orcid/persistence/jpa/entities/PeerReviewEntity.java | 2 +- .../org/orcid/persistence/jpa/entities/ProfileEntity.java | 2 +- .../orcid/persistence/jpa/entities/ProfileFundingEntity.java | 2 +- .../persistence/jpa/entities/ResearchResourceEntity.java | 4 ++-- .../persistence/jpa/entities/ResearchResourceItemEntity.java | 2 +- 23 files changed, 37 insertions(+), 18 deletions(-) diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/IdentifierTypeDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/IdentifierTypeDaoImpl.java index d32628ec412..0bacded462c 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/IdentifierTypeDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/IdentifierTypeDaoImpl.java @@ -6,8 +6,10 @@ import org.orcid.persistence.dao.IdentifierTypeDao; import org.orcid.persistence.jpa.entities.IdentifierTypeEntity; +import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; +@Transactional(readOnly = true, propagation = Propagation.REQUIRED) public class IdentifierTypeDaoImpl extends GenericDaoImpl implements IdentifierTypeDao { public IdentifierTypeDaoImpl() { diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/NotificationDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/NotificationDaoImpl.java index f855927576c..c3b8ed0382a 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/NotificationDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/NotificationDaoImpl.java @@ -17,6 +17,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Value; +import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; /** @@ -24,6 +25,7 @@ * @author Will Simpson * */ +@Transactional(readOnly = true, propagation = Propagation.REQUIRED) public class NotificationDaoImpl extends GenericDaoImpl implements NotificationDao { private static final String NOTIFICATION_TYPE_PERMISSION = "PERMISSION"; @@ -297,6 +299,7 @@ public List findUnsentTips(int batchSize) { } @Override + @Transactional public void flagAsSendable(String orcid, Long id) { Query query = entityManager.createQuery("update NotificationEntity n set n.sendable=true where n.orcid = :orcid and n.id = :id"); query.setParameter("orcid", orcid); @@ -305,6 +308,7 @@ public void flagAsSendable(String orcid, Long id) { } @Override + @Transactional public void flagAsNonSendable(String orcid, Long id) { Query query = entityManager.createQuery("update NotificationEntity n set n.sendable=false where n.orcid = :orcid and n.id = :id"); query.setParameter("orcid", orcid); @@ -313,6 +317,7 @@ public void flagAsNonSendable(String orcid, Long id) { } @Override + @Transactional public void updateRetryCount(String orcid, Long id, Long retryCount) { Query query = entityManager.createQuery("update NotificationEntity n set n.retryCount = :count where n.orcid = :orcid and n.id = :id"); query.setParameter("count", retryCount); diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgAffiliationRelationDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgAffiliationRelationDaoImpl.java index c6eb92841ce..6a262a0a8d5 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgAffiliationRelationDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgAffiliationRelationDaoImpl.java @@ -20,8 +20,10 @@ import org.orcid.persistence.jpa.entities.OrgAffiliationRelationEntity; import org.springframework.beans.factory.annotation.Value; import org.springframework.cache.annotation.Cacheable; +import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; +@Transactional(readOnly = true, propagation = Propagation.REQUIRED) public class OrgAffiliationRelationDaoImpl extends GenericDaoImpl implements OrgAffiliationRelationDao { private static final Logger LOG = LoggerFactory.getLogger(OrgAffiliationRelationDaoImpl.class); diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgDaoImpl.java index ed597a0acdb..eda1947a987 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgDaoImpl.java @@ -18,6 +18,7 @@ * @author Will Simpson * */ +@Transactional(readOnly = true, propagation = Propagation.REQUIRED) public class OrgDaoImpl extends GenericDaoImpl implements OrgDao { public OrgDaoImpl() { diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgDisambiguatedDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgDisambiguatedDaoImpl.java index 6df2e20ac26..5d212eeb61f 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgDisambiguatedDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgDisambiguatedDaoImpl.java @@ -15,6 +15,7 @@ import org.orcid.persistence.jpa.entities.OrgDisambiguatedEntity; import org.springframework.beans.factory.annotation.Value; import org.springframework.cache.annotation.Cacheable; +import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; /** @@ -22,6 +23,7 @@ * @author Will Simpson * */ +@Transactional(readOnly = true, propagation = Propagation.REQUIRED) public class OrgDisambiguatedDaoImpl extends GenericDaoImpl implements OrgDisambiguatedDao { @Value("${org.orcid.core.orgsToGroup.query:select * from org_disambiguated where source_type='ROR'}" ) diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/PeerReviewDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/PeerReviewDaoImpl.java index 6de72669ad6..0ab0ca4aa8f 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/PeerReviewDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/PeerReviewDaoImpl.java @@ -13,8 +13,10 @@ import org.orcid.persistence.dao.PeerReviewDao; import org.orcid.persistence.jpa.entities.PeerReviewEntity; import org.springframework.cache.annotation.Cacheable; +import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; +@Transactional(readOnly = true, propagation = Propagation.REQUIRED) public class PeerReviewDaoImpl extends GenericDaoImpl implements PeerReviewDao { public PeerReviewDaoImpl() { diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileDaoImpl.java index 07635c07cf4..73eaa3da8a2 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileDaoImpl.java @@ -28,6 +28,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; +import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; public class ProfileDaoImpl extends GenericDaoImpl implements ProfileDao { diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileFundingDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileFundingDaoImpl.java index 0a55b3a53f6..8c2806b497e 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileFundingDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileFundingDaoImpl.java @@ -12,8 +12,10 @@ import org.orcid.persistence.dao.ProfileFundingDao; import org.orcid.persistence.jpa.entities.ProfileFundingEntity; import org.springframework.cache.annotation.Cacheable; +import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; +@Transactional(readOnly = true, propagation = Propagation.REQUIRED) public class ProfileFundingDaoImpl extends GenericDaoImpl implements ProfileFundingDao { public ProfileFundingDaoImpl() { diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ResearchResourceDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ResearchResourceDaoImpl.java index 63665783220..04a9c14df33 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ResearchResourceDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ResearchResourceDaoImpl.java @@ -12,8 +12,10 @@ import org.orcid.persistence.aop.UpdateProfileLastModifiedAndIndexingStatus; import org.orcid.persistence.dao.ResearchResourceDao; import org.orcid.persistence.jpa.entities.ResearchResourceEntity; +import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; +@Transactional(readOnly = true, propagation = Propagation.REQUIRED) public class ResearchResourceDaoImpl extends GenericDaoImpl implements ResearchResourceDao{ public ResearchResourceDaoImpl() { diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/EmailDomainToOrgIdEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/EmailDomainToOrgIdEntity.java index c012486f7d3..3fa3a3f8423 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/EmailDomainToOrgIdEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/EmailDomainToOrgIdEntity.java @@ -44,7 +44,7 @@ public void setId(Long id) { this.id = id; } - @ManyToOne(fetch = FetchType.EAGER) + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "email_domian_id") public EmailDomainEntity getEmailDomian() { return emailDomian; @@ -54,7 +54,7 @@ public void setEmailDomian(EmailDomainEntity emailDomian) { this.emailDomian = emailDomian; } - @ManyToOne(fetch = FetchType.EAGER) + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "org_disambiguated_id") public OrgDisambiguatedEntity getOrgDisambiguated() { return orgDisambiguated; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/IdentifierTypeEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/IdentifierTypeEntity.java index 39c3cc302d0..a77cd7c1e58 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/IdentifierTypeEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/IdentifierTypeEntity.java @@ -77,7 +77,7 @@ public void setId(Long id) { this.id = id; } - @ManyToOne(fetch = FetchType.EAGER) + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "client_source_id") public ClientDetailsEntity getSourceClient() { return sourceClient; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/IdentityProviderNameEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/IdentityProviderNameEntity.java index f5270c3d527..3890bbdeee5 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/IdentityProviderNameEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/IdentityProviderNameEntity.java @@ -37,7 +37,7 @@ public void setId(Long id) { this.id = id; } - @ManyToOne(fetch = FetchType.EAGER) + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "identity_provider_id", nullable = false) public IdentityProviderEntity getIdentityProvider() { return identityProvider; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationAddItemsEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationAddItemsEntity.java index 3249bb307a2..0f20dc984a8 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationAddItemsEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationAddItemsEntity.java @@ -33,7 +33,7 @@ public void setAuthorizationUrl(String authorizationUrl) { this.authorizationUrl = authorizationUrl; } - @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) + @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY) @JoinColumn(name = "notification_id") public Set getNotificationItems() { return notificationItems; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationAmendedEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationAmendedEntity.java index 2de7a12938a..afff108d913 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationAmendedEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationAmendedEntity.java @@ -34,7 +34,7 @@ public void setAmendedSection(String amendedSection) { this.amendedSection = amendedSection; } - @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) + @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY) @JoinColumn(name = "notification_id") public Set getNotificationItems() { return notificationItems; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationWorkEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationWorkEntity.java index f255798f04a..8e2132c7bba 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationWorkEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationWorkEntity.java @@ -32,7 +32,7 @@ public NotificationWorkEntityPk getId() { } @Id - @ManyToOne(cascade = { CascadeType.REFRESH }, fetch = FetchType.EAGER) + @ManyToOne(cascade = { CascadeType.REFRESH }, fetch = FetchType.LAZY) @JoinColumn(name = "notification_id", nullable = false) public NotificationEntity getNotification() { return notification; @@ -46,7 +46,7 @@ public void setNotification(NotificationEntity notification) { * @return the work */ @Id - @ManyToOne(fetch = FetchType.EAGER) + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "work_id", nullable = false) public WorkEntity getWork() { return work; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrgAffiliationRelationEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrgAffiliationRelationEntity.java index b5744997173..3fc2aa672fa 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrgAffiliationRelationEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrgAffiliationRelationEntity.java @@ -51,7 +51,7 @@ public void setId(Long id) { this.id = id; } - @ManyToOne(fetch = FetchType.EAGER, cascade = { CascadeType.DETACH, CascadeType.REFRESH }) + @ManyToOne(fetch = FetchType.LAZY, cascade = { CascadeType.DETACH, CascadeType.REFRESH }) @JoinColumn(name = "org_id", nullable = false) public OrgEntity getOrg() { return org; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrgDisambiguatedEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrgDisambiguatedEntity.java index 98b29707a4d..df8b14e6ef5 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrgDisambiguatedEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrgDisambiguatedEntity.java @@ -184,7 +184,7 @@ public void setPopularity(Integer popularity) { this.popularity = popularity; } - @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, mappedBy = "orgDisambiguated") + @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY, mappedBy = "orgDisambiguated") @Fetch(FetchMode.SUBSELECT) public Set getExternalIdentifiers() { return externalIdentifiers; @@ -203,7 +203,7 @@ public void setOrgType(String orgType) { this.orgType = orgType; } - @OneToOne(fetch = FetchType.EAGER) + @OneToOne(fetch = FetchType.LAZY) @JoinColumn(name = "id", referencedColumnName = "org_disambiguated_id") public MemberChosenOrgDisambiguatedEntity getMemberChosenOrgDisambiguatedEntity() { return memberChosenOrgDisambiguatedEntity; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrgEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrgEntity.java index ef555612b98..f8dca0c380e 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrgEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrgEntity.java @@ -123,7 +123,7 @@ public void setSource(SourceEntity source) { this.source = source; } - @ManyToOne(fetch = FetchType.EAGER) + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "org_disambiguated_id") public OrgDisambiguatedEntity getOrgDisambiguated() { return orgDisambiguated; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/PeerReviewEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/PeerReviewEntity.java index 1bbb69920f3..b5afcf74101 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/PeerReviewEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/PeerReviewEntity.java @@ -58,7 +58,7 @@ public void setRole(String role) { this.role = role; } - @ManyToOne(fetch = FetchType.EAGER, cascade = { CascadeType.DETACH, CascadeType.REFRESH }) + @ManyToOne(fetch = FetchType.LAZY, cascade = { CascadeType.DETACH, CascadeType.REFRESH }) @JoinColumn(name = "org_id") public OrgEntity getOrg() { return org; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ProfileEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ProfileEntity.java index 31167279957..1b6c2e47aad 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ProfileEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ProfileEntity.java @@ -502,7 +502,7 @@ public void setDeactivationDate(Date deactivationDate) { /** * @return the primary profile for this deprecated account */ - @ManyToOne(fetch = FetchType.EAGER) + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "primary_record") public ProfileEntity getPrimaryRecord() { return this.primaryRecord; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ProfileFundingEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ProfileFundingEntity.java index ee787583dcb..6532fffbe65 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ProfileFundingEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ProfileFundingEntity.java @@ -61,7 +61,7 @@ public void setId(Long id) { this.id = id; } - @ManyToOne(fetch = FetchType.EAGER, cascade = { CascadeType.DETACH, CascadeType.REFRESH }) + @ManyToOne(fetch = FetchType.LAZY, cascade = { CascadeType.DETACH, CascadeType.REFRESH }) @JoinColumn(name = "org_id", nullable = false) public OrgEntity getOrg() { return org; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ResearchResourceEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ResearchResourceEntity.java index b76480177ff..d1c0e280e3a 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ResearchResourceEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ResearchResourceEntity.java @@ -152,7 +152,7 @@ public void setExternalIdentifiersJson(String externalIdentifiersJson) { this.externalIdentifiersJson = externalIdentifiersJson; } - @OneToMany(mappedBy="researchResourceEntity", cascade = CascadeType.ALL,fetch=FetchType.EAGER, orphanRemoval =true ) + @OneToMany(mappedBy="researchResourceEntity", cascade = CascadeType.ALL,fetch=FetchType.LAZY, orphanRemoval =true ) @OrderColumn(name="item_index") public List getResourceItems() { return resourceItems; @@ -162,7 +162,7 @@ public void setResourceItems(List resourceItems) { this.resourceItems = resourceItems; } - @OneToMany(fetch = FetchType.EAGER) + @OneToMany(fetch = FetchType.LAZY) @JoinTable(name = "research_resource_org", joinColumns = { @JoinColumn(name = "research_resource_id", referencedColumnName="id") }, inverseJoinColumns = { @JoinColumn(name = "org_id", referencedColumnName="id") }) diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ResearchResourceItemEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ResearchResourceItemEntity.java index baa309cdc28..eaf691b0d35 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ResearchResourceItemEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ResearchResourceItemEntity.java @@ -98,7 +98,7 @@ public void setItemOrder(int itemOrder) { this.itemOrder = itemOrder; } - @OneToMany(fetch = FetchType.EAGER) + @OneToMany(fetch = FetchType.LAZY) @JoinTable(name = "research_resource_item_org", joinColumns = { @JoinColumn(name = "research_resource_item_id") }, inverseJoinColumns = { @JoinColumn(name = "org_id") }) From de14c9c2d560f7ca5c20e658e555e7b7c507a019 Mon Sep 17 00:00:00 2001 From: Camelia Dumitru Date: Wed, 17 Jun 2026 16:04:48 +0100 Subject: [PATCH 57/77] affiliation/funding/peer-review org links to eager the new lazy OrgEntity association is being accessed during Orika conversion after DAO return, this is a targeted rollback of only the affiliation/funding/peer-review org links to eager --- .../persistence/jpa/entities/OrgAffiliationRelationEntity.java | 2 +- .../org/orcid/persistence/jpa/entities/PeerReviewEntity.java | 2 +- .../orcid/persistence/jpa/entities/ProfileFundingEntity.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrgAffiliationRelationEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrgAffiliationRelationEntity.java index 3fc2aa672fa..b5744997173 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrgAffiliationRelationEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrgAffiliationRelationEntity.java @@ -51,7 +51,7 @@ public void setId(Long id) { this.id = id; } - @ManyToOne(fetch = FetchType.LAZY, cascade = { CascadeType.DETACH, CascadeType.REFRESH }) + @ManyToOne(fetch = FetchType.EAGER, cascade = { CascadeType.DETACH, CascadeType.REFRESH }) @JoinColumn(name = "org_id", nullable = false) public OrgEntity getOrg() { return org; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/PeerReviewEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/PeerReviewEntity.java index b5afcf74101..1bbb69920f3 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/PeerReviewEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/PeerReviewEntity.java @@ -58,7 +58,7 @@ public void setRole(String role) { this.role = role; } - @ManyToOne(fetch = FetchType.LAZY, cascade = { CascadeType.DETACH, CascadeType.REFRESH }) + @ManyToOne(fetch = FetchType.EAGER, cascade = { CascadeType.DETACH, CascadeType.REFRESH }) @JoinColumn(name = "org_id") public OrgEntity getOrg() { return org; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ProfileFundingEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ProfileFundingEntity.java index 6532fffbe65..ee787583dcb 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ProfileFundingEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ProfileFundingEntity.java @@ -61,7 +61,7 @@ public void setId(Long id) { this.id = id; } - @ManyToOne(fetch = FetchType.LAZY, cascade = { CascadeType.DETACH, CascadeType.REFRESH }) + @ManyToOne(fetch = FetchType.EAGER, cascade = { CascadeType.DETACH, CascadeType.REFRESH }) @JoinColumn(name = "org_id", nullable = false) public OrgEntity getOrg() { return org; From 34ba2e96ba741e36d43229fa9ad3645e6fed96bc Mon Sep 17 00:00:00 2001 From: Camelia Dumitru Date: Wed, 17 Jun 2026 17:14:15 +0100 Subject: [PATCH 58/77] Reverted some lay fecth as they are use outside session --- .../orcid/persistence/jpa/entities/IdentifierTypeEntity.java | 2 +- .../persistence/jpa/entities/NotificationAddItemsEntity.java | 2 +- .../persistence/jpa/entities/NotificationAmendedEntity.java | 2 +- .../main/java/org/orcid/persistence/jpa/entities/OrgEntity.java | 2 +- .../java/org/orcid/persistence/jpa/entities/ProfileEntity.java | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/IdentifierTypeEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/IdentifierTypeEntity.java index a77cd7c1e58..39c3cc302d0 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/IdentifierTypeEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/IdentifierTypeEntity.java @@ -77,7 +77,7 @@ public void setId(Long id) { this.id = id; } - @ManyToOne(fetch = FetchType.LAZY) + @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "client_source_id") public ClientDetailsEntity getSourceClient() { return sourceClient; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationAddItemsEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationAddItemsEntity.java index 0f20dc984a8..3249bb307a2 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationAddItemsEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationAddItemsEntity.java @@ -33,7 +33,7 @@ public void setAuthorizationUrl(String authorizationUrl) { this.authorizationUrl = authorizationUrl; } - @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY) + @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) @JoinColumn(name = "notification_id") public Set getNotificationItems() { return notificationItems; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationAmendedEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationAmendedEntity.java index afff108d913..2de7a12938a 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationAmendedEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationAmendedEntity.java @@ -34,7 +34,7 @@ public void setAmendedSection(String amendedSection) { this.amendedSection = amendedSection; } - @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY) + @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) @JoinColumn(name = "notification_id") public Set getNotificationItems() { return notificationItems; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrgEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrgEntity.java index f8dca0c380e..ef555612b98 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrgEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrgEntity.java @@ -123,7 +123,7 @@ public void setSource(SourceEntity source) { this.source = source; } - @ManyToOne(fetch = FetchType.LAZY) + @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "org_disambiguated_id") public OrgDisambiguatedEntity getOrgDisambiguated() { return orgDisambiguated; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ProfileEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ProfileEntity.java index 1b6c2e47aad..31167279957 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ProfileEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ProfileEntity.java @@ -502,7 +502,7 @@ public void setDeactivationDate(Date deactivationDate) { /** * @return the primary profile for this deprecated account */ - @ManyToOne(fetch = FetchType.LAZY) + @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "primary_record") public ProfileEntity getPrimaryRecord() { return this.primaryRecord; From 7cd77371f7ed5648a0375b01c818f3248ba25b22 Mon Sep 17 00:00:00 2001 From: Camelia Dumitru Date: Wed, 17 Jun 2026 18:29:03 +0100 Subject: [PATCH 59/77] read-only transaction with propagation --- .../core/manager/read_only/impl/ClientManagerReadOnlyImpl.java | 3 +++ .../manager/v3/read_only/impl/AddressManagerReadOnlyImpl.java | 3 +++ .../v3/read_only/impl/AffiliationsManagerReadOnlyImpl.java | 3 +++ .../v3/read_only/impl/ClientDetailsManagerReadOnlyImpl.java | 3 +++ .../manager/v3/read_only/impl/ClientManagerReadOnlyImpl.java | 3 +++ .../manager/v3/read_only/impl/EmailManagerReadOnlyImpl.java | 3 +++ .../read_only/impl/ExternalIdentifierManagerReadOnlyImpl.java | 3 +++ .../v3/read_only/impl/GroupIdRecordManagerReadOnlyImpl.java | 3 +++ .../v3/read_only/impl/OtherNameManagerReadOnlyImpl.java | 3 +++ .../v3/read_only/impl/PeerReviewManagerReadOnlyImpl.java | 3 +++ .../v3/read_only/impl/ProfileFundingManagerReadOnlyImpl.java | 3 +++ .../v3/read_only/impl/ProfileKeywordManagerReadOnlyImpl.java | 3 +++ .../v3/read_only/impl/RecordNameManagerReadOnlyImpl.java | 3 +++ .../v3/read_only/impl/ResearchResourceManagerReadOnlyImpl.java | 2 ++ .../v3/read_only/impl/ResearcherUrlManagerReadOnlyImpl.java | 3 +++ .../manager/v3/read_only/impl/SpamManagerReadOnlyImpl.java | 3 +++ .../manager/v3/read_only/impl/WorkManagerReadOnlyImpl.java | 3 +++ 17 files changed, 50 insertions(+) diff --git a/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/ClientManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/ClientManagerReadOnlyImpl.java index 193105b5e69..eb57d4232c7 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/ClientManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/ClientManagerReadOnlyImpl.java @@ -12,7 +12,10 @@ import org.orcid.jaxb.model.client_v2.ClientSummary; import org.orcid.persistence.dao.ClientDetailsDao; import org.orcid.persistence.jpa.entities.ClientDetailsEntity; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +@Transactional(readOnly = true, propagation = Propagation.REQUIRED) public class ClientManagerReadOnlyImpl implements ClientManagerReadOnly { @Resource diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/AddressManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/AddressManagerReadOnlyImpl.java index 6beb4479d30..e206c37b419 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/AddressManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/AddressManagerReadOnlyImpl.java @@ -11,7 +11,10 @@ import org.orcid.persistence.dao.AddressDao; import org.orcid.persistence.jpa.entities.AddressEntity; import org.springframework.cache.annotation.Cacheable; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +@Transactional(readOnly = true, propagation = Propagation.REQUIRED) public class AddressManagerReadOnlyImpl extends ManagerReadOnlyBaseImpl implements AddressManagerReadOnly { @Resource diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/AffiliationsManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/AffiliationsManagerReadOnlyImpl.java index 91e662ed677..609fa0a7299 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/AffiliationsManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/AffiliationsManagerReadOnlyImpl.java @@ -43,9 +43,12 @@ import org.orcid.jaxb.model.v3.release.record.summary.QualificationSummary; import org.orcid.jaxb.model.v3.release.record.summary.ServiceSummary; import org.orcid.persistence.dao.OrgAffiliationRelationDao; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; import org.orcid.persistence.jpa.entities.OrgAffiliationRelationEntity; import org.orcid.pojo.ajaxForm.PojoUtil; +@Transactional(readOnly = true, propagation = Propagation.REQUIRED) public class AffiliationsManagerReadOnlyImpl extends ManagerReadOnlyBaseImpl implements AffiliationsManagerReadOnly { @Resource(name = "jpaJaxbDistinctionAdapterV3") diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ClientDetailsManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ClientDetailsManagerReadOnlyImpl.java index fad3ab079cb..5aa59ac2759 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ClientDetailsManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ClientDetailsManagerReadOnlyImpl.java @@ -19,7 +19,10 @@ import org.orcid.pojo.ajaxForm.PojoUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +@Transactional(readOnly = true, propagation = Propagation.REQUIRED) public class ClientDetailsManagerReadOnlyImpl implements ClientDetailsManagerReadOnly { private static final Logger LOGGER = LoggerFactory.getLogger(ClientDetailsManagerReadOnlyImpl.class); diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ClientManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ClientManagerReadOnlyImpl.java index 314cf0f309f..e2142173315 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ClientManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ClientManagerReadOnlyImpl.java @@ -12,7 +12,10 @@ import org.orcid.jaxb.model.v3.release.client.ClientSummary; import org.orcid.persistence.dao.ClientDetailsDao; import org.orcid.persistence.jpa.entities.ClientDetailsEntity; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +@Transactional(readOnly = true, propagation = Propagation.REQUIRED) public class ClientManagerReadOnlyImpl implements ClientManagerReadOnly { @Resource(name = "jpaJaxbClientAdapterV3") diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/EmailManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/EmailManagerReadOnlyImpl.java index 518fe985f5d..770a14e7994 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/EmailManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/EmailManagerReadOnlyImpl.java @@ -28,12 +28,15 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.cache.annotation.Cacheable; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; /** * * @author Will Simpson * */ +@Transactional(readOnly = true, propagation = Propagation.REQUIRED) public class EmailManagerReadOnlyImpl extends ManagerReadOnlyBaseImpl implements EmailManagerReadOnly { private static final Logger LOGGER = LoggerFactory.getLogger(EmailManagerReadOnlyImpl.class); diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ExternalIdentifierManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ExternalIdentifierManagerReadOnlyImpl.java index ccc7ccc343c..4b7dc9b5e89 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ExternalIdentifierManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ExternalIdentifierManagerReadOnlyImpl.java @@ -10,7 +10,10 @@ import org.orcid.jaxb.model.v3.release.record.PersonExternalIdentifiers; import org.orcid.persistence.dao.ExternalIdentifierDao; import org.orcid.persistence.jpa.entities.ExternalIdentifierEntity; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +@Transactional(readOnly = true, propagation = Propagation.REQUIRED) public class ExternalIdentifierManagerReadOnlyImpl extends ManagerReadOnlyBaseImpl implements ExternalIdentifierManagerReadOnly { @Resource(name = "jpaJaxbExternalIdentifierAdapterV3") diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/GroupIdRecordManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/GroupIdRecordManagerReadOnlyImpl.java index 2644484dca5..aee7f670397 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/GroupIdRecordManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/GroupIdRecordManagerReadOnlyImpl.java @@ -14,7 +14,10 @@ import org.orcid.jaxb.model.v3.release.groupid.GroupIdRecords; import org.orcid.persistence.dao.GroupIdRecordDao; import org.orcid.persistence.jpa.entities.GroupIdRecordEntity; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +@Transactional(readOnly = true, propagation = Propagation.REQUIRED) public class GroupIdRecordManagerReadOnlyImpl implements GroupIdRecordManagerReadOnly { @Resource(name = "jpaJaxbGroupIdRecordAdapterV3") diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/OtherNameManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/OtherNameManagerReadOnlyImpl.java index a91e0ed1c05..3085279efcd 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/OtherNameManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/OtherNameManagerReadOnlyImpl.java @@ -10,7 +10,10 @@ import org.orcid.jaxb.model.v3.release.record.OtherNames; import org.orcid.persistence.dao.OtherNameDao; import org.orcid.persistence.jpa.entities.OtherNameEntity; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +@Transactional(readOnly = true, propagation = Propagation.REQUIRED) public class OtherNameManagerReadOnlyImpl extends ManagerReadOnlyBaseImpl implements OtherNameManagerReadOnly { @Resource(name = "jpaJaxbOtherNameAdapterV3") diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/PeerReviewManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/PeerReviewManagerReadOnlyImpl.java index 7305435a9c4..48538717dee 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/PeerReviewManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/PeerReviewManagerReadOnlyImpl.java @@ -31,7 +31,10 @@ import org.orcid.pojo.PeerReviewMinimizedSummary; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +@Transactional(readOnly = true, propagation = Propagation.REQUIRED) public class PeerReviewManagerReadOnlyImpl extends ManagerReadOnlyBaseImpl implements PeerReviewManagerReadOnly { private static final Logger LOGGER = LoggerFactory.getLogger(PeerReviewManagerReadOnlyImpl.class); diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ProfileFundingManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ProfileFundingManagerReadOnlyImpl.java index 630936fc4d9..93625af681a 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ProfileFundingManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ProfileFundingManagerReadOnlyImpl.java @@ -21,7 +21,10 @@ import org.orcid.persistence.dao.ProfileFundingDao; import org.orcid.persistence.jpa.entities.ProfileFundingEntity; import org.orcid.pojo.ajaxForm.PojoUtil; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +@Transactional(readOnly = true, propagation = Propagation.REQUIRED) public class ProfileFundingManagerReadOnlyImpl extends ManagerReadOnlyBaseImpl implements ProfileFundingManagerReadOnly { @Resource(name = "jpaJaxbFundingAdapterV3") diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ProfileKeywordManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ProfileKeywordManagerReadOnlyImpl.java index adda4d7e910..49c93c3ab97 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ProfileKeywordManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ProfileKeywordManagerReadOnlyImpl.java @@ -10,7 +10,10 @@ import org.orcid.jaxb.model.v3.release.record.Keywords; import org.orcid.persistence.dao.ProfileKeywordDao; import org.orcid.persistence.jpa.entities.ProfileKeywordEntity; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +@Transactional(readOnly = true, propagation = Propagation.REQUIRED) public class ProfileKeywordManagerReadOnlyImpl extends ManagerReadOnlyBaseImpl implements ProfileKeywordManagerReadOnly { @Resource(name = "jpaJaxbKeywordAdapterV3") diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/RecordNameManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/RecordNameManagerReadOnlyImpl.java index 067419fb3a6..6dafc09b68b 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/RecordNameManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/RecordNameManagerReadOnlyImpl.java @@ -13,12 +13,15 @@ import org.orcid.pojo.ajaxForm.PojoUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; /** * * @author Angel Montenegro * */ +@Transactional(readOnly = true, propagation = Propagation.REQUIRED) public class RecordNameManagerReadOnlyImpl extends ManagerReadOnlyBaseImpl implements RecordNameManagerReadOnly { private static final Logger LOGGER = LoggerFactory.getLogger(RecordNameManagerReadOnlyImpl.class); diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ResearchResourceManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ResearchResourceManagerReadOnlyImpl.java index 156c766ab08..44f880074b4 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ResearchResourceManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ResearchResourceManagerReadOnlyImpl.java @@ -38,6 +38,7 @@ public ResearchResource getResearchResource(String orcid, Long researchResourceI } @Override + @Transactional public ResearchResourceSummary getResearchResourceSummary(String orcid, Long researchResourceId) { ResearchResourceEntity e = rrDao.getResearchResource(orcid, researchResourceId); return jpaJaxbResearchResourceAdapter.toSummary(e); @@ -51,6 +52,7 @@ public List findResearchResources(String orcid) { } @Override + @Transactional public List getResearchResourceSummaryList(String orcid) { List e = rrDao.getByUser(orcid, getLastModified(orcid)); return jpaJaxbResearchResourceAdapter.toSummaries(e); diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ResearcherUrlManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ResearcherUrlManagerReadOnlyImpl.java index 0fe18c28289..1da0c548caf 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ResearcherUrlManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ResearcherUrlManagerReadOnlyImpl.java @@ -10,7 +10,10 @@ import org.orcid.jaxb.model.v3.release.record.ResearcherUrls; import org.orcid.persistence.dao.ResearcherUrlDao; import org.orcid.persistence.jpa.entities.ResearcherUrlEntity; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +@Transactional(readOnly = true, propagation = Propagation.REQUIRED) public class ResearcherUrlManagerReadOnlyImpl extends ManagerReadOnlyBaseImpl implements ResearcherUrlManagerReadOnly { @Resource(name = "jpaJaxbResearcherUrlAdapterV3") diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/SpamManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/SpamManagerReadOnlyImpl.java index ec0826855c2..3121ddc0a57 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/SpamManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/SpamManagerReadOnlyImpl.java @@ -9,7 +9,10 @@ import org.orcid.persistence.dao.SpamDao; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +@Transactional(readOnly = true, propagation = Propagation.REQUIRED) public class SpamManagerReadOnlyImpl implements SpamManagerReadOnly { private static final Logger LOGGER = LoggerFactory.getLogger(SpamManagerReadOnlyImpl.class); diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/WorkManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/WorkManagerReadOnlyImpl.java index dad6fe32ca0..1835f757310 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/WorkManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/WorkManagerReadOnlyImpl.java @@ -53,9 +53,12 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; import static org.orcid.pojo.ajaxForm.PojoUtil.getWorkForm; +@Transactional(readOnly = true, propagation = Propagation.REQUIRED) public class WorkManagerReadOnlyImpl extends ManagerReadOnlyBaseImpl implements WorkManagerReadOnly { private static final Logger LOGGER = LoggerFactory.getLogger(WorkManagerReadOnlyImpl.class); From 1743379497a038c8d4f36df2f6d307bbcc5ed630 Mon Sep 17 00:00:00 2001 From: Camelia Dumitru Date: Wed, 17 Jun 2026 19:44:10 +0100 Subject: [PATCH 60/77] Reverted the lazy loading and transactional with read-only with propagation --- .../read_only/impl/ClientManagerReadOnlyImpl.java | 3 --- .../read_only/impl/AddressManagerReadOnlyImpl.java | 3 --- .../impl/AffiliationsManagerReadOnlyImpl.java | 3 --- .../impl/ClientDetailsManagerReadOnlyImpl.java | 3 --- .../v3/read_only/impl/ClientManagerReadOnlyImpl.java | 3 --- .../v3/read_only/impl/EmailManagerReadOnlyImpl.java | 3 --- .../impl/ExternalIdentifierManagerReadOnlyImpl.java | 3 --- .../impl/GroupIdRecordManagerReadOnlyImpl.java | 3 --- .../read_only/impl/OtherNameManagerReadOnlyImpl.java | 3 --- .../impl/PeerReviewManagerReadOnlyImpl.java | 3 --- .../impl/ProfileFundingManagerReadOnlyImpl.java | 3 --- .../impl/ProfileKeywordManagerReadOnlyImpl.java | 3 --- .../impl/RecordNameManagerReadOnlyImpl.java | 3 --- .../impl/ResearchResourceManagerReadOnlyImpl.java | 2 -- .../impl/ResearcherUrlManagerReadOnlyImpl.java | 3 --- .../v3/read_only/impl/SpamManagerReadOnlyImpl.java | 3 --- .../v3/read_only/impl/WorkManagerReadOnlyImpl.java | 3 --- .../orcid/persistence/dao/impl/GenericDaoImpl.java | 3 --- .../persistence/dao/impl/IdentifierTypeDaoImpl.java | 2 -- .../persistence/dao/impl/NotificationDaoImpl.java | 5 ----- .../dao/impl/OrgAffiliationRelationDaoImpl.java | 2 -- .../org/orcid/persistence/dao/impl/OrgDaoImpl.java | 1 - .../dao/impl/OrgDisambiguatedDaoImpl.java | 2 -- .../persistence/dao/impl/PeerReviewDaoImpl.java | 2 -- .../orcid/persistence/dao/impl/ProfileDaoImpl.java | 4 ---- .../persistence/dao/impl/ProfileFundingDaoImpl.java | 2 -- .../dao/impl/ResearchResourceDaoImpl.java | 2 -- .../jpa/entities/ClientDetailsEntity.java | 12 ++++++------ .../jpa/entities/EmailDomainToOrgIdEntity.java | 4 ++-- .../jpa/entities/IdentityProviderNameEntity.java | 2 +- .../jpa/entities/NotificationWorkEntity.java | 4 ++-- .../jpa/entities/OrgDisambiguatedEntity.java | 4 ++-- .../jpa/entities/ResearchResourceEntity.java | 4 ++-- .../jpa/entities/ResearchResourceItemEntity.java | 2 +- 34 files changed, 16 insertions(+), 91 deletions(-) diff --git a/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/ClientManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/ClientManagerReadOnlyImpl.java index eb57d4232c7..193105b5e69 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/ClientManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/read_only/impl/ClientManagerReadOnlyImpl.java @@ -12,10 +12,7 @@ import org.orcid.jaxb.model.client_v2.ClientSummary; import org.orcid.persistence.dao.ClientDetailsDao; import org.orcid.persistence.jpa.entities.ClientDetailsEntity; -import org.springframework.transaction.annotation.Propagation; -import org.springframework.transaction.annotation.Transactional; -@Transactional(readOnly = true, propagation = Propagation.REQUIRED) public class ClientManagerReadOnlyImpl implements ClientManagerReadOnly { @Resource diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/AddressManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/AddressManagerReadOnlyImpl.java index e206c37b419..6beb4479d30 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/AddressManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/AddressManagerReadOnlyImpl.java @@ -11,10 +11,7 @@ import org.orcid.persistence.dao.AddressDao; import org.orcid.persistence.jpa.entities.AddressEntity; import org.springframework.cache.annotation.Cacheable; -import org.springframework.transaction.annotation.Propagation; -import org.springframework.transaction.annotation.Transactional; -@Transactional(readOnly = true, propagation = Propagation.REQUIRED) public class AddressManagerReadOnlyImpl extends ManagerReadOnlyBaseImpl implements AddressManagerReadOnly { @Resource diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/AffiliationsManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/AffiliationsManagerReadOnlyImpl.java index 609fa0a7299..91e662ed677 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/AffiliationsManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/AffiliationsManagerReadOnlyImpl.java @@ -43,12 +43,9 @@ import org.orcid.jaxb.model.v3.release.record.summary.QualificationSummary; import org.orcid.jaxb.model.v3.release.record.summary.ServiceSummary; import org.orcid.persistence.dao.OrgAffiliationRelationDao; -import org.springframework.transaction.annotation.Propagation; -import org.springframework.transaction.annotation.Transactional; import org.orcid.persistence.jpa.entities.OrgAffiliationRelationEntity; import org.orcid.pojo.ajaxForm.PojoUtil; -@Transactional(readOnly = true, propagation = Propagation.REQUIRED) public class AffiliationsManagerReadOnlyImpl extends ManagerReadOnlyBaseImpl implements AffiliationsManagerReadOnly { @Resource(name = "jpaJaxbDistinctionAdapterV3") diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ClientDetailsManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ClientDetailsManagerReadOnlyImpl.java index 5aa59ac2759..fad3ab079cb 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ClientDetailsManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ClientDetailsManagerReadOnlyImpl.java @@ -19,10 +19,7 @@ import org.orcid.pojo.ajaxForm.PojoUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.transaction.annotation.Propagation; -import org.springframework.transaction.annotation.Transactional; -@Transactional(readOnly = true, propagation = Propagation.REQUIRED) public class ClientDetailsManagerReadOnlyImpl implements ClientDetailsManagerReadOnly { private static final Logger LOGGER = LoggerFactory.getLogger(ClientDetailsManagerReadOnlyImpl.class); diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ClientManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ClientManagerReadOnlyImpl.java index e2142173315..314cf0f309f 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ClientManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ClientManagerReadOnlyImpl.java @@ -12,10 +12,7 @@ import org.orcid.jaxb.model.v3.release.client.ClientSummary; import org.orcid.persistence.dao.ClientDetailsDao; import org.orcid.persistence.jpa.entities.ClientDetailsEntity; -import org.springframework.transaction.annotation.Propagation; -import org.springframework.transaction.annotation.Transactional; -@Transactional(readOnly = true, propagation = Propagation.REQUIRED) public class ClientManagerReadOnlyImpl implements ClientManagerReadOnly { @Resource(name = "jpaJaxbClientAdapterV3") diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/EmailManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/EmailManagerReadOnlyImpl.java index 770a14e7994..518fe985f5d 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/EmailManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/EmailManagerReadOnlyImpl.java @@ -28,15 +28,12 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.cache.annotation.Cacheable; -import org.springframework.transaction.annotation.Propagation; -import org.springframework.transaction.annotation.Transactional; /** * * @author Will Simpson * */ -@Transactional(readOnly = true, propagation = Propagation.REQUIRED) public class EmailManagerReadOnlyImpl extends ManagerReadOnlyBaseImpl implements EmailManagerReadOnly { private static final Logger LOGGER = LoggerFactory.getLogger(EmailManagerReadOnlyImpl.class); diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ExternalIdentifierManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ExternalIdentifierManagerReadOnlyImpl.java index 4b7dc9b5e89..ccc7ccc343c 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ExternalIdentifierManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ExternalIdentifierManagerReadOnlyImpl.java @@ -10,10 +10,7 @@ import org.orcid.jaxb.model.v3.release.record.PersonExternalIdentifiers; import org.orcid.persistence.dao.ExternalIdentifierDao; import org.orcid.persistence.jpa.entities.ExternalIdentifierEntity; -import org.springframework.transaction.annotation.Propagation; -import org.springframework.transaction.annotation.Transactional; -@Transactional(readOnly = true, propagation = Propagation.REQUIRED) public class ExternalIdentifierManagerReadOnlyImpl extends ManagerReadOnlyBaseImpl implements ExternalIdentifierManagerReadOnly { @Resource(name = "jpaJaxbExternalIdentifierAdapterV3") diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/GroupIdRecordManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/GroupIdRecordManagerReadOnlyImpl.java index aee7f670397..2644484dca5 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/GroupIdRecordManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/GroupIdRecordManagerReadOnlyImpl.java @@ -14,10 +14,7 @@ import org.orcid.jaxb.model.v3.release.groupid.GroupIdRecords; import org.orcid.persistence.dao.GroupIdRecordDao; import org.orcid.persistence.jpa.entities.GroupIdRecordEntity; -import org.springframework.transaction.annotation.Propagation; -import org.springframework.transaction.annotation.Transactional; -@Transactional(readOnly = true, propagation = Propagation.REQUIRED) public class GroupIdRecordManagerReadOnlyImpl implements GroupIdRecordManagerReadOnly { @Resource(name = "jpaJaxbGroupIdRecordAdapterV3") diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/OtherNameManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/OtherNameManagerReadOnlyImpl.java index 3085279efcd..a91e0ed1c05 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/OtherNameManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/OtherNameManagerReadOnlyImpl.java @@ -10,10 +10,7 @@ import org.orcid.jaxb.model.v3.release.record.OtherNames; import org.orcid.persistence.dao.OtherNameDao; import org.orcid.persistence.jpa.entities.OtherNameEntity; -import org.springframework.transaction.annotation.Propagation; -import org.springframework.transaction.annotation.Transactional; -@Transactional(readOnly = true, propagation = Propagation.REQUIRED) public class OtherNameManagerReadOnlyImpl extends ManagerReadOnlyBaseImpl implements OtherNameManagerReadOnly { @Resource(name = "jpaJaxbOtherNameAdapterV3") diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/PeerReviewManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/PeerReviewManagerReadOnlyImpl.java index 48538717dee..7305435a9c4 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/PeerReviewManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/PeerReviewManagerReadOnlyImpl.java @@ -31,10 +31,7 @@ import org.orcid.pojo.PeerReviewMinimizedSummary; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.transaction.annotation.Propagation; -import org.springframework.transaction.annotation.Transactional; -@Transactional(readOnly = true, propagation = Propagation.REQUIRED) public class PeerReviewManagerReadOnlyImpl extends ManagerReadOnlyBaseImpl implements PeerReviewManagerReadOnly { private static final Logger LOGGER = LoggerFactory.getLogger(PeerReviewManagerReadOnlyImpl.class); diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ProfileFundingManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ProfileFundingManagerReadOnlyImpl.java index 93625af681a..630936fc4d9 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ProfileFundingManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ProfileFundingManagerReadOnlyImpl.java @@ -21,10 +21,7 @@ import org.orcid.persistence.dao.ProfileFundingDao; import org.orcid.persistence.jpa.entities.ProfileFundingEntity; import org.orcid.pojo.ajaxForm.PojoUtil; -import org.springframework.transaction.annotation.Propagation; -import org.springframework.transaction.annotation.Transactional; -@Transactional(readOnly = true, propagation = Propagation.REQUIRED) public class ProfileFundingManagerReadOnlyImpl extends ManagerReadOnlyBaseImpl implements ProfileFundingManagerReadOnly { @Resource(name = "jpaJaxbFundingAdapterV3") diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ProfileKeywordManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ProfileKeywordManagerReadOnlyImpl.java index 49c93c3ab97..adda4d7e910 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ProfileKeywordManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ProfileKeywordManagerReadOnlyImpl.java @@ -10,10 +10,7 @@ import org.orcid.jaxb.model.v3.release.record.Keywords; import org.orcid.persistence.dao.ProfileKeywordDao; import org.orcid.persistence.jpa.entities.ProfileKeywordEntity; -import org.springframework.transaction.annotation.Propagation; -import org.springframework.transaction.annotation.Transactional; -@Transactional(readOnly = true, propagation = Propagation.REQUIRED) public class ProfileKeywordManagerReadOnlyImpl extends ManagerReadOnlyBaseImpl implements ProfileKeywordManagerReadOnly { @Resource(name = "jpaJaxbKeywordAdapterV3") diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/RecordNameManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/RecordNameManagerReadOnlyImpl.java index 6dafc09b68b..067419fb3a6 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/RecordNameManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/RecordNameManagerReadOnlyImpl.java @@ -13,15 +13,12 @@ import org.orcid.pojo.ajaxForm.PojoUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.transaction.annotation.Propagation; -import org.springframework.transaction.annotation.Transactional; /** * * @author Angel Montenegro * */ -@Transactional(readOnly = true, propagation = Propagation.REQUIRED) public class RecordNameManagerReadOnlyImpl extends ManagerReadOnlyBaseImpl implements RecordNameManagerReadOnly { private static final Logger LOGGER = LoggerFactory.getLogger(RecordNameManagerReadOnlyImpl.class); diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ResearchResourceManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ResearchResourceManagerReadOnlyImpl.java index 44f880074b4..156c766ab08 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ResearchResourceManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ResearchResourceManagerReadOnlyImpl.java @@ -38,7 +38,6 @@ public ResearchResource getResearchResource(String orcid, Long researchResourceI } @Override - @Transactional public ResearchResourceSummary getResearchResourceSummary(String orcid, Long researchResourceId) { ResearchResourceEntity e = rrDao.getResearchResource(orcid, researchResourceId); return jpaJaxbResearchResourceAdapter.toSummary(e); @@ -52,7 +51,6 @@ public List findResearchResources(String orcid) { } @Override - @Transactional public List getResearchResourceSummaryList(String orcid) { List e = rrDao.getByUser(orcid, getLastModified(orcid)); return jpaJaxbResearchResourceAdapter.toSummaries(e); diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ResearcherUrlManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ResearcherUrlManagerReadOnlyImpl.java index 1da0c548caf..0fe18c28289 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ResearcherUrlManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ResearcherUrlManagerReadOnlyImpl.java @@ -10,10 +10,7 @@ import org.orcid.jaxb.model.v3.release.record.ResearcherUrls; import org.orcid.persistence.dao.ResearcherUrlDao; import org.orcid.persistence.jpa.entities.ResearcherUrlEntity; -import org.springframework.transaction.annotation.Propagation; -import org.springframework.transaction.annotation.Transactional; -@Transactional(readOnly = true, propagation = Propagation.REQUIRED) public class ResearcherUrlManagerReadOnlyImpl extends ManagerReadOnlyBaseImpl implements ResearcherUrlManagerReadOnly { @Resource(name = "jpaJaxbResearcherUrlAdapterV3") diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/SpamManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/SpamManagerReadOnlyImpl.java index 3121ddc0a57..ec0826855c2 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/SpamManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/SpamManagerReadOnlyImpl.java @@ -9,10 +9,7 @@ import org.orcid.persistence.dao.SpamDao; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.transaction.annotation.Propagation; -import org.springframework.transaction.annotation.Transactional; -@Transactional(readOnly = true, propagation = Propagation.REQUIRED) public class SpamManagerReadOnlyImpl implements SpamManagerReadOnly { private static final Logger LOGGER = LoggerFactory.getLogger(SpamManagerReadOnlyImpl.class); diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/WorkManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/WorkManagerReadOnlyImpl.java index 1835f757310..dad6fe32ca0 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/WorkManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/WorkManagerReadOnlyImpl.java @@ -53,12 +53,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; -import org.springframework.transaction.annotation.Propagation; -import org.springframework.transaction.annotation.Transactional; import static org.orcid.pojo.ajaxForm.PojoUtil.getWorkForm; -@Transactional(readOnly = true, propagation = Propagation.REQUIRED) public class WorkManagerReadOnlyImpl extends ManagerReadOnlyBaseImpl implements WorkManagerReadOnly { private static final Logger LOGGER = LoggerFactory.getLogger(WorkManagerReadOnlyImpl.class); diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/GenericDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/GenericDaoImpl.java index 1aea45ad3a0..8f91ea9f6ec 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/GenericDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/GenericDaoImpl.java @@ -34,14 +34,12 @@ public GenericDaoImpl(Class clazz) { } @Override - @Transactional(readOnly = true, propagation = Propagation.REQUIRED) public E find(I id) { return entityManager.find(clazz, id); } @SuppressWarnings("unchecked") @Override - @Transactional(readOnly = true, propagation = Propagation.REQUIRED) public List findLastModifiedBefore(Date latestDate, int maxResults) { Query query = entityManager.createQuery("from " + clazz.getSimpleName() + " where lastModified <= :latestDate"); query.setParameter("latestDate", latestDate); @@ -51,7 +49,6 @@ public List findLastModifiedBefore(Date latestDate, int maxResults) { @SuppressWarnings("unchecked") @Override - @Transactional(readOnly = true, propagation = Propagation.REQUIRED) public List getAll() { return entityManager.createQuery("from " + clazz.getSimpleName()).getResultList(); } diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/IdentifierTypeDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/IdentifierTypeDaoImpl.java index 0bacded462c..d32628ec412 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/IdentifierTypeDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/IdentifierTypeDaoImpl.java @@ -6,10 +6,8 @@ import org.orcid.persistence.dao.IdentifierTypeDao; import org.orcid.persistence.jpa.entities.IdentifierTypeEntity; -import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; -@Transactional(readOnly = true, propagation = Propagation.REQUIRED) public class IdentifierTypeDaoImpl extends GenericDaoImpl implements IdentifierTypeDao { public IdentifierTypeDaoImpl() { diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/NotificationDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/NotificationDaoImpl.java index c3b8ed0382a..f855927576c 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/NotificationDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/NotificationDaoImpl.java @@ -17,7 +17,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Value; -import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; /** @@ -25,7 +24,6 @@ * @author Will Simpson * */ -@Transactional(readOnly = true, propagation = Propagation.REQUIRED) public class NotificationDaoImpl extends GenericDaoImpl implements NotificationDao { private static final String NOTIFICATION_TYPE_PERMISSION = "PERMISSION"; @@ -299,7 +297,6 @@ public List findUnsentTips(int batchSize) { } @Override - @Transactional public void flagAsSendable(String orcid, Long id) { Query query = entityManager.createQuery("update NotificationEntity n set n.sendable=true where n.orcid = :orcid and n.id = :id"); query.setParameter("orcid", orcid); @@ -308,7 +305,6 @@ public void flagAsSendable(String orcid, Long id) { } @Override - @Transactional public void flagAsNonSendable(String orcid, Long id) { Query query = entityManager.createQuery("update NotificationEntity n set n.sendable=false where n.orcid = :orcid and n.id = :id"); query.setParameter("orcid", orcid); @@ -317,7 +313,6 @@ public void flagAsNonSendable(String orcid, Long id) { } @Override - @Transactional public void updateRetryCount(String orcid, Long id, Long retryCount) { Query query = entityManager.createQuery("update NotificationEntity n set n.retryCount = :count where n.orcid = :orcid and n.id = :id"); query.setParameter("count", retryCount); diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgAffiliationRelationDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgAffiliationRelationDaoImpl.java index 6a262a0a8d5..c6eb92841ce 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgAffiliationRelationDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgAffiliationRelationDaoImpl.java @@ -20,10 +20,8 @@ import org.orcid.persistence.jpa.entities.OrgAffiliationRelationEntity; import org.springframework.beans.factory.annotation.Value; import org.springframework.cache.annotation.Cacheable; -import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; -@Transactional(readOnly = true, propagation = Propagation.REQUIRED) public class OrgAffiliationRelationDaoImpl extends GenericDaoImpl implements OrgAffiliationRelationDao { private static final Logger LOG = LoggerFactory.getLogger(OrgAffiliationRelationDaoImpl.class); diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgDaoImpl.java index eda1947a987..ed597a0acdb 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgDaoImpl.java @@ -18,7 +18,6 @@ * @author Will Simpson * */ -@Transactional(readOnly = true, propagation = Propagation.REQUIRED) public class OrgDaoImpl extends GenericDaoImpl implements OrgDao { public OrgDaoImpl() { diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgDisambiguatedDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgDisambiguatedDaoImpl.java index 5d212eeb61f..6df2e20ac26 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgDisambiguatedDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/OrgDisambiguatedDaoImpl.java @@ -15,7 +15,6 @@ import org.orcid.persistence.jpa.entities.OrgDisambiguatedEntity; import org.springframework.beans.factory.annotation.Value; import org.springframework.cache.annotation.Cacheable; -import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; /** @@ -23,7 +22,6 @@ * @author Will Simpson * */ -@Transactional(readOnly = true, propagation = Propagation.REQUIRED) public class OrgDisambiguatedDaoImpl extends GenericDaoImpl implements OrgDisambiguatedDao { @Value("${org.orcid.core.orgsToGroup.query:select * from org_disambiguated where source_type='ROR'}" ) diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/PeerReviewDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/PeerReviewDaoImpl.java index 0ab0ca4aa8f..6de72669ad6 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/PeerReviewDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/PeerReviewDaoImpl.java @@ -13,10 +13,8 @@ import org.orcid.persistence.dao.PeerReviewDao; import org.orcid.persistence.jpa.entities.PeerReviewEntity; import org.springframework.cache.annotation.Cacheable; -import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; -@Transactional(readOnly = true, propagation = Propagation.REQUIRED) public class PeerReviewDaoImpl extends GenericDaoImpl implements PeerReviewDao { public PeerReviewDaoImpl() { diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileDaoImpl.java index 73eaa3da8a2..d9d1b910085 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileDaoImpl.java @@ -28,7 +28,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; -import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; public class ProfileDaoImpl extends GenericDaoImpl implements ProfileDao { @@ -309,7 +308,6 @@ public List findOrcidsNeedingEmailMigration(int maxResults) { } @Override - @Transactional(readOnly = true, propagation = Propagation.REQUIRED) public List findProfilesThatMissedIndexing(int maxResults) { TypedQuery query = entityManager.createQuery( "from ProfileEntity where (lastModified > lastIndexedDate or lastIndexedDate is null) and indexingStatus not in ('PENDING', 'IGNORE') order by lastModified", @@ -756,7 +754,6 @@ public List getProfileEvents(String orcid, List query = entityManager.createQuery("FROM ProfileEntity where orcid = :orcid", ProfileEntity.class); query.setParameter("orcid", orcid); @@ -764,7 +761,6 @@ public ProfileEntity getLockedReason(String orcid) { } @Override - @Transactional(readOnly = true, propagation = Propagation.REQUIRED) public List findByOrcidType(String orcidType) { TypedQuery query = entityManager.createQuery("FROM ProfileEntity where orcidType = :orcidType", ProfileEntity.class); query.setParameter("orcidType", orcidType); diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileFundingDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileFundingDaoImpl.java index 8c2806b497e..0a55b3a53f6 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileFundingDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ProfileFundingDaoImpl.java @@ -12,10 +12,8 @@ import org.orcid.persistence.dao.ProfileFundingDao; import org.orcid.persistence.jpa.entities.ProfileFundingEntity; import org.springframework.cache.annotation.Cacheable; -import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; -@Transactional(readOnly = true, propagation = Propagation.REQUIRED) public class ProfileFundingDaoImpl extends GenericDaoImpl implements ProfileFundingDao { public ProfileFundingDaoImpl() { diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ResearchResourceDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ResearchResourceDaoImpl.java index 04a9c14df33..63665783220 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ResearchResourceDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/ResearchResourceDaoImpl.java @@ -12,10 +12,8 @@ import org.orcid.persistence.aop.UpdateProfileLastModifiedAndIndexingStatus; import org.orcid.persistence.dao.ResearchResourceDao; import org.orcid.persistence.jpa.entities.ResearchResourceEntity; -import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; -@Transactional(readOnly = true, propagation = Propagation.REQUIRED) public class ResearchResourceDaoImpl extends GenericDaoImpl implements ResearchResourceDao{ public ResearchResourceDaoImpl() { diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ClientDetailsEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ClientDetailsEntity.java index 0c7a728e6b2..4b60eb5f042 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ClientDetailsEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ClientDetailsEntity.java @@ -131,7 +131,7 @@ public void setClientWebsite(String clientWebsite) { this.clientWebsite = clientWebsite; } - @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY, mappedBy = "clientId", orphanRemoval = true) + @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, mappedBy = "clientId", orphanRemoval = true) public Set getClientScopes() { return clientScopes; } @@ -140,7 +140,7 @@ public void setClientScopes(Set clientScopes) { this.clientScopes = clientScopes; } - @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY, mappedBy = "clientId", orphanRemoval = true) + @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, mappedBy = "clientId", orphanRemoval = true) public Set getClientResourceIds() { return clientResourceIds; } @@ -149,7 +149,7 @@ public void setClientResourceIds(Set clientResourceIds) this.clientResourceIds = clientResourceIds; } - @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY, mappedBy = "clientId", orphanRemoval = true) + @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, mappedBy = "clientId", orphanRemoval = true) public Set getClientAuthorizedGrantTypes() { return clientAuthorizedGrantTypes; } @@ -158,7 +158,7 @@ public void setClientAuthorizedGrantTypes(Set c this.clientAuthorizedGrantTypes = clientAuthorizedGrantTypes; } - @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY, mappedBy = "clientId", orphanRemoval = true) + @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, mappedBy = "clientId", orphanRemoval = true) @SortNatural public SortedSet getClientRegisteredRedirectUris() { return clientRegisteredRedirectUris; @@ -168,7 +168,7 @@ public void setClientRegisteredRedirectUris(SortedSet c this.clientRegisteredRedirectUris = clientRegisteredRedirectUris; } - @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY, mappedBy = "clientId", orphanRemoval = true) + @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, mappedBy = "clientId", orphanRemoval = true) public List getClientGrantedAuthorities() { return clientGrantedAuthorities; } @@ -235,7 +235,7 @@ public String getClientSecret() { return getDecryptedClientSecret(); } - @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY, mappedBy = "clientId", orphanRemoval = true) + @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, mappedBy = "clientId", orphanRemoval = true) @SortNatural public Set getClientSecrets() { return clientSecrets; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/EmailDomainToOrgIdEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/EmailDomainToOrgIdEntity.java index 3fa3a3f8423..c012486f7d3 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/EmailDomainToOrgIdEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/EmailDomainToOrgIdEntity.java @@ -44,7 +44,7 @@ public void setId(Long id) { this.id = id; } - @ManyToOne(fetch = FetchType.LAZY) + @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "email_domian_id") public EmailDomainEntity getEmailDomian() { return emailDomian; @@ -54,7 +54,7 @@ public void setEmailDomian(EmailDomainEntity emailDomian) { this.emailDomian = emailDomian; } - @ManyToOne(fetch = FetchType.LAZY) + @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "org_disambiguated_id") public OrgDisambiguatedEntity getOrgDisambiguated() { return orgDisambiguated; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/IdentityProviderNameEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/IdentityProviderNameEntity.java index 3890bbdeee5..f5270c3d527 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/IdentityProviderNameEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/IdentityProviderNameEntity.java @@ -37,7 +37,7 @@ public void setId(Long id) { this.id = id; } - @ManyToOne(fetch = FetchType.LAZY) + @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "identity_provider_id", nullable = false) public IdentityProviderEntity getIdentityProvider() { return identityProvider; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationWorkEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationWorkEntity.java index 8e2132c7bba..f255798f04a 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationWorkEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/NotificationWorkEntity.java @@ -32,7 +32,7 @@ public NotificationWorkEntityPk getId() { } @Id - @ManyToOne(cascade = { CascadeType.REFRESH }, fetch = FetchType.LAZY) + @ManyToOne(cascade = { CascadeType.REFRESH }, fetch = FetchType.EAGER) @JoinColumn(name = "notification_id", nullable = false) public NotificationEntity getNotification() { return notification; @@ -46,7 +46,7 @@ public void setNotification(NotificationEntity notification) { * @return the work */ @Id - @ManyToOne(fetch = FetchType.LAZY) + @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "work_id", nullable = false) public WorkEntity getWork() { return work; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrgDisambiguatedEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrgDisambiguatedEntity.java index df8b14e6ef5..98b29707a4d 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrgDisambiguatedEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrgDisambiguatedEntity.java @@ -184,7 +184,7 @@ public void setPopularity(Integer popularity) { this.popularity = popularity; } - @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY, mappedBy = "orgDisambiguated") + @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, mappedBy = "orgDisambiguated") @Fetch(FetchMode.SUBSELECT) public Set getExternalIdentifiers() { return externalIdentifiers; @@ -203,7 +203,7 @@ public void setOrgType(String orgType) { this.orgType = orgType; } - @OneToOne(fetch = FetchType.LAZY) + @OneToOne(fetch = FetchType.EAGER) @JoinColumn(name = "id", referencedColumnName = "org_disambiguated_id") public MemberChosenOrgDisambiguatedEntity getMemberChosenOrgDisambiguatedEntity() { return memberChosenOrgDisambiguatedEntity; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ResearchResourceEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ResearchResourceEntity.java index d1c0e280e3a..b76480177ff 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ResearchResourceEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ResearchResourceEntity.java @@ -152,7 +152,7 @@ public void setExternalIdentifiersJson(String externalIdentifiersJson) { this.externalIdentifiersJson = externalIdentifiersJson; } - @OneToMany(mappedBy="researchResourceEntity", cascade = CascadeType.ALL,fetch=FetchType.LAZY, orphanRemoval =true ) + @OneToMany(mappedBy="researchResourceEntity", cascade = CascadeType.ALL,fetch=FetchType.EAGER, orphanRemoval =true ) @OrderColumn(name="item_index") public List getResourceItems() { return resourceItems; @@ -162,7 +162,7 @@ public void setResourceItems(List resourceItems) { this.resourceItems = resourceItems; } - @OneToMany(fetch = FetchType.LAZY) + @OneToMany(fetch = FetchType.EAGER) @JoinTable(name = "research_resource_org", joinColumns = { @JoinColumn(name = "research_resource_id", referencedColumnName="id") }, inverseJoinColumns = { @JoinColumn(name = "org_id", referencedColumnName="id") }) diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ResearchResourceItemEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ResearchResourceItemEntity.java index eaf691b0d35..baa309cdc28 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ResearchResourceItemEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ResearchResourceItemEntity.java @@ -98,7 +98,7 @@ public void setItemOrder(int itemOrder) { this.itemOrder = itemOrder; } - @OneToMany(fetch = FetchType.LAZY) + @OneToMany(fetch = FetchType.EAGER) @JoinTable(name = "research_resource_item_org", joinColumns = { @JoinColumn(name = "research_resource_item_id") }, inverseJoinColumns = { @JoinColumn(name = "org_id") }) From c479fa2c48134b396d5912a24ffb55557d979014 Mon Sep 17 00:00:00 2001 From: Camelia Dumitru Date: Wed, 17 Jun 2026 19:54:56 +0100 Subject: [PATCH 61/77] ClientDetailsEntity add Hibernate SUBSELECT fetch mode to prevent the giant join pattern. --- .../persistence/jpa/entities/ClientDetailsEntity.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ClientDetailsEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ClientDetailsEntity.java index 4b60eb5f042..8ebd3ef8eac 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ClientDetailsEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ClientDetailsEntity.java @@ -25,6 +25,8 @@ import org.springframework.security.core.GrantedAuthority; import org.springframework.util.StringUtils; +import org.hibernate.annotations.Fetch; +import org.hibernate.annotations.FetchMode; import org.hibernate.annotations.SortNatural; /** @@ -132,6 +134,7 @@ public void setClientWebsite(String clientWebsite) { } @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, mappedBy = "clientId", orphanRemoval = true) + @Fetch(FetchMode.SUBSELECT) public Set getClientScopes() { return clientScopes; } @@ -141,6 +144,7 @@ public void setClientScopes(Set clientScopes) { } @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, mappedBy = "clientId", orphanRemoval = true) + @Fetch(FetchMode.SUBSELECT) public Set getClientResourceIds() { return clientResourceIds; } @@ -150,6 +154,7 @@ public void setClientResourceIds(Set clientResourceIds) } @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, mappedBy = "clientId", orphanRemoval = true) + @Fetch(FetchMode.SUBSELECT) public Set getClientAuthorizedGrantTypes() { return clientAuthorizedGrantTypes; } @@ -159,6 +164,7 @@ public void setClientAuthorizedGrantTypes(Set c } @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, mappedBy = "clientId", orphanRemoval = true) + @Fetch(FetchMode.SUBSELECT) @SortNatural public SortedSet getClientRegisteredRedirectUris() { return clientRegisteredRedirectUris; @@ -169,6 +175,7 @@ public void setClientRegisteredRedirectUris(SortedSet c } @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, mappedBy = "clientId", orphanRemoval = true) + @Fetch(FetchMode.SUBSELECT) public List getClientGrantedAuthorities() { return clientGrantedAuthorities; } @@ -236,6 +243,7 @@ public String getClientSecret() { } @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, mappedBy = "clientId", orphanRemoval = true) + @Fetch(FetchMode.SUBSELECT) @SortNatural public Set getClientSecrets() { return clientSecrets; From b95b16409d47aacca81f1ecfb34f5de5c12d19d3 Mon Sep 17 00:00:00 2001 From: Camelia Dumitru Date: Wed, 17 Jun 2026 20:21:51 +0100 Subject: [PATCH 62/77] Added transactional and subselect for research resource entity --- .../read_only/impl/ResearchResourceManagerReadOnlyImpl.java | 2 ++ .../persistence/jpa/entities/ResearchResourceEntity.java | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ResearchResourceManagerReadOnlyImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ResearchResourceManagerReadOnlyImpl.java index 156c766ab08..44f880074b4 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ResearchResourceManagerReadOnlyImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/v3/read_only/impl/ResearchResourceManagerReadOnlyImpl.java @@ -38,6 +38,7 @@ public ResearchResource getResearchResource(String orcid, Long researchResourceI } @Override + @Transactional public ResearchResourceSummary getResearchResourceSummary(String orcid, Long researchResourceId) { ResearchResourceEntity e = rrDao.getResearchResource(orcid, researchResourceId); return jpaJaxbResearchResourceAdapter.toSummary(e); @@ -51,6 +52,7 @@ public List findResearchResources(String orcid) { } @Override + @Transactional public List getResearchResourceSummaryList(String orcid) { List e = rrDao.getByUser(orcid, getLastModified(orcid)); return jpaJaxbResearchResourceAdapter.toSummaries(e); diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ResearchResourceEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ResearchResourceEntity.java index b76480177ff..531bebf68d9 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ResearchResourceEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ResearchResourceEntity.java @@ -16,6 +16,9 @@ import jakarta.persistence.SequenceGenerator; import jakarta.persistence.Table; +import org.hibernate.annotations.Fetch; +import org.hibernate.annotations.FetchMode; + /** Represents a research resource. * * @author tom @@ -153,6 +156,7 @@ public void setExternalIdentifiersJson(String externalIdentifiersJson) { } @OneToMany(mappedBy="researchResourceEntity", cascade = CascadeType.ALL,fetch=FetchType.EAGER, orphanRemoval =true ) + @Fetch(FetchMode.SUBSELECT) @OrderColumn(name="item_index") public List getResourceItems() { return resourceItems; @@ -163,6 +167,7 @@ public void setResourceItems(List resourceItems) { } @OneToMany(fetch = FetchType.EAGER) + @Fetch(FetchMode.SUBSELECT) @JoinTable(name = "research_resource_org", joinColumns = { @JoinColumn(name = "research_resource_id", referencedColumnName="id") }, inverseJoinColumns = { @JoinColumn(name = "org_id", referencedColumnName="id") }) From c17acadc40a6de725378e668f5277770c2023dfd Mon Sep 17 00:00:00 2001 From: Camelia Dumitru Date: Thu, 18 Jun 2026 08:43:43 +0100 Subject: [PATCH 63/77] Changed more lazy to eager and subselect --- .../orcid/persistence/jpa/entities/CustomEmailEntity.java | 2 +- .../persistence/jpa/entities/IdentityProviderEntity.java | 6 +++++- .../jpa/entities/OrcidOauth2AuthoriziationCodeDetail.java | 2 +- .../jpa/entities/ResearchResourceItemEntity.java | 2 +- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/CustomEmailEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/CustomEmailEntity.java index 2af4ee8cbae..f5ee7402f7b 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/CustomEmailEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/CustomEmailEntity.java @@ -33,7 +33,7 @@ public CustomEmailPk getId() { } @Id - @ManyToOne(fetch = FetchType.LAZY, cascade = { CascadeType.ALL }) + @ManyToOne(fetch = FetchType.EAGER, cascade = { CascadeType.ALL }) @JoinColumn(name = "client_details_id") public ClientDetailsEntity getClientDetailsEntity() { return clientDetailsEntity; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/IdentityProviderEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/IdentityProviderEntity.java index 970a498ede8..0d6acb2b8ab 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/IdentityProviderEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/IdentityProviderEntity.java @@ -14,6 +14,9 @@ import jakarta.persistence.SequenceGenerator; import jakarta.persistence.Table; +import org.hibernate.annotations.Fetch; +import org.hibernate.annotations.FetchMode; + /** * @author Will Simpson */ @@ -107,7 +110,8 @@ public void setFailedCount(int failedCount) { this.failedCount = failedCount; } - @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "identityProvider", orphanRemoval = true) + @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "identityProvider", orphanRemoval = true) + @Fetch(FetchMode.SUBSELECT) public List getNames() { return names; } diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrcidOauth2AuthoriziationCodeDetail.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrcidOauth2AuthoriziationCodeDetail.java index b2dd52acef1..e44c9f4243d 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrcidOauth2AuthoriziationCodeDetail.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/OrcidOauth2AuthoriziationCodeDetail.java @@ -154,7 +154,7 @@ public void setState(String state) { this.state = state; } - @ManyToOne(fetch = FetchType.LAZY) + @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "client_details_id") public ClientDetailsEntity getClientDetailsEntity() { return clientDetailsEntity; diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ResearchResourceItemEntity.java b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ResearchResourceItemEntity.java index baa309cdc28..708414099a4 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ResearchResourceItemEntity.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/jpa/entities/ResearchResourceItemEntity.java @@ -32,7 +32,7 @@ public class ResearchResourceItemEntity { private ResearchResourceEntity researchResourceEntity; - @ManyToOne(fetch=FetchType.LAZY) + @ManyToOne(fetch=FetchType.EAGER) @JoinColumn(name="research_resource_id", nullable=false) public ResearchResourceEntity getResearchResourceEntity() { return researchResourceEntity; From 3f5c40482582abb7206f204d57ee3a06c62a75dd Mon Sep 17 00:00:00 2001 From: Camelia Dumitru Date: Thu, 18 Jun 2026 09:44:30 +0100 Subject: [PATCH 64/77] Added the explicit access control exception --- .../api/common/security/oauth/OrcidBearerTokenFilter.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidBearerTokenFilter.java b/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidBearerTokenFilter.java index d1f5d3f2a6b..e55379b7a13 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidBearerTokenFilter.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidBearerTokenFilter.java @@ -71,6 +71,10 @@ public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) OrcidBearerTokenAuthentication authentication = validateTokenData(tokenValue, tokenData); SecurityContextHolder.getContext().setAuthentication(authentication); chain.doFilter(request, response); + } catch (AccessControlException e) { + logger.warn("Invalid access token for token=" + tokenFingerprint(tokenValue) + " reason=" + e.getMessage()); + apiAuthenticationEntryPoint.commence(request, response, null); + return; } catch (IOException | URISyntaxException | InterruptedException | JSONException e) { //TODO: Define error message and add exception type to it logger.warn("Token introspection failed for token=" + tokenFingerprint(tokenValue), e); From aa17d664c8757684ea07c6733924c4d163f463d6 Mon Sep 17 00:00:00 2001 From: Camelia Dumitru Date: Mon, 22 Jun 2026 16:58:09 +0100 Subject: [PATCH 65/77] Change the status from forbodden to unauthorized --- .../api/common/security/oauth/APIAuthenticationEntryPoint.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/APIAuthenticationEntryPoint.java b/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/APIAuthenticationEntryPoint.java index 58369f28cfc..cb7be85f1e9 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/APIAuthenticationEntryPoint.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/APIAuthenticationEntryPoint.java @@ -19,7 +19,7 @@ public void commence(HttpServletRequest request, HttpServletResponse response, A orcidError.setResponseCode(response.getStatus()); orcidError.setDeveloperMessage("GENERIC ERROR MESSAGE"); - response.setStatus(HttpStatus.FORBIDDEN.value()); + response.setStatus(HttpStatus.UNAUTHORIZED.value()); response.getWriter().write(orcidError.toString()); response.flushBuffer(); } catch (IOException e) { From c680417a64edf3184748dc93c433adafc0bf3e60 Mon Sep 17 00:00:00 2001 From: Camelia Dumitru Date: Mon, 22 Jun 2026 17:38:21 +0100 Subject: [PATCH 66/77] Added the error message --- .../oauth/APIAuthenticationEntryPoint.java | 22 ++++++++++++++----- .../oauth/OrcidBearerTokenFilter.java | 5 +++-- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/APIAuthenticationEntryPoint.java b/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/APIAuthenticationEntryPoint.java index cb7be85f1e9..fc8a85d64f7 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/APIAuthenticationEntryPoint.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/APIAuthenticationEntryPoint.java @@ -5,22 +5,34 @@ import org.springframework.security.core.AuthenticationException; import org.springframework.security.web.AuthenticationEntryPoint; +import com.fasterxml.jackson.databind.ObjectMapper; + import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; +import java.util.LinkedHashMap; +import java.util.Map; public class APIAuthenticationEntryPoint implements AuthenticationEntryPoint { + private final ObjectMapper objectMapper = new ObjectMapper(); + @Override public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException, ServletException { try { - //TODO: This is NOT ready, exceptions should be handled and the proper error message returned + response.setStatus(HttpStatus.UNAUTHORIZED.value()); + response.setContentType("application/json;charset=UTF-8"); + OrcidError orcidError = new OrcidError(); - orcidError.setResponseCode(response.getStatus()); - orcidError.setDeveloperMessage("GENERIC ERROR MESSAGE"); + orcidError.setResponseCode(HttpStatus.UNAUTHORIZED.value()); + orcidError.setDeveloperMessage(authException != null && authException.getMessage() != null + ? authException.getMessage() + : "Invalid access token"); - response.setStatus(HttpStatus.UNAUTHORIZED.value()); - response.getWriter().write(orcidError.toString()); + Map payload = new LinkedHashMap<>(); + payload.put("response-code", orcidError.getResponseCode()); + payload.put("developer-message", orcidError.getDeveloperMessage()); + response.getWriter().write(objectMapper.writeValueAsString(payload)); response.flushBuffer(); } catch (IOException e) { throw e; diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidBearerTokenFilter.java b/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidBearerTokenFilter.java index e55379b7a13..2fa3bc243c6 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidBearerTokenFilter.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidBearerTokenFilter.java @@ -8,6 +8,7 @@ import org.codehaus.jettison.json.JSONObject; import org.orcid.core.oauth.OrcidBearerTokenAuthentication; import org.orcid.core.oauth.authorizationServer.AuthorizationServerUtil; +import org.springframework.security.authentication.BadCredentialsException; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.web.bind.annotation.RequestMethod; @@ -73,12 +74,12 @@ public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) chain.doFilter(request, response); } catch (AccessControlException e) { logger.warn("Invalid access token for token=" + tokenFingerprint(tokenValue) + " reason=" + e.getMessage()); - apiAuthenticationEntryPoint.commence(request, response, null); + apiAuthenticationEntryPoint.commence(request, response, new BadCredentialsException(e.getMessage(), e)); return; } catch (IOException | URISyntaxException | InterruptedException | JSONException e) { //TODO: Define error message and add exception type to it logger.warn("Token introspection failed for token=" + tokenFingerprint(tokenValue), e); - apiAuthenticationEntryPoint.commence(request, response, null); + apiAuthenticationEntryPoint.commence(request, response, new BadCredentialsException("Invalid access token", e)); return; } } From 3cb080d57f14b9f6b41079612cb6581605a23638 Mon Sep 17 00:00:00 2001 From: Camelia Dumitru Date: Mon, 22 Jun 2026 18:29:47 +0100 Subject: [PATCH 67/77] Added specifix error handling for revoke token case --- .../oauth/APIAuthenticationEntryPoint.java | 11 ++++++- .../oauth/OrcidAPIAccessDeniedHandler.java | 29 +++++++++++++++---- .../oauth/OrcidBearerTokenFilter.java | 25 ++++++++++++++-- .../security/oauth/RevokedTokenException.java | 18 ++++++++++++ 4 files changed, 75 insertions(+), 8 deletions(-) create mode 100644 orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/RevokedTokenException.java diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/APIAuthenticationEntryPoint.java b/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/APIAuthenticationEntryPoint.java index fc8a85d64f7..455c253b951 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/APIAuthenticationEntryPoint.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/APIAuthenticationEntryPoint.java @@ -14,6 +14,15 @@ import java.util.LinkedHashMap; import java.util.Map; +/** + * Handles authentication failures for API requests. + * + * Returns 401 Unauthorized when: + * - No authentication credentials are provided + * - Authentication credentials are invalid or malformed + * + * For authorization failures (authenticated but lacks permission), see OrcidAPIAccessDeniedHandler (403 Forbidden). + */ public class APIAuthenticationEntryPoint implements AuthenticationEntryPoint { private final ObjectMapper objectMapper = new ObjectMapper(); @@ -27,7 +36,7 @@ public void commence(HttpServletRequest request, HttpServletResponse response, A orcidError.setResponseCode(HttpStatus.UNAUTHORIZED.value()); orcidError.setDeveloperMessage(authException != null && authException.getMessage() != null ? authException.getMessage() - : "Invalid access token"); + : "An Authentication object was not found in the SecurityContext"); Map payload = new LinkedHashMap<>(); payload.put("response-code", orcidError.getResponseCode()); diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidAPIAccessDeniedHandler.java b/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidAPIAccessDeniedHandler.java index 106c4d7b4ae..1b3f5131e13 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidAPIAccessDeniedHandler.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidAPIAccessDeniedHandler.java @@ -5,22 +5,41 @@ import org.springframework.security.access.AccessDeniedException; import org.springframework.security.web.access.AccessDeniedHandler; +import com.fasterxml.jackson.databind.ObjectMapper; + import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; +import java.util.LinkedHashMap; +import java.util.Map; public class OrcidAPIAccessDeniedHandler implements AccessDeniedHandler { + private final ObjectMapper objectMapper = new ObjectMapper(); + @Override public void handle(HttpServletRequest request, HttpServletResponse response, AccessDeniedException accessDeniedException) throws IOException, ServletException { try { - //TODO: This is NOT ready, exceptions should be handled and the proper error message returned + response.setStatus(HttpStatus.FORBIDDEN.value()); + response.setContentType("application/json;charset=UTF-8"); + OrcidError orcidError = new OrcidError(); - orcidError.setResponseCode(response.getStatus()); - orcidError.setDeveloperMessage("GENERIC ERROR MESSAGE"); + orcidError.setResponseCode(HttpStatus.FORBIDDEN.value()); + + // Determine the developer message based on the exception type + String developerMessage; + if (accessDeniedException != null && accessDeniedException.getMessage() != null) { + developerMessage = accessDeniedException.getMessage(); + } else { + developerMessage = "Access denied"; + } + + orcidError.setDeveloperMessage(developerMessage); - response.setStatus(HttpStatus.FORBIDDEN.value()); - response.getWriter().write(orcidError.toString()); + Map payload = new LinkedHashMap<>(); + payload.put("response-code", orcidError.getResponseCode()); + payload.put("developer-message", orcidError.getDeveloperMessage()); + response.getWriter().write(objectMapper.writeValueAsString(payload)); response.flushBuffer(); } catch (IOException e) { throw e; diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidBearerTokenFilter.java b/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidBearerTokenFilter.java index 2fa3bc243c6..4b73b9d2c83 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidBearerTokenFilter.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidBearerTokenFilter.java @@ -8,9 +8,11 @@ import org.codehaus.jettison.json.JSONObject; import org.orcid.core.oauth.OrcidBearerTokenAuthentication; import org.orcid.core.oauth.authorizationServer.AuthorizationServerUtil; +import org.springframework.security.access.AccessDeniedException; import org.springframework.security.authentication.BadCredentialsException; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.web.access.AccessDeniedHandler; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; @@ -43,6 +45,9 @@ public class OrcidBearerTokenFilter implements Filter { @Resource private APIAuthenticationEntryPoint apiAuthenticationEntryPoint; + @Resource + private AccessDeniedHandler orcidAPIAccessDeniedHandler; + @Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { final HttpServletRequest request = (HttpServletRequest) req; @@ -72,7 +77,18 @@ public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) OrcidBearerTokenAuthentication authentication = validateTokenData(tokenValue, tokenData); SecurityContextHolder.getContext().setAuthentication(authentication); chain.doFilter(request, response); + } catch (RevokedTokenException e) { + // Revoked token: authenticated but lacks authorization (403 Forbidden) + logger.warn("Revoked access token for token=" + tokenFingerprint(tokenValue) + " reason=" + e.getMessage()); + orcidAPIAccessDeniedHandler.handle(request, response, e); + return; + } catch (AccessDeniedException e) { + // Other authorization failures: authenticated but lacks permission (403 Forbidden) + logger.warn("Access denied for token=" + tokenFingerprint(tokenValue) + " reason=" + e.getMessage()); + orcidAPIAccessDeniedHandler.handle(request, response, e); + return; } catch (AccessControlException e) { + // Invalid token: not authenticated (401 Unauthorized) logger.warn("Invalid access token for token=" + tokenFingerprint(tokenValue) + " reason=" + e.getMessage()); apiAuthenticationEntryPoint.commence(request, response, new BadCredentialsException(e.getMessage(), e)); return; @@ -100,12 +116,17 @@ private OrcidBearerTokenAuthentication validateTokenData(String accessTokenValue if(tokenInfo.has("USER_REVOKED") && tokenInfo.getBoolean("USER_REVOKED") == true) { return buildAuthentication(accessTokenValue, tokenInfo); } else { - throw new AccessControlException("Invalid access token: " + accessTokenValue); + // Token is inactive and not marked as user-revoked (likely expired or revoked by admin) + throw new RevokedTokenException("Access token has been revoked or is no longer valid"); } } else { - throw new AccessControlException("Invalid access token: " + accessTokenValue); + // Token is inactive for non-DELETE request (revoked or expired) + throw new RevokedTokenException("Access token has been revoked or is no longer valid"); } } + } catch(RevokedTokenException r) { + logger.warn("Revoked token for token=" + tokenFingerprint(accessTokenValue) + " reason=" + r.getMessage()); + throw r; } catch(AccessControlException i) { logger.warn("Access control failure for token=" + tokenFingerprint(accessTokenValue) + " reason=" + i.getMessage()); throw i; diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/RevokedTokenException.java b/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/RevokedTokenException.java new file mode 100644 index 00000000000..c63f3a087ce --- /dev/null +++ b/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/RevokedTokenException.java @@ -0,0 +1,18 @@ +package org.orcid.api.common.security.oauth; + +import org.springframework.security.access.AccessDeniedException; + +/** + * Exception thrown when a bearer token has been revoked. + * This represents an authorization failure (403 Forbidden), not an authentication failure (401 Unauthorized). + * The token exists and is valid, but it lacks permission to perform the requested action. + */ +public class RevokedTokenException extends AccessDeniedException { + public RevokedTokenException(String msg) { + super(msg); + } + + public RevokedTokenException(String msg, Throwable cause) { + super(msg, cause); + } +} From 34b75445ab8b03d91f253e103441ca532d9de728 Mon Sep 17 00:00:00 2001 From: Camelia Dumitru Date: Mon, 22 Jun 2026 18:50:36 +0100 Subject: [PATCH 68/77] 401 and 403 status code changes Token is revoked / expired / fake: 401 Unauthorized (Authentication failed) Token is perfectly valid, but lacks the proper scopes/permissions: 403 Forbidden (Authorization failed) --- .../org/orcid/api/common/filter/TokenTargetFilter.java | 5 +++-- .../common/security/oauth/OrcidBearerTokenFilter.java | 8 ++++---- .../common/security/oauth/RevokedTokenException.java | 10 ++++------ 3 files changed, 11 insertions(+), 12 deletions(-) diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/filter/TokenTargetFilter.java b/orcid-api-common/src/main/java/org/orcid/api/common/filter/TokenTargetFilter.java index c001c36d0e8..d5a7912f588 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/filter/TokenTargetFilter.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/filter/TokenTargetFilter.java @@ -2,9 +2,10 @@ import java.util.Collection; import java.util.Set; -import java.security.AccessControlException; import java.util.regex.Matcher; +import org.springframework.security.access.AccessDeniedException; + import jakarta.ws.rs.container.ContainerRequestContext; import jakarta.ws.rs.container.ContainerRequestFilter; import jakarta.ws.rs.ext.Provider; @@ -45,7 +46,7 @@ private void validateTargetRecord(String targetOrcid) { } if (!targetOrcid.equals(authDetails.getUserOrcid())) { - throw new AccessControlException("You do not have the required permissions."); + throw new AccessDeniedException("You do not have the required permissions."); } } } diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidBearerTokenFilter.java b/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidBearerTokenFilter.java index 4b73b9d2c83..fbd12e3d759 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidBearerTokenFilter.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidBearerTokenFilter.java @@ -78,17 +78,17 @@ public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) SecurityContextHolder.getContext().setAuthentication(authentication); chain.doFilter(request, response); } catch (RevokedTokenException e) { - // Revoked token: authenticated but lacks authorization (403 Forbidden) + // Revoked/expired token: authentication failure (401 Unauthorized) logger.warn("Revoked access token for token=" + tokenFingerprint(tokenValue) + " reason=" + e.getMessage()); - orcidAPIAccessDeniedHandler.handle(request, response, e); + apiAuthenticationEntryPoint.commence(request, response, new BadCredentialsException(e.getMessage(), e)); return; } catch (AccessDeniedException e) { - // Other authorization failures: authenticated but lacks permission (403 Forbidden) + // Valid token but lacks permission: authorization failure (403 Forbidden) logger.warn("Access denied for token=" + tokenFingerprint(tokenValue) + " reason=" + e.getMessage()); orcidAPIAccessDeniedHandler.handle(request, response, e); return; } catch (AccessControlException e) { - // Invalid token: not authenticated (401 Unauthorized) + // Invalid/fake token: authentication failure (401 Unauthorized) logger.warn("Invalid access token for token=" + tokenFingerprint(tokenValue) + " reason=" + e.getMessage()); apiAuthenticationEntryPoint.commence(request, response, new BadCredentialsException(e.getMessage(), e)); return; diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/RevokedTokenException.java b/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/RevokedTokenException.java index c63f3a087ce..19085a967b0 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/RevokedTokenException.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/RevokedTokenException.java @@ -1,13 +1,11 @@ package org.orcid.api.common.security.oauth; -import org.springframework.security.access.AccessDeniedException; - /** - * Exception thrown when a bearer token has been revoked. - * This represents an authorization failure (403 Forbidden), not an authentication failure (401 Unauthorized). - * The token exists and is valid, but it lacks permission to perform the requested action. + * Exception thrown when a bearer token has been revoked, expired, or is otherwise inactive. + * This represents an authentication failure (401 Unauthorized), not an authorization failure (403 Forbidden). + * The token itself is invalid and the client must obtain a new one. */ -public class RevokedTokenException extends AccessDeniedException { +public class RevokedTokenException extends RuntimeException { public RevokedTokenException(String msg) { super(msg); } From 25b69957d794f4bae571da3d5b3c387e3896356a Mon Sep 17 00:00:00 2001 From: Camelia Dumitru Date: Mon, 22 Jun 2026 19:34:16 +0100 Subject: [PATCH 69/77] More error code/access control handling --- .../api/common/filter/TokenTargetFilter.java | 15 ++++++++++++--- .../security/oauth/OrcidBearerTokenFilter.java | 4 ++-- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/filter/TokenTargetFilter.java b/orcid-api-common/src/main/java/org/orcid/api/common/filter/TokenTargetFilter.java index d5a7912f588..d840bf5bfc5 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/filter/TokenTargetFilter.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/filter/TokenTargetFilter.java @@ -2,9 +2,10 @@ import java.util.Collection; import java.util.Set; +import java.security.AccessControlException; import java.util.regex.Matcher; -import org.springframework.security.access.AccessDeniedException; +import org.springframework.security.core.Authentication; import jakarta.ws.rs.container.ContainerRequestContext; import jakarta.ws.rs.container.ContainerRequestFilter; @@ -45,9 +46,17 @@ private void validateTargetRecord(String targetOrcid) { return; } - if (!targetOrcid.equals(authDetails.getUserOrcid())) { - throw new AccessDeniedException("You do not have the required permissions."); + String userOrcid = authDetails.getUserOrcid(); + if (userOrcid != null) { + // Token has a specific user ORCID - validate it matches + if (!targetOrcid.equals(userOrcid)) { + throw new AccessControlException("Access token is for a different record"); + } + } else if (OrcidStringUtils.isValidOrcid(targetOrcid)) { + // Client-only token trying to access a specific valid-format ORCID + throw new AccessControlException("Access token is for a different record"); } + // Allow through if it's a malformed ORCID so endpoint can return 404 } } } diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidBearerTokenFilter.java b/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidBearerTokenFilter.java index fbd12e3d759..464110b86d4 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidBearerTokenFilter.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/OrcidBearerTokenFilter.java @@ -117,11 +117,11 @@ private OrcidBearerTokenAuthentication validateTokenData(String accessTokenValue return buildAuthentication(accessTokenValue, tokenInfo); } else { // Token is inactive and not marked as user-revoked (likely expired or revoked by admin) - throw new RevokedTokenException("Access token has been revoked or is no longer valid"); + throw new RevokedTokenException("Invalid access token"); } } else { // Token is inactive for non-DELETE request (revoked or expired) - throw new RevokedTokenException("Access token has been revoked or is no longer valid"); + throw new RevokedTokenException("Invalid access token"); } } } catch(RevokedTokenException r) { From 469f039ffdef3eeb30442c9e8fcd5f2722a0ead5 Mon Sep 17 00:00:00 2001 From: Camelia Dumitru Date: Tue, 23 Jun 2026 14:26:51 +0100 Subject: [PATCH 70/77] More error handling and status code fixes for mapi --- .../api/common/filter/TokenTargetFilter.java | 12 ++++-------- .../oauth/APIAuthenticationEntryPoint.java | 16 +++++++++++----- .../api/common/filter/TokenTargetFilterTest.java | 10 +++++----- 3 files changed, 20 insertions(+), 18 deletions(-) diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/filter/TokenTargetFilter.java b/orcid-api-common/src/main/java/org/orcid/api/common/filter/TokenTargetFilter.java index d840bf5bfc5..1b136efcdd0 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/filter/TokenTargetFilter.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/filter/TokenTargetFilter.java @@ -2,15 +2,13 @@ import java.util.Collection; import java.util.Set; -import java.security.AccessControlException; import java.util.regex.Matcher; -import org.springframework.security.core.Authentication; - import jakarta.ws.rs.container.ContainerRequestContext; import jakarta.ws.rs.container.ContainerRequestFilter; import jakarta.ws.rs.ext.Provider; +import org.orcid.core.exception.OrcidUnauthorizedException; import org.orcid.core.oauth.OrcidBearerTokenAuthentication; import org.orcid.utils.OrcidStringUtils; import org.springframework.security.core.Authentication; @@ -50,13 +48,11 @@ private void validateTargetRecord(String targetOrcid) { if (userOrcid != null) { // Token has a specific user ORCID - validate it matches if (!targetOrcid.equals(userOrcid)) { - throw new AccessControlException("Access token is for a different record"); + throw new OrcidUnauthorizedException("Access token is for a different record"); } - } else if (OrcidStringUtils.isValidOrcid(targetOrcid)) { - // Client-only token trying to access a specific valid-format ORCID - throw new AccessControlException("Access token is for a different record"); } - // Allow through if it's a malformed ORCID so endpoint can return 404 + // Allow through for client-only tokens and malformed ORCIDs so endpoint + // logic can resolve to 404 when the record does not exist. } } } diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/APIAuthenticationEntryPoint.java b/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/APIAuthenticationEntryPoint.java index 455c253b951..6a9f0df151b 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/APIAuthenticationEntryPoint.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/APIAuthenticationEntryPoint.java @@ -24,19 +24,25 @@ * For authorization failures (authenticated but lacks permission), see OrcidAPIAccessDeniedHandler (403 Forbidden). */ public class APIAuthenticationEntryPoint implements AuthenticationEntryPoint { + private static final String MISSING_AUTH_CONTEXT_MSG = "An Authentication object was not found in the SecurityContext"; private final ObjectMapper objectMapper = new ObjectMapper(); @Override public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException, ServletException { try { - response.setStatus(HttpStatus.UNAUTHORIZED.value()); + String developerMessage = authException != null && authException.getMessage() != null + ? authException.getMessage() + : MISSING_AUTH_CONTEXT_MSG; + HttpStatus status = MISSING_AUTH_CONTEXT_MSG.equals(developerMessage) + ? HttpStatus.FORBIDDEN + : HttpStatus.UNAUTHORIZED; + + response.setStatus(status.value()); response.setContentType("application/json;charset=UTF-8"); OrcidError orcidError = new OrcidError(); - orcidError.setResponseCode(HttpStatus.UNAUTHORIZED.value()); - orcidError.setDeveloperMessage(authException != null && authException.getMessage() != null - ? authException.getMessage() - : "An Authentication object was not found in the SecurityContext"); + orcidError.setResponseCode(status.value()); + orcidError.setDeveloperMessage(developerMessage); Map payload = new LinkedHashMap<>(); payload.put("response-code", orcidError.getResponseCode()); diff --git a/orcid-api-common/src/test/java/org/orcid/api/common/filter/TokenTargetFilterTest.java b/orcid-api-common/src/test/java/org/orcid/api/common/filter/TokenTargetFilterTest.java index 43833f491f7..a396865d8ee 100644 --- a/orcid-api-common/src/test/java/org/orcid/api/common/filter/TokenTargetFilterTest.java +++ b/orcid-api-common/src/test/java/org/orcid/api/common/filter/TokenTargetFilterTest.java @@ -6,7 +6,6 @@ import static org.mockito.Mockito.RETURNS_DEEP_STUBS; import java.io.Serializable; -import java.security.AccessControlException; import java.util.Collections; import java.util.HashSet; import java.util.Set; @@ -15,6 +14,7 @@ import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; +import org.orcid.core.exception.OrcidUnauthorizedException; import org.orcid.core.oauth.OrcidBearerTokenAuthentication; import org.orcid.jaxb.model.message.ScopePathType; import org.orcid.persistence.jpa.entities.ProfileEntity; @@ -52,7 +52,7 @@ public void tokenUsedOnTheRightUserTest() { filter.filter(request); } - @Test(expected = AccessControlException.class) + @Test(expected = OrcidUnauthorizedException.class) public void tokenUsedOnTheWrongUser12ApiTest() { setUpSecurityContext(ORCID1, CLIENT_ID, ScopePathType.READ_LIMITED); ContainerRequest request = Mockito.mock(ContainerRequest.class,RETURNS_DEEP_STUBS); @@ -67,7 +67,7 @@ public void tokenUsedOnTheWrongUser12ApiTest() { fail(); } - @Test(expected = AccessControlException.class) + @Test(expected = OrcidUnauthorizedException.class) public void tokenUsedOnTheWrongUser20ApiTest() { setUpSecurityContext(ORCID1, CLIENT_ID, ScopePathType.READ_LIMITED); ContainerRequest request = Mockito.mock(ContainerRequest.class,RETURNS_DEEP_STUBS); @@ -90,13 +90,13 @@ public void filterInvokedOnNoOrcidEndpointTest() { filter.filter(request); } - @Test(expected = AccessControlException.class) + @Test public void readPublicTokenTest() { setUpSecurityContext(null, CLIENT_ID, ScopePathType.READ_PUBLIC); ContainerRequest request = Mockito.mock(ContainerRequest.class, RETURNS_DEEP_STUBS); Mockito.when(request.getUriInfo().getPath()).thenReturn("http://api.test.orcid.org/v2.0/" + ORCID2); TokenTargetFilter filter = new TokenTargetFilter(); - filter.filter(request); + filter.filter(request); } private void setUpSecurityContext(String userOrcid, String clientId, ScopePathType... scopePathTypes) { From f6058538d8c1339fb433c8fec679bbbbd3485c01 Mon Sep 17 00:00:00 2001 From: Camelia Dumitru Date: Mon, 29 Jun 2026 15:12:54 +0100 Subject: [PATCH 71/77] More fixes for failing mapi testa --- .../common/security/oauth/APIAuthenticationEntryPoint.java | 2 +- .../main/java/org/orcid/core/utils/SourceEntityUtils.java | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/APIAuthenticationEntryPoint.java b/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/APIAuthenticationEntryPoint.java index 6a9f0df151b..5b78b671f42 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/APIAuthenticationEntryPoint.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/APIAuthenticationEntryPoint.java @@ -24,7 +24,7 @@ * For authorization failures (authenticated but lacks permission), see OrcidAPIAccessDeniedHandler (403 Forbidden). */ public class APIAuthenticationEntryPoint implements AuthenticationEntryPoint { - private static final String MISSING_AUTH_CONTEXT_MSG = "An Authentication object was not found in the SecurityContext"; + private static final String MISSING_AUTH_CONTEXT_MSG = "Forbidden - Missing authentication context."; private final ObjectMapper objectMapper = new ObjectMapper(); @Override diff --git a/orcid-core/src/main/java/org/orcid/core/utils/SourceEntityUtils.java b/orcid-core/src/main/java/org/orcid/core/utils/SourceEntityUtils.java index bbbe058da47..c91cc745cb2 100644 --- a/orcid-core/src/main/java/org/orcid/core/utils/SourceEntityUtils.java +++ b/orcid-core/src/main/java/org/orcid/core/utils/SourceEntityUtils.java @@ -78,8 +78,10 @@ public String getSourceName(SourceEntity sourceEntity) { } if (sourceEntity.getSourceProfile() != null) { String orcid = sourceEntity.getSourceProfile().getId(); - // Set the source name - return recordNameManagerReadOnlyV3.fetchDisplayablePublicName(orcid); + // Set the source name - only if orcid is not null + if (orcid != null) { + return recordNameManagerReadOnlyV3.fetchDisplayablePublicName(orcid); + } } return null; } From bae838409f8c0119747d2efe29aae638dce4b899 Mon Sep 17 00:00:00 2001 From: Camelia Dumitru Date: Thu, 2 Jul 2026 09:02:16 +0100 Subject: [PATCH 72/77] allow status requests for anonymous users in mapi/internal api --- .../resources/orcid-api-security-context.xml | 21 ++++++++++++++++--- .../orcid-internal-api-security-context.xml | 10 +++++++++ 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/orcid-api-web/src/main/resources/orcid-api-security-context.xml b/orcid-api-web/src/main/resources/orcid-api-security-context.xml index 3b0798ac446..625cc81d4fd 100644 --- a/orcid-api-web/src/main/resources/orcid-api-security-context.xml +++ b/orcid-api-web/src/main/resources/orcid-api-security-context.xml @@ -20,9 +20,24 @@ - - - + + + + + + + + + + + + + + + + + + diff --git a/orcid-internal-api/src/main/resources/orcid-internal-api-security-context.xml b/orcid-internal-api/src/main/resources/orcid-internal-api-security-context.xml index 973ea303cab..6d6c4e5c17e 100644 --- a/orcid-internal-api/src/main/resources/orcid-internal-api-security-context.xml +++ b/orcid-internal-api/src/main/resources/orcid-internal-api-security-context.xml @@ -12,6 +12,16 @@ + + + + + + + + + + From 9af3b71019ca24b36a99fd7e6c3269e2e11d9515 Mon Sep 17 00:00:00 2001 From: Camelia Dumitru Date: Thu, 2 Jul 2026 15:43:20 +0100 Subject: [PATCH 73/77] added orcid vnd to the api status end points --- .../oauth/APIAuthenticationEntryPoint.java | 6 +- .../server/MemberV3ApiServiceImplV3_0.java | 4 +- .../MemberV3ApiServiceImplV3_0Test.java | 92 +++++++++++++++++++ .../orcid-internal-api-security-context.xml | 11 +-- .../InternalApiServiceImplBaseTest.java | 42 +++++++++ .../server/PublicV3ApiServiceImplV3_0.java | 2 +- .../PublicV3ApiServiceImplV3_0Test.java | 92 +++++++++++++++++++ 7 files changed, 234 insertions(+), 15 deletions(-) create mode 100644 orcid-api-web/src/test/java/org/orcid/api/memberV3/server/MemberV3ApiServiceImplV3_0Test.java create mode 100644 orcid-internal-api/src/test/java/org/orcid/internal/server/InternalApiServiceImplBaseTest.java create mode 100644 orcid-pub-web/src/test/java/org/orcid/api/publicV3/server/PublicV3ApiServiceImplV3_0Test.java diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/APIAuthenticationEntryPoint.java b/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/APIAuthenticationEntryPoint.java index 5b78b671f42..f1f032a795e 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/APIAuthenticationEntryPoint.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/APIAuthenticationEntryPoint.java @@ -24,16 +24,16 @@ * For authorization failures (authenticated but lacks permission), see OrcidAPIAccessDeniedHandler (403 Forbidden). */ public class APIAuthenticationEntryPoint implements AuthenticationEntryPoint { - private static final String MISSING_AUTH_CONTEXT_MSG = "Forbidden - Missing authentication context."; private final ObjectMapper objectMapper = new ObjectMapper(); + private static final String FORBIDDEN_MSG = "Forbidden - Missing authentication context."; @Override public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException, ServletException { try { String developerMessage = authException != null && authException.getMessage() != null ? authException.getMessage() - : MISSING_AUTH_CONTEXT_MSG; - HttpStatus status = MISSING_AUTH_CONTEXT_MSG.equals(developerMessage) + : FORBIDDEN_MSG; + HttpStatus status =FORBIDDEN_MSG.equals(developerMessage) ? HttpStatus.FORBIDDEN : HttpStatus.UNAUTHORIZED; diff --git a/orcid-api-web/src/main/java/org/orcid/api/memberV3/server/MemberV3ApiServiceImplV3_0.java b/orcid-api-web/src/main/java/org/orcid/api/memberV3/server/MemberV3ApiServiceImplV3_0.java index 9154e67c50b..0e55e910877 100644 --- a/orcid-api-web/src/main/java/org/orcid/api/memberV3/server/MemberV3ApiServiceImplV3_0.java +++ b/orcid-api-web/src/main/java/org/orcid/api/memberV3/server/MemberV3ApiServiceImplV3_0.java @@ -167,7 +167,7 @@ public Response viewSwaggerO2c() { * @return Plain text message indicating health of service */ @GET - @Produces(value = { MediaType.APPLICATION_JSON }) + @Produces(value = { VND_ORCID_JSON, ORCID_JSON, MediaType.APPLICATION_JSON }) @Path(STATUS_PATH) public Response viewStatusSimple() { httpRequest.setAttribute("skipAccessLog", true); @@ -176,7 +176,7 @@ public Response viewStatusSimple() { } @GET - @Produces(value = { MediaType.APPLICATION_JSON }) + @Produces(value = { VND_ORCID_JSON, ORCID_JSON, MediaType.APPLICATION_JSON }) @Path(API_STATUS_PATH) public Response viewStatusJson() { httpRequest.setAttribute("skipAccessLog", true); diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/MemberV3ApiServiceImplV3_0Test.java b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/MemberV3ApiServiceImplV3_0Test.java new file mode 100644 index 00000000000..fc1c3930f3e --- /dev/null +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV3/server/MemberV3ApiServiceImplV3_0Test.java @@ -0,0 +1,92 @@ +package org.orcid.api.memberV3.server; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; +import static org.orcid.core.api.OrcidApiConstants.ORCID_JSON; +import static org.orcid.core.api.OrcidApiConstants.VND_ORCID_JSON; + +import java.lang.reflect.Method; +import java.util.Arrays; + +import jakarta.servlet.http.HttpServletRequest; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; + +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.orcid.api.memberV3.server.delegator.MemberV3ApiServiceDelegator; +import org.springframework.test.util.ReflectionTestUtils; + +public class MemberV3ApiServiceImplV3_0Test { + + @Mock + @SuppressWarnings("rawtypes") + private MemberV3ApiServiceDelegator serviceDelegator; + + @Mock + private HttpServletRequest httpRequest; + + private MemberV3ApiServiceImplV3_0 service; + + @Before + public void before() { + MockitoAnnotations.initMocks(this); + service = new MemberV3ApiServiceImplV3_0(); + ReflectionTestUtils.setField(service, "serviceDelegator", serviceDelegator); + ReflectionTestUtils.setField(service, "httpRequest", httpRequest); + } + + @Test + public void viewStatusSimpleProducesVendorJson() throws Exception { + assertProduces("viewStatusSimple", VND_ORCID_JSON, ORCID_JSON, MediaType.APPLICATION_JSON); + } + + @Test + public void viewStatusJsonProducesVendorJson() throws Exception { + assertProduces("viewStatusJson", VND_ORCID_JSON, ORCID_JSON, MediaType.APPLICATION_JSON); + } + + @Test + public void viewStatusSimpleDelegatesAndFlagsMonitoring() { + Response expected = Response.ok("ok").build(); + when(serviceDelegator.viewStatusSimple()).thenReturn(expected); + + Response actual = service.viewStatusSimple(); + + assertNotNull(actual); + assertEquals("ok", String.valueOf(actual.getEntity())); + verify(httpRequest).setAttribute("skipAccessLog", true); + verify(httpRequest).setAttribute("isMonitoring", true); + verify(serviceDelegator).viewStatusSimple(); + } + + @Test + public void viewStatusJsonDelegatesAndFlagsMonitoring() { + Response expected = Response.ok("ok").build(); + when(serviceDelegator.viewStatus()).thenReturn(expected); + + Response actual = service.viewStatusJson(); + + assertNotNull(actual); + assertEquals("ok", String.valueOf(actual.getEntity())); + verify(httpRequest).setAttribute("skipAccessLog", true); + verify(httpRequest).setAttribute("isMonitoring", true); + verify(serviceDelegator).viewStatus(); + } + + private void assertProduces(String methodName, String... expectedProduces) throws Exception { + Method method = MemberV3ApiServiceImplV3_0.class.getMethod(methodName); + Produces produces = method.getAnnotation(Produces.class); + + assertNotNull(produces); + for (String expectedProduce : expectedProduces) { + assertTrue(Arrays.asList(produces.value()).contains(expectedProduce)); + } + } +} \ No newline at end of file diff --git a/orcid-internal-api/src/main/resources/orcid-internal-api-security-context.xml b/orcid-internal-api/src/main/resources/orcid-internal-api-security-context.xml index 6d6c4e5c17e..7afe1d3c038 100644 --- a/orcid-internal-api/src/main/resources/orcid-internal-api-security-context.xml +++ b/orcid-internal-api/src/main/resources/orcid-internal-api-security-context.xml @@ -12,15 +12,8 @@ - - - - - - - - - + + diff --git a/orcid-internal-api/src/test/java/org/orcid/internal/server/InternalApiServiceImplBaseTest.java b/orcid-internal-api/src/test/java/org/orcid/internal/server/InternalApiServiceImplBaseTest.java new file mode 100644 index 00000000000..acda79a76cf --- /dev/null +++ b/orcid-internal-api/src/test/java/org/orcid/internal/server/InternalApiServiceImplBaseTest.java @@ -0,0 +1,42 @@ +package org.orcid.internal.server; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import jakarta.ws.rs.core.Response; + +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.orcid.internal.server.delegator.InternalApiServiceDelegator; +import org.springframework.test.util.ReflectionTestUtils; + +public class InternalApiServiceImplBaseTest { + + @Mock + private InternalApiServiceDelegator serviceDelegator; + + private InternalApiServiceImplBase service; + + @Before + public void before() { + MockitoAnnotations.initMocks(this); + service = new InternalApiServiceImplBase(); + ReflectionTestUtils.setField(service, "serviceDelegator", serviceDelegator); + } + + @Test + public void viewStatusTextDelegates() { + Response expected = Response.ok("OK I am here").build(); + when(serviceDelegator.viewStatusText()).thenReturn(expected); + + Response actual = service.viewStatusText(); + + assertNotNull(actual); + assertEquals("OK I am here", String.valueOf(actual.getEntity())); + verify(serviceDelegator).viewStatusText(); + } +} \ No newline at end of file diff --git a/orcid-pub-web/src/main/java/org/orcid/api/publicV3/server/PublicV3ApiServiceImplV3_0.java b/orcid-pub-web/src/main/java/org/orcid/api/publicV3/server/PublicV3ApiServiceImplV3_0.java index 875fa8928f4..8d5777c4a9a 100644 --- a/orcid-pub-web/src/main/java/org/orcid/api/publicV3/server/PublicV3ApiServiceImplV3_0.java +++ b/orcid-pub-web/src/main/java/org/orcid/api/publicV3/server/PublicV3ApiServiceImplV3_0.java @@ -137,7 +137,7 @@ public Response viewStatusSimple() { } @GET - @Produces(value = { MediaType.APPLICATION_JSON }) + @Produces(value = { VND_ORCID_JSON, ORCID_JSON, MediaType.APPLICATION_JSON }) @Path(PUB_STATUS_PATH) public Response viewStatusJson() { httpRequest.setAttribute("skipAccessLog", true); diff --git a/orcid-pub-web/src/test/java/org/orcid/api/publicV3/server/PublicV3ApiServiceImplV3_0Test.java b/orcid-pub-web/src/test/java/org/orcid/api/publicV3/server/PublicV3ApiServiceImplV3_0Test.java new file mode 100644 index 00000000000..e6a7b9b3ffc --- /dev/null +++ b/orcid-pub-web/src/test/java/org/orcid/api/publicV3/server/PublicV3ApiServiceImplV3_0Test.java @@ -0,0 +1,92 @@ +package org.orcid.api.publicV3.server; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; +import static org.orcid.core.api.OrcidApiConstants.ORCID_JSON; +import static org.orcid.core.api.OrcidApiConstants.VND_ORCID_JSON; + +import java.lang.reflect.Method; +import java.util.Arrays; + +import jakarta.servlet.http.HttpServletRequest; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; + +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.orcid.api.publicV3.server.delegator.PublicV3ApiServiceDelegator; +import org.springframework.test.util.ReflectionTestUtils; + +public class PublicV3ApiServiceImplV3_0Test { + + @Mock + @SuppressWarnings("rawtypes") + private PublicV3ApiServiceDelegator serviceDelegator; + + @Mock + private HttpServletRequest httpRequest; + + private PublicV3ApiServiceImplV3_0 service; + + @Before + public void before() { + MockitoAnnotations.initMocks(this); + service = new PublicV3ApiServiceImplV3_0(); + ReflectionTestUtils.setField(service, "serviceDelegator", serviceDelegator); + ReflectionTestUtils.setField(service, "httpRequest", httpRequest); + } + + @Test + public void viewStatusSimpleProducesPlainText() throws Exception { + assertProduces("viewStatusSimple", MediaType.TEXT_PLAIN); + } + + @Test + public void viewStatusJsonProducesVendorJson() throws Exception { + assertProduces("viewStatusJson", VND_ORCID_JSON, ORCID_JSON, MediaType.APPLICATION_JSON); + } + + @Test + public void viewStatusSimpleDelegatesAndFlagsMonitoring() { + Response expected = Response.ok("ok").build(); + when(serviceDelegator.viewStatusSimple()).thenReturn(expected); + + Response actual = service.viewStatusSimple(); + + assertNotNull(actual); + assertEquals("ok", String.valueOf(actual.getEntity())); + verify(httpRequest).setAttribute("skipAccessLog", true); + verify(httpRequest).setAttribute("isMonitoring", true); + verify(serviceDelegator).viewStatusSimple(); + } + + @Test + public void viewStatusJsonDelegatesAndFlagsMonitoring() { + Response expected = Response.ok("ok").build(); + when(serviceDelegator.viewStatus()).thenReturn(expected); + + Response actual = service.viewStatusJson(); + + assertNotNull(actual); + assertEquals("ok", String.valueOf(actual.getEntity())); + verify(httpRequest).setAttribute("skipAccessLog", true); + verify(httpRequest).setAttribute("isMonitoring", true); + verify(serviceDelegator).viewStatus(); + } + + private void assertProduces(String methodName, String... expectedProduces) throws Exception { + Method method = PublicV3ApiServiceImplV3_0.class.getMethod(methodName); + Produces produces = method.getAnnotation(Produces.class); + + assertNotNull(produces); + for (String expectedProduce : expectedProduces) { + assertTrue(Arrays.asList(produces.value()).contains(expectedProduce)); + } + } +} \ No newline at end of file From 7e89bfa11c925ecbc8ba3b8d0c57699a3401dfc6 Mon Sep 17 00:00:00 2001 From: Camelia Dumitru Date: Thu, 2 Jul 2026 17:07:06 +0100 Subject: [PATCH 74/77] Test cases and various status fixes --- .../server/MemberV2ApiServiceImplV2_0.java | 2 +- .../server/MemberV2ApiServiceImplV2_1.java | 2 +- .../server/MemberV2ApiServiceImplV2Test.java | 74 +++++++++++++++++++ .../server/PublicV2ApiServiceImplV2_0.java | 10 ++- .../server/PublicV2ApiServiceImplV2_1.java | 10 ++- .../server/PublicV3ApiServiceImplV3_0.java | 2 +- .../server/PublicV2ApiServiceImplV2Test.java | 74 +++++++++++++++++++ .../PublicV3ApiServiceImplV3_0Test.java | 4 +- 8 files changed, 169 insertions(+), 9 deletions(-) create mode 100644 orcid-api-web/src/test/java/org/orcid/api/memberV2/server/MemberV2ApiServiceImplV2Test.java create mode 100644 orcid-pub-web/src/test/java/org/orcid/api/publicV2/server/PublicV2ApiServiceImplV2Test.java diff --git a/orcid-api-web/src/main/java/org/orcid/api/memberV2/server/MemberV2ApiServiceImplV2_0.java b/orcid-api-web/src/main/java/org/orcid/api/memberV2/server/MemberV2ApiServiceImplV2_0.java index df81a1b024b..13b0ab452b7 100644 --- a/orcid-api-web/src/main/java/org/orcid/api/memberV2/server/MemberV2ApiServiceImplV2_0.java +++ b/orcid-api-web/src/main/java/org/orcid/api/memberV2/server/MemberV2ApiServiceImplV2_0.java @@ -137,7 +137,7 @@ public Response viewSwaggerO2c() { * @return Plain text message indicating health of service */ @GET - @Produces(value = { MediaType.TEXT_PLAIN }) + @Produces(value = { VND_ORCID_JSON, ORCID_JSON, MediaType.APPLICATION_JSON }) @Path(STATUS_PATH) public Response viewStatusText() { return serviceDelegator.viewStatusText(); diff --git a/orcid-api-web/src/main/java/org/orcid/api/memberV2/server/MemberV2ApiServiceImplV2_1.java b/orcid-api-web/src/main/java/org/orcid/api/memberV2/server/MemberV2ApiServiceImplV2_1.java index dfa6e5343a5..763924c604e 100644 --- a/orcid-api-web/src/main/java/org/orcid/api/memberV2/server/MemberV2ApiServiceImplV2_1.java +++ b/orcid-api-web/src/main/java/org/orcid/api/memberV2/server/MemberV2ApiServiceImplV2_1.java @@ -138,7 +138,7 @@ public Response viewSwaggerO2c() { * @return Plain text message indicating health of service */ @GET - @Produces(value = { MediaType.TEXT_PLAIN }) + @Produces(value = { VND_ORCID_JSON, ORCID_JSON, MediaType.APPLICATION_JSON }) @Path(STATUS_PATH) public Response viewStatusText() { return serviceDelegator.viewStatusText(); diff --git a/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/MemberV2ApiServiceImplV2Test.java b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/MemberV2ApiServiceImplV2Test.java new file mode 100644 index 00000000000..037f6295e84 --- /dev/null +++ b/orcid-api-web/src/test/java/org/orcid/api/memberV2/server/MemberV2ApiServiceImplV2Test.java @@ -0,0 +1,74 @@ +package org.orcid.api.memberV2.server; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.when; +import static org.orcid.core.api.OrcidApiConstants.ORCID_JSON; +import static org.orcid.core.api.OrcidApiConstants.VND_ORCID_JSON; + +import java.lang.reflect.Method; +import java.util.Arrays; + +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; + +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.orcid.api.memberV2.server.delegator.MemberV2ApiServiceDelegator; +import org.springframework.test.util.ReflectionTestUtils; + +public class MemberV2ApiServiceImplV2Test { + + @Mock + @SuppressWarnings("rawtypes") + private MemberV2ApiServiceDelegator serviceDelegator; + + private MemberV2ApiServiceImplV2_0 serviceV20; + private MemberV2ApiServiceImplV2_1 serviceV21; + + @Before + public void before() { + MockitoAnnotations.initMocks(this); + serviceV20 = new MemberV2ApiServiceImplV2_0(); + serviceV21 = new MemberV2ApiServiceImplV2_1(); + ReflectionTestUtils.setField(serviceV20, "serviceDelegator", serviceDelegator); + ReflectionTestUtils.setField(serviceV21, "serviceDelegator", serviceDelegator); + } + + @Test + public void statusMethodsProduceVendorJson() throws Exception { + assertProduces(serviceV20, "viewStatusText", VND_ORCID_JSON, ORCID_JSON, MediaType.APPLICATION_JSON); + assertProduces(serviceV21, "viewStatusText", VND_ORCID_JSON, ORCID_JSON, MediaType.APPLICATION_JSON); + } + + @Test + public void statusMethodsDelegateAndFlagMonitoring() { + Response expected = Response.ok("ok").build(); + when(serviceDelegator.viewStatusText()).thenReturn(expected); + + Response actual20 = serviceV20.viewStatusText(); + Response actual21 = serviceV21.viewStatusText(); + + assertNotNull(actual20); + assertNotNull(actual21); + assertEquals("ok", String.valueOf(actual20.getEntity())); + assertEquals("ok", String.valueOf(actual21.getEntity())); + verify(serviceDelegator, times(2)).viewStatusText(); + } + + private void assertProduces(Object service, String methodName, String... expectedProduces) throws Exception { + Method method = service.getClass().getMethod(methodName); + Produces produces = method.getAnnotation(Produces.class); + + assertNotNull(produces); + for (String expectedProduce : expectedProduces) { + assertTrue(Arrays.asList(produces.value()).contains(expectedProduce)); + } + } +} \ No newline at end of file diff --git a/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/PublicV2ApiServiceImplV2_0.java b/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/PublicV2ApiServiceImplV2_0.java index 99ec5427e00..81f36c18e8e 100644 --- a/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/PublicV2ApiServiceImplV2_0.java +++ b/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/PublicV2ApiServiceImplV2_0.java @@ -3,7 +3,6 @@ import static org.orcid.core.api.OrcidApiConstants.ACTIVITIES; import static org.orcid.core.api.OrcidApiConstants.ADDRESS; import static org.orcid.core.api.OrcidApiConstants.BIOGRAPHY; -import static org.orcid.core.api.OrcidApiConstants.BULK_WORKS; import static org.orcid.core.api.OrcidApiConstants.CLIENT_PATH; import static org.orcid.core.api.OrcidApiConstants.EDUCATION; import static org.orcid.core.api.OrcidApiConstants.EDUCATIONS; @@ -27,6 +26,7 @@ import static org.orcid.core.api.OrcidApiConstants.PERSON; import static org.orcid.core.api.OrcidApiConstants.PERSONAL_DETAILS; import static org.orcid.core.api.OrcidApiConstants.PUTCODE; +import static org.orcid.core.api.OrcidApiConstants.BULK_WORKS; import static org.orcid.core.api.OrcidApiConstants.RESEARCHER_URLS; import static org.orcid.core.api.OrcidApiConstants.SEARCH_PATH; import static org.orcid.core.api.OrcidApiConstants.STATUS_PATH; @@ -39,7 +39,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; - import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; import jakarta.ws.rs.DefaultValue; @@ -109,6 +108,13 @@ public Response viewStatusText() { return serviceDelegator.viewStatusText(); } + @GET + @Produces(value = { VND_ORCID_JSON, ORCID_JSON, MediaType.APPLICATION_JSON }) + @Path(STATUS_PATH) + public Response viewStatusJson() { + return serviceDelegator.viewStatusText(); + } + @GET @Produces(value = { VND_ORCID_XML, ORCID_XML, MediaType.APPLICATION_XML, VND_ORCID_JSON, ORCID_JSON, MediaType.APPLICATION_JSON }) @Path(ACTIVITIES) diff --git a/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/PublicV2ApiServiceImplV2_1.java b/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/PublicV2ApiServiceImplV2_1.java index f91dd82a052..f0f5de0c3df 100644 --- a/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/PublicV2ApiServiceImplV2_1.java +++ b/orcid-pub-web/src/main/java/org/orcid/api/publicV2/server/PublicV2ApiServiceImplV2_1.java @@ -3,7 +3,6 @@ import static org.orcid.core.api.OrcidApiConstants.ACTIVITIES; import static org.orcid.core.api.OrcidApiConstants.ADDRESS; import static org.orcid.core.api.OrcidApiConstants.BIOGRAPHY; -import static org.orcid.core.api.OrcidApiConstants.BULK_WORKS; import static org.orcid.core.api.OrcidApiConstants.CLIENT_PATH; import static org.orcid.core.api.OrcidApiConstants.EDUCATION; import static org.orcid.core.api.OrcidApiConstants.EDUCATIONS; @@ -27,6 +26,7 @@ import static org.orcid.core.api.OrcidApiConstants.PERSON; import static org.orcid.core.api.OrcidApiConstants.PERSONAL_DETAILS; import static org.orcid.core.api.OrcidApiConstants.PUTCODE; +import static org.orcid.core.api.OrcidApiConstants.BULK_WORKS; import static org.orcid.core.api.OrcidApiConstants.RESEARCHER_URLS; import static org.orcid.core.api.OrcidApiConstants.SEARCH_PATH; import static org.orcid.core.api.OrcidApiConstants.STATUS_PATH; @@ -39,7 +39,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; - import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; import jakarta.ws.rs.DefaultValue; @@ -111,6 +110,13 @@ public Response viewStatusText() { return serviceDelegator.viewStatusText(); } + @GET + @Produces(value = { VND_ORCID_JSON, ORCID_JSON, MediaType.APPLICATION_JSON }) + @Path(STATUS_PATH) + public Response viewStatusJson() { + return serviceDelegator.viewStatusText(); + } + @GET @Produces(value = { VND_ORCID_XML, ORCID_XML, MediaType.APPLICATION_XML, VND_ORCID_JSON, ORCID_JSON, MediaType.APPLICATION_JSON }) @Path(ACTIVITIES) diff --git a/orcid-pub-web/src/main/java/org/orcid/api/publicV3/server/PublicV3ApiServiceImplV3_0.java b/orcid-pub-web/src/main/java/org/orcid/api/publicV3/server/PublicV3ApiServiceImplV3_0.java index 8d5777c4a9a..0aada2790bf 100644 --- a/orcid-pub-web/src/main/java/org/orcid/api/publicV3/server/PublicV3ApiServiceImplV3_0.java +++ b/orcid-pub-web/src/main/java/org/orcid/api/publicV3/server/PublicV3ApiServiceImplV3_0.java @@ -128,7 +128,7 @@ public Response viewSwagger() { } @GET - @Produces(value = { MediaType.APPLICATION_JSON }) + @Produces(value = { VND_ORCID_JSON, ORCID_JSON, MediaType.APPLICATION_JSON }) @Path(STATUS_PATH) public Response viewStatusSimple() { httpRequest.setAttribute("skipAccessLog", true); diff --git a/orcid-pub-web/src/test/java/org/orcid/api/publicV2/server/PublicV2ApiServiceImplV2Test.java b/orcid-pub-web/src/test/java/org/orcid/api/publicV2/server/PublicV2ApiServiceImplV2Test.java new file mode 100644 index 00000000000..d5bd9a60270 --- /dev/null +++ b/orcid-pub-web/src/test/java/org/orcid/api/publicV2/server/PublicV2ApiServiceImplV2Test.java @@ -0,0 +1,74 @@ +package org.orcid.api.publicV2.server; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.when; +import static org.orcid.core.api.OrcidApiConstants.ORCID_JSON; +import static org.orcid.core.api.OrcidApiConstants.VND_ORCID_JSON; + +import java.lang.reflect.Method; +import java.util.Arrays; + +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; + +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.orcid.api.publicV2.server.delegator.PublicV2ApiServiceDelegator; +import org.springframework.test.util.ReflectionTestUtils; + +public class PublicV2ApiServiceImplV2Test { + + @Mock + @SuppressWarnings("rawtypes") + private PublicV2ApiServiceDelegator serviceDelegator; + + private PublicV2ApiServiceImplV2_0 serviceV20; + private PublicV2ApiServiceImplV2_1 serviceV21; + + @Before + public void before() { + MockitoAnnotations.initMocks(this); + serviceV20 = new PublicV2ApiServiceImplV2_0(); + serviceV21 = new PublicV2ApiServiceImplV2_1(); + ReflectionTestUtils.setField(serviceV20, "serviceDelegator", serviceDelegator); + ReflectionTestUtils.setField(serviceV21, "serviceDelegator", serviceDelegator); + } + + @Test + public void statusJsonMethodsProduceVendorJson() throws Exception { + assertProduces(serviceV20, "viewStatusJson", VND_ORCID_JSON, ORCID_JSON, MediaType.APPLICATION_JSON); + assertProduces(serviceV21, "viewStatusJson", VND_ORCID_JSON, ORCID_JSON, MediaType.APPLICATION_JSON); + } + + @Test + public void statusMethodsDelegateAndFlagMonitoring() { + Response expected = Response.ok("ok").build(); + when(serviceDelegator.viewStatusText()).thenReturn(expected); + + Response actual20 = serviceV20.viewStatusText(); + Response actual21 = serviceV21.viewStatusText(); + + assertNotNull(actual20); + assertNotNull(actual21); + assertEquals("ok", String.valueOf(actual20.getEntity())); + assertEquals("ok", String.valueOf(actual21.getEntity())); + verify(serviceDelegator, times(2)).viewStatusText(); + } + + private void assertProduces(Object service, String methodName, String... expectedProduces) throws Exception { + Method method = service.getClass().getMethod(methodName); + Produces produces = method.getAnnotation(Produces.class); + + assertNotNull(produces); + for (String expectedProduce : expectedProduces) { + assertTrue(Arrays.asList(produces.value()).contains(expectedProduce)); + } + } +} \ No newline at end of file diff --git a/orcid-pub-web/src/test/java/org/orcid/api/publicV3/server/PublicV3ApiServiceImplV3_0Test.java b/orcid-pub-web/src/test/java/org/orcid/api/publicV3/server/PublicV3ApiServiceImplV3_0Test.java index e6a7b9b3ffc..61f9a207ed4 100644 --- a/orcid-pub-web/src/test/java/org/orcid/api/publicV3/server/PublicV3ApiServiceImplV3_0Test.java +++ b/orcid-pub-web/src/test/java/org/orcid/api/publicV3/server/PublicV3ApiServiceImplV3_0Test.java @@ -43,8 +43,8 @@ public void before() { } @Test - public void viewStatusSimpleProducesPlainText() throws Exception { - assertProduces("viewStatusSimple", MediaType.TEXT_PLAIN); + public void viewStatusSimpleProducesVendorJson() throws Exception { + assertProduces("viewStatusSimple", VND_ORCID_JSON, ORCID_JSON, MediaType.APPLICATION_JSON); } @Test From 83c1a6dd9a15e3745e1da6b1cf4e51814772bbe8 Mon Sep 17 00:00:00 2001 From: Camelia Dumitru Date: Fri, 3 Jul 2026 12:55:40 +0100 Subject: [PATCH 75/77] Upgraded the c3p0 datasource to hikaricp --- orcid-activities-indexer/pom.xml | 2 +- .../orcid-activities-indexer-web-context.xml | 21 +++-- orcid-api-common/pom.xml | 2 +- .../resources/orcid-internal-api-context.xml | 45 +++++------ orcid-message-listener/pom.xml | 2 +- .../orcid-message-listener-web-context.xml | 22 +++--- orcid-persistence/pom.xml | 2 +- .../resources/orcid-persistence-context.xml | 76 ++++++++----------- orcid-web/pom.xml | 2 +- pom.xml | 2 +- 10 files changed, 80 insertions(+), 96 deletions(-) diff --git a/orcid-activities-indexer/pom.xml b/orcid-activities-indexer/pom.xml index ab7fba4ae1c..5a0da3a05fc 100644 --- a/orcid-activities-indexer/pom.xml +++ b/orcid-activities-indexer/pom.xml @@ -110,7 +110,7 @@ org.hibernate.orm - hibernate-c3p0 + hibernate-hikaricp org.hibernate.validator diff --git a/orcid-activities-indexer/src/main/resources/orcid-activities-indexer-web-context.xml b/orcid-activities-indexer/src/main/resources/orcid-activities-indexer-web-context.xml index 9c9a449c66a..4358a06b0e5 100644 --- a/orcid-activities-indexer/src/main/resources/orcid-activities-indexer-web-context.xml +++ b/orcid-activities-indexer/src/main/resources/orcid-activities-indexer-web-context.xml @@ -88,19 +88,18 @@ - - + + + - + - - - - - - - - + + + + + + diff --git a/orcid-api-common/pom.xml b/orcid-api-common/pom.xml index 3de153f1bd4..71d7df603b9 100644 --- a/orcid-api-common/pom.xml +++ b/orcid-api-common/pom.xml @@ -121,7 +121,7 @@ org.hibernate.orm - hibernate-c3p0 + hibernate-hikaricp org.hibernate.validator diff --git a/orcid-internal-api/src/main/resources/orcid-internal-api-context.xml b/orcid-internal-api/src/main/resources/orcid-internal-api-context.xml index cfce58c59f0..7c95c4175df 100644 --- a/orcid-internal-api/src/main/resources/orcid-internal-api-context.xml +++ b/orcid-internal-api/src/main/resources/orcid-internal-api-context.xml @@ -17,36 +17,33 @@ - - + + + - + - - - - - - - - - + + + + + + - - + + + - + - - - - - - - - - + + + + + + + diff --git a/orcid-message-listener/pom.xml b/orcid-message-listener/pom.xml index 2b77cb66613..92c5e230789 100644 --- a/orcid-message-listener/pom.xml +++ b/orcid-message-listener/pom.xml @@ -105,7 +105,7 @@ org.hibernate.orm - hibernate-c3p0 + hibernate-hikaricp org.hibernate.validator diff --git a/orcid-message-listener/src/main/resources/orcid-message-listener-web-context.xml b/orcid-message-listener/src/main/resources/orcid-message-listener-web-context.xml index 035e64aa311..17fd290aef8 100644 --- a/orcid-message-listener/src/main/resources/orcid-message-listener-web-context.xml +++ b/orcid-message-listener/src/main/resources/orcid-message-listener-web-context.xml @@ -119,20 +119,18 @@ - - + + + - + - - - - - - - - - + + + + + + diff --git a/orcid-persistence/pom.xml b/orcid-persistence/pom.xml index 81300d38534..736fbd0a3b9 100644 --- a/orcid-persistence/pom.xml +++ b/orcid-persistence/pom.xml @@ -115,7 +115,7 @@ org.hibernate.orm - hibernate-c3p0 + hibernate-hikaricp org.hibernate.validator diff --git a/orcid-persistence/src/main/resources/orcid-persistence-context.xml b/orcid-persistence/src/main/resources/orcid-persistence-context.xml index 34f899cc22b..7a9e2e7364c 100644 --- a/orcid-persistence/src/main/resources/orcid-persistence-context.xml +++ b/orcid-persistence/src/main/resources/orcid-persistence-context.xml @@ -349,40 +349,33 @@ - - - + + + - + - - - - - - - - - - - - - - - + + + + + + + + + + + - + - - - - - - - - - - + + + + + + + @@ -400,21 +393,18 @@ - - - + + + - + - - - - - - - - - + + + + + + diff --git a/orcid-web/pom.xml b/orcid-web/pom.xml index 6b6e567058c..e5675df2d4c 100644 --- a/orcid-web/pom.xml +++ b/orcid-web/pom.xml @@ -155,7 +155,7 @@ org.hibernate.orm - hibernate-c3p0 + hibernate-hikaricp org.hibernate.validator diff --git a/pom.xml b/pom.xml index 3adea376f99..32152ee416d 100644 --- a/pom.xml +++ b/pom.xml @@ -755,7 +755,7 @@ the software. org.hibernate.orm - hibernate-c3p0 + hibernate-hikaricp 6.4.4.Final From 9a9d6eb19f33bde8a1a5687b8c5d9c7d91b58e3d Mon Sep 17 00:00:00 2001 From: Camelia Dumitru Date: Mon, 6 Jul 2026 12:37:07 +0100 Subject: [PATCH 76/77] Developer message fixes mapi for cypress --- .../security/oauth/APIAuthenticationEntryPoint.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/APIAuthenticationEntryPoint.java b/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/APIAuthenticationEntryPoint.java index f1f032a795e..0db19be2b0f 100644 --- a/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/APIAuthenticationEntryPoint.java +++ b/orcid-api-common/src/main/java/org/orcid/api/common/security/oauth/APIAuthenticationEntryPoint.java @@ -25,7 +25,7 @@ */ public class APIAuthenticationEntryPoint implements AuthenticationEntryPoint { private final ObjectMapper objectMapper = new ObjectMapper(); - private static final String FORBIDDEN_MSG = "Forbidden - Missing authentication context."; + private static final String FORBIDDEN_MSG = "An Authentication object was not found in the SecurityContext"; @Override public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException, ServletException { @@ -42,7 +42,12 @@ public void commence(HttpServletRequest request, HttpServletResponse response, A OrcidError orcidError = new OrcidError(); orcidError.setResponseCode(status.value()); - orcidError.setDeveloperMessage(developerMessage); + if(HttpStatus.FORBIDDEN.equals(status)) { + orcidError.setDeveloperMessage("Forbidden: " + developerMessage); + } + else { + orcidError.setDeveloperMessage( developerMessage); + } Map payload = new LinkedHashMap<>(); payload.put("response-code", orcidError.getResponseCode()); From 55c51618503753a7bea88d86363f1b029a3fd240 Mon Sep 17 00:00:00 2001 From: Camelia Dumitru Date: Wed, 8 Jul 2026 15:55:53 +0100 Subject: [PATCH 77/77] Fixed unit tests and papi class cast exception --- .../manager/impl/InstitutionalSignInManagerImpl.java | 10 +++++----- .../core/manager/InstitutionalSignInManagerTest.java | 5 ++--- .../orcid-message-listener-test-context.xml | 6 +++--- .../dao/impl/PublicApiDailyRateLimitDaoImpl.java | 12 ++++++------ .../orcid/scheduler/report/PapiDailyLimitReport.java | 2 ++ .../web/controllers/AffiliationsControllerTest.java | 7 ++----- 6 files changed, 20 insertions(+), 22 deletions(-) diff --git a/orcid-core/src/main/java/org/orcid/core/manager/impl/InstitutionalSignInManagerImpl.java b/orcid-core/src/main/java/org/orcid/core/manager/impl/InstitutionalSignInManagerImpl.java index bc67542aaf4..edeb6b15d87 100644 --- a/orcid-core/src/main/java/org/orcid/core/manager/impl/InstitutionalSignInManagerImpl.java +++ b/orcid-core/src/main/java/org/orcid/core/manager/impl/InstitutionalSignInManagerImpl.java @@ -52,8 +52,8 @@ public class InstitutionalSignInManagerImpl implements InstitutionalSignInManage @Resource protected ClientDetailsEntityCacheManager clientDetailsEntityCacheManager; - @Resource(name = "clientDetailsManagerReadOnlyV3") - private ClientDetailsManagerReadOnly clientDetailsManagerReadOnly; + @Resource + protected OrcidOauth2TokenDetailService orcidOauth2TokenDetailService; @Resource(name = "notificationManagerV3") private NotificationManager notificationManager; @@ -105,7 +105,7 @@ public void sendNotification(String userOrcid, String providerId) throws Unsuppo try { // Add the acknowledgement notification if the user doesn't know about the client yet ClientDetailsEntity clientDetails = clientDetailsEntityCacheManager.retrieveByIdP(providerId); - boolean clientKnowsUser = clientDetailsManagerReadOnly.doesClientKnowUser(clientDetails.getClientId(), userOrcid); + boolean clientKnowsUser = orcidOauth2TokenDetailService.doesClientKnowUser(clientDetails.getClientId(), userOrcid); // If the client doesn't know about the user yet, send a // notification if (!clientKnowsUser) { @@ -216,7 +216,7 @@ private void populateInsitutionNames(String discoFeedSource) throws IOException, // Ensure we got a successful response if (response.statusCode() != 200) { - throw new RuntimeException("Failed to fetch DiscoFeed. HTTP Status: " + response.statusCode()); + throw new IOException("Failed to fetch DiscoFeed. HTTP Status: " + response.statusCode()); } // 2. Parse the JSON array @@ -246,4 +246,4 @@ private void populateInsitutionNames(String discoFeedSource) throws IOException, } } } -} +} \ No newline at end of file diff --git a/orcid-core/src/test/java/org/orcid/core/manager/InstitutionalSignInManagerTest.java b/orcid-core/src/test/java/org/orcid/core/manager/InstitutionalSignInManagerTest.java index 592296edafe..15e0c28fa0e 100644 --- a/orcid-core/src/test/java/org/orcid/core/manager/InstitutionalSignInManagerTest.java +++ b/orcid-core/src/test/java/org/orcid/core/manager/InstitutionalSignInManagerTest.java @@ -31,7 +31,6 @@ import org.orcid.core.manager.v3.NotificationManager; import org.orcid.core.oauth.OrcidOauth2TokenDetailService; import org.orcid.core.utils.JsonUtils; -import org.orcid.core.manager.v3.read_only.ClientDetailsManagerReadOnly; import org.orcid.persistence.dao.UserConnectionDao; import org.orcid.persistence.jpa.entities.ClientDetailsEntity; import org.orcid.persistence.jpa.entities.UserconnectionEntity; @@ -55,7 +54,7 @@ public class InstitutionalSignInManagerTest { private NotificationManager mock_notificationManager; @Mock - private ClientDetailsManagerReadOnly mock_clientDetailsManagerReadOnly; + private OrcidOauth2TokenDetailService mock_orcidOauth2TokenDetailService; @Mock private OrcidUrlManager mock_orcidUrlManager; @@ -95,7 +94,7 @@ public void testDontSendNotificationIfClientKnowUser() throws UnsupportedEncodin when(mock_userConnectionDao.findByProviderIdAndProviderUserIdAndIdType(anyString(), anyString(), anyString())).thenReturn(null); when(mock_clientDetailsEntityCacheManager.retrieveByIdP(anyString())).thenReturn(testClient); - when(mock_clientDetailsManagerReadOnly.doesClientKnowUser(clientId, userOrcid)).thenReturn(true); + when(mock_orcidOauth2TokenDetailService.doesClientKnowUser(clientId, userOrcid)).thenReturn(true); institutionalSignInManager.createUserConnectionAndNotify("idType", "remoteUserId", "displayName", "providerId", userOrcid, Collections. emptyMap()); diff --git a/orcid-message-listener/src/test/resources/orcid-message-listener-test-context.xml b/orcid-message-listener/src/test/resources/orcid-message-listener-test-context.xml index cd8924805cd..5dd8ba40bc1 100644 --- a/orcid-message-listener/src/test/resources/orcid-message-listener-test-context.xml +++ b/orcid-message-listener/src/test/resources/orcid-message-listener-test-context.xml @@ -120,10 +120,10 @@ - - + + - + diff --git a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/PublicApiDailyRateLimitDaoImpl.java b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/PublicApiDailyRateLimitDaoImpl.java index 602d72bdee1..e6bfa469008 100644 --- a/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/PublicApiDailyRateLimitDaoImpl.java +++ b/orcid-persistence/src/main/java/org/orcid/persistence/dao/impl/PublicApiDailyRateLimitDaoImpl.java @@ -61,9 +61,9 @@ public int countClientRequestsWithLimitExceeded(LocalDate requestDate, int limit "SELECT count(*) FROM public_api_daily_rate_limit p WHERE NOT ((p.client_id = '' OR p.client_id IS NULL)) and p.request_date=:requestDate and p.request_count >=:requestCount"); nativeQuery.setParameter("requestDate", requestDate); nativeQuery.setParameter("requestCount", limit); - List tsList = nativeQuery.getResultList(); - if (tsList != null && !tsList.isEmpty()) { - return tsList.get(0).intValue(); + Object result = nativeQuery.getSingleResult(); + if (result instanceof Number) { + return ((Number) result).intValue(); } return 0; @@ -74,9 +74,9 @@ public int countAnonymousRequestsWithLimitExceeded(LocalDate requestDate, int li "SELECT count(*) FROM public_api_daily_rate_limit p WHERE ((p.client_id = '' OR p.client_id IS NULL)) and p.request_date=:requestDate and p.request_count >=:requestCount"); nativeQuery.setParameter("requestDate", requestDate); nativeQuery.setParameter("requestCount", limit); - List tsList = nativeQuery.getResultList(); - if (tsList != null && !tsList.isEmpty()) { - return tsList.get(0).intValue(); + Object result = nativeQuery.getSingleResult(); + if (result instanceof Number) { + return ((Number) result).intValue(); } return 0; } diff --git a/orcid-scheduler-web/src/main/java/org/orcid/scheduler/report/PapiDailyLimitReport.java b/orcid-scheduler-web/src/main/java/org/orcid/scheduler/report/PapiDailyLimitReport.java index 4fbba91c5ad..3e2522f0a08 100644 --- a/orcid-scheduler-web/src/main/java/org/orcid/scheduler/report/PapiDailyLimitReport.java +++ b/orcid-scheduler-web/src/main/java/org/orcid/scheduler/report/PapiDailyLimitReport.java @@ -96,7 +96,9 @@ public void papiDailyLimitReport() { slackManager.sendAlert(SLACK_STATS_MSG, slackChannel, webhookUrl, webhookUrl); } catch (Exception ex) { + LOG.error("Exception when storing papi limit redis data to DB." , ex); slackManager.sendAlert("!!!!! Exception when storing papi limit redis data to DB. Check the logs" + "\n" + ex.toString() , slackChannel, webhookUrl, webhookUrl); + } } diff --git a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/AffiliationsControllerTest.java b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/AffiliationsControllerTest.java index c8d18a544d1..b800236c950 100644 --- a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/AffiliationsControllerTest.java +++ b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/AffiliationsControllerTest.java @@ -15,7 +15,6 @@ import org.orcid.core.manager.v3.ProfileEntityManager; import org.orcid.core.manager.v3.read_only.AffiliationsManagerReadOnly; import org.orcid.core.manager.v3.read_only.EmailManagerReadOnly; -import org.orcid.core.security.visibility.filter.VisibilityFilter; import org.orcid.jaxb.model.v3.release.record.Affiliation; import org.orcid.jaxb.model.v3.release.record.Employment; import org.orcid.jaxb.model.v3.release.record.summary.EmploymentSummary; @@ -26,8 +25,8 @@ import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpSession; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpSession; import java.util.*; import static org.junit.Assert.*; @@ -59,8 +58,6 @@ public class AffiliationsControllerTest { @Mock private ProfileEntityManager profileEntityManager; - @Mock - private VisibilityFilter visibilityFilter; @Mock private LocaleManager localeManager;