Last updated Oct 9, 2024

List of all breaking changes to the Java and REST APIs introduced in Jira Software 10.0 and Jira Service Management 10.0

The following table lists all of the breaking changes that have already been introduced to the Jira Software 10.0 and Jira Service Management 10.0 Java and REST APIs. The content of the table is kept up-to-date with everly EAP release of Jira Software 10.0 and Jira Service Management 10.0.

ChangeInstructionsImplemented
Deprecated com.atlassian.jira.issue.table.IssueTable provided by jira-api removedUse com.atlassian.jira.issue.table.IssueTable provided by jira-issue-nav-plugin instead.EAP 02

Removed:

  • com.atlassian.jira.rest.Dates.DateAdapter
  • com.atlassian.jira.rest.Dates.DateTimeAdapter
For marshalling and unmarshalling, use the Jackson-friendly serializers and deserializers:
  • @JsonSerialize(using = Dates.DateSerializer.class)
  • @JsonDeserialize(using = Dates.DateDeserializer.class)
EAP 02
Removed com.atlassian.jira:jira-func-tests-legacyMigrate your code from BaseJIRAWebTest (Junit3) to FuncTestCase (Junit 4+). This module has been deprecated since Jira 7.EAP 02
The doHealthCheck request parameter was removed from the rest/api/2/serverInfo endpoint together with the healthChecks field from the response.Use jira-healthcheck-plugin instead.EAP 02
Removed rest/api/1.0/endpointNo alternative provided.EAP 02

Removed:

  • com.atlassian.jira.rest.v2.issue.project.ProjectRoleBean
  • com.atlassian.jira.rest.v2.issue.project.RoleActorBean

Instead, use:

  • com.atlassian.jira.rest.api.project.ProjectRoleBean
  • com.atlassian.jira.rest.api.project.RoleActorBean
EAP 02
Removed com.atlassian.jira.rest.v1.model.ValueCollectionNo alternative provided.EAP 02
  • com.atlassian.jira.testkit.client.restclient.Response class of jira-testkit-client has been deprecated
  • com.atlassian.jira.testkit.client.RestApiClient.toResponse(...) accepts RestCall functional interface
Use com.atlassian.jira.testkit.client.restclient.ParsedResponse

Use new RestCall interface or lambda in place of method interface instead.
EAP 02
Jira table column update for Oracle and Mysql.No actions required, schema will be migrated on restart.

Impacted tables include: changegroup jiraissue jiraaction
EAP 02
com.atlassian.jira.avatar.AvatarManager
#getAvatarBaseDirectory
Use AvatarManager#readAvatarData() to access avatar data directly.EAP 02
Jira Service Management Upgrade from Groovy 2 to Groovy 4 in AssetsMigrate all groovy code to be compatible with Groovy 4.EAP 03
Jira Service Management Removal of the http-builder library from Groovy console and scripts.Switch to the native Groovy GET and POST methods.EAP 03
com.atlassian.jira.util.AttachmentConfigUse AttachmentConfigManager#getTemporaryAttachmentDirectory() instead.EAP 03
com.atlassian.jira.issue.attachment.AttachmentStore

Use alternative methods provided by:

  • AttachmentManager
  • ThumbnailManager
  • AttachmentConfigManager
EAP 03
com.atlassian.jira.util.AttachmentUtils

To create, read, or delete attachment and thumbnail data directly, Use the methods available in AttachmentManager and ThumbnailManager.

To find the temporary attachment directory, use AttachmentConfigManager#getTemporaryAttachmentDirectory().

The attachment and thumbnail directories for a particular issue are no longer exposed. Instead, use:

  • getThumbnailDirectory()
  • getAttachmentDirectory()

To manage individual attachments or store other data elsewhere, use:

  • AttachmentManager
  • ThumbnailManager

getAttachmentStore() - AttachmentStore has been removed.

getTemporaryAttachmentDirectory() - Use AttachmentConfigManager#getTemporaryAttachmentDirectory() instead.

getAttachmentFile and getThumbnailFile methods - Use AttachmentManager and ThumbnalManager eg. AttachmentManager#streamAttachmentContent.

checkValidAttachmentDirectory and checkValidTemporaryAttachmentDirectory - These checks can be omitted. Jira checks the validity of paths during startup.

EAP 03
AttachmentManager#attachmentsEnabled()Use AttachmentConfigManager#isAttachmentsEnabled() instead.EAP 03
AttachmentManager#disableAttachments()No alternative providedEAP 03
AttachmentManager#createAttachmentCopySourceFile and previously deprecated overloads of AttachmentManager#createAttachmentUse Use AttachmentManager#createAttachment(CreateAttachmentParamsBean) instead.EAP 03
com.atlassian.jira.issue.attachment.CreateAttachmentParamsBean#CreateAttachmentParamsBeanInstead, use the provided builder:
com.atlassian.jira.issue.attachment.CreateAttachmentParamsBean.Builder
EAP 03
AttachmentManager#deleteAttachmentDirectory(Issue)To delete an issue, use IssueManager#deleteIssue instead.EAP 03
Remove deprecated REST API endpoint GET /rest/api/2/group provided by com.atlassian.jira.rest.v2.issue.GroupResource#getGroupGET /rest/api/2/group (docs) will be removed. Use Use GET /rest/api/2/group/member instead (docs) provided by com.atlassian.jira.rest.v2.issue.GroupResource#getUsersFromGroup instead.EAP 03
Disabling runtime compilation of JavaServer Pages (JSP).

Affected vendors have been contacted.

There is no longer any support for modifying the JSP.

Public documentation will be updated.

EAP 03
Public endpoint DELETE /rest/api/2/version/{id}
provided by
com.atlassian.jira.rest.v2.issue.VersionResource#delete(java.lang.String, java.lang.String, java.lang.String) removed along with public API methods:
com.atlassian.jira.bc.project.version.VersionService#delete(JiraServiceContext, ValidationResult)
com.atlassian.jira.project.version.VersionManager#deleteVersion(ApplicationUser, Version, Option<Version>, Option<Version>)
Use
POST /rest/api/2/version/{id}/removeAndSwap
provided by
com.atlassian.jira.rest.v2.issue.VersionResource#delete(String, DeleteAndReplaceVersionBean)
For the Public API use the following replacements:
com.atlassian.jira.bc.project.version.VersionService#deleteVersionAndSwap
com.atlassian.jira.project.version.VersionManager#deleteVersionAndSwap
EAP 03
Velocity upgraded to 1.6.4.atlassian_28 to receive path traversal preventionN/AEAP 03
Block Velocity file URL access in webapp directoryWe don't use any .vm files in the webapp directory. Not breaking for Jira itself (in theory).EAP 03
com.atlassian.jira.bc.license.JiraLicenseService.ValidationResult#getLicenseVersion()Use #getLicenseDetails().getLicenseVersion() instead.EAP 03
com.atlassian.jira.bc.license.JiraLicenseService.ValidationResult#getTotalUserCount()Use one of the following:
  • com.atlassian.jira.application.ApplicationAuthorizationService#getUserCount(ApplicationKey)
  • com.atlassian.jira.user.util.UserManager#getTotalUserCount()
EAP 03
com.atlassian.jira.bc.portal.PortalPageService#updatePortalPageUnconditionally(com.atlassian.jira.bc.JiraServiceContext, com.atlassian.jira.user.ApplicationUser, com.atlassian.jira.portal.PortalPage) removedUse one of the following:
  • #updatePortalPageOwner
  • #updatePortalPage
  • PortalPageManager#update
EAP 03
com.atlassian.jira.bc.project.version.VersionService#validateVersionDetails(com.atlassian.jira.user.ApplicationUser, com.atlassian.jira.project.version.Version, java.lang.String, java.lang.String) removedUse #validateUpdate(com.atlassian.jira.user.ApplicationUser,com.atlassian.jira.bc.project.version.VersionService.VersionBuilder) instead.EAP 03
com.atlassian.jira.bc.project.version.VersionService#validateReleaseDate(com.atlassian.jira.user.ApplicationUser, com.atlassian.jira.project.version.Version, java.lang.String) removedUse #validateUpdate(com.atlassian.jira.user.ApplicationUser,com.atlassian.jira.bc.project.version.VersionService.VersionBuilder) instead.EAP 03
com.atlassian.jira.bc.user.UserService#validateRemoveUserFromApplication(com.atlassian.jira.user.ApplicationUser, com.atlassian.application.api.ApplicationKey) removedUse UserService#validateRemoveUserFromApplication(com.atlassian.jira.user.ApplicationUser,com.atlassian.jira.user.ApplicationUser,com.atlassian.application.api.ApplicationKey) instead.EAP 03
com.atlassian.jira.bc.customfield.CustomFieldDefinition#CustomFieldDefinition() removedUse com.atlassian.jira.bc.customfield.CustomFieldDefinition#builder to construct the instance.EAP 03
com.atlassian.jira.bc.issue.comment.CommentService#isGroupVisiblityEnabled() renamed to com.atlassian.jira.bc.issue.comment.CommentService#isGroupVisibilityEnabled()Use methods with the visiblity typo corrected to visibility.EAP 03
com.atlassian.jira.bc.issue.comment.CommentService#isProjectVisiblityEnabled() renamed to com.atlassian.jira.bc.issue.comment.CommentService#isProjectRoleVisibilityEnabled()Use methods with the visiblity typo corrected to visibility.EAP 03
com.atlassian.jira.bc.issue.comment.CommentService#isValidCommentData(com.atlassian.jira.user.ApplicationUser, com.atlassian.jira.issue.Issue, java.lang.String, java.lang.String, com.atlassian.jira.util.ErrorCollection) removedUse
#isValidCommentVisibility(com.atlassian.jira.user.ApplicationUser, com.atlassian.jira.issue.Issue, com.atlassian.jira.bc.issue.visibility.Visibility, com.atlassian.jira.util.ErrorCollection) instead.
EAP 03
com.atlassian.jira.bc.issue.comment.CommentService.CommentParameters#getGroupLevel() and
com.atlassian.jira.bc.issue.comment.CommentService.CommentParameters#getRoleLevelId() removed
Use the method returning Visibility instance:
#getVisibility()
Example of use that returns io.atlassian.fugue.Option<String> instance with appropriate group level value:
getVisibility().accept(VisibilityVisitors.returningGroupLevelVisitor())
EAP 03
com.atlassian.jira.bc.issue.util.VisibilityValidator#isProjectRoleVisiblityEnabled() renamed to #isProjectRoleVisibilityEnabled()Use methods with the visiblity typo corrected to visibility.EAP 03
com.atlassian.jira.bc.issue.util.VisibilityValidator#isGroupVisiblityEnabled() renamed to #isGroupVisibilityEnabled()Use methods with the visiblity typo corrected to visibility.EAP 03
com.atlassian.jira.bc.issue.util.VisibilityValidator#isValidVisibilityData(com.atlassian.jira.bc.JiraServiceContext, java.lang.String, com.atlassian.jira.issue.Issue, java.lang.String, java.lang.String) removedUse #isValidVisibilityData(com.atlassian.jira.bc.JiraServiceContext, String, com.atlassian.jira.issue.Issue, com.atlassian.jira.bc.issue.visibility.Visibility) instead.EAP 03
com.atlassian.jira.bc.issue.worklog.WorklogInputParameters#getGroupLevel,
com.atlassian.jira.bc.issue.worklog.WorklogInputParametersImpl#getGroupLevel,
com.atlassian.jira.bc.issue.worklog.WorklogInputParameters#getRoleLevelId,
com.atlassian.jira.bc.issue.worklog.WorklogInputParametersImpl#getGroupLevel removed
Use the method returning Visibility instance:
#getVisibility()
Example of use that returns io.atlassian.fugue.Option<String> instance with appropriate group level value:
getVisibility().accept(VisibilityVisitors.returningGroupLevelVisitor())
EAP 03
com.atlassian.jira.bulkedit.BulkOperationManager#getBulkOperations() removedUse getProgressAwareBulkOperations() instead.EAP 03
com.atlassian.jira.bulkedit.BulkOperationManager#addBulkOperation(String, Class) removedUse addProgressAwareBulkOperation(String, Class) instead.EAP 03
com.atlassian.jira.bulkedit.BulkOperationManager#getOperation(String) removedUse getProgressAwareOperation(String) instead.EAP 03
com.atlassian.jira.bulkedit.operation.BulkOperation removedUse com.atlassian.jira.bulkedit.operation.ProgressAwareBulkOperation instead.EAP 03
Removed deprecated audit REST API endpoints:
GET /rest/api/2/auditing/record
POST /rest/api/2/auditing/record

Use the new REST API endpoints instead:

  • GET /rest/auditing/1.0/events
  • GET /rest/auditing/1.0/configuration/coverage
  • GET /rest/auditing/1.0/configuration/retention
  • PUT /rest/auditing/1.0/configuration/retention/file

For more information about the API, refer to Audit log improvements for developers.

EAP 03

Removed deprecated audit API code:

  • com.atlassian.jira.auditing.AssociatedItem
  • com.atlassian.jira.auditing.ChangedValue
  • com.atlassian.jira.auditing.AuditingCategory
  • com.atlassian.jira.auditing.AuditingFilter
  • com.atlassian.jira.auditing.RecordRequest
  • com.atlassian.jira.auditing.AuditRecord

Use the new API code instead:

  • com.atlassian.audit.entity.AuditResource
  • com.atlassian.audit.entity.ChangedValue
  • com.atlassian.jira.auditing.AuditCategory (since Jira 8.12.2)
  • com.atlassian.audit.api.AuditQuery
  • com.atlassian.audit.entity.AuditEvent
  • com.atlassian.audit.entity.AuditEntity

For more information about this change, refer to Migrating to the new Jira audit log Java API.

EAP 03
com.atlassian.jira.issue.search.managers.IssueSearcherManager#getSearcherGroups(com.atlassian.jira.issue.search.SearchContext) removedThe com.atlassian.jira.issue.search.SearchContext parameter is no longer needed. Use #getSearcherGroups() instead.EAP 03
com.atlassian.jira.issue.search.managers.SearchHandlerManager#getSearcherGroups(com.atlassian.jira.issue.search.SearchContext) removedThe com.atlassian.jira.issue.search.SearchContext parameter is no longer needed. Use #getSearcherGroups() instead.EAP 03
com.atlassian.jira.issue.search.managers.SearchHandlerManager#getSearchersByClauseName(com.atlassian.jira.user.ApplicationUser, java.lang.String, com.atlassian.jira.issue.search.SearchContext) removedThe com.atlassian.jira.issue.search.SearchContext parameter is no longer needed. Use #getSearchersByClauseName(com.atlassian.crowd.embedded.api.User,String) instead.EAP 03
com.atlassian.jira.issue.search.searchers.util.IndexedInputHelper#getAllIndexValuesForMatchingClauses(com.atlassian.jira.user.ApplicationUser, com.atlassian.jira.issue.search.ClauseNames, com.atlassian.query.Query, com.atlassian.jira.issue.search.SearchContext)The com.atlassian.jira.issue.search.SearchContext parameter is no longer needed. Use #getAllIndexValuesForMatchingClauses(com.atlassian.jira.user.ApplicationUser,com.atlassian.jira.issue.search.ClauseNames,com.atlassian.query.Query) instead.EAP 03
com.atlassian.jira.issue.search.searchers.util.IndexedInputHelper#getAllNavigatorValuesForMatchingClauses(com.atlassian.jira.user.ApplicationUser, com.atlassian.jira.issue.search.ClauseNames, com.atlassian.query.Query, com.atlassian.jira.issue.search.SearchContext) removedThe com.atlassian.jira.issue.search.SearchContext parameter is no longer needed. Use #getAllNavigatorValuesForMatchingClauses(ApplicationUser,com.atlassian.jira.issue.search.ClauseNames,com.atlassian.query.Query) instead.EAP 03
com.atlassian.jira.issue.util.IssueUpdateBean#getUser() removedUse #getApplicationUser() instead.EAP 03
com.atlassian.jira.jql.query.AbstractLocalDateOperatorQueryFactory removedUse com.atlassian.jira.jql.util.JqlLocalDateSupport#getLocalDatesFromQueryLiterals(java.util.List) instead.EAP 03
com.atlassian.jira.jql.util.JqlIssueSupport#getIssues(java.lang.String, com.atlassian.jira.user.ApplicationUser) removedUse #getIssue(String,com.atlassian.jira.user.ApplicationUser) instead.EAP 03
com.atlassian.jira.jql.util.JqlIssueSupport#getIssues(java.lang.String) removedUse #getIssue(String) instead.EAP 03
com.atlassian.jira.license.LicenseDetails#getLicenseStatusMessage(com.atlassian.jira.user.ApplicationUser, java.lang.String, com.atlassian.jira.user.util.UserManager) removedUse #getLicenseStatusMessage(com.atlassian.jira.util.I18nHelper,UserManager) instead.EAP 03
com.atlassian.jira.license.LicenseDetails#getLicenseStatusMessage(com.atlassian.jira.util.I18nHelper, com.atlassian.jira.web.util.OutlookDate, java.lang.String, com.atlassian.jira.user.util.UserManager) removedUse #getLicenseStatusMessage(com.atlassian.jira.util.I18nHelper,UserManager) instead.EAP 03
com.atlassian.jira.license.LicenseDetails#isLicenseAlmostExpired() removedUse LicenseDetails#getMaintenanceExpiryDate directly.EAP 03
com.atlassian.jira.bc.whitelist.WhitelistService removedUse com.atlassian.plugins.whitelist.WhitelistService and com.atlassian.plugins.whitelist.OutboundWhitelist instead.EAP 03
com.atlassian.jira.bc.whitelist.WhitelistManager removedUse com.atlassian.plugins.whitelist.WhitelistService and com.atlassian.plugins.whitelist.OutboundWhitelist instead.EAP 03
com.atlassian.jira.mention.MentionService#sendCommentMentions(com.atlassian.jira.user.ApplicationUser, java.util.Set<com.atlassian.jira.notification.NotificationRecipient>, com.atlassian.jira.issue.comments.Comment, com.atlassian.jira.issue.comments.Comment) removedUse #sendCommentMentions(Set,ApplicationUser,Comment,Comment) instead.EAP 03
com.atlassian.jira.mention.MentionService#sendIssueCreateMentions(com.atlassian.jira.user.ApplicationUser, java.util.Set<com.atlassian.jira.notification.NotificationRecipient>, com.atlassian.jira.issue.Issue) removedUse #sendIssueCreateMentions(Set,ApplicationUser,Issue) instead.EAP 03
com.atlassian.jira.mention.MentionService#sendIssueEditMentions(com.atlassian.jira.user.ApplicationUser, java.util.Set<com.atlassian.jira.notification.NotificationRecipient>, com.atlassian.jira.issue.Issue, com.atlassian.jira.issue.comments.Comment) removedUse #sendIssueEditMentions(Set,ApplicationUser,Issue,Comment) instead.EAP 03
com.atlassian.jira.plugin.keyboardshortcut.KeyboardShortcutManager#getActiveShortcuts() removedUse #listActiveShortcutsUniquePerContext instead.EAP 03
com.atlassian.jira.plugin.webfragment.conditions.AbstractJiraPermissionCondition removedUse AbstractPermissionCondition instead.EAP 03
com.atlassian.jira.plugin.webfragment.conditions.AbstractPermissionCondition removedUse AbstractProjectPermissionCondition instead.EAP 03
com.atlassian.jira.project.type.ProjectTypesEnabledCondition removedNo replacementEAP 03
com.atlassian.jira.permission.PermissionSchemeManager#getEntitiesByType(org.ofbiz.core.entity.GenericValue, com.atlassian.jira.security.plugin.ProjectPermissionKey, java.lang.String) removedUse #getPermissionSchemeEntries(long,com.atlassian.jira.security.plugin.ProjectPermissionKey,String) instead.EAP 03
com.atlassian.jira.permission.PermissionSchemeManager#getGroups(java.lang.Long, com.atlassian.jira.project.Project) removedUse #getGroups(ProjectPermissionKey,Project) instead.EAP 03
com.atlassian.jira.config.properties.LookAndFeelBean#getVersion() removedUse getSettingsHash() to get the state of Look and feel feature.EAP 03
com.atlassian.jira.config.properties.LookAndFeelBean#updateVersion(long) removedUse updateSettingsHash() instead.EAP 03
com.atlassian.jira.config.SubTaskManager#insertSubTaskIssueType(java.lang.String, java.lang.Long, java.lang.String, java.lang.String) removedUse insertSubTaskIssueType(String,Long,String,Long) instead.EAP 03
com.atlassian.jira.config.SubTaskManager#updateSubTaskIssueType(java.lang.String, java.lang.String, java.lang.Long, java.lang.String, java.lang.String) removedUse updateSubTaskIssueType(String,String,Long,String,Long) instead.EAP 03
com.atlassian.jira.event.issue.IssueWatcherAddedEvent#getUser() removedUse #getApplicationUser() instead.EAP 03
com.atlassian.jira.event.issue.IssueWatcherDeletedEvent#getUser() removedUse getApplicationUser() instead.EAP 03
com.atlassian.jira.event.mail.EmailQueueFlashedEvent removedUse com.atlassian.jira.event.mail.EmailQueueFlushedEvent instead.EAP 03
Jira Service Management
GET /servicedeskapi/queues/{projectKey} removed
Use GET /servicedeskapi/admin/queues/{projectKey} instead.EAP 03
Jira Service Management
PUT /servicedeskapi/queues/include-count removed
Use PUT /servicedeskapi/admin/queues/include-count instead.EAP 03
Jira Service Management
PUT /servicedeskapi/queues/{projectKey}/include-count removed
Use PUT /servicedeskapi/admin/queues/{projectKey}/include-count instead.EAP 03
Jira Service Management
PUT /servicedeskapi/queues/cache-count removed
Use PUT /servicedeskapi/admin/queues/cache-count instead.EAP 03
Jira Service Management
PUT /servicedeskapi/queues/{projectKey}/cache-count removed
Use PUT /servicedeskapi/admin/queues/{projectKey}/cache-count instead.EAP 03
Private endpoint POST globalconfig/1/customfieldoptions/{customFieldId}/ provided by com.atlassian.jira.projectconfig.rest.global.CustomFieldOptionsResource#setOptions removedUse POST globalconfig/1/customfieldoptions/{customFieldId}/setOptions provided by com.atlassian.jira.projectconfig.rest.global.CustomFieldOptionsResource#setOptionsForCustomField instead.EAP 04
Private endpoint POST /api/1.0/user/{username}/avatar/{avatarid} provided by com.atlassian.jira.rest.v1.users.UserResource removedReplace with PUT /rest/api/2/user/avatar provided by com.atlassian.jira.rest.v2.issue.UserResource#updateUserAvatarEAP 04
Private endpoint /greenhopper/1.0/api/sprints/{sprintId}/remotelink provided by ccom.atlassian.greenhopper.web.api.RemoteSprintLinkResource#createOrUpdateRemoteSprintLink removedUse greenhopper/1.0/api/sprints/{sprintId}/remotelinkchecked provided by com.atlassian.greenhopper.web.api.RemoteSprintLinkResource#createRemoteSprintLinkChecked instead.EAP 04
com.atlassian.jira.security.GlobalPermissionEntry#getGlobalPermissionType() removedUse #getPermissionKey() instead.EAP 04
com.atlassian.jira.security.JiraAuthenticationContext#getI18nBean() removedUse #getI18nHelper() instead.EAP 04
com.atlassian.jira.security.JiraAuthenticationContext#getText(java.lang.String) removedUse getText() method on #getI18nHelper().EAP 04
com.atlassian.jira.sharing.ShareManager#hasPermission(com.atlassian.jira.user.ApplicationUser, com.atlassian.jira.sharing.SharedEntity) removedUse #isSharedWith(com.atlassian.crowd.embedded.api.User, SharedEntity) to get the same logic. According to this, the permission checks should be done in the service layer.EAP 04
com.atlassian.jira.user.preferences.JiraUserPreferences class moved to jira-coreYou should not construct user preferences directly. Request them through the UserPreferencesManager instead.EAP 04
com.atlassian.jira.issue.fields.rest.json.CommentBeanFactory#createRenderedBean(com.atlassian.jira.issue.comments.Comment) removedUse #createRenderedBean(com.atlassian.jira.issue.comments.Comment, com.atlassian.jira.user.ApplicationUser, com.atlassian.jira.util.EmailFormatter) instead.EAP 04
com.atlassian.jira.util.collect.MapBuilder#toFastMap() removedUse ImmutableMap instead.EAP 04
com.atlassian.jira.util.collect.MapBuilder#toImmutableMap() removedUse #toMap() instead or consider using ImmutableMap if the map doesn't need to accept nulls.EAP 04
com.atlassian.jira.util.index.Contexts#nullContext() removedUse com.atlassian.jira.task.context.Contexts#nullContext() instead.EAP 04
com.atlassian.jira.util.JiraDurationUtils#onClearCache(com.atlassian.jira.event.ClearCacheEvent) removedUse DurationFormatChanged event instead.EAP 04
com.atlassian.jira.util.JiraDurationUtils#start() removedNo replacementEAP 04
com.atlassian.jira.web.action.issue.IssueCreationHelperBean#getProvidedFieldNames(com.atlassian.jira.user.ApplicationUser, com.atlassian.jira.issue.Issue) removedUse com.atlassian.jira.web.action.issue.IssueCreationHelperBean#getProvidedFieldNames(com.atlassian.jira.issue.Issue) instead.EAP 04
com.atlassian.jira.web.bean.MultiBulkMoveBean#setTargetProject(org.ofbiz.core.entity.GenericValue) removedUse com.atlassian.jira.web.bean.MultiBulkMoveBean#setTargetProject(com.atlassian.jira.project.Project) instead.EAP 04
com.atlassian.jira.web.util.HelpUtil.HelpPath#getSimpleUrl() removedUse com.atlassian.jira.web.util.HelpUtil.HelpPath#getUrl() instead.EAP 04
com.atlassian.jira.web.util.OutlookDate#format() removedUse com.atlassian.jira.datetime.DateTimeFormatter#format(java.util.Date) instead.EAP 04
com.atlassian.jira.web.util.OutlookDate#getCompleteDateFormat() removedUse com.atlassian.jira.datetime.DateTimeFormatter#getFormatHint() instead.EAP 04
com.atlassian.jira.web.util.OutlookDate#getDatePickerFormat() removedUse com.atlassian.jira.datetime.DateTimeFormatter#getFormatHint() instead.EAP 04
com.atlassian.jira.web.util.OutlookDate#getDateTimePickerFormat() removedUse com.atlassian.jira.datetime.DateTimeFormatter#getFormatHint() instead.EAP 04
com.atlassian.jira.web.util.OutlookDate#getDateTimePickerFormatSample(java.util.Date) removedUse com.atlassian.jira.datetime.DateTimeFormatter#format(java.util.Date) instead.EAP 04
com.atlassian.jira.web.util.OutlookDate#getNow() removedUse java.util.Date#Date() instead.EAP 04
com.atlassian.jira.help.HelpUrlsParser#defaultUrl(String, String) and #onDemand(boolean) removedUse com.atlassian.jira.help.HelpUrlsParserBuilderFactory to construct new HelpUrlsParse instance.EAP 04
com.atlassian.jira.imports.project.mapper.ProjectImportIdMapper#getValuesFromImport() removedUse getRegisteredOldIds() instead. If needed, you can also use getKey()EAP 04
com.atlassian.jira.imports.project.mapper.ProjectRoleActorMapper#getAllProjectRoleActors() removedUse the properly typed method #getProjectRoleActors() instead.EAP 04
com.atlassian.jira.issue.comments.CommentManager#getProjectRole(java.lang.Long) removedUse com.atlassian.jira.security.roles.ProjectRoleManager#getProjectRole(Long) instead.EAP 04
com.atlassian.jira.issue.fields.layout.field.FieldLayoutStorageException removedNo replacementEAP 04
com.atlassian.jira.issue.fields.rest.json.CommentBeanFactory#createRenderedBean(com.atlassian.jira.issue.comments.Comment) removedUse #createRenderedBean(com.atlassian.jira.issue.comments.Comment, com.atlassian.jira.user.ApplicationUser, com.atlassian.jira.util.EmailFormatter) instead.EAP 04

Removed:

  • com.atlassian.jira.issue.index.ReindexAllCompletedEvent#shouldUpdateReplicatedIndex()
  • com.atlassian.jira.issue.index.ReindexAllCompletedEvent#ReindexAllCompletedEvent(long)
  • com.atlassian.jira.issue.index.ReindexAllCompletedEvent#ReindexAllCompletedEvent(long, boolean, boolean)
Use #shouldNotifyCluster() instead. Do not consult internal ReindexAllCompletedEvent class.EAP 04

Removed:

  • com.atlassian.jira.issue.index.ReindexAllStartedEvent#shouldUpdateReplicatedIndex()
  • com.atlassian.jira.issue.index.ReindexAllStartedEvent#ReindexAllStartedEvent()
  • com.atlassian.jira.issue.index.ReindexAllStartedEvent#ReindexAllStartedEvent(boolean, boolean)
  • com.atlassian.jira.issue.index.ReindexAllStartedEvent#ReindexAllStartedEvent(boolean, boolean, com.atlassian.jira.issue.index.IssueIndexingParams, com.atlassian.jira.config.ReindexMessage)
Use #shouldNotifyCluster() instead. Do not consult internal ReindexAllStartedEvent class.EAP 04
com.atlassian.jira.permission.SchemePermissions removedUse com.atlassian.jira.security.PermissionManager instead.EAP 04
com.atlassian.jira.permission.Permission removedUse com.atlassian.jira.security.PermissionManager or com.atlassian.jira.security.GlobalPermissionManager instead.EAP 04
com.atlassian.jira.issue.attachment.AttachmentZipKit removedUse com.atlassian.jira.issue.AttachmentIndexManager instead.EAP 04
com.atlassian.jira.util.NotNull removedUse javax.annotation.Nonnull instead.EAP 04

The following methods:

  • #getProjects(int, com.atlassian.jira.user.ApplicationUser)
  • #getProjects(int permissionId, ApplicationUser user, ProjectCategory projectCategory)

are removed from:

  • com.atlassian.jira.security.PermissionManager
  • com.atlassian.jira.security.PublicAccessPermissionManager
  • com.atlassian.jira.security.ApplicationRequiredPermissionManager
  • com.atlassian.jira.security.DefaultPermissionManager
  • com.atlassian.jira.security.SubvertedPermissionManager
Use #shouldNotifyCluster() instead. Do not consult internal ReindexAllStartedEvent class.EAP 04
Private endpoint GET globalconfig/1/issuecustomfields/{issue} provided by com.atlassian.jira.projectconfig.rest.global.IssueCustomFieldsResource#getAffectedProjects removedNo replacementEAP 05
Private endpoint POST /api/1.0/user/{username}/avatar/{avatarid} provided by com.atlassian.jira.rest.v1.users.UserResource removedReplace PUT /rest/api/2/user/avatar provided by com.atlassian.jira.rest.v2.issue.UserResource#updateUserAvatar.EAP 05
Introduced method allowlist in Velocity templates.Convert the SecureIntrospectorImpl to work in allowlist mode instead of blocklist.

Check how to configure the Velocity method allowlist

EAP 05
Introduced file and filetype allowlist wiring in the Velocity engine for allowed VMs and Velocity typesCheck how to configure the Velocity file and file type allowlistEAP 05
com.atlassian.jira.config.ConstantsManager#storeIssueTypes(java.util.List removedUse updateIssueType(String, String, Long, String, String, Long) or recalculateIssueTypeSequencesAndStore(java.util.List) instead.EAP 05
com.atlassian.jira.issue.customfields.CustomFieldType#getNonnullCustomFieldProvider() removedUse getNonNullCustomFieldProvider() instead.EAP 05
com.atlassian.jira.util.collect.CollectionUtil#filter(Collection removedUse standard Stream#filter(Predicate and appropiate Stream#collect(...) call.EAP 05
com.atlassian.jira.issue.customfields.vdi.NonNullCustomFieldProvider#getCustomFieldInfo(com.atlassian.jira.issue.Issue)and com.atlassian.jira.issue.customfields.DefaultNonNullCustomFieldProvider#getCustomFieldInfo(com.atlassian.jira.issue.Issue) removedUse getCustomFieldInfo(java.util.List issues) instead.

You now need to implement #getCustomFieldInfo(java.util.List<com.atlassian.jira.issue.Issue> issues) in every class you were previously implementing #getCustomFieldInfo(com.atlassian.jira.issue.Issue issue).

EAP 05
com.atlassian.jira.issue.customfields.CustomFieldPrefetchedData removedUse com.atlassian.jira.issue.customfields.vdi.CustomFieldPrefetchedData instead.EAP 05
Removed:
  • com.atlassian.jira.issue.customfields.NonnullCustomFieldProvider
  • com.atlassian.jira.issue.customfields.persistence.DefaultNonnullCustomFieldProvider
Use com.atlassian.jira.issue.customfields.vdi.CustomFieldPrefetchedData instead.EAP 05
Removed:
  • com.atlassian.jira.issue.index.indexers.FieldIndexer#addIndex(org.apache.lucene.document.Document, com.atlassian.jira.issue.Issue, com.atlassian.jira.issue.customfields.CustomFieldPrefetchedData)
  • com.atlassian.jira.issue.index.indexers.impl.AbstractCustomFieldIndexer#addIndex(org.apache.lucene.document.Document, com.atlassian.jira.issue.Issue, com.atlassian.jira.issue.customfields.CustomFieldPrefetchedData)
  • com.atlassian.jira.issue.customfields.impl.TextCFType#addIndex(org.apache.lucene.document.Document, com.atlassian.jira.issue.Issue, com.atlassian.jira.issue.customfields.CustomFieldPrefetchedData)
Use #addIndex(org.apache.lucene.document.Document, com.atlassian.jira.issue.Issue, com.atlassian.jira.issue.customfields.vdi.CustomFieldPrefetchedData) instead.EAP 05
com.atlassian.jira.issue.index.indexers.impl.AbstractCustomFieldIndexer#addDocumentFieldsSearchable(org.apache.lucene.document.Document doc, com.atlassian.jira.issue.Issue issue, com.atlassian.jira.issue.customfields.CustomFieldPrefetchedData prefetchedData) removedUse #addDocumentFieldsSearchable(org.apache.lucene.document.Document, com.atlassian.jira.issue.Issue, com.atlassian.jira.issue.customfields.vdi.CustomFieldPrefetchedData) instead.EAP 05
com.atlassian.jira.issue.index.indexers.impl.AbstractCustomFieldIndexer#addDocumentFieldsNotSearchable(org.apache.lucene.document.Document doc, com.atlassian.jira.issue.Issue issue, com.atlassian.jira.issue.customfields.CustomFieldPrefetchedData prefetchedData) removedUse #addDocumentFieldsNotSearchable(org.apache.lucene.document.Document, com.atlassian.jira.issue.Issue, com.atlassian.jira.issue.customfields.vdi.CustomFieldPrefetchedData) instead.EAP 05
com.atlassian.jira.bc.user.search.UserSearchParams all public constructors removedUse UserSearchParams.Builder to construct an instance of UserSearchParams instead of using the constructor.EAP 06
com.atlassian.jira.bc.user.search.UserSearchParams.builder()The behaviour of this method changed, it was left for convenience and it’s the same as calling UserSearchParams.builder(MAXIMUM_RESULTS).EAP 06
com.atlassian.jira.bc.user.search.UserSearchParams.Builder.maxResults(Integer) removed from public APIUse UserSearchParams.limitResults(int) instead. This method would limit the value to be no greater than UserSearchParams.MAXIMUM_RESULTSEAP 06
com.atlassian.jira.bc.user.search.UserSearchParams.Builder.filter(Predicate<User>) removed from public APINo replacementEAP 06
Plugin atlassian-awareness-capability removedNo replacementEAP 06
Plugin jira-html5-attach-images removedNo replacementEAP 06
Plugin pocketknife-features-plugin removedUse feature flag implementation in-product, available in Jira 7.1 onwards.EAP 06
com.atlassian.jira.web.action.JiraWebActionSupport is now abstractExtend the class to provide your implementation.EAP 06
We’re removing Jackson as a parameter type and replacing it with String.
com.atlassian.jira.issue.IssueInputParameters#addProperty(String propertyKey, JsonNode propertyValue) changed to addProperty(String propertyKey, String propertyValue)
The same change from JsonNode to String happened also in:
  • com.atlassian.jira.issue.IssueInputParameters#properties() will return Map<String, String> instead of Map<String, JsonNode>
  • com.atlassian.jira.issue.UpdateIssueRequest#getProperties() will return Map<String, String> instead of Map<String, JsonNode>
  • com.atlassian.jira.issue.UpdateIssueRequest.UpdateIssueRequestBuilder#issueProperties will now accept Map<String, String>
  • com.atlassian.jira.issue.util.IssueUpdateBean#getProperties will return Map<String, String>
  • com.atlassian.jira.issue.util.IssueUpdateBean#addProperties will now accept Map<String, String>
  • com.atlassian.jira.bc.issue.IssueService.CreateValidationResult#CreateValidationResult and getProperties will work with Map<String, String>
  • com.atlassian.jira.bc.issue.IssueService.UpdateValidationResult#UpdateValidationResult and getProperties will work with Map<String, String>
Serialize the value before passing it to the method and deserialize after reading it.EAP 07
com.atlassian.configurable.ObjectConfigurationFactory#loadObjectConfigurationFromElement accepts com.atlassian.plugin.module.Element instead of org.dom4j.ElementUse the new type in method calls.EAP 07
com.atlassian.jira.issue.fields.rest.IssueFinderV2#findIssue(String) returns io.atlassian.fugue.Either instead of com.atlassian.fugue.EitherReplaced class is equivalent.EAP 07

Rate this page: