Confluence 9.3 release beta available now

This week we released the first beta for Confluence. There are changes in this release that may directly affect third-party apps.

New in 9.3

To find out what’s in this release, check out the Confluence 9.3 beta release notes.

Get started

Download the beta from our site to start testing your app for compatibility with the changes. Be sure to take a look at our Preparing for Confluence 9.3 guide to find out what you need to do to make your app compatible. We’ll update that page regularly, so keep an eye on it to see any changes.

Reminder: for future release updates, make sure you visit the Atlassian changelog, and consider subscribing to the RSS feed.

The Atlassian Confluence team

Hi @AleksandraWieczorek

Something probably isn’t working in this version :frowning:

INFO] 36 warnings 
[INFO] -------------------------------------------------------------
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] /Users/r2d2/atlassian-workplace/restapi-extender_9/src/main/java/com/itlab/confluence/plugins/conf-plug/exception/RestExceptionMapper.java:[3,54] package com.atlassian.confluence.rest.v2.api.exception does not exist
[ERROR] /Users/r2d2/atlassian-workplace/restapi-extender_9/src/main/java/com/itlab/confluence/plugins/conf-plug/exception/RestExceptionMapper.java:[10,42] cannot find symbol
  symbol: class ServiceExceptionMapper
[ERROR] /Users/r2d2/atlassian-workplace/restapi-extender_9/src/main/java/com/itlab/confluence/plugins/conf-plug/exception/RestExceptionMapper.java:[14,5] method does not override or implement a method from a supertype
[INFO] 3 errors 
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  1.544 s
[INFO] Finished at: 2025-01-28T09:55:14+01:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.13.0:compile (default-compile) on project conf-plug: Compilation failure: Compilation failure: 
[ERROR] /Users/r2d2/atlassian-workplace/conf-plug_9/src/main/java/com/itlab/confluence/plugins/conf-plug/exception/RestExceptionMapper.java:[3,54] package com.atlassian.confluence.rest.v2.api.exception does not exist
[ERROR] /Users/r2d2/atlassian-workplace/conf-plug_9/src/main/java/com/itlab/confluence/plugins/conf-plug/exception/RestExceptionMapper.java:[10,42] cannot find symbol
[ERROR]   symbol: class ServiceExceptionMapper
[ERROR] /Users/r2d2/atlassian-workplace/conf-plug_9/src/main/java/com/itlab/confluence/plugins/conf-plug/exception/RestExceptionMapper.java:[14,5] method does not override or implement a method from a supertype
[ERROR] -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException

import com.atlassian.confluence.rest.v2.api.exception.ServiceExceptionMapper;

Cheers
Adam

Hi Adam.

As part of the prep work for the upcoming Jakarta migration in Confluence 10, some of the classes from the confluence-rest-v2-api module, including ServiceExceptionMapper, were moved to a new confluence-restv2-server-api module. You’ll need to add a dependency on that module to build against Confluence 9.3+ if you want to continue using that class.

Note that this is a build-time issue only - the class it is in the same package, so binary compatibility has been unaffected.

2 Likes

Hi @kmacleod

Thank you, the problem has actually been solved!

Cheers
Adam

Hi Guys,

I have a question … am I doing something wrong or is it due to changes in Confluence and whose side is the bug?

So far, my RequestWrapper which allowed reading the body request (getReader, getBody etc.) several times worked correctly, in version 9.3.0-beta 1 it throws an exception (this problem affects all REST API calls)

Wrapper - spring-boot-read-request-body-multiple-times/src/main/java/com/bootcamptoprod/request/cache/CachedBodyHttpServletRequest.java at main · BootcampToProd/spring-boot-read-request-body-multiple-times · GitHub

[INFO] [talledLocalContainer] 12:59:28,284 ERROR [http-nio-1990-exec-8] [[localhost].[/confluence].[noop]] log Servlet.service() for servlet [noop] in context with path [/confluence] threw exception [org.glassfish.jersey.server.ContainerException: java.lang.OutOfMemoryError: Required array size too large] with root cause
[INFO] [talledLocalContainer] 12:59:28,285 INFO [http-nio-1990-exec-8 url: /confluence/500page.jsp; user: admin] [confluence.status.SystemErrorInformationLogger] writeToLog \nRequest Unique ID : 60d6a3c0-9f9a-473b-a88d-3d7ed42efbc8\n--------------------------\nJVM Stats\n--------------------------\nxmx = 6366953472\nusedNonHeap = 693199408\navailableHeap = 3085280480\navailableNonHeap = -1\nallocatedHeap = 6366953472\nfreeAllocatedHeap = 3085280480\nmaxNonHeap = -1\navailablePermGen = 0\nmaxPermGen = -1\nmaxHeap = 6366953472\nusedHeap = 3281672992\nusedPermGen = -1\nxms = 6366953472\n--------------------------\nRequest Information\n--------------------------\nURL: http://localhost:1990/confluence/500page.jsp\nScheme: http\nServer: localhost\nPort: 1990\nURI: /confluence/500page.jsp\nContext Path: /confluence\nServlet Path: /500page.jsp\nPath Info: null\nQuery String: null\n--------------------------\nAttributes\n--------------------------\njavax.servlet.forward.request_uri: /confluence/rest/extender/1.0/test/set\njavax.servlet.forward.context_path: /confluence\njavax.servlet.forward.servlet_path: /rest\njavax.servlet.forward.path_info: /extender/1.0/tokenTools/set\njavax.servlet.forward.mapping: org.apache.catalina.core.ApplicationMapping$MappingImpl@17278af0\n__prepare_recursion_counter: 1\njavax.servlet.error.status_code: 500\nstruts.actionMapping: noActionMapping\nbrave.SpanCustomizer: SpanCustomizer(RealSpan(2a215bf6f29e4501/2a215bf6f29e4501))\norg.apache.struts2.dispatcher.filter.StrutsPrepareFilter.REQUEST_EXCLUDED_FROM_ACTION_MAPPING: false\ncom.opensymphony.sitemesh.APPLIED_ONCE: true\n__wrap_recursion_counter: 1\ncom.atlassian.confluence.web.filter.validateparam.RequestParamValidationFilter_already_filtered: true\natlassian.core.seraph.original.url: /500page.jsp\nos_authTypeDefault: any\ncom.atlassian.labs.botkiller.BotKillerFilter: true\ncom.atlassian.gzipfilter.GzipFilter_already_filtered: true\n3af_annotated_permitted_checker: com.atlassian.confluence.impl.security.access.DefaultAnnotatedPermitChecker@74761802\ncom.atlassian.seraph.auth.LoginReason: OK\nsitemesh.secondaryStorageLimit: -1\njavax.servlet.error.message: \njavax.servlet.error.servlet_name: noop\nbrave.propagation.TraceContext: 2a215bf6f29e4501/2a215bf6f29e4501\norg.glassfish.jersey.message.internal.TracingLogger: org.glassfish.jersey.message.internal.TracingLogger$1@12ae9651\nbrave.servlet.TracingFilter$SendHandled: true\nconfluence.secure.access.original.url: /rest/extender/1.0/test/set\nloginfilter.already.filtered: true\njavax.servlet.error.request_uri: /confluence/rest/extender/1.0/test/set\ncom.atlassian.core.filters.HeaderSanitisingFilter_already_filtered: true\ncom.atlassian.prettyurls.filter.PrettyUrlsSiteMeshFixupFilter: true\ncom.atlassian.confluence.impl.sitemesh.DecoratorTimings: com.atlassian.confluence.impl.sitemesh.DecoratorTimings@31bba894\njavax.servlet.error.exception: javax.servlet.ServletException: org.glassfish.jersey.server.ContainerException: java.lang.OutOfMemoryError: Required array size too large\nos_securityfilter_already_filtered: true\ncom.atlassian.prettyurls.filter.PrettyUrlsSiteMeshFilter: true\n--------------------------\nParameters\n--------------------------\ncaused by: javax.servlet.ServletException: org.glassfish.jersey.server.ContainerException: java.lang.OutOfMemoryError: Required array size too large\nat org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:412)\ncaused by: org.glassfish.jersey.server.ContainerException: java.lang.OutOfMemoryError: Required array size too large\nat org.glassfish.jersey.servlet.internal.ResponseWriter.rethrow(ResponseWriter.java:256)\ncaused by: java.lang.OutOfMemoryError: Required array size too large\nat org.glassfish.jersey.message.internal.ReaderWriter.readAllBytes(ReaderWriter.java:198)\n
[INFO] [talledLocalContainer] 12:59:28,285 ERROR [http-nio-1990-exec-8 url: /confluence/500page.jsp; user: admin] [confluence.status.SystemErrorInformationLogger] logException Unhandled exception, request unique ID: 60d6a3c0-9f9a-473b-a88d-3d7ed42efbc8
[INFO] [talledLocalContainer]  -- traceId: 2a215bf6f29e4501
[INFO] [talledLocalContainer] javax.servlet.ServletException: org.glassfish.jersey.server.ContainerException: java.lang.OutOfMemoryError: Required array size too large
[INFO] [talledLocalContainer] 	at org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:412)
[INFO] [talledLocalContainer] 	at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:349)
[INFO] [talledLocalContainer] 	at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:379)
[INFO] [talledLocalContainer] 	at com.atlassian.plugins.rest.v2.jersey.JerseyOsgiServletContainer.doFilter(JerseyOsgiServletContainer.java:80)
[INFO] [talledLocalContainer] 	at org.glassfish.jersey.servlet.ServletContainer.doFilter(ServletContainer.java:452)
[INFO] [talledLocalContainer] 	at com.atlassian.plugins.rest.v2.servlet.RestDelegatingServletFilter.doFilter(RestDelegatingServletFilter.java:84)
[INFO] [talledLocalContainer] 	at com.atlassian.plugin.servlet.filter.DelegatingPluginFilter.doFilter(DelegatingPluginFilter.java:64)
[INFO] [talledLocalContainer] 	at com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:37)
[INFO] [talledLocalContainer] 	at com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:56)
[INFO] [talledLocalContainer] 	at com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:44)
[INFO] [talledLocalContainer] 	at com.atlassian.plugin.servlet.filter.DelegatingPluginFilter.doFilter(DelegatingPluginFilter.java:64)
[INFO] [talledLocalContainer] 	at com.atlassian.confluence.plugin.servlet.filter.AccessCheckPluginDelegateFilter.doFilter(AccessCheckPluginDelegateFilter.java:35)
[INFO] [talledLocalContainer] 	at com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:37)
[INFO] [talledLocalContainer] 	at com.atlassian.plugin.servlet.filter.DelegatingPluginFilter.lambda$doFilter$0(DelegatingPluginFilter.java:59)
[INFO] [talledLocalContainer] 	at com.atlassian.plugins.rest.v2.servlet.RestServletUtilsUpdaterFilter.doFilterInternal(RestServletUtilsUpdaterFilter.java:29)
[INFO] [talledLocalContainer] 	at com.atlassian.plugins.rest.v2.servlet.RestServletUtilsUpdaterFilter.doFilter(RestServletUtilsUpdaterFilter.java:42)
[INFO] [talledLocalContainer] 	at com.atlassian.plugin.servlet.filter.DelegatingPluginFilter.doFilter(DelegatingPluginFilter.java:64)
[INFO] [talledLocalContainer] 	at com.atlassian.confluence.plugin.servlet.filter.AccessCheckPluginDelegateFilter.doFilter(AccessCheckPluginDelegateFilter.java:35)
[INFO] [talledLocalContainer] 	at com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:37)

Cheers
Adam