- New and Noteworthy (since XWiki 9.6)
- For Users
- Improved Attachment Index
- Improved Code Viewer with Blame View
- Gadget Wizard Update
- New default notification filters
- Notifications Preferences
- Include and exclude Notification filters
- Clickable versions in the changes view
- Deprecated and Internal Macros Hidden by Default
- Improvements when viewing a document version
- Display extension id
- Miscellaneous
- For Admins
- For Developers
- For Users
- Translations
- Tested Browsers & Databases
- Known issues
- Backward Compatibility and Migration Notes
- Credits
This is the release notes for XWiki Commons, XWiki Rendering, XWiki Platform and XWiki Enterprise. They share the same release notes as they are released together and have the same version.
This release brings small improvements to currently established features. The code viewer now provides a blame view by default and the notification center now allows the user to enable or disable notifications globally on an application, as well as toggling default notification filters provided by the platform.
New and Noteworthy (since XWiki 9.6)
Full list of issues fixed and Dashboard for XWiki 9.7.
For Users
Improved Attachment Index
The Attachments tab from the Page Index has been improved:
- the Space and Page columns have been replaced with the Location column
- the Type column is now the first column and you can sort and filter attachments by file type
- the Type column uses the Icon Theme and shows a thumbnail preview for image attachments
- there's a new column that displays the attachment file size, with support for sorting and filtering the attachments by their file size
- attachments can be filtered by date using the new date range picker
We also fixed two important bugs:
- the sort was not working correctly
- attachments from hidden pages were displayed even if hidden pages were not visible
Improved Code Viewer with Blame View
The code viewer (More Actions > View Source) has been improved to look nicer and have proper line numbers that support highlighting and linking.
A new Blame View was also added to the code viewer. In this mode, each line of the document's content is annotated with the last author that modified it and the revision in which this modification was introduced. The blame view also works when viewing the source of a document revision (other than the latest one) so it can be accessed at any point in the history of a document. See the documentation for more details.
Gadget Wizard Update
The Gadget Wizard used to insert and edit the gadgets from the Dashboard has been updated to use the new Macro Wizard from the CKEditor.
New default notification filters
Default notification filters can now be created.
When a default notification filter is created, it appears as activated on every profile of every user. Each user can then choose to disable it (or re-enable it) by clicking on the "Advanced filtering options" link in its notification center.
In this version, only one default filter is provided (called "System Filter") and allows each user to hide (or not) notifications coming from the system user of XWiki.
Notifications Preferences
It is now possible to enable or disable all the notifications sent by an application.
Include and exclude Notification filters
A user can now define notification filters that are either inclusive or exclusive.
Notifications that come from a document that matches an exclusive filter will then be discarded.
Clickable versions in the changes view
When viewing the changes introduced between 2 document versions (diff), the compared versions are now clickable so that the document can be viewed at those specific revisions.
Deprecated and Internal Macros Hidden by Default
When inserting a macro, the WYSIWYG Editor (CKEditor) is now hiding the deprecated and internal macros from the "All Macros" category that is selected by default. In order to insert a deprecated or internal macro you need to explicitly select the corresponding category from the list. The following macros have been moved to the Deprecated category: Spaces, SpacesIndex and Workspaces.
Improvements when viewing a document version
When viewing a document revision (other than the last one), we're now showing the version information in the "last modified" section. Also, the "More actions" options are now displayed and the "view source" option will work on the currently displayed revision (instead of working on the latest version). Read more about document versioning in the documentation.
Display extension id
The extension id is now also displayed in the Dependencies section of the Repository Application.
Miscellaneous
The old WYSIWYG editor based on Google WebToolkit has been removed: In XWiki 8.2RC1 we made CKEditor the default WYSIWYG editor but the users could still use the old Google WebToolkit (GWT) editor by enabling it in the wiki administration. Starting with this version the old WYSIWYG editor is no longer available. CKEditor remains the only WYSIWYG editor option available in XWiki by default.
CKEditor Upgrade: The CKEditor has been upgraded from version 4.6.2 to 4.7.2. This brings a lot of bug fixes and some improvements:
- select and manipulate arbitrary rectangular table fragments (a few cells, a row or a column)
- paste from Microsoft Excel
- improved paste from Word
- new color picker
See the CKEditor release notes for more information.
Macro List in Syntax Help: The Syntax Help page now displays the list of all the macros available in your wiki. This was previously covered by the XWiki.WikiMacros page which has now been removed.
Layout Macro Category: A new Layout Macro category was added and the following macros were moved to it: Dashboard, Container and Gallery.
For Admins
Extension Manager improvements: Extensions installed as dependencies but which don't have any backward dependencies anymore are now taken into account by the upgrade job.
Active Installs now sends java specification version: The Active Installs now sends the java specification version in its pings to extension.xwiki.org.
See the documentation of the active installs for more informations.
For Developers
Jobs REST API improvements
Fail job started with async=false now return an error code 500. A serialized error message with complete stack trace is also provided in the Job status.
Syntax highlighting by default in the wiki editor
The Syntax Highlighting Application is now bundled and enabled by default.
Miscellaneous
Script Service API to get Macro descriptors: Example of usage: #set ($macroDescriptors = $services.rendering.getMacroDescriptors('xwiki/2.1'). Returns a List<MacroDescriptor>. More information in the Rendering Script Service documentation.
Refactored notifications module: For this release, we refactored the xwiki-platform-notifications modules by splitting it into multiple submodules. Some young APIs have been moved to sub packages.
See XWIKI-14575.
Moved Modules
- The Google WebToolkit (GWT) modules have been retired to the xwiki-contrib GitHub repository and they are no longer bundled in XWiki.
- The old Google WebToolkit based WYSIWYG content editor has been retired to the xwiki-contrib GitHub repository and it is no longer bundled with XWiki.
Upgrades
The following runtime dependencies have been upgraded (they have a different release cycle than XWiki Commons, XWiki Rendering, XWiki Platform and XWiki Enterprise):
- CSS4J 0.31
- JavaMail 1.6.0
- Apache PDFBox 2.0.7
- Jackson 2.9.0
- Plexus Utils 3.1.0
- JGroups 4.0.5
- Jetty 9.4.6.v20170531
- CKEditor Integration 1.16
Translations
The following translations have been updated:
- French
- Catalan
- Czech
- Danish
- German
- Galician
- Italian
- Latvian
- Dutch
- Polish
- Portuguese
- Romanian
- Russian
- Slovak
- Swedish
- Turkish
- Vietnamese
- Simplified Chinese
Tested Browsers & Databases
Here is the list of browsers we support and how they have been tested for this release:
Browser | Test Result | |
---|---|---|
![]() | Google Chrome 61 | Jira Tickets Marked as Fixed in the Release Notes |
![]() | Mozilla Firefox 55 | Not Tested |
![]() | Internet Explorer 10 | Not Tested |
![]() | Internet Explorer 11 | Not Tested |
Here is the list of databases we support and how they have been tested for this release:
Database | Test Result | |
---|---|---|
![]() | HyperSQL | Not Tested |
![]() | MySQL 5.7 | Not Tested |
![]() | Oracle 11.2 | Jira Tickets Marked as Fixed in the Release Notes |
![]() | PostgreSQL | Not Tested |
Known issues
Backward Compatibility and Migration Notes
General Notes
When upgrading make sure you compare your xwiki.cfg, xwiki.properties and web.xml files with the newest version since some configuration parameters may have been modified or added. Note that you should add xwiki.store.migration=1 so that XWiki will attempt to automatically migrate your current database to the new schema. Make sure you backup your Database before doing anything.
Issues specific to XWiki 9.7RC1
- The Attachment Index doesn't obey the $blacklistedSpaces Velocity variable any more. It uses the hidden page query filter instead, so it follows the "Show hidden pages" settings from the user profile.
- The old Google WebToolkit based WYSIWYG content editor has been removed and this brought some changes to the web.xml file:
- the package org.xwiki.wysiwyg.server.filter has been renamed to org.xwiki.wysiwyg.filter
- the gwtrpc and XWikiService servlets have been removed along with their mappings
- the mapping for the XWikiContextInitializationFilter has been removed
You can see all these changes below:
... ... @@ -80,7 +80,7 @@ 80 80 <!-- This filter is used to convert the HTML generated by the WYSIWYG editor to wiki syntax --> 81 81 <filter> 82 82 <filter-name>ConversionFilter</filter-name> 83 - <filter-class>org.xwiki.wysiwyg. server.filter.ConversionFilter</filter-class>83 + <filter-class>org.xwiki.wysiwyg.filter.ConversionFilter</filter-class> 84 84 </filter> 85 85 86 86 <!-- A filter that dispatches requests to the right action depending on the button pressed in the editing form. This ... ... @@ -94,13 +94,13 @@ 94 94 <!-- This filter is used to initialize the XWiki context before processing a request. --> 95 95 <filter> 96 96 <filter-name>XWikiContextInitializationFilter</filter-name> 97 - <filter-class>org.xwiki.wysiwyg. server.filter.XWikiContextInitializationFilter</filter-class>97 + <filter-class>org.xwiki.wysiwyg.filter.XWikiContextInitializationFilter</filter-class> 98 98 </filter> 99 99 100 100 <!-- This filter is used to initialize the XWiki context before processing a REST request. --> 101 101 <filter> 102 102 <filter-name>XWikiXmlRpcContextInitializationFilter</filter-name> 103 - <filter-class>org.xwiki.wysiwyg. server.filter.XWikiContextInitializationFilter</filter-class>103 + <filter-class>org.xwiki.wysiwyg.filter.XWikiContextInitializationFilter</filter-class> 104 104 <!-- A parameter used to identify the request as a an XML-RPC call --> 105 105 <init-param> 106 106 <param-name>mode</param-name> ... ... @@ -178,17 +178,9 @@ 178 178 <dispatcher>FORWARD</dispatcher> 179 179 </filter-mapping> 180 180 181 - <filter-mapping> 182 - <filter-name>XWikiContextInitializationFilter</filter-name> 183 - <servlet-name>gwtrpc</servlet-name> 184 - <dispatcher>REQUEST</dispatcher> 185 - <dispatcher>INCLUDE</dispatcher> 186 - <dispatcher>FORWARD</dispatcher> 187 - </filter-mapping> 188 - 189 189 <!-- TODO: This should be fixed. It's not normal that the REST module depends on the WYSIWYG module. 190 190 "XWikiXmlRpcContextInitializationFilter" points to 191 - org.xwiki.wysiwyg. server.filter.XWikiContextInitializationFilter -->183 + org.xwiki.wysiwyg.filter.XWikiContextInitializationFilter --> 192 192 <filter-mapping> 193 193 <filter-name>XWikiXmlRpcContextInitializationFilter</filter-name> 194 194 <servlet-name>RestletServlet</servlet-name> ... ... @@ -280,19 +280,6 @@ 280 280 --> 281 281 </servlet> 282 282 283 - <!-- This is the entry point for all component-based XWiki GWT services. XWikiService servlet should be dropped 284 - in favor of this servlet when we completely move to components. --> 285 - <servlet> 286 - <servlet-name>gwtrpc</servlet-name> 287 - <servlet-class>org.xwiki.wysiwyg.server.XWikiRemoteServiceServlet</servlet-class> 288 - </servlet> 289 - 290 - <!-- This is the entry pointy for XWiki GWT services --> 291 - <servlet> 292 - <servlet-name>XWikiService</servlet-name> 293 - <servlet-class>com.xpn.xwiki.gwt.api.server.XWikiServiceImpl</servlet-class> 294 - </servlet> 295 - 296 296 <!-- RESTful API Restlet servlet --> 297 297 <servlet> 298 298 <servlet-name>RestletServlet</servlet-name> ... ... @@ -332,16 +332,6 @@ 332 332 <url-pattern>/redirect</url-pattern> 333 333 </servlet-mapping> 334 334 335 - <servlet-mapping> 336 - <servlet-name>gwtrpc</servlet-name> 337 - <url-pattern>*.gwtrpc</url-pattern> 338 - </servlet-mapping> 339 - 340 - <servlet-mapping> 341 - <servlet-name>XWikiService</servlet-name> 342 - <url-pattern>/XWikiService</url-pattern> 343 - </servlet-mapping> 344 - 345 345 <!-- We override the mime type definition for javascript and css files, as some containers don't 346 346 provide it, causing problems for javascript files containg velocity code, like 347 347 fullscreen.js -->
API Breakages
The following APIs were modified since XWiki 9.6:
- Not a breackage in the context of REST
- Violation type:java.annotation.attributeValueChanged
- Code:## Old:
class org.xwiki.extension.repository.xwiki.model.jaxb.ExtensionDependency
## New:
class org.xwiki.extension.repository.xwiki.model.jaxb.ExtensionDependency
- Violation type:
- Young API
- Violation type:java.method.removed
- Code:## Old:
method java.util.List<org.xwiki.eventstream.RecordableEventDescriptor> org.xwiki.eventstream.RecordableEventDescriptorManager::getAllRecordableEventDescriptors() throws org.xwiki.eventstream.EventStreamException
- Violation type:
- Young API
- Violation type:java.method.removed
- Code:## Old:
method java.util.List<org.xwiki.eventstream.RecordableEventDescriptor> org.xwiki.eventstream.RecordableEventDescriptorManager::getAllRecordableEventDescriptorsAllWikis() throws org.xwiki.eventstream.EventStreamException
- Violation type:
- Young API
- Violation type:java.method.addedToInterface
- Code:## Old:
null
## New:
method java.util.List<org.xwiki.eventstream.RecordableEventDescriptor> org.xwiki.eventstream.RecordableEventDescriptorManager::getRecordableEventDescriptors(boolean) throws org.xwiki.eventstream.EventStreamException
- Violation type:
- Young API
- Violation type:java.method.removed
- Code:## Old:
method java.util.List<org.xwiki.eventstream.RecordableEventDescriptor> org.xwiki.eventstream.script.EventStreamScriptService::getAllRecordableEventDescriptors() throws org.xwiki.eventstream.EventStreamException
- Violation type:
- Young API
- Violation type:java.method.addedToInterface
- Code:## Old:
null
## New:
method int org.xwiki.notifications.NotificationConfiguration::liveNotificationsGraceTime()
- Violation type:
- Young API
- Violation type:java.method.parameterTypeChanged
- Code:## Old:
parameter void org.xwiki.notifications.NotificationPreference::<init>(java.lang.String, ===java.lang.String===, boolean)
## New:
parameter void org.xwiki.notifications.NotificationPreference::<init>(java.lang.String, ===boolean===, org.xwiki.notifications.NotificationFormat)
- Violation type:
- Young API
- Violation type:java.method.parameterTypeChanged
- Code:## Old:
parameter void org.xwiki.notifications.NotificationPreference::<init>(java.lang.String, java.lang.String, ===boolean===)
## New:
parameter void org.xwiki.notifications.NotificationPreference::<init>(java.lang.String, boolean, ===org.xwiki.notifications.NotificationFormat===)
- Violation type:
- Young API
- Violation type:java.method.parameterTypeChanged
- Code:## Old:
parameter void org.xwiki.notifications.NotificationPreference::<init>(java.lang.String, ===java.lang.String===, boolean, org.xwiki.notifications.NotificationFormat)
## New:
parameter void org.xwiki.notifications.NotificationPreference::<init>(java.lang.String, ===boolean===, org.xwiki.notifications.NotificationFormat, java.util.Date)
- Violation type:
- Young API
- Violation type:java.method.parameterTypeChanged
- Code:## Old:
parameter void org.xwiki.notifications.NotificationPreference::<init>(java.lang.String, java.lang.String, ===boolean===, org.xwiki.notifications.NotificationFormat)
## New:
parameter void org.xwiki.notifications.NotificationPreference::<init>(java.lang.String, boolean, ===org.xwiki.notifications.NotificationFormat===, java.util.Date)
- Violation type:
- Young API
- Violation type:java.method.parameterTypeChanged
- Code:## Old:
parameter void org.xwiki.notifications.NotificationPreference::<init>(java.lang.String, java.lang.String, boolean, ===org.xwiki.notifications.NotificationFormat===)
## New:
parameter void org.xwiki.notifications.NotificationPreference::<init>(java.lang.String, boolean, org.xwiki.notifications.NotificationFormat, ===java.util.Date===)
- Violation type:
- Young API
- Violation type:java.method.removed
- Code:## Old:
method java.lang.String org.xwiki.notifications.NotificationPreference::getApplicationId()
- Violation type:
- Young API
- Violation type:java.method.numberOfParametersChanged
- Code:## Old:
method java.util.Map<java.lang.String, java.lang.Object> org.xwiki.notifications.NotificationFilter::queryFilterParams(org.xwiki.model.reference.DocumentReference, org.xwiki.notifications.NotificationFormat)
## New:
method java.util.Map<java.lang.String, java.lang.Object> org.xwiki.notifications.NotificationFilter::queryFilterParams(org.xwiki.model.reference.DocumentReference, org.xwiki.notifications.NotificationFormat, java.util.List<java.lang.String>)
- Violation type:
- Young API, moved to org.xwiki.notifications.notifiers.NotificationDisplayer
- Violation type:java.class.removed
- Code:## Old:
interface org.xwiki.notifications.NotificationDisplayer
- Violation type:
- Young API, moved to org.xwiki.notifications.filters.NotificationFilter
- Violation type:java.class.removed
- Code:## Old:
interface org.xwiki.notifications.NotificationFilter
- Violation type:
- Young API, moved to org.xwiki.notifications.sources.NotificationManager
- Violation type:java.class.removed
- Code:## Old:
interface org.xwiki.notifications.NotificationManager
- Violation type:
- Young API, moved to org.xwiki.notifications.preferences.NotificationPreference
- Violation type:java.class.removed
- Code:## Old:
class org.xwiki.notifications.NotificationPreference
- Violation type:
- Young API, moved to org.xwiki.notifications.notifiers.NotificationRenderer
- Violation type:java.class.removed
- Code:## Old:
interface org.xwiki.notifications.NotificationRenderer
- Violation type:
- Young API, moved to org.xwiki.notifications.notifiers.email.NotificationEmailInterval
- Violation type:java.class.removed
- Code:## Old:
enum org.xwiki.notifications.email.NotificationEmailInterval
- Violation type:
- Young API, moved to org.xwiki.notifications.notifiers.email.NotificationEmailRenderer
- Violation type:java.class.removed
- Code:## Old:
interface org.xwiki.notifications.email.NotificationEmailRenderer
- Violation type:
- Young API, moved to org.xwiki.notifications.notifiers.rss.NotificationRSSRenderer
- Violation type:java.class.removed
- Code:## Old:
interface org.xwiki.notifications.rss.NotificationRSSRenderer
- Violation type:
- Young API, moved to org.xwiki.notifications.notifiers.rss.NotificationRSSManager
- Violation type:java.class.removed
- Code:## Old:
interface org.xwiki.notifications.rss.NotificationRSSManager
- Violation type:
- Young API, moved to org.xwiki.notifications.script.NotificationScriptService
- Violation type:java.class.removed
- Code:## Old:
class org.xwiki.notifications.script.NotificationScriptService
- Violation type:
- Caused by the move to JavaMail 1.6.0 which introduced generics in APIs
- Violation type:java.method.returnTypeTypeParametersChanged
- Code:## Old:
method java.util.Enumeration javax.mail.internet.MimeMessage::getAllHeaderLines() throws javax.mail.MessagingException @ org.xwiki.mail.ExtendedMimeMessage
## New:
method java.util.Enumeration<java.lang.String> javax.mail.internet.MimeMessage::getAllHeaderLines() throws javax.mail.MessagingException @ org.xwiki.mail.ExtendedMimeMessage
- Violation type:
- Caused by the move to JavaMail 1.6.0 which introduced generics in APIs
- Violation type:java.method.returnTypeTypeParametersChanged
- Code:## Old:
method java.util.Enumeration javax.mail.internet.MimeMessage::getAllHeaders() throws javax.mail.MessagingException @ org.xwiki.mail.ExtendedMimeMessage
## New:
method java.util.Enumeration<javax.mail.Header> javax.mail.internet.MimeMessage::getAllHeaders() throws javax.mail.MessagingException @ org.xwiki.mail.ExtendedMimeMessage
- Violation type:
- Caused by the move to JavaMail 1.6.0 which introduced generics in APIs
- Violation type:java.method.returnTypeTypeParametersChanged
- Code:## Old:
method java.util.Enumeration javax.mail.internet.MimeMessage::getMatchingHeaderLines(java.lang.String[]) throws javax.mail.MessagingException @ org.xwiki.mail.ExtendedMimeMessage
## New:
method java.util.Enumeration<java.lang.String> javax.mail.internet.MimeMessage::getMatchingHeaderLines(java.lang.String[]) throws javax.mail.MessagingException @ org.xwiki.mail.ExtendedMimeMessage
- Violation type:
- Caused by the move to JavaMail 1.6.0 which introduced generics in APIs
- Violation type:java.method.returnTypeTypeParametersChanged
- Code:## Old:
method java.util.Enumeration javax.mail.internet.MimeMessage::getMatchingHeaders(java.lang.String[]) throws javax.mail.MessagingException @ org.xwiki.mail.ExtendedMimeMessage
## New:
method java.util.Enumeration<javax.mail.Header> javax.mail.internet.MimeMessage::getMatchingHeaders(java.lang.String[]) throws javax.mail.MessagingException @ org.xwiki.mail.ExtendedMimeMessage
- Violation type:
- Caused by the move to JavaMail 1.6.0 which introduced generics in APIs
- Violation type:java.method.returnTypeTypeParametersChanged
- Code:## Old:
method java.util.Enumeration javax.mail.internet.MimeMessage::getNonMatchingHeaderLines(java.lang.String[]) throws javax.mail.MessagingException @ org.xwiki.mail.ExtendedMimeMessage
## New:
method java.util.Enumeration<java.lang.String> javax.mail.internet.MimeMessage::getNonMatchingHeaderLines(java.lang.String[]) throws javax.mail.MessagingException @ org.xwiki.mail.ExtendedMimeMessage
- Violation type:
- Caused by the move to JavaMail 1.6.0 which introduced generics in APIs
- Violation type:java.method.returnTypeTypeParametersChanged
- Code:## Old:
method java.util.Enumeration javax.mail.internet.MimeMessage::getNonMatchingHeaders(java.lang.String[]) throws javax.mail.MessagingException @ org.xwiki.mail.ExtendedMimeMessage
## New:
method java.util.Enumeration<javax.mail.Header> javax.mail.internet.MimeMessage::getNonMatchingHeaders(java.lang.String[]) throws javax.mail.MessagingException @ org.xwiki.mail.ExtendedMimeMessage
- Violation type:
- Not a breakage
- Violation type:java.annotation.attributeValueChanged
- Code:## Old:
class org.xwiki.rest.model.jaxb.JobStatus
## New:
class org.xwiki.rest.model.jaxb.JobStatus
- Violation type:
Credits
The following people have contributed code to this release (sorted alphabetically):
Alexandra Ifrim
Clément Aubin
Ecaterina Moraru (Valica)
Eduard Moraru
Guillaume Delhumeau
Marius Dumitru Florea
Pierre Bondoerffer
Sergiu Dumitriu
Subbu Dantu
Thomas Mortagne
Vincent Massol