# Preparing for Confluence 9.0 - EAP out now

**URL:** <https://community.developer.atlassian.com/t/preparing-for-confluence-9-0-eap-out-now/76160>\
**Category:** Confluence Data Center Announcements\
**Tags:** announcement, platform-7, eap, confluence-data-center, data-center\
**Created:** [January 11, 2024, 10:59pm UTC](https://community.developer.atlassian.com/t/preparing-for-confluence-9-0-eap-out-now/76160 "2024-01-11T22:59:44Z")\
**Posts on this page:** 20\
**Page:** 18

<div class="post-metadata">

**Author:** ![JordanAnslow](https://sea1.discourse-cdn.com/atlassiandeveloper/user_avatar/community.developer.atlassian.com/jordananslow/32/51229_2.png) [@JordanAnslow](https://community.developer.atlassian.com/u/JordanAnslow)\
**Post date:** [June 27, 2024, 6:37am UTC](https://community.developer.atlassian.com/t/preparing-for-confluence-9-0-eap-out-now/76160/347 "2024-06-27T06:37:47Z")

</div>

Hi @andreas1,

Thanks for the additional information. To confirm, the image placeholder is pointing to an internal URL and still showing “Blocked URL”? You’re correct, in that case the image shouldn’t be blocked.

Are you seeing any errors in the logs that you’d be able to share when you attempt to export to the page to a PDF? Any more information you could provide to help us reproduce this issue would help and we’ll keep an eye on the issue as requested.

Thanks

---

<div class="post-metadata">

**Author:** ![Kusal](https://sea1.discourse-cdn.com/atlassiandeveloper/user_avatar/community.developer.atlassian.com/kusal/32/46420_2.png) [@Kusal](https://community.developer.atlassian.com/u/Kusal)\
**Post date:** [June 27, 2024, 8:32am UTC](https://community.developer.atlassian.com/t/preparing-for-confluence-9-0-eap-out-now/76160/348 "2024-06-27T08:32:01Z")

</div>

Unable to reproduce this one on our end and nothing notable has changed with respect to this functionality in `m132`. This could potentially occur if there is a plugin bundling its own copy of `commons-lang3`.

---

<div class="post-metadata">

**Author:** ![EliasBrattliSorensen](https://sea1.discourse-cdn.com/atlassiandeveloper/user_avatar/community.developer.atlassian.com/eliasbrattlisorensen/32/41934_2.png) [@EliasBrattliSorensen](https://community.developer.atlassian.com/u/EliasBrattliSorensen)\
**Post date:** [June 27, 2024, 10:23am UTC](https://community.developer.atlassian.com/t/preparing-for-confluence-9-0-eap-out-now/76160/349 "2024-06-27T10:23:02Z")

</div>

@Kusal could you add `java.util.ImmutableCollections$ListN#isEmpty()` the global allowlist?  
This could probably be the case for several / all of the methods for ImmutableCollections.

---

<div class="post-metadata">

**Author:** ![ShahrimanMohammad](https://avatars.discourse-cdn.com/v4/letter/s/e79b87/32.png) [@ShahrimanMohammad](https://community.developer.atlassian.com/u/ShahrimanMohammad)\
**Post date:** [June 28, 2024, 4:10am UTC](https://community.developer.atlassian.com/t/preparing-for-confluence-9-0-eap-out-now/76160/351 "2024-06-28T04:10:17Z")

</div>

Hi @Kusal , could you assist on this issues for us seem like the dom4j is in the list of grey api removal for third party library, we have no choice now, we did add the dom4j dependency as a compile scope and after that we did encounter castException like below when the plugin app execute **DocumentHelper.parseText(descriptorXml).getRootElement();** Is this is due to the DocumentFactory is implement as a singleton class and system bundle did’t expose this?

```auto
Caused by: java.lang.ClassCastException: class org.dom4j.DocumentFactory cannot be cast to class org.dom4j.DocumentFactory (org.dom4j.DocumentFactory is in unnamed module of loader org.apache.catalina.loader.ParallelWebappClassLoader @33dc9660; org.dom4j.DocumentFactory is in unnamed module of loader org.apache.felix.framework.BundleWiringImpl$BundleClassLoader @6b7e1d49)
at org.dom4j.DocumentFactory.getInstance(DocumentFactory.java:92)
at org.dom4j.io.SAXReader.getDocumentFactory(SAXReader.java:667)
at org.dom4j.io.SAXReader.createContentHandler(SAXReader.java:948)
at org.dom4j.io.SAXReader.read(SAXReader.java:478)
```

---

<div class="post-metadata">

**Author:** ![metin](https://sea1.discourse-cdn.com/atlassiandeveloper/user_avatar/community.developer.atlassian.com/metin/32/54607_2.png) [@metin](https://community.developer.atlassian.com/u/metin)\
**Post date:** [June 28, 2024, 10:42am UTC](https://community.developer.atlassian.com/t/preparing-for-confluence-9-0-eap-out-now/76160/352 "2024-06-28T10:42:51Z")

</div>

We’re getting

```auto
java.lang.NoSuchMethodError: com.atlassian.confluence.status.service.SystemInformationService

```

However, I can’t find info about it being deprecated or how to replace it. Any hints would be much appreciated!

Adding more context:

```auto
org.apache.velocity.exception.MethodInvocationException: Invocation of method 'getGetStartedLink' in class our-app-class.GlobalSettingsAction threw exception java.lang.NoSuchMethodError: 'com.atlassian.confluence.status.service.SystemInformationService our-app-class.AdminSettingsAction.getSystemInformationService()' at /templates/includes/version.vm[line 12, column 25]
        at org.apache.velocity.runtime.parser.node.ASTMethod.handleInvocationException(ASTMethod.java:356)
        at org.apache.velocity.runtime.parser.node.ASTMethod.execute(ASTMethod.java:284)
        at org.apache.velocity.runtime.parser.node.ASTReference.execute(ASTReference.java:262)
        at org.apache.velocity.runtime.parser.node.ASTReference.evaluate(ASTReference.java:470)
        at org.apache.velocity.runtime.parser.node.ASTExpression.evaluate(ASTExpression.java:62)
        at org.apache.velocity.runtime.parser.node.ASTIfStatement.render(ASTIfStatement.java:85)
        at org.apache.velocity.runtime.parser.node.ASTBlock.render(ASTBlock.java:72)
        at org.apache.velocity.runtime.parser.node.ASTIfStatement.render(ASTIfStatement.java:87)
        at org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:336)
        at org.apache.velocity.runtime.directive.Parse.render(Parse.java:263)
[...]

```

We’ve used `-Datlassian.velocity.method.allowlist.debug=true` to make sure it’s not an allowlist issue, but it did not make a difference.

---

<div class="post-metadata">

**Author:** ![AndreasEbert](https://sea1.discourse-cdn.com/atlassiandeveloper/user_avatar/community.developer.atlassian.com/andreasebert/32/38902_2.png) [@AndreasEbert](https://community.developer.atlassian.com/u/AndreasEbert)\
**Post date:** [July 1, 2024, 6:53am UTC](https://community.developer.atlassian.com/t/preparing-for-confluence-9-0-eap-out-now/76160/353 "2024-07-01T06:53:24Z")

</div>

@metin,

> `java.lang.NoSuchMethodError`

That’s not due to Velocity allowlist, but rather that method `getGetStartedLink` does not exist in your `GlobalSettingsAction`. Indeed, the name _getGetStartedLink_ sounds odd; surely it should be _getStartedLink_, without the 2nd _get_, yes? Check your code; I suspect a bug on your end there.

---

<div class="post-metadata">

**Author:** ![remie](https://sea1.discourse-cdn.com/atlassiandeveloper/user_avatar/community.developer.atlassian.com/remie/32/34985_2.png) [@remie](https://community.developer.atlassian.com/u/remie)\
**Post date:** [July 1, 2024, 7:09am UTC](https://community.developer.atlassian.com/t/preparing-for-confluence-9-0-eap-out-now/76160/354 "2024-07-01T07:09:07Z")

</div>

@MichaelAndreacchio can you please provide an update on the planned release date for Confluence 9?

> [@Preparing for Confluence 9.0 - EAP out now](https://community.developer.atlassian.com/t/preparing-for-confluence-9-0-eap-out-now/76160/213):
>
> Hi Developer Community, I’m happy to announce that we’ve completed approximately 95% of the breaking changes targeting Confluence 9.0 and have shipped these in our [most recent EAP available for download](https://www.atlassian.com/software/confluence/download-eap). This includes the full adoption of Platform 7, RESTv2, compatibility with Java 17 at minimum, code removals, refactors, and many more changes. We encourage our marketplace partners to take a look at this early preview and provide any feedback you may have either in this thread or [via our feedb…](https://jira.atlassian.com/secure/CreateIssueDetails!init.jspa?pid=10470&issuetype=10000&components=43692&summary=Confluence+9.0+EAP+Feedback)

---

<div class="post-metadata">

**Author:** ![Kusal](https://sea1.discourse-cdn.com/atlassiandeveloper/user_avatar/community.developer.atlassian.com/kusal/32/46420_2.png) [@Kusal](https://community.developer.atlassian.com/u/Kusal)\
**Post date:** [July 1, 2024, 8:06am UTC](https://community.developer.atlassian.com/t/preparing-for-confluence-9-0-eap-out-now/76160/355 "2024-07-01T08:06:12Z")

</div>

Thanks @EliasBrattliSorensen

This method and all other safe methods in the `ImmutableCollections` inner classes have been allowlisted in Confluence `9.0.0-beta2`.

---

<div class="post-metadata">

**Author:** ![remie](https://sea1.discourse-cdn.com/atlassiandeveloper/user_avatar/community.developer.atlassian.com/remie/32/34985_2.png) [@remie](https://community.developer.atlassian.com/u/remie)\
**Post date:** [July 1, 2024, 8:08am UTC](https://community.developer.atlassian.com/t/preparing-for-confluence-9-0-eap-out-now/76160/356 "2024-07-01T08:08:14Z")

</div>

@WendyR now that Confluence 9 has reached BETA status, can you please let us know what the planned GA date is?

---

<div class="post-metadata">

**Author:** ![VitorPelizza](https://sea1.discourse-cdn.com/atlassiandeveloper/user_avatar/community.developer.atlassian.com/vitorpelizza/32/39736_2.png) [@VitorPelizza](https://community.developer.atlassian.com/u/VitorPelizza)\
**Post date:** [July 1, 2024, 9:42am UTC](https://community.developer.atlassian.com/t/preparing-for-confluence-9-0-eap-out-now/76160/357 "2024-07-01T09:42:55Z")

</div>

In addition to the last post, it’d be nice to know:

- Are there any other beta versions coming before GA?
- Are we having a RC version with all the changes so that we can test a version with all major changes included prior to GA?
- Is there a date set for GA?

And a comment: ideally we should be given some time between RC and GA.

Thank you.

---

<div class="post-metadata">

**Author:** ![rlander](https://sea1.discourse-cdn.com/atlassiandeveloper/user_avatar/community.developer.atlassian.com/rlander/32/39067_2.png) [@rlander](https://community.developer.atlassian.com/u/rlander)\
**Post date:** [July 1, 2024, 12:07pm UTC](https://community.developer.atlassian.com/t/preparing-for-confluence-9-0-eap-out-now/76160/358 "2024-07-01T12:07:02Z")

</div>

We’re having issues moving over to the new API interfaces for webfragments, we swapped over to the new interface, but this doesn’t seem to work at runtime:

> org.apache.velocity.exception.MethodInvocationException: Invocation of method ‘getDisplayableWebPanels’ in class com.atlassian.confluence.impl.plugin.web.readonly.ReadOnlyWebInterfaceManager threw exception java.lang.ClassCastException: class com.onresolve.scriptrunner.fragments.ScriptRunnerWebPanel cannot be cast to class com.atlassian.plugin.web.model.WebPanel (com.onresolve.scriptrunner.fragments.ScriptRunnerWebPanel is in unnamed module of loader org.apache.felix.framework.BundleWiringImpl$BundleClassLoader @10c742b; com.atlassian.plugin.web.model.WebPanel is in unnamed module of loader org.apache.catalina.loader.ParallelWebappClassLoader @3c83468e) at template/includes/macros.vm[line 1402, column 49]

CC @mkemp

---

<div class="post-metadata">

**Author:** ![rlander](https://sea1.discourse-cdn.com/atlassiandeveloper/user_avatar/community.developer.atlassian.com/rlander/32/39067_2.png) [@rlander](https://community.developer.atlassian.com/u/rlander)\
**Post date:** [July 1, 2024, 12:11pm UTC](https://community.developer.atlassian.com/t/preparing-for-confluence-9-0-eap-out-now/76160/359 "2024-07-01T12:11:37Z")

</div>

Another issue we have is that we need to access `<param>` attributes from `WebPanel`, but I don’t see a way to do this from the current API

Use case is we’re migrating everything to XML registration, but in ScriptRunner we need to be able to pass a user script as an XML attribute, that the web panel can then execute/render.

---

<div class="post-metadata">

**Author:** ![mkemp](https://sea1.discourse-cdn.com/atlassiandeveloper/user_avatar/community.developer.atlassian.com/mkemp/32/55846_2.png) [@mkemp](https://community.developer.atlassian.com/u/mkemp)\
**Post date:** [July 1, 2024, 12:37pm UTC](https://community.developer.atlassian.com/t/preparing-for-confluence-9-0-eap-out-now/76160/360 "2024-07-01T12:37:50Z")

</div>

Sorry, is it okay to get more details like reproduction steps and the problem that’s being run into?

---

<div class="post-metadata">

**Author:** ![mkemp](https://sea1.discourse-cdn.com/atlassiandeveloper/user_avatar/community.developer.atlassian.com/mkemp/32/55846_2.png) [@mkemp](https://community.developer.atlassian.com/u/mkemp)\
**Post date:** [July 1, 2024, 1:04pm UTC](https://community.developer.atlassian.com/t/preparing-for-confluence-9-0-eap-out-now/76160/361 "2024-07-01T13:04:24Z")

</div>

> [@rlander](#):
>
> Another issue we have is that we need to access `<param>` attributes from `WebPanel`, but I don’t see a way to do this from the current API

All `ModuleDescriptor`s have the `#getParams()` method and all `WebFragment`s have the `#getParams()` method, both return `Map<String, String>` which comes from `<param key="the-key" value="the-value" />`, but …

> [@rlander](#):
>
> Use case is we’re migrating everything to XML registration, but in ScriptRunner we need to be able to pass a user script as an XML attribute, that the web panel can then execute/render.

Is this the script to generate the HTML or a JS script that the panel includes via the WRM? Sorry, I can’t really tell, so I’m not sure what to advise.

---

<div class="post-metadata">

**Author:** ![rlander](https://sea1.discourse-cdn.com/atlassiandeveloper/user_avatar/community.developer.atlassian.com/rlander/32/39067_2.png) [@rlander](https://community.developer.atlassian.com/u/rlander)\
**Post date:** [July 1, 2024, 1:09pm UTC](https://community.developer.atlassian.com/t/preparing-for-confluence-9-0-eap-out-now/76160/362 "2024-07-01T13:09:58Z")

</div>

`com.atlassian.plugin.web.model.WebPanel` doesn’t have `getParams()` though, it’s this specific interface that is problematic

Elsewhere we have access via the method you note, or in a condition we can grab the params during `init`

If we go via XML we’re stuck with what the `WebPanel` interface provides

---

<div class="post-metadata">

**Author:** ![metin](https://sea1.discourse-cdn.com/atlassiandeveloper/user_avatar/community.developer.atlassian.com/metin/32/54607_2.png) [@metin](https://community.developer.atlassian.com/u/metin)\
**Post date:** [July 1, 2024, 2:37pm UTC](https://community.developer.atlassian.com/t/preparing-for-confluence-9-0-eap-out-now/76160/363 "2024-07-01T14:37:34Z")

</div>

Thanks a lot for your reply!

> Indeed, the name _getGetStartedLink_ sounds odd; surely it should be _getStartedLink_ , without the 2nd _get_ , yes?

It does sound odd, but the method name is indeed _getGetStartedLink_, because it’s supposed to get the url that the “Get Started” button links to.

In the meantime, we’ve found out that our method uses `com.atlassian.confluence.core.ConfluenceActionSupport.getSystemInformationService()` which has been deprecated:

> **Deprecated, for removal: This API element is subject to removal in a future version.** _since 8.5.5, use the_ `systemInformationService` _protected field directly when extending this class._

However, the `systemInformationService` protected field doesn’t exist in 7.x, and perhaps even pre 8.5.5 so we need to implement some kind of internal abstraction layer unless there is something available in the confluence-compat-lib which I haven’t checked yet.

---

<div class="post-metadata">

**Author:** ![jens](https://sea1.discourse-cdn.com/atlassiandeveloper/user_avatar/community.developer.atlassian.com/jens/32/42967_2.png) [@jens](https://community.developer.atlassian.com/u/jens)\
**Post date:** [July 1, 2024, 4:47pm UTC](https://community.developer.atlassian.com/t/preparing-for-confluence-9-0-eap-out-now/76160/364 "2024-07-01T16:47:05Z")

</div>

We’re running into the same problem. Looks like it is impossible to use the web panel module type for 3rd party apps on Confluence 9.0.0-beta2.

@mkemp I have not tried to reproduce with a minimal code example, but it should be as trivial as:

1. Create an app that can only use the public API (not `com.atlassian` namespace in plugin key, or whatever your secret is 🙂 )
2. Add a webpanel module where the class implements the new `com.atlassian.plugin.web.api.model.WebPanel` interface (instead of the classic `com.atlassian.plugin.web.model.WebPanel`)
3. Try to install in beta2 and open a page where the webpanel is loaded

@ggautam This needs to be fixed as soon as possible. Please do not release 9.0.0 with this bug. It breaks most of our apps.

---

<div class="post-metadata">

**Author:** ![Clark](https://sea1.discourse-cdn.com/atlassiandeveloper/user_avatar/community.developer.atlassian.com/clark/32/51057_2.png) [@Clark](https://community.developer.atlassian.com/u/Clark)\
**Post date:** [July 1, 2024, 7:08pm UTC](https://community.developer.atlassian.com/t/preparing-for-confluence-9-0-eap-out-now/76160/365 "2024-07-01T19:08:20Z")

</div>

I have a test project made with the `atlas-create-confluence-plugin` to help me with working out some of the fragment changes. If you check out the main branch and follow the readme it should reproduce the ClassCastException we are getting.

Here is the [repo](https://github.com/mclark-adaptavist/Confluence-Plat7-Test/tree/main)  
It runs `9.0.0-m132` at the moment but same thing happens on `9.0.0-beta2`

---

<div class="post-metadata">

**Author:** ![ashraf.teleb85](https://avatars.discourse-cdn.com/v4/letter/a/82dd89/32.png) [@ashraf.teleb85](https://community.developer.atlassian.com/u/ashraf.teleb85)\
**Post date:** [July 1, 2024, 8:23pm UTC](https://community.developer.atlassian.com/t/preparing-for-confluence-9-0-eap-out-now/76160/366 "2024-07-01T20:23:57Z")

</div>

Hi @clouless,

Did you manage to use **`userManager.createUser`** in the latest beta?

Thanks

---

<div class="post-metadata">

**Author:** ![clouless](https://sea1.discourse-cdn.com/atlassiandeveloper/user_avatar/community.developer.atlassian.com/clouless/32/49469_2.png) [@clouless](https://community.developer.atlassian.com/u/clouless)\
**Post date:** [July 1, 2024, 10:13pm UTC](https://community.developer.atlassian.com/t/preparing-for-confluence-9-0-eap-out-now/76160/367 "2024-07-01T22:13:23Z")

</div>

Hi,  
Yes but the user accessor is now marked deprecated. And I am afraid to rely on it….

[Previous page](https://community.developer.atlassian.com/t/preparing-for-confluence-9-0-eap-out-now/76160.md?page=17)

[Next page](https://community.developer.atlassian.com/t/preparing-for-confluence-9-0-eap-out-now/76160.md?page=19)
