Release Notes for XWiki 12.7
This is the release notes for XWiki Commons, XWiki Rendering and XWiki Platform. They share the same release notes as they are released together and have the same version.
This release mostly focused on adding the ability to Like pages and changing the way to add a new comment. As usual it also fixes bugs and adds some other minor features.
New and Noteworthy (since XWiki 12.6.1)
Full list of issues fixed and Dashboard for XWiki 12.7.
For Users
Page Likes
The Page Like feature allows users to Like pages. By default, this application adds a small button at the bottom of the pages, allowing users to like them. It also displays the total number of likes for the page. Notifications are sent when pages are Liked and it's possible to see your own liked pages or who liked a page.
Comment form not displayed by default
The comment form is now hidden by default. This allows improving the loading performance of XWiki pages and makes the UI less cluttered.
A button allows you to display the comment form when you need to add a new comment.
For Admins
Add a Solr store for ratings: It is now possible to store Ratings information in a Solr core: this should improve the scalability of the extension. Please note that the migration of data from one store to another is not yet supported.
For Developers
Allow to define a default XAR entry type when building XARs
Added the option <defaultEntryType>myEntryType</defaultEntryType> in the configuration of the XAR plugin when building XAR artifacts.
When defined, the default enty type will be applied to every entry not being overridden through the <entries>...</entries> list in the plugin configuration.
See the Maven XAR Plugin documentation for more information about this feature.
Miscellaneous
Non-minified Javascript: Non-minified versions of JavaScript files are now also bundled by default in XWiki. This makes it much simpler to debug JavaScript issues in production. Just look for the non-minified (source) code using the developer tools provided by the browser. Since the minified code indicates the source map and the source map indicates the source file, the browser ends up loading all 3 (when the developer tools are open). If you can't find the source code then you can force the browser to load it by reloading the current page with ?minify=false in the URL.
Upgrades
The following runtime dependencies have been upgraded (they have a different release cycle than XWiki Commons, XWiki Rendering and XWiki Platform):
- CSS4J 2.1.0
- ProtoBuf Java 3.12.4
- Hibernate 5.4.20
- MariaDB JDBC Driver 2.6.2
- Rome 1.15.0
- JGroups 4.2.5
- Antlr4 4.8-1
- Commons Validator 1.7
- Infinispan 9.4.20.Final
- Commons Net 3.7
- Checker Qual 3.6.0
- Jackson 2.11.2
- Byte Buddy 1.10.14
- AspectJ 1.9.6
- Groovy 2.5.13
- Commons Lang 3.11
- XWiki Syntax Higlighting Application 4.5.1
Translations
The following translations have been updated:
Tested Browsers & Databases
Here is the list of browsers we support and how they have been tested for this release:
Browser | Tested on: | |
---|---|---|
Google Chrome 84 | Not Tested | |
Mozilla Firefox 79 | Not Tested | |
Microsoft Edge 84 | Not Tested | |
Internet Explorer 11 | Tests run and results + Jira Tickets Marked as Fixed in the Release Notes | |
Safari 13 | Not Tested |
Here is the list of databases we support and how they have been tested for this release:
Database | Tested on: | |
---|---|---|
HyperSQL 2.5.1 | Not Tested | |
MySQL 8 | Tests run and results + Jira Tickets Marked as Fixed in the Release Notes | |
Oracle 19c | Not Tested | |
PostgreSQL 12 | Not Tested | |
MariaDB 10.5 | Not Tested |
Here is the list of Servlet Containers we support and how they have been tested for this release:
Servlet Container | Tested on: | |
---|---|---|
Tomcat 9.0.37 | Not Tested | |
Jetty 9.4.29 (XWiki Standalone packaging) | Tests run and results + Jira Tickets Marked as Fixed in the Release Notes | |
Jetty 9.4.29 | Not Tested |
Known issues
Backward Compatibility and Migration Notes
General Notes
- When upgrading make sure you compare and merge the following XWiki configuration files since some parameters may have been modified, removed or added:
- xwiki.cfg
- xwiki.properties
- web.xml
- hibernate.cfg.xml
- Add xwiki.store.migration=1 in xwiki.cfg so that XWiki will attempt to automatically migrate your current database to any new schema. Make sure you backup your Database before doing anything.
API Breakages
The following APIs were modified since XWiki 12.6.1:
- NamespaceURLClassLoader no longer inherits from URIClassLoader since this one is now deprecated.
- Violation type:java.class.noLongerInheritsFromClass
- Code:## Old:
class org.xwiki.classloader.NamespaceURLClassLoader
## New:
class org.xwiki.classloader.NamespaceURLClassLoader
- Violation type:
- Not a binary breakage (no API breakage), only source level.
- Violation type:java\.generics\.elementNowParameterized
- Code:## Old:
.*org\.xwiki\.component\.annotation\.ComponentDescriptorFactory::createComponentDescriptors.*
## New:
.*org\.xwiki\.component\.annotation\.ComponentDescriptorFactory::createComponentDescriptors.*
- Violation type:
- Not a breackage from REST point of view.
- Violation type:java.annotation.added
- Code:## Old:
parameter javax.ws.rs.core.Response org.xwiki.notifications.rest.NotificationsResource::getNotifications(java.lang.String, java.lang.String, java.lang.String, ===java.lang.String===, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.lang.Exception
## New:
parameter javax.ws.rs.core.Response org.xwiki.notifications.rest.NotificationsResource::getNotifications(java.lang.String, java.lang.String, java.lang.String, ===boolean===, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.lang.Exception
- Violation type:
- Not a breackage from REST point of view.
- Violation type:java.method.numberOfParametersChanged
- Code:## Old:
method javax.ws.rs.core.Response org.xwiki.notifications.rest.NotificationsResource::getNotifications(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.lang.Exception
## New:
method javax.ws.rs.core.Response org.xwiki.notifications.rest.NotificationsResource::getNotifications(java.lang.String, java.lang.String, java.lang.String, boolean, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.lang.Exception
- Violation type:
- Not a breackage from REST point of view.
- Violation type:java.annotation.added
- Code:## Old:
parameter javax.ws.rs.core.Response org.xwiki.notifications.rest.NotificationsResource::getNotifications(java.lang.String, java.lang.String, java.lang.String, ===java.lang.String===, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.lang.Exception
## New:
parameter javax.ws.rs.core.Response org.xwiki.notifications.rest.NotificationsResource::getNotifications(java.lang.String, java.lang.String, java.lang.String, ===boolean===, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.lang.Exception
- Violation type:
- Not a breackage from REST point of view.
- Violation type:java.annotation.attributeValueChanged
- Code:## Old:
parameter javax.ws.rs.core.Response org.xwiki.notifications.rest.NotificationsResource::getNotifications(java.lang.String, java.lang.String, java.lang.String, ===java.lang.String===, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.lang.Exception
## New:
parameter javax.ws.rs.core.Response org.xwiki.notifications.rest.NotificationsResource::getNotifications(java.lang.String, java.lang.String, java.lang.String, ===boolean===, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.lang.Exception
- Violation type:
- Not a breackage from REST point of view.
- Violation type:java.annotation.attributeValueChanged
- Code:## Old:
parameter javax.ws.rs.core.Response org.xwiki.notifications.rest.NotificationsResource::getNotifications(java.lang.String, java.lang.String, java.lang.String, java.lang.String, ===java.lang.String===, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.lang.Exception
## New:
parameter javax.ws.rs.core.Response org.xwiki.notifications.rest.NotificationsResource::getNotifications(java.lang.String, java.lang.String, java.lang.String, boolean, ===java.lang.String===, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.lang.Exception
- Violation type:
- Not a breackage from REST point of view.
- Violation type:java.annotation.attributeValueChanged
- Code:## Old:
parameter javax.ws.rs.core.Response org.xwiki.notifications.rest.NotificationsResource::getNotifications(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, ===java.lang.String===, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.lang.Exception
## New:
parameter javax.ws.rs.core.Response org.xwiki.notifications.rest.NotificationsResource::getNotifications(java.lang.String, java.lang.String, java.lang.String, boolean, java.lang.String, ===java.lang.String===, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.lang.Exception
- Violation type:
- Not a breackage from REST point of view.
- Violation type:java.annotation.attributeValueChanged
- Code:## Old:
parameter javax.ws.rs.core.Response org.xwiki.notifications.rest.NotificationsResource::getNotifications(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, ===java.lang.String===, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.lang.Exception
## New:
parameter javax.ws.rs.core.Response org.xwiki.notifications.rest.NotificationsResource::getNotifications(java.lang.String, java.lang.String, java.lang.String, boolean, java.lang.String, java.lang.String, ===java.lang.String===, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.lang.Exception
- Violation type:
- Not a breackage from REST point of view.
- Violation type:java.annotation.attributeValueChanged
- Code:## Old:
parameter javax.ws.rs.core.Response org.xwiki.notifications.rest.NotificationsResource::getNotifications(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, ===java.lang.String===, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.lang.Exception
## New:
parameter javax.ws.rs.core.Response org.xwiki.notifications.rest.NotificationsResource::getNotifications(java.lang.String, java.lang.String, java.lang.String, boolean, java.lang.String, java.lang.String, java.lang.String, ===java.lang.String===, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.lang.Exception
- Violation type:
- Not a breackage from REST point of view.
- Violation type:java.annotation.attributeValueChanged
- Code:## Old:
parameter javax.ws.rs.core.Response org.xwiki.notifications.rest.NotificationsResource::getNotifications(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, ===java.lang.String===, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.lang.Exception
## New:
parameter javax.ws.rs.core.Response org.xwiki.notifications.rest.NotificationsResource::getNotifications(java.lang.String, java.lang.String, java.lang.String, boolean, java.lang.String, java.lang.String, java.lang.String, java.lang.String, ===java.lang.String===, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.lang.Exception
- Violation type:
- Not a breackage from REST point of view.
- Violation type:java.annotation.attributeValueChanged
- Code:## Old:
parameter javax.ws.rs.core.Response org.xwiki.notifications.rest.NotificationsResource::getNotifications(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, ===java.lang.String===, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.lang.Exception
## New:
parameter javax.ws.rs.core.Response org.xwiki.notifications.rest.NotificationsResource::getNotifications(java.lang.String, java.lang.String, java.lang.String, boolean, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, ===java.lang.String===, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.lang.Exception
- Violation type:
- Not a breackage from REST point of view.
- Violation type:java.annotation.attributeValueChanged
- Code:## Old:
parameter javax.ws.rs.core.Response org.xwiki.notifications.rest.NotificationsResource::getNotifications(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, ===java.lang.String===, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.lang.Exception
## New:
parameter javax.ws.rs.core.Response org.xwiki.notifications.rest.NotificationsResource::getNotifications(java.lang.String, java.lang.String, java.lang.String, boolean, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, ===java.lang.String===, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.lang.Exception
- Violation type:
- Not a breackage from REST point of view.
- Violation type:java.annotation.attributeValueChanged
- Code:## Old:
parameter javax.ws.rs.core.Response org.xwiki.notifications.rest.NotificationsResource::getNotifications(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, ===java.lang.String===, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.lang.Exception
## New:
parameter javax.ws.rs.core.Response org.xwiki.notifications.rest.NotificationsResource::getNotifications(java.lang.String, java.lang.String, java.lang.String, boolean, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, ===java.lang.String===, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.lang.Exception
- Violation type:
- Not a breackage from REST point of view.
- Violation type:java.annotation.attributeValueChanged
- Code:## Old:
parameter javax.ws.rs.core.Response org.xwiki.notifications.rest.NotificationsResource::getNotifications(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, ===java.lang.String===, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.lang.Exception
## New:
parameter javax.ws.rs.core.Response org.xwiki.notifications.rest.NotificationsResource::getNotifications(java.lang.String, java.lang.String, java.lang.String, boolean, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, ===java.lang.String===, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.lang.Exception
- Violation type:
- Not a breackage from REST point of view.
- Violation type:java.annotation.attributeValueChanged
- Code:## Old:
parameter javax.ws.rs.core.Response org.xwiki.notifications.rest.NotificationsResource::getNotifications(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, ===java.lang.String===, java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.lang.Exception
## New:
parameter javax.ws.rs.core.Response org.xwiki.notifications.rest.NotificationsResource::getNotifications(java.lang.String, java.lang.String, java.lang.String, boolean, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, ===java.lang.String===, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.lang.Exception
- Violation type:
- Not a breackage from REST point of view.
- Violation type:java.annotation.attributeValueChanged
- Code:## Old:
parameter javax.ws.rs.core.Response org.xwiki.notifications.rest.NotificationsResource::getNotifications(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, ===java.lang.String===, java.lang.String, java.lang.String, java.lang.String) throws java.lang.Exception
## New:
parameter javax.ws.rs.core.Response org.xwiki.notifications.rest.NotificationsResource::getNotifications(java.lang.String, java.lang.String, java.lang.String, boolean, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, ===java.lang.String===, java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.lang.Exception
- Violation type:
- Not a breackage from REST point of view.
- Violation type:java.annotation.attributeValueChanged
- Code:## Old:
parameter javax.ws.rs.core.Response org.xwiki.notifications.rest.NotificationsResource::getNotifications(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, ===java.lang.String===, java.lang.String, java.lang.String) throws java.lang.Exception
## New:
parameter javax.ws.rs.core.Response org.xwiki.notifications.rest.NotificationsResource::getNotifications(java.lang.String, java.lang.String, java.lang.String, boolean, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, ===java.lang.String===, java.lang.String, java.lang.String, java.lang.String) throws java.lang.Exception
- Violation type:
- Not a breackage from REST point of view.
- Violation type:java.annotation.attributeValueChanged
- Code:## Old:
parameter javax.ws.rs.core.Response org.xwiki.notifications.rest.NotificationsResource::getNotifications(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, ===java.lang.String===, java.lang.String) throws java.lang.Exception
## New:
parameter javax.ws.rs.core.Response org.xwiki.notifications.rest.NotificationsResource::getNotifications(java.lang.String, java.lang.String, java.lang.String, boolean, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, ===java.lang.String===, java.lang.String, java.lang.String) throws java.lang.Exception
- Violation type:
- Not a breackage from REST point of view.
- Violation type:java.annotation.attributeValueChanged
- Code:## Old:
parameter javax.ws.rs.core.Response org.xwiki.notifications.rest.NotificationsResource::getNotifications(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, ===java.lang.String===) throws java.lang.Exception
## New:
parameter javax.ws.rs.core.Response org.xwiki.notifications.rest.NotificationsResource::getNotifications(java.lang.String, java.lang.String, java.lang.String, boolean, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, ===java.lang.String===, java.lang.String) throws java.lang.Exception
- Violation type:
Credits
The following people have contributed code and translations to this release (sorted alphabetically):
Clemens Robbenhaar
Clément Aubin
Ecaterina Moraru (Valica)
Eduard Moraru
Jarle Sandmo
Leif Erik Andersen
Manuel Leduc
Marius Dumitru Florea
pekrr1e
Simon Urli
Thomas Mortagne
Vincent Massol
xrichard