diff --git a/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-api/src/main/java/org/xwiki/container/RedirectResponse.java b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-api/src/main/java/org/xwiki/container/RedirectResponse.java
index 4438d34a36d1..16a0ea6d0836 100644
--- a/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-api/src/main/java/org/xwiki/container/RedirectResponse.java
+++ b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-api/src/main/java/org/xwiki/container/RedirectResponse.java
@@ -27,7 +27,9 @@
*
* @version $Id$
* @since 10.0
+ * @deprecated merged with {@link Response}
*/
+@Deprecated(since = "42.0.0")
public interface RedirectResponse extends Response
{
/**
diff --git a/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-api/src/main/java/org/xwiki/container/Request.java b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-api/src/main/java/org/xwiki/container/Request.java
index 6fa349413bd2..f93fe250a46c 100644
--- a/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-api/src/main/java/org/xwiki/container/Request.java
+++ b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-api/src/main/java/org/xwiki/container/Request.java
@@ -19,18 +19,215 @@
*/
package org.xwiki.container;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Enumeration;
import java.util.List;
+import org.xwiki.stability.Unstable;
+import org.xwiki.user.UserReference;
+
+/**
+ * Represent metadata associated with a request sent to an XWiki container by a client.
+ *
+ * The difference between properties and attributes is that the properties are expected to be sent by the client while
+ * attributes are generally set on server side during the request execution by other components.
+ *
+ * @version $Id$
+ * @since 1.2M1
+ */
public interface Request
{
- void setProperty(String key, Object value);
+ /**
+ * The name of the attribute holding the request effective author.
+ *
+ * @since 42.0.0
+ */
+ @Unstable
+ public static final String ATTRIBUTE_EFFECTIVE_AUTHOR = Request.class.getName() + "#effectiveAuthor";
+
+ /**
+ * Returns the value of a request parameter as a String
, or null
if the parameter does not
+ * exist. Request parameters are extra information sent with the request. For HTTP servlets, parameters are
+ * contained in the query string or posted form data.
+ *
+ * You should only use this method when you are sure the parameter has only one value. If the parameter might have
+ * more than one value, use {@link #getProperties}.
+ *
+ * If you use this method with a multivalued parameter, the value returned is equal to the first value in the array
+ * returned by getParameterValues
.
+ *
+ * @param key a String
specifying the name of the parameter
+ * @return an Object
containing the value of the parameter, or null
if the parameter does
+ * not exist
+ * @see #getParameterValues
+ * @since 42.0.0
+ */
+ @Unstable
+ default Object getParameter(String key)
+ {
+ return null;
+ }
+
+ /**
+ * Returns an array of String
objects containing all of the values the given request parameter has, or
+ * null
if the parameter does not exist.
+ *
+ * If the parameter has a single value, the array has a length of 1.
+ *
+ * @param name a String
containing the name of the parameter whose value is requested
+ * @return an array of String
objects containing the parameter's values
+ * @see #getParameter
+ * @since 42.0.0
+ */
+ @Unstable
+ default String[] getParameterValues(String name)
+ {
+ return null;
+ }
+
+ /**
+ * Returns an Enumeration
of String
objects containing the names of the parameters
+ * contained in this request. If the request has no parameters, the method returns an empty
+ * Enumeration
.
+ *
+ * @return an Enumeration
of String
objects, each String
containing the name
+ * of a request parameter; or an empty Enumeration
if the request has no parameters
+ * @since 42.0.0
+ */
+ @Unstable
+ default Enumeration getParameterNames()
+ {
+ return Collections.emptyEnumeration();
+ }
- Object getProperty(String key);
+ /**
+ * Returns the value of the named attribute as an Object
, or null
if no attribute of the
+ * given name exists.
+ *
+ * @param name a String
specifying the name of the attribute
+ * @return an Object
containing the value of the attribute, or null
if the attribute does
+ * not exist
+ * @since 42.0.0
+ */
+ @Unstable
+ default Object getAttribute(String name)
+ {
+ return null;
+ }
/**
+ * Stores an attribute in this request. Attributes are reset between requests.
+ *
+ * @param name a String
specifying the name of the attribute
+ * @param o the Object
to be stored
+ * @since 42.0.0
+ */
+ @Unstable
+ default void setAttribute(String name, Object o)
+ {
+
+ }
+
+ /**
+ * Removes an attribute from this request. This method is not generally needed as attributes only persist as long as
+ * the request is being handled.
+ *
+ * @param name a String
specifying the name of the attribute to remove
+ * @since 42.0.0
+ */
+ @Unstable
+ default void removeAttribute(String name)
+ {
+
+ }
+
+ /**
+ * Returns an Enumeration
containing the names of the attributes available to this request. This method
+ * returns an empty Enumeration
if the request has no attributes available to it.
+ *
+ * @return an Enumeration
of strings containing the names of the request's attributes
+ * @since 42.0.0
+ */
+ @Unstable
+ default Enumeration getAttributeNames()
+ {
+ return Collections.emptyEnumeration();
+ }
+
+ // XWiki
+
+ /**
+ * @return the user that holds the responsibility, in terms of access rights, for the submitted data and the changes
+ * triggered by this request. If the request doesn't indicate an effective author then the user that gets
+ * authenticated with the information provided by this request (or the guest user, if authentication
+ * information is missing) should be considered the effective author.
+ * @since 42.0.0
+ */
+ @Unstable
+ default UserReference getEffectiveAuthor()
+ {
+ return (UserReference) getAttribute(ATTRIBUTE_EFFECTIVE_AUTHOR);
+ }
+
+ // Deprecated
+
+ /**
+ * @deprecated use {@link #getParameter(String)} or {@link #getAttribute(String)} instead depending on the need
+ */
+ @Deprecated(since = "42.0.0")
+ default Object getProperty(String key)
+ {
+ Object result;
+
+ // Look first in the Query Parameters and then in the Query Attributes
+ result = getParameter(key);
+ if (result == null) {
+ result = getAttribute(key);
+ }
+
+ return result;
+ }
+
+ /**
+ * @deprecated use {@link #getParameterValues(String)} or {@link #getAttribute(String)} instead depending on the
+ * need
* @since 3.2M3
*/
- List getProperties(String key);
+ @Deprecated(since = "42.0.0")
+ default List getProperties(String key)
+ {
+ List result = new ArrayList<>();
+
+ // Look first in the parameters, and then in the attributes
+ Object[] requestParameters = getParameterValues(key);
+ if (requestParameters != null) {
+ result.addAll(Arrays.asList(requestParameters));
+ }
+ Object attributeValue = getAttribute(key);
+ if (attributeValue != null) {
+ result.add(attributeValue);
+ }
+
+ return result;
+ }
+
+ /**
+ * @deprecated use {@link #setAttribute(String, Object)} instead
+ */
+ @Deprecated(since = "42.0.0")
+ default void setProperty(String key, Object value)
+ {
+ setAttribute(key, value);
+ }
- void removeProperty(String key);
+ /**
+ * @deprecated use {@link #removeAttribute(String)} instead
+ */
+ @Deprecated(since = "42.0.0")
+ default void removeProperty(String key)
+ {
+ removeAttribute(key);
+ }
}
diff --git a/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-api/src/main/java/org/xwiki/container/Response.java b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-api/src/main/java/org/xwiki/container/Response.java
index 4d1594bc515b..b62c37c4515b 100644
--- a/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-api/src/main/java/org/xwiki/container/Response.java
+++ b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-api/src/main/java/org/xwiki/container/Response.java
@@ -22,10 +22,13 @@
import java.io.IOException;
import java.io.OutputStream;
+import org.xwiki.stability.Unstable;
+
/**
* Represents a server response.
*
* @version $Id$
+ * @since 1.2M1
*/
public interface Response
{
@@ -52,4 +55,117 @@ public interface Response
* @param mimeType the MIME type for this response, according to the RFC 2045.
*/
void setContentType(String mimeType);
+
+ // HTTP
+
+ /**
+ * Sends a temporary redirect response to the client using the specified redirect location URL.
+ *
+ * @param location the redirect URL
+ * @throws IOException if an error happens
+ * @since 42.0.0
+ */
+ @Unstable
+ default void sendRedirect(String location) throws IOException
+ {
+
+ }
+
+ /**
+ * Sets the status code for this response.
+ *
+ * Valid status codes are those in the 2XX, 3XX, 4XX, and 5XX ranges. Other status codes are treated as container
+ * specific.
+ *
+ * @param sc the status code
+ * @see #sendError
+ * @since 42.0.0
+ */
+ @Unstable
+ default void setStatus(int sc)
+ {
+
+ }
+
+ /**
+ * Sends an error response to the client using the specified status and clears the buffer.
+ *
+ * If the response has already been committed, this method throws an IllegalStateException. After using this method,
+ * the response should be considered to be committed and should not be written to.
+ *
+ * @param sc the error status code
+ * @param msg the descriptive message
+ * @exception IOException If an input or output exception occurs
+ * @exception IllegalStateException If the response was committed
+ * @since 42.0.0
+ */
+ @Unstable
+ default void sendError(int sc, String msg) throws IOException
+ {
+
+ }
+
+ /**
+ * Sends an error response to the client using the specified status code and clears the buffer.
+ *
+ * If the response has already been committed, this method throws an IllegalStateException. After using this method,
+ * the response should be considered to be committed and should not be written to.
+ *
+ * @param sc the error status code
+ * @exception IOException If an input or output exception occurs
+ * @exception IllegalStateException If the response was committed before this method call
+ * @since 42.0.0
+ */
+ @Unstable
+ default void sendError(int sc) throws IOException
+ {
+
+ }
+
+ /**
+ * Returns a boolean indicating whether the named response header has already been set.
+ *
+ * @param name the header name
+ * @return true
if the named response header has already been set; false
otherwise
+ * @since 42.0.0
+ */
+ @Unstable
+ default boolean containsHeader(String name)
+ {
+ return false;
+ }
+
+ /**
+ * Sets a response header with the given name and value. If the header had already been set, the new value
+ * overwrites the previous one. The containsHeader
method can be used to test for the presence of a
+ * header before setting its value.
+ *
+ * @param name the name of the header
+ * @param value the header value If it contains octet string, it should be encoded according to RFC 2047
+ * (http://www.ietf.org/rfc/rfc2047.txt)
+ * @see #containsHeader
+ * @see #addHeader
+ * @since 42.0.0
+ */
+ @Unstable
+ default void setHeader(String name, String value)
+ {
+
+ }
+
+ /**
+ * Adds a response header with the given name and value. This method allows response headers to have multiple
+ * values.
+ *
+ * @param name the name of the header
+ * @param value the additional header value If it contains octet string, it should be encoded according to RFC 2047
+ * (http://www.ietf.org/rfc/rfc2047.txt)
+ * @see #setHeader
+ * @since 42.0.0
+ */
+ @Unstable
+ default void addHeader(String name, String value)
+ {
+
+ }
}
diff --git a/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-api/src/main/java/org/xwiki/container/Session.java b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-api/src/main/java/org/xwiki/container/Session.java
index 4fd53b69187a..ca8076498667 100644
--- a/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-api/src/main/java/org/xwiki/container/Session.java
+++ b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-api/src/main/java/org/xwiki/container/Session.java
@@ -19,6 +19,11 @@
*/
package org.xwiki.container;
+import java.util.Collections;
+import java.util.Enumeration;
+
+import org.xwiki.stability.Unstable;
+
/**
* Represents a session.
*
@@ -26,4 +31,64 @@
*/
public interface Session
{
+ /**
+ * Returns the object bound with the specified name in this session, or null
if no object is bound
+ * under the name.
+ *
+ * @param name a string specifying the name of the object
+ * @return the object with the specified name
+ * @exception IllegalStateException if this method is called on an invalidated session
+ * @since 42.0.0
+ */
+ @Unstable
+ default Object getAttribute(String name)
+ {
+ return null;
+ }
+
+ /**
+ * Binds an object to this session, using the name specified. If an object of the same name is already bound to the
+ * session, the object is replaced.
+ *
+ * If the value passed in is null, this has the same effect as calling removeAttribute()
.
+ *
+ * @param name the name to which the object is bound; cannot be null
+ * @param value the object to be bound
+ * @exception IllegalStateException if this method is called on an invalidated session
+ * @since 42.0.0
+ */
+ @Unstable
+ default void setAttribute(String name, Object value)
+ {
+
+ }
+
+ /**
+ * Removes the object bound with the specified name from this session. If the session does not have an object bound
+ * with the specified name, this method does nothing.
+ *
+ * @param name the name of the object to remove from this session
+ * @exception IllegalStateException if this method is called on an invalidated session
+ * @since 42.0.0
+ */
+ @Unstable
+ default void removeAttribute(String name)
+ {
+
+ }
+
+ /**
+ * Returns an Enumeration
of String
objects containing the names of all the objects bound
+ * to this session.
+ *
+ * @return an Enumeration
of String
objects specifying the names of all the objects bound
+ * to this session
+ * @exception IllegalStateException if this method is called on an invalidated session
+ * @since 42.0.0
+ */
+ @Unstable
+ default Enumeration getAttributeNames()
+ {
+ return Collections.emptyEnumeration();
+ }
}
diff --git a/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-api/src/main/java/org/xwiki/container/internal/script/ScriptRequest.java b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-api/src/main/java/org/xwiki/container/internal/script/ScriptRequest.java
new file mode 100644
index 000000000000..3e6086de44fa
--- /dev/null
+++ b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-api/src/main/java/org/xwiki/container/internal/script/ScriptRequest.java
@@ -0,0 +1,159 @@
+/*
+ * See the NOTICE file distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.xwiki.container.internal.script;
+
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.xwiki.container.Request;
+import org.xwiki.container.wrap.WrappingRequest;
+import org.xwiki.security.authorization.ContextualAuthorizationManager;
+import org.xwiki.security.authorization.Right;
+
+/**
+ * A wrapper around {@link Request} with security related checks.
+ *
+ * @version $Id$
+ * @since 42.0.0
+ */
+public class ScriptRequest extends WrappingRequest
+{
+ /**
+ * Set of request attributes that require programming rights to be modified.
+ */
+ private static final Set READ_ONLY_ATTRIBUTES = Set.of(Request.ATTRIBUTE_EFFECTIVE_AUTHOR);
+
+ private static final String KEY_SAFEATTRIBUTES = ScriptRequest.class.getName() + "#attributes";
+
+ private final ContextualAuthorizationManager authorization;
+
+ /**
+ * @param request the wrapped request
+ * @param authorization used to check rights of the current author
+ */
+ public ScriptRequest(Request request, ContextualAuthorizationManager authorization)
+ {
+ super(request);
+
+ this.authorization = authorization;
+ }
+
+ @Override
+ public Request getRequest()
+ {
+ return this.authorization.hasAccess(Right.PROGRAM) ? super.getRequest() : null;
+ }
+
+ /**
+ * Access an attribute that is safe to use for any script author.
+ *
+ * @param name the name of the attribute
+ * @return the value of the attribute
+ */
+ public Object getSafeAttribute(String name)
+ {
+ Map safeAttributes = (Map) this.request.getAttribute(KEY_SAFEATTRIBUTES);
+
+ return safeAttributes != null ? safeAttributes.get(name) : null;
+ }
+
+ /**
+ * Set an attribute that is safe to use for any script author.
+ *
+ * It's recommended to not store anything sensitive in there.
+ *
+ * @param name the name of the attribute
+ * @param value the value of the attribute
+ */
+ public void setSafeAttribute(String name, Object value)
+ {
+ if (!READ_ONLY_ATTRIBUTES.contains(name) || this.authorization.hasAccess(Right.PROGRAM)) {
+ Map safeSession = (Map) this.request.getAttribute(KEY_SAFEATTRIBUTES);
+
+ if (safeSession == null) {
+ safeSession = new ConcurrentHashMap<>();
+ this.request.setAttribute(KEY_SAFEATTRIBUTES, safeSession);
+ }
+
+ safeSession.put(name, value);
+ }
+ }
+
+ /**
+ * Remove an attribute that is safe to use for any script author.
+ *
+ * @param name the name of the attribute
+ */
+ public void removeSafeAttribute(String name)
+ {
+ if (!READ_ONLY_ATTRIBUTES.contains(name) || this.authorization.hasAccess(Right.PROGRAM)) {
+ Map safeSession = (Map) this.request.getAttribute(KEY_SAFEATTRIBUTES);
+
+ if (safeSession != null) {
+ safeSession.remove(name);
+ }
+ }
+ }
+
+ /**
+ * @return the names of the attributes which are safe to use for any script author.
+ */
+ public Enumeration getSafeAttributeNames()
+ {
+ Map safeSession = (Map) this.request.getAttribute(KEY_SAFEATTRIBUTES);
+
+ return safeSession != null ? Collections.enumeration(safeSession.keySet()) : Collections.emptyEnumeration();
+ }
+
+ @Override
+ public Object getAttribute(String name)
+ {
+ return this.authorization.hasAccess(Right.PROGRAM) ? this.request.getAttribute(name) : getSafeAttribute(name);
+ }
+
+ @Override
+ public Enumeration getAttributeNames()
+ {
+ return this.authorization.hasAccess(Right.PROGRAM) ? this.request.getAttributeNames() : getSafeAttributeNames();
+ }
+
+ @Override
+ public void setAttribute(String name, Object value)
+ {
+ if (this.authorization.hasAccess(Right.PROGRAM)) {
+ this.request.setAttribute(name, value);
+ } else {
+ setSafeAttribute(name, value);
+ }
+ }
+
+ @Override
+ public void removeAttribute(String name)
+ {
+ if (this.authorization.hasAccess(Right.PROGRAM)) {
+ this.request.removeAttribute(name);
+ } else {
+ removeSafeAttribute(name);
+ }
+ }
+}
diff --git a/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-api/src/main/java/org/xwiki/container/internal/script/ScriptResponse.java b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-api/src/main/java/org/xwiki/container/internal/script/ScriptResponse.java
new file mode 100644
index 000000000000..22de0da8e42f
--- /dev/null
+++ b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-api/src/main/java/org/xwiki/container/internal/script/ScriptResponse.java
@@ -0,0 +1,53 @@
+/*
+ * See the NOTICE file distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.xwiki.container.internal.script;
+
+import org.xwiki.container.Response;
+import org.xwiki.container.wrap.WrappingResponse;
+import org.xwiki.security.authorization.ContextualAuthorizationManager;
+import org.xwiki.security.authorization.Right;
+
+/**
+ * A wrapper around {@link Response} with security related checks.
+ *
+ * @version $Id$
+ * @since 42.0.0
+ */
+public class ScriptResponse extends WrappingResponse
+{
+ private final ContextualAuthorizationManager authorization;
+
+ /**
+ * @param response the wrapped response
+ * @param authorization used to check rights of the current author
+ */
+ public ScriptResponse(Response response, ContextualAuthorizationManager authorization)
+ {
+ super(response);
+
+ this.authorization = authorization;
+ }
+
+ @Override
+ public Response getResponse()
+ {
+ return this.authorization.hasAccess(Right.PROGRAM) ? super.getResponse() : null;
+ }
+}
diff --git a/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-api/src/main/java/org/xwiki/container/internal/script/ScriptSession.java b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-api/src/main/java/org/xwiki/container/internal/script/ScriptSession.java
new file mode 100644
index 000000000000..65a51f168504
--- /dev/null
+++ b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-api/src/main/java/org/xwiki/container/internal/script/ScriptSession.java
@@ -0,0 +1,167 @@
+/*
+ * See the NOTICE file distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.xwiki.container.internal.script;
+
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.xwiki.container.Session;
+import org.xwiki.security.authorization.ContextualAuthorizationManager;
+import org.xwiki.security.authorization.Right;
+
+/**
+ * A wrapper around {@link Session} with security related checks.
+ *
+ * @version $Id$
+ * @since 42.0.0
+ */
+public class ScriptSession implements Session
+{
+ private static final String KEY_SAFEATTRIBUTES = ScriptSession.class.getName();
+
+ private final Session session;
+
+ private final ContextualAuthorizationManager authorization;
+
+ /**
+ * @param session the wrapped session
+ * @param authorization used to check rights of the current author
+ */
+ public ScriptSession(Session session, ContextualAuthorizationManager authorization)
+ {
+ this.session = session;
+ this.authorization = authorization;
+ }
+
+ /**
+ * Access an attribute that is safe to use for any script author.
+ *
+ * @param name the name of the attribute
+ * @return the value of the attribute
+ */
+ public Object getSafeAttribute(String name)
+ {
+ Map safeAttributes = (Map) this.session.getAttribute(KEY_SAFEATTRIBUTES);
+
+ return safeAttributes != null ? safeAttributes.get(name) : null;
+ }
+
+ /**
+ * Set an attribute that is safe to use for any script author.
+ *
+ * It's recommended to not store anything sensitive in there.
+ *
+ * @param name the name of the attribute
+ * @param value the value of the attribute
+ */
+ public void setSafeAttribute(String name, Object value)
+ {
+ Map safeSession = (Map) this.session.getAttribute(KEY_SAFEATTRIBUTES);
+
+ if (safeSession == null) {
+ safeSession = new ConcurrentHashMap<>();
+ this.session.setAttribute(KEY_SAFEATTRIBUTES, safeSession);
+ }
+
+ safeSession.put(name, value);
+ }
+
+ /**
+ * Remove an attribute that is safe to use for any script author.
+ *
+ * @param name the name of the attribute
+ */
+ public void removeSafeAttribute(String name)
+ {
+ Map safeSession = (Map) this.session.getAttribute(KEY_SAFEATTRIBUTES);
+
+ if (safeSession != null) {
+ safeSession.remove(name);
+ }
+ }
+
+ /**
+ * @return the names of the attributes which are safe to use for any script author.
+ */
+ public Enumeration getSafeAttributeNames()
+ {
+ Map safeSession = (Map) this.session.getAttribute(KEY_SAFEATTRIBUTES);
+
+ return safeSession != null ? Collections.enumeration(safeSession.keySet()) : Collections.emptyEnumeration();
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * Allow to manipulate only a limited set of attributes when not a programming right user since other might be
+ * sensitive data.
+ *
+ * @see Session#getAttribute(java.lang.String)
+ */
+ @Override
+ public Object getAttribute(String name)
+ {
+ return this.authorization.hasAccess(Right.PROGRAM) ? this.session.getAttribute(name) : getSafeAttribute(name);
+ }
+
+ @Override
+ public Enumeration getAttributeNames()
+ {
+ return this.authorization.hasAccess(Right.PROGRAM) ? this.session.getAttributeNames() : getSafeAttributeNames();
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * Allow to manipulate only a limited set of attributes when not a programming right user since other might be
+ * sensitive data.
+ *
+ * @see Session#setAttribute(java.lang.String, java.lang.Object)
+ */
+ @Override
+ public void setAttribute(String name, Object value)
+ {
+ if (this.authorization.hasAccess(Right.PROGRAM)) {
+ this.session.setAttribute(name, value);
+ } else {
+ setSafeAttribute(name, value);
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * Allow to manipulate only a limited set of attributes when not a programming right user since other might be
+ * sensitive data.
+ *
+ * @see Session#removeAttribute(java.lang.String)
+ */
+ @Override
+ public void removeAttribute(String name)
+ {
+ if (this.authorization.hasAccess(Right.PROGRAM)) {
+ this.session.removeAttribute(name);
+ } else {
+ removeSafeAttribute(name);
+ }
+ }
+}
diff --git a/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-api/src/main/java/org/xwiki/container/script/ContainerScriptService.java b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-api/src/main/java/org/xwiki/container/script/ContainerScriptService.java
new file mode 100644
index 000000000000..5d767ac371df
--- /dev/null
+++ b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-api/src/main/java/org/xwiki/container/script/ContainerScriptService.java
@@ -0,0 +1,77 @@
+/*
+ * See the NOTICE file distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.xwiki.container.script;
+
+import javax.inject.Singleton;
+
+import org.xwiki.component.annotation.Component;
+import org.xwiki.container.Container;
+import org.xwiki.container.Request;
+import org.xwiki.container.Response;
+import org.xwiki.container.Session;
+import org.xwiki.container.internal.script.ScriptRequest;
+import org.xwiki.container.internal.script.ScriptResponse;
+import org.xwiki.container.internal.script.ScriptSession;
+import org.xwiki.security.authorization.ContextualAuthorizationManager;
+import org.xwiki.stability.Unstable;
+
+import jakarta.inject.Inject;
+
+/**
+ * The main entry point for a script to manipulate {@link Container} related APIs.
+ *
+ * @version $Id$
+ * @since 42.0.0
+ */
+@Unstable
+@Component
+@Singleton
+public class ContainerScriptService
+{
+ @Inject
+ private Container container;
+
+ @Inject
+ private ContextualAuthorizationManager authorization;
+
+ /**
+ * @return the current request
+ */
+ public Request getRequest()
+ {
+ return new ScriptRequest(this.container.getRequest(), this.authorization);
+ }
+
+ /**
+ * @return the current response
+ */
+ public Response getResponse()
+ {
+ return new ScriptResponse(this.container.getResponse(), this.authorization);
+ }
+
+ /**
+ * @return the current session
+ */
+ public Session getSession()
+ {
+ return new ScriptSession(this.container.getSession(), this.authorization);
+ }
+}
diff --git a/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-api/src/main/java/org/xwiki/container/wrap/WrappingRequest.java b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-api/src/main/java/org/xwiki/container/wrap/WrappingRequest.java
new file mode 100644
index 000000000000..9ed4aacfa3f5
--- /dev/null
+++ b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-api/src/main/java/org/xwiki/container/wrap/WrappingRequest.java
@@ -0,0 +1,100 @@
+/*
+ * See the NOTICE file distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.xwiki.container.wrap;
+
+import java.util.Enumeration;
+
+import org.xwiki.container.Request;
+import org.xwiki.user.UserReference;
+
+/**
+ * A wrapper around {@link Request}.
+ *
+ * @version $Id$
+ * @since 42.0.0
+ */
+public class WrappingRequest implements Request
+{
+ protected final Request request;
+
+ /**
+ * @param request the wrapped request
+ */
+ public WrappingRequest(Request request)
+ {
+ this.request = request;
+ }
+
+ /**
+ * @return the wrapped request
+ */
+ public Request getRequest()
+ {
+ return this.request;
+ }
+
+ @Override
+ public Object getParameter(String key)
+ {
+ return this.request.getParameter(key);
+ }
+
+ @Override
+ public Enumeration getParameterNames()
+ {
+ return this.request.getParameterNames();
+ }
+
+ @Override
+ public String[] getParameterValues(String name)
+ {
+ return this.request.getParameterValues(name);
+ }
+
+ @Override
+ public Object getAttribute(String name)
+ {
+ return this.request.getAttribute(name);
+ }
+
+ @Override
+ public Enumeration getAttributeNames()
+ {
+ return this.request.getAttributeNames();
+ }
+
+ @Override
+ public void setAttribute(String name, Object value)
+ {
+ this.request.setAttribute(name, value);
+ }
+
+ @Override
+ public void removeAttribute(String name)
+ {
+ this.request.removeAttribute(name);
+ }
+
+ @Override
+ public UserReference getEffectiveAuthor()
+ {
+ return this.request.getEffectiveAuthor();
+ }
+}
diff --git a/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-api/src/main/java/org/xwiki/container/wrap/WrappingResponse.java b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-api/src/main/java/org/xwiki/container/wrap/WrappingResponse.java
new file mode 100644
index 000000000000..1fd2f0ece265
--- /dev/null
+++ b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-api/src/main/java/org/xwiki/container/wrap/WrappingResponse.java
@@ -0,0 +1,112 @@
+/*
+ * See the NOTICE file distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.xwiki.container.wrap;
+
+import java.io.IOException;
+import java.io.OutputStream;
+
+import org.xwiki.container.Response;
+
+/**
+ * A wrapper around {@link Response}.
+ *
+ * @version $Id$
+ * @since 42.0.0
+ */
+public class WrappingResponse implements Response
+{
+ protected final Response response;
+
+ /**
+ * @param response the wrapped response
+ */
+ public WrappingResponse(Response response)
+ {
+ this.response = response;
+ }
+
+ /**
+ * @return the wrapped response
+ */
+ public Response getResponse()
+ {
+ return this.response;
+ }
+
+ @Override
+ public OutputStream getOutputStream() throws IOException
+ {
+ return this.response.getOutputStream();
+ }
+
+ @Override
+ public void setContentLength(int length)
+ {
+ this.response.setContentLength(length);
+ }
+
+ @Override
+ public void setContentType(String mimeType)
+ {
+ this.response.setContentType(mimeType);
+ }
+
+ @Override
+ public void sendRedirect(String location) throws IOException
+ {
+ this.response.sendRedirect(location);
+ }
+
+ @Override
+ public void setStatus(int sc)
+ {
+ this.response.setStatus(sc);
+ }
+
+ @Override
+ public void sendError(int sc, String msg) throws IOException
+ {
+ this.response.sendError(sc, msg);
+ }
+
+ @Override
+ public void sendError(int sc) throws IOException
+ {
+ this.response.sendError(sc);
+ }
+
+ @Override
+ public boolean containsHeader(String name)
+ {
+ return this.response.containsHeader(name);
+ }
+
+ @Override
+ public void setHeader(String name, String value)
+ {
+ this.response.setHeader(name, value);
+ }
+
+ @Override
+ public void addHeader(String name, String value)
+ {
+ this.response.addHeader(name, value);
+ }
+}
diff --git a/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-api/src/main/resources/META-INF/components.txt b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-api/src/main/resources/META-INF/components.txt
index 0fd04e8b028f..ff8cb4567549 100644
--- a/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-api/src/main/resources/META-INF/components.txt
+++ b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-api/src/main/resources/META-INF/components.txt
@@ -1,3 +1,4 @@
org.xwiki.container.internal.DefaultContainer
org.xwiki.container.internal.DefaultRequestInitializerManager
org.xwiki.container.internal.DefaultApplicationContextListenerManager
+org.xwiki.container.script.ContainerScriptService
diff --git a/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-portlet/src/main/java/org/xwiki/container/portlet/PortletApplicationContext.java b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-portlet/src/main/java/org/xwiki/container/portlet/PortletApplicationContext.java
index e4c090b5a275..31963188e436 100644
--- a/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-portlet/src/main/java/org/xwiki/container/portlet/PortletApplicationContext.java
+++ b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-portlet/src/main/java/org/xwiki/container/portlet/PortletApplicationContext.java
@@ -66,6 +66,6 @@ public File getTemporaryDirectory()
{
// Section PLT.10.3 from the Portlet 1.0 specification says that this should be available.
// FIXME: why is this using a servlet specifications variable name ? Is that really valid for a portlet ?
- return (File) this.portletContext.getAttribute("javax.servlet.context.tempdir");
+ return (File) this.portletContext.getAttribute("jakarta.servlet.context.tempdir");
}
}
diff --git a/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/pom.xml b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/pom.xml
index 1f850440c149..407d8d20fbe0 100644
--- a/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/pom.xml
@@ -35,6 +35,10 @@
0.15
+
+ jakarta.servlet
+ jakarta.servlet-api
+
org.xwiki.commons
xwiki-commons-component-default
@@ -71,8 +75,9 @@
${project.version}
- javax.servlet
- javax.servlet-api
+ org.xwiki.commons
+ xwiki-commons-jakartabridge-servlet
+ ${commons.version}
@@ -100,12 +105,11 @@
default
+ **/servlet/HttpServletRequestStub.java,
+ **/servlet/HttpServletResponseStub.java,
**/servlet/ServletApplicationContext.java,
**/servlet/ServletContainerException.java,
**/servlet/ServletContainerInitializer.java,
- **/servlet/ServletRequest.java,
- **/servlet/ServletResponse.java,
- **/servlet/ServletSession.java,
**/servlet/filters/internal/SetCharacterEncodingFilter.java,
**/servlet/internal/DefaultServletContainerInitializer.java
diff --git a/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/HttpServletRequestStub.java b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/HttpServletRequestStub.java
new file mode 100644
index 000000000000..795e24956f12
--- /dev/null
+++ b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/HttpServletRequestStub.java
@@ -0,0 +1,851 @@
+/*
+ * See the NOTICE file distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.xwiki.container.servlet;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URL;
+import java.security.Principal;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Objects;
+import java.util.TreeMap;
+import java.util.Vector;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import org.apache.commons.lang3.ArrayUtils;
+
+import jakarta.servlet.AsyncContext;
+import jakarta.servlet.DispatcherType;
+import jakarta.servlet.RequestDispatcher;
+import jakarta.servlet.ServletContext;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.ServletInputStream;
+import jakarta.servlet.ServletRequest;
+import jakarta.servlet.ServletResponse;
+import jakarta.servlet.http.Cookie;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpSession;
+import jakarta.servlet.http.HttpUpgradeHandler;
+import jakarta.servlet.http.Part;
+
+/**
+ * This stub is intended to simulate a servlet request in a daemon context, in order to be able to create a custom XWiki
+ * context. This trick is used in to give a daemon thread access to the XWiki api.
+ *
+ * @version $Id$
+ * @since 42.0.0
+ */
+public class HttpServletRequestStub implements HttpServletRequest
+{
+ /**
+ * Builder for {@link HttpServletRequestStub}.
+ *
+ * @version $Id$
+ */
+ public static class Builder
+ {
+ private URL requestURL;
+
+ private String contextPath;
+
+ private Map requestParameters;
+
+ private Map> headers;
+
+ private Cookie[] cookies;
+
+ private String remoteAddr;
+
+ private HttpSession httpSession;
+
+ /**
+ * Default constructor.
+ */
+ public Builder()
+ {
+ }
+
+ /**
+ * @param requestURL the request URL
+ * @return this builder
+ */
+ public Builder setRequestURL(URL requestURL)
+ {
+ this.requestURL = requestURL;
+ return this;
+ }
+
+ /**
+ * @param contextPath the context path
+ * @return this builder
+ */
+ public Builder setContextPath(String contextPath)
+ {
+ this.contextPath = contextPath;
+ return this;
+ }
+
+ /**
+ * @param requestParameters the request parameters
+ * @return this builder
+ */
+ public Builder setRequestParameters(Map requestParameters)
+ {
+ this.requestParameters = requestParameters;
+ return this;
+ }
+
+ /**
+ * @param headers the request headers
+ * @return this builder
+ */
+ public Builder setHeaders(Map> headers)
+ {
+ this.headers = headers;
+ return this;
+ }
+
+ /**
+ * @param cookies the request cookies
+ * @return this builder
+ */
+ public Builder setCookies(Cookie[] cookies)
+ {
+ this.cookies = cookies;
+ return this;
+ }
+
+ /**
+ * @param remoteAddr the remote address
+ * @return this builder
+ */
+ public Builder setRemoteAddr(String remoteAddr)
+ {
+ this.remoteAddr = remoteAddr;
+ return this;
+ }
+
+ /**
+ * @param httpSession the http session to initialize the {@link HttpServletRequestStub} instance with
+ * @return the current builder
+ */
+ public Builder setHttpSession(HttpSession httpSession)
+ {
+ this.httpSession = httpSession;
+ return this;
+ }
+
+ /**
+ * @return the built {@link HttpServletRequestStub} instance
+ */
+ public HttpServletRequestStub build()
+ {
+ return new HttpServletRequestStub(this);
+ }
+ }
+
+ private boolean secure;
+
+ private String scheme;
+
+ private String protocol;
+
+ private String queryString;
+
+ private String contextPath;
+
+ private String servletPath;
+
+ private String serverName;
+
+ private int serverPort;
+
+ private Map> headers;
+
+ private Map parameters;
+
+ private Cookie[] cookies;
+
+ private List parts = new ArrayList<>();
+
+ private String requestURI;
+
+ private StringBuffer requestURL;
+
+ private String remoteAddr;
+
+ private boolean daemon = true;
+
+ private HttpSession httpSession;
+
+ public HttpServletRequestStub()
+ {
+ }
+
+ protected HttpServletRequestStub(Builder builder)
+ {
+ if (builder.requestURL != null) {
+ this.protocol = builder.requestURL.getProtocol();
+ this.scheme = builder.requestURL.getProtocol();
+
+ this.serverName = builder.requestURL.getHost();
+ this.serverPort = builder.requestURL.getPort();
+
+ this.secure = this.protocol.equalsIgnoreCase("https");
+
+ this.requestURI = builder.requestURL.getPath();
+ this.requestURL = new StringBuffer(builder.requestURL.toString());
+
+ setHost(builder.requestURL.getHost());
+ }
+
+ this.contextPath = builder.contextPath;
+ this.parameters = clone(builder.requestParameters);
+ this.headers = cloneHeaders(builder.headers);
+ this.cookies = clone(builder.cookies);
+ this.remoteAddr = builder.remoteAddr;
+ this.httpSession = builder.httpSession;
+ }
+
+ /**
+ * @param request the request to copy
+ */
+ public HttpServletRequestStub(HttpServletRequest request)
+ {
+ this.secure = request.isSecure();
+ this.protocol = request.getProtocol();
+ this.scheme = request.getScheme();
+ this.serverName = request.getServerName();
+ this.serverPort = request.getServerPort();
+
+ this.contextPath = request.getContextPath();
+ this.servletPath = request.getServletPath();
+
+ this.queryString = request.getQueryString();
+
+ this.requestURI = request.getRequestURI();
+ this.requestURL = new StringBuffer(request.getRequestURL());
+
+ if (request.getHeaderNames() != null) {
+ this.headers = Collections.list(request.getHeaderNames()).stream()
+ .map(headerName -> Map.entry(headerName, Collections.list(request.getHeaders(headerName))))
+ .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (left, right) -> right,
+ () -> new TreeMap<>(String.CASE_INSENSITIVE_ORDER)));
+ }
+
+ this.parameters = clone(request.getParameterMap());
+ this.cookies = clone(request.getCookies());
+ this.remoteAddr = request.getRemoteAddr();
+ try {
+ setParts(request.getParts());
+ } catch (Exception e) {
+ // Failed to get the parts, ignore them
+ }
+
+ if (request instanceof HttpServletRequestStub requestStub) {
+ setDaemon(requestStub.isDaemon());
+ }
+ }
+
+ private Map clone(Map map)
+ {
+ Map clone;
+ if (map != null) {
+ clone = new LinkedHashMap<>(map.size());
+ for (Map.Entry entry : map.entrySet()) {
+ clone.put(entry.getKey(), entry.getValue().clone());
+ }
+ } else {
+ clone = null;
+ }
+
+ return clone;
+ }
+
+ private Map> cloneHeaders(Map> headers)
+ {
+ if (headers == null) {
+ return null;
+ }
+
+ return headers.entrySet().stream().filter(entry -> entry.getValue() != null && !entry.getValue().isEmpty())
+ .map(entry -> Map.entry(entry.getKey(), entry.getValue().stream().collect(Collectors.toList())))
+ .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (left, right) -> right,
+ () -> new TreeMap<>(String.CASE_INSENSITIVE_ORDER)));
+ }
+
+ private Cookie[] clone(Cookie[] cookies)
+ {
+ if (cookies != null) {
+ return Stream.of(cookies).map(Cookie::clone).toArray(Cookie[]::new);
+ } else {
+ return null;
+ }
+ }
+
+ public void setContextPath(String contextPath)
+ {
+ this.contextPath = contextPath;
+ }
+
+ public void setHost(String host)
+ {
+ if (this.headers == null) {
+ this.headers = new LinkedHashMap<>();
+ }
+
+ this.headers.put("x-forwarded-host", new Vector(Arrays.asList(host)));
+ }
+
+ public void setScheme(String scheme)
+ {
+ this.scheme = scheme;
+ }
+
+ public void setrequestURL(StringBuffer requestURL)
+ {
+ this.requestURL = requestURL;
+ }
+
+ public void setRequestURI(String requestURI)
+ {
+ this.requestURI = requestURI;
+ }
+
+ public void setServerName(String serverName)
+ {
+ this.serverName = serverName;
+ }
+
+ @Override
+ public String getHeader(String headerName)
+ {
+ if (this.headers != null) {
+ List values = this.headers.get(headerName);
+
+ if (values != null && !values.isEmpty()) {
+ return values.get(0);
+ }
+ }
+
+ return null;
+ }
+
+ public void put(String key, String value)
+ {
+ if (this.parameters == null) {
+ this.parameters = new LinkedHashMap<>();
+ }
+
+ String[] values = this.parameters.get(key);
+ if (values == null) {
+ values = new String[] {value};
+ } else {
+ values = ArrayUtils.add(values, value);
+ }
+ this.parameters.put(key, values);
+ }
+
+ @Override
+ public String getAuthType()
+ {
+ return null;
+ }
+
+ @Override
+ public Cookie[] getCookies()
+ {
+ return clone(this.cookies);
+ }
+
+ @Override
+ public long getDateHeader(String s)
+ {
+ return 0;
+ }
+
+ @Override
+ public Enumeration getHeaders(String headerName)
+ {
+ if (this.headers != null) {
+ List values = this.headers.get(headerName);
+
+ if (values != null) {
+ return Collections.enumeration(values);
+ }
+ }
+
+ return Collections.emptyEnumeration();
+ }
+
+ @Override
+ public Enumeration getHeaderNames()
+ {
+ return this.headers != null ? Collections.enumeration(this.headers.keySet()) : Collections.emptyEnumeration();
+ }
+
+ @Override
+ public int getIntHeader(String s)
+ {
+ String header = getHeader(s);
+
+ return header != null ? Integer.parseInt(header) : -1;
+ }
+
+ @Override
+ public String getMethod()
+ {
+ return null;
+ }
+
+ @Override
+ public String getPathInfo()
+ {
+ return null;
+ }
+
+ @Override
+ public String getPathTranslated()
+ {
+ return null;
+ }
+
+ @Override
+ public String getContextPath()
+ {
+ return this.contextPath;
+ }
+
+ @Override
+ public String getQueryString()
+ {
+ return this.queryString;
+ }
+
+ @Override
+ public String getRemoteUser()
+ {
+ return null;
+ }
+
+ @Override
+ public boolean isUserInRole(String s)
+ {
+ return false;
+ }
+
+ @Override
+ public Principal getUserPrincipal()
+ {
+ return null;
+ }
+
+ @Override
+ public String getRequestedSessionId()
+ {
+ return null;
+ }
+
+ @Override
+ public String getRequestURI()
+ {
+ return this.requestURI;
+ }
+
+ @Override
+ public StringBuffer getRequestURL()
+ {
+ return this.requestURL == null ? new StringBuffer() : this.requestURL;
+ }
+
+ @Override
+ public String getServletPath()
+ {
+ return this.servletPath;
+ }
+
+ @Override
+ public HttpSession getSession(boolean b)
+ {
+ return this.httpSession;
+ }
+
+ @Override
+ public String changeSessionId()
+ {
+ return null;
+ }
+
+ @Override
+ public HttpSession getSession()
+ {
+ return this.httpSession;
+ }
+
+ /**
+ * Sets the HttpSession object for the current user session.
+ *
+ * @param httpSession the {@link HttpSession} object to be set
+ */
+ public void setSession(HttpSession httpSession)
+ {
+ this.httpSession = httpSession;
+ }
+
+ @Override
+ public boolean isRequestedSessionIdValid()
+ {
+ return false;
+ }
+
+ @Override
+ public boolean isRequestedSessionIdFromCookie()
+ {
+ return false;
+ }
+
+ @Override
+ public boolean isRequestedSessionIdFromURL()
+ {
+ return false;
+ }
+
+ /**
+ * @deprecated
+ */
+ @Override
+ @Deprecated
+ public boolean isRequestedSessionIdFromUrl()
+ {
+ return false;
+ }
+
+ @Override
+ public Object getAttribute(String s)
+ {
+ return null;
+ }
+
+ @Override
+ public Enumeration getAttributeNames()
+ {
+ return Collections.emptyEnumeration();
+ }
+
+ @Override
+ public String getCharacterEncoding()
+ {
+ return null;
+ }
+
+ @Override
+ public void setCharacterEncoding(String s) throws UnsupportedEncodingException
+ {
+
+ }
+
+ @Override
+ public int getContentLength()
+ {
+ return 0;
+ }
+
+ @Override
+ public long getContentLengthLong()
+ {
+ return 0;
+ }
+
+ @Override
+ public String getContentType()
+ {
+ return null;
+ }
+
+ @Override
+ public ServletInputStream getInputStream() throws IOException
+ {
+ return null;
+ }
+
+ @Override
+ public String getParameter(String s)
+ {
+ if (this.parameters != null) {
+ String[] values = this.parameters.get(s);
+
+ if (ArrayUtils.isNotEmpty(values)) {
+ return values[0];
+ }
+ }
+
+ return null;
+ }
+
+ @Override
+ public Enumeration getParameterNames()
+ {
+ return this.parameters != null ? Collections.enumeration(this.parameters.keySet()) : null;
+ }
+
+ @Override
+ public String[] getParameterValues(String s)
+ {
+ if (this.parameters != null) {
+ String[] values = this.parameters.get(s);
+
+ return values != null ? values.clone() : null;
+ }
+
+ return ArrayUtils.EMPTY_STRING_ARRAY;
+ }
+
+ @Override
+ public Map getParameterMap()
+ {
+ return clone(this.parameters);
+ }
+
+ @Override
+ public String getProtocol()
+ {
+ return this.protocol;
+ }
+
+ @Override
+ public String getScheme()
+ {
+ return this.scheme;
+ }
+
+ @Override
+ public String getServerName()
+ {
+ return this.serverName;
+ }
+
+ @Override
+ public int getServerPort()
+ {
+ return this.serverPort;
+ }
+
+ @Override
+ public BufferedReader getReader() throws IOException
+ {
+ return null;
+ }
+
+ @Override
+ public String getRemoteAddr()
+ {
+ return this.remoteAddr;
+ }
+
+ @Override
+ public String getRemoteHost()
+ {
+ return null;
+ }
+
+ @Override
+ public void setAttribute(String s, Object o)
+ {
+
+ }
+
+ @Override
+ public void removeAttribute(String s)
+ {
+
+ }
+
+ @Override
+ public Locale getLocale()
+ {
+ return null;
+ }
+
+ @Override
+ public Enumeration getLocales()
+ {
+ return null;
+ }
+
+ @Override
+ public boolean isSecure()
+ {
+ return this.secure;
+ }
+
+ @Override
+ public RequestDispatcher getRequestDispatcher(String s)
+ {
+ return null;
+ }
+
+ /**
+ * @deprecated
+ */
+ @Override
+ @Deprecated
+ public String getRealPath(String s)
+ {
+ return null;
+ }
+
+ @Override
+ public int getRemotePort()
+ {
+ return 0;
+ }
+
+ @Override
+ public String getLocalName()
+ {
+ return null;
+ }
+
+ @Override
+ public String getLocalAddr()
+ {
+ return null;
+ }
+
+ @Override
+ public int getLocalPort()
+ {
+ return 0;
+ }
+
+ @Override
+ public boolean authenticate(HttpServletResponse httpServletResponse) throws IOException, ServletException
+ {
+ return false;
+ }
+
+ @Override
+ public void login(String s, String s1) throws ServletException
+ {
+ }
+
+ @Override
+ public void logout() throws ServletException
+ {
+
+ }
+
+ @Override
+ public Collection getParts() throws IOException, ServletException
+ {
+ return this.parts;
+ }
+
+ @Override
+ public Part getPart(String s) throws IOException, ServletException
+ {
+ return this.parts.stream().filter(part -> Objects.equals(part.getName(), s)).findFirst().orElse(null);
+ }
+
+ /**
+ * @param parts the parts
+ */
+ public void setParts(Collection parts)
+ {
+ this.parts = new ArrayList<>(parts);
+ }
+
+ @Override
+ public ServletContext getServletContext()
+ {
+ return null;
+ }
+
+ @Override
+ public AsyncContext startAsync() throws IllegalStateException
+ {
+ return null;
+ }
+
+ @Override
+ public AsyncContext startAsync(ServletRequest servletRequest, ServletResponse servletResponse)
+ throws IllegalStateException
+ {
+ return null;
+ }
+
+ @Override
+ public boolean isAsyncStarted()
+ {
+ return false;
+ }
+
+ @Override
+ public boolean isAsyncSupported()
+ {
+ return false;
+ }
+
+ @Override
+ public AsyncContext getAsyncContext()
+ {
+ return null;
+ }
+
+ @Override
+ public DispatcherType getDispatcherType()
+ {
+ return null;
+ }
+
+ @Override
+ public T upgrade(Class handlerClass) throws IOException, ServletException
+ {
+ return null;
+ }
+
+ /**
+ * @return true if the request is intended to be used in a long standing daemon thread (mails, etc.) and should not
+ * be taken into account when generating a URL
+ */
+ public boolean isDaemon()
+ {
+ return this.daemon;
+ }
+
+ /**
+ * @param daemon the daemon to set
+ */
+ public void setDaemon(boolean daemon)
+ {
+ this.daemon = daemon;
+ }
+}
diff --git a/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/HttpServletResponseStub.java b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/HttpServletResponseStub.java
new file mode 100644
index 000000000000..6e85a4390f3b
--- /dev/null
+++ b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/HttpServletResponseStub.java
@@ -0,0 +1,275 @@
+/*
+ * See the NOTICE file distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.xwiki.container.servlet;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.PrintWriter;
+import java.util.Collection;
+import java.util.Locale;
+
+import jakarta.servlet.ServletOutputStream;
+import jakarta.servlet.WriteListener;
+import jakarta.servlet.http.Cookie;
+import jakarta.servlet.http.HttpServletResponse;
+
+/**
+ * This stub is intended to simulate a servlet request in a daemon context, in order to be able to create a custom XWiki
+ * context. This trick is used in to give a daemon thread access to the XWiki api.
+ *
+ * @version $Id$
+ * @since 42.0.0
+ */
+public class HttpServletResponseStub implements HttpServletResponse
+{
+ private OutputStream outputStream;
+
+ private ServletOutputStream servletOutputStream = new ServletOutputStream()
+ {
+ @Override
+ public void write(int b) throws IOException
+ {
+ if (HttpServletResponseStub.this.outputStream != null) {
+ HttpServletResponseStub.this.outputStream.write(b);
+ }
+ }
+
+ @Override
+ public boolean isReady()
+ {
+ return true;
+ }
+
+ @Override
+ public void setWriteListener(WriteListener writeListener)
+ {
+ // Not needed
+ }
+ };
+
+ /**
+ * @param outputStream the stream where to write the response entity
+ */
+ public void setOutpuStream(OutputStream outputStream)
+ {
+ this.outputStream = outputStream;
+ }
+
+ @Override
+ public void setCharacterEncoding(String s)
+ {
+ }
+
+ @Override
+ public void addCookie(Cookie cookie)
+ {
+ }
+
+ @Override
+ public boolean containsHeader(String name)
+ {
+ return false;
+ }
+
+ @Override
+ public String encodeURL(String url)
+ {
+ return url;
+ }
+
+ @Override
+ public String encodeRedirectURL(String url)
+ {
+ return url;
+ }
+
+ @Override
+ public String encodeUrl(String url)
+ {
+ return url;
+ }
+
+ @Override
+ public String encodeRedirectUrl(String url)
+ {
+ return url;
+ }
+
+ @Override
+ public void sendError(int sc, String msg) throws IOException
+ {
+ }
+
+ @Override
+ public void sendError(int sc) throws IOException
+ {
+ }
+
+ @Override
+ public void sendRedirect(String location) throws IOException
+ {
+ }
+
+ @Override
+ public void setDateHeader(String name, long date)
+ {
+ }
+
+ @Override
+ public void addDateHeader(String name, long date)
+ {
+ }
+
+ @Override
+ public void setHeader(String name, String value)
+ {
+ }
+
+ @Override
+ public void addHeader(String name, String value)
+ {
+ }
+
+ @Override
+ public void setIntHeader(String name, int value)
+ {
+ }
+
+ @Override
+ public void addIntHeader(String name, int value)
+ {
+ }
+
+ @Override
+ public void setStatus(int sc)
+ {
+ }
+
+ @Override
+ public void setStatus(int sc, String sm)
+ {
+ }
+
+ @Override
+ public String getCharacterEncoding()
+ {
+ return null;
+ }
+
+ @Override
+ public String getContentType()
+ {
+ return null;
+ }
+
+ @Override
+ public ServletOutputStream getOutputStream() throws IOException
+ {
+ return this.servletOutputStream;
+ }
+
+ @Override
+ public PrintWriter getWriter() throws IOException
+ {
+ return null;
+ }
+
+ @Override
+ public void setContentLength(int len)
+ {
+ }
+
+ @Override
+ public void setContentLengthLong(long len)
+ {
+ }
+
+ @Override
+ public void setContentType(String type)
+ {
+ }
+
+ @Override
+ public void setBufferSize(int size)
+ {
+ }
+
+ @Override
+ public int getBufferSize()
+ {
+ return 0;
+ }
+
+ @Override
+ public void flushBuffer() throws IOException
+ {
+ }
+
+ @Override
+ public void resetBuffer()
+ {
+ }
+
+ @Override
+ public boolean isCommitted()
+ {
+ return false;
+ }
+
+ @Override
+ public void reset()
+ {
+ }
+
+ @Override
+ public void setLocale(Locale loc)
+ {
+ }
+
+ @Override
+ public Locale getLocale()
+ {
+ return null;
+ }
+
+ @Override
+ public int getStatus()
+ {
+ return 0;
+ }
+
+ @Override
+ public String getHeader(String s)
+ {
+ return null;
+ }
+
+ @Override
+ public Collection getHeaders(String s)
+ {
+ return null;
+ }
+
+ @Override
+ public Collection getHeaderNames()
+ {
+ return null;
+ }
+}
diff --git a/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/HttpServletUtils.java b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/HttpServletUtils.java
index e80ce49627a6..6857af031dae 100644
--- a/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/HttpServletUtils.java
+++ b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/HttpServletUtils.java
@@ -21,9 +21,11 @@
import java.net.MalformedURLException;
import java.net.URL;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.HeaderElement;
@@ -31,6 +33,11 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.xwiki.container.servlet.internal.ForwardedHeader;
+import org.xwiki.jakartabridge.servlet.JakartaServletBridge;
+import org.xwiki.stability.Unstable;
+
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
/**
* Various helpers around the {@link HttpServletRequest} and {@link HttpServletResponse} API.
@@ -82,8 +89,11 @@ private HttpServletUtils()
*
* @param servletRequest the servlet request input
* @return the URL as close as possible from what the client used
+ * @throws MalformedURLException when an invalid URL was received
+ * @since 42.0.0
*/
- public static URL getSourceURL(HttpServletRequest servletRequest)
+ @Unstable
+ public static URL getSourceURL(HttpServletRequest servletRequest) throws MalformedURLException
{
URL baseURL = getSourceBaseURL(servletRequest);
@@ -96,12 +106,7 @@ public static URL getSourceURL(HttpServletRequest servletRequest)
path.append(servletRequest.getQueryString());
}
- try {
- return new URL(baseURL, path.toString());
- } catch (MalformedURLException e) {
- // Not really supposed to happen
- throw new RuntimeException("XWiki received an invalid URL path or query string", e);
- }
+ return new URL(baseURL, path.toString());
}
/**
@@ -113,8 +118,11 @@ public static URL getSourceURL(HttpServletRequest servletRequest)
*
* @param servletRequest the servlet request input
* @return the URL as close as possible from what the client used
+ * @throws MalformedURLException when an invalid URL was received
+ * @since 42.0.0
*/
- public static URL getSourceBaseURL(HttpServletRequest servletRequest)
+ @Unstable
+ public static URL getSourceBaseURL(HttpServletRequest servletRequest) throws MalformedURLException
{
StringBuilder builder = new StringBuilder();
@@ -132,14 +140,9 @@ public static URL getSourceBaseURL(HttpServletRequest servletRequest)
}
}
- private static URL getFinalBaseURL(HttpServletRequest servletRequest)
+ private static URL getFinalBaseURL(HttpServletRequest servletRequest) throws MalformedURLException
{
- try {
- return new URL(servletRequest.getScheme(), servletRequest.getRemoteHost(), servletRequest.getRemotePort(),
- "");
- } catch (MalformedURLException e) {
- throw new RuntimeException("XWiki received an invalid URL", e);
- }
+ return new URL(servletRequest.getScheme(), servletRequest.getRemoteHost(), servletRequest.getRemotePort(), "");
}
private static void appendScheme(HttpServletRequest request, StringBuilder builder)
@@ -241,8 +244,9 @@ private static String getFirstHeaderValue(HttpServletRequest request, String key
/**
* @param request the servlet request input
* @return true if the request explicitly disable getting resources from the cache
- * @since 11.8RC1
+ * @since 42.0.0
*/
+ @Unstable
public static boolean isCacheReadAllowed(HttpServletRequest request)
{
String headerValue = request.getHeader(HEADER_CACHE_CONTROL);
@@ -258,4 +262,79 @@ public static boolean isCacheReadAllowed(HttpServletRequest request)
return true;
}
+
+ /**
+ * @param request the request from which to extract the headers
+ * @return the headers of the request
+ * @since 42.0.0
+ */
+ @Unstable
+ public static Map> getHeaders(HttpServletRequest request)
+ {
+ Map> map = new HashMap<>();
+ for (Enumeration eName = request.getHeaderNames(); eName.hasMoreElements();) {
+ String headerName = eName.nextElement();
+
+ List headerValues = map.computeIfAbsent(headerName, k -> new ArrayList<>());
+ for (Enumeration eValue = request.getHeaders(headerName); eValue.hasMoreElements();) {
+ headerValues.add(eValue.nextElement());
+ }
+ }
+
+ return map;
+ }
+
+ // Deprecated
+
+ /**
+ * Try to extract from various http headers the URL ({@code ://[:]/[?]}) as
+ * close as possible to the one used by the client.
+ *
+ * In theory HttpServletRequest#getRequestURL() is supposed to take care of all that but depending on the
+ * application server and its configuration it's not always reliable. One less thing to configure.
+ *
+ * @param servletRequest the servlet request input
+ * @return the URL as close as possible from what the client used
+ */
+ @Deprecated(since = "42.0.0")
+ public static URL getSourceURL(javax.servlet.http.HttpServletRequest servletRequest)
+ {
+ try {
+ return getSourceURL(JakartaServletBridge.toJakarta(servletRequest));
+ } catch (MalformedURLException e) {
+ // Not really supposed to happen
+ throw new RuntimeException("XWiki received an invalid URL path or query string", e);
+ }
+ }
+
+ /**
+ * Try to extract from various http headers the base URL ({@code ://[:]}) as close as possible
+ * to the one used by the client.
+ *
+ * In theory HttpServletRequest#getRequestURL() is supposed to take care of all that but depending on the
+ * application server and its configuration it's not always reliable. One less thing to configure.
+ *
+ * @param servletRequest the servlet request input
+ * @return the URL as close as possible from what the client used
+ */
+ @Deprecated(since = "42.0.0")
+ public static URL getSourceBaseURL(javax.servlet.http.HttpServletRequest servletRequest)
+ {
+ try {
+ return getSourceBaseURL(JakartaServletBridge.toJakarta(servletRequest));
+ } catch (MalformedURLException e) {
+ throw new RuntimeException("XWiki received an invalid URL", e);
+ }
+ }
+
+ /**
+ * @param request the servlet request input
+ * @return true if the request explicitly disable getting resources from the cache
+ * @since 11.8RC1
+ */
+ @Deprecated(since = "42.0.0")
+ public static boolean isCacheReadAllowed(javax.servlet.http.HttpServletRequest request)
+ {
+ return isCacheReadAllowed(JakartaServletBridge.toJakarta(request));
+ }
}
diff --git a/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/ServletContainerInitializer.java b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/ServletContainerInitializer.java
index f65ffb16cdd5..c63ad9ddad5e 100644
--- a/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/ServletContainerInitializer.java
+++ b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/ServletContainerInitializer.java
@@ -19,28 +19,44 @@
*/
package org.xwiki.container.servlet;
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
import org.xwiki.component.annotation.Role;
+import org.xwiki.jakartabridge.servlet.JakartaServletBridge;
+import org.xwiki.stability.Unstable;
+
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
@Role
public interface ServletContainerInitializer
{
- void initializeRequest(HttpServletRequest request, Object xwikiContext)
- throws ServletContainerException;
-
- void initializeRequest(HttpServletRequest request)
+ @Deprecated(since = "42.0.0")
+ void initializeRequest(javax.servlet.http.HttpServletRequest request, Object xwikiContext)
throws ServletContainerException;
- void initializeResponse(HttpServletResponse response);
-
- void initializeSession(HttpServletRequest request);
+ @Deprecated(since = "42.0.0")
+ void initializeRequest(javax.servlet.http.HttpServletRequest request) throws ServletContainerException;
+
+ @Deprecated(since = "42.0.0")
+ void initializeResponse(javax.servlet.http.HttpServletResponse response);
+
+ @Deprecated(since = "42.0.0")
+ void initializeSession(javax.servlet.http.HttpServletRequest request);
/**
* @deprecated use the notion of Environment instead
*/
@Deprecated(since = "3.5M1")
- void initializeApplicationContext(ServletContext servletContext);
+ void initializeApplicationContext(javax.servlet.ServletContext servletContext);
+
+ /**
+ * @param request the current request
+ * @param response the current response
+ * @since 42.0.0
+ */
+ @Unstable
+ default void initializeRequest(HttpServletRequest request, HttpServletResponse response)
+ throws ServletContainerException
+ {
+ initializeRequest(JakartaServletBridge.toJavax(request), JakartaServletBridge.toJavax(response));
+ }
}
diff --git a/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/ServletRequest.java b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/ServletRequest.java
index 9a6cfc9616c4..a6c02ec4a553 100644
--- a/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/ServletRequest.java
+++ b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/ServletRequest.java
@@ -19,69 +19,99 @@
*/
package org.xwiki.container.servlet;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
+import java.util.Enumeration;
import org.xwiki.container.Request;
+import org.xwiki.jakartabridge.servlet.JakartaServletBridge;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
+/**
+ * This is the implementation of {@link Request} for {@link HttpServletRequest}.
+ *
+ * @version $Id$
+ */
public class ServletRequest implements Request
{
- private HttpServletRequest httpServletRequest;
+ private final HttpServletRequest jakartaHttpServletRequest;
- public ServletRequest(HttpServletRequest httpServletRequest)
+ /**
+ * @param jakartaHttpServletRequest the standard Jakarta {@link HttpServletRequest} instance
+ * @since 42.0.0
+ */
+ public ServletRequest(HttpServletRequest jakartaHttpServletRequest)
{
- this.httpServletRequest = httpServletRequest;
+ this.jakartaHttpServletRequest = jakartaHttpServletRequest;
}
- public HttpServletRequest getHttpServletRequest()
+ /**
+ * @param javaxHttpServletRequest the legacy Javax {@link javax.servlet.http.HttpServletRequest} instance
+ * @deprecated use {@link #ServletRequest(HttpServletRequest)} instead
+ */
+ @Deprecated(since = "42.0.0")
+ public ServletRequest(javax.servlet.http.HttpServletRequest javaxHttpServletRequest)
{
- return this.httpServletRequest;
+ this.jakartaHttpServletRequest = JakartaServletBridge.toJakarta(javaxHttpServletRequest);
}
- @Override
- public Object getProperty(String key)
+ /**
+ * @return the standard Jakarta {@link HttpServletRequest} instance
+ * @since 42.0.0
+ */
+ public HttpServletRequest getRequest()
{
- Object result;
+ return this.jakartaHttpServletRequest;
+ }
- // Look first in the Query Parameters and then in the Query Attributes
- result = this.httpServletRequest.getParameter(key);
- if (result == null) {
- result = this.httpServletRequest.getAttribute(key);
- }
+ /**
+ * @return the legacy Javax {@link javax.servlet.http.HttpServletRequest} instance
+ * @deprecated use {@link #getRequest()} instead
+ */
+ @Deprecated(since = "42.0.0")
+ public javax.servlet.http.HttpServletRequest getHttpServletRequest()
+ {
+ return JakartaServletBridge.toJavax(this.jakartaHttpServletRequest);
+ }
+
+ @Override
+ public Object getParameter(String key)
+ {
+ return this.jakartaHttpServletRequest.getParameter(key);
+ }
- return result;
+ @Override
+ public String[] getParameterValues(String name)
+ {
+ return this.jakartaHttpServletRequest.getParameterValues(name);
}
@Override
- public List getProperties(String key)
+ public Enumeration getParameterNames()
{
- List result = new ArrayList();
+ return this.jakartaHttpServletRequest.getParameterNames();
+ }
- // Look first in the Query Parameters and then in the Query Attributes
- Object[] requestParameters = this.httpServletRequest.getParameterValues(key);
- if (requestParameters != null) {
- result.addAll(Arrays.asList(requestParameters));
- }
- Object attributeValue = this.httpServletRequest.getAttribute(key);
- if (attributeValue != null) {
- result.add(attributeValue);
- }
+ @Override
+ public Object getAttribute(String name)
+ {
+ return this.jakartaHttpServletRequest.getAttribute(name);
+ }
- return result;
+ @Override
+ public Enumeration getAttributeNames()
+ {
+ return this.jakartaHttpServletRequest.getAttributeNames();
}
@Override
- public void setProperty(String key, Object value)
+ public void setAttribute(String name, Object o)
{
- this.httpServletRequest.setAttribute(key, value);
+ this.jakartaHttpServletRequest.setAttribute(name, o);
}
@Override
- public void removeProperty(String key)
+ public void removeAttribute(String name)
{
- this.httpServletRequest.removeAttribute(key);
+ this.jakartaHttpServletRequest.removeAttribute(name);
}
}
diff --git a/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/ServletResponse.java b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/ServletResponse.java
index d23d98b58b4b..b733af7c94d7 100644
--- a/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/ServletResponse.java
+++ b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/ServletResponse.java
@@ -22,35 +22,64 @@
import java.io.IOException;
import java.io.OutputStream;
-import javax.servlet.http.HttpServletResponse;
-
import org.xwiki.container.RedirectResponse;
import org.xwiki.container.Response;
+import org.xwiki.jakartabridge.servlet.JakartaServletBridge;
+
+import jakarta.servlet.http.HttpServletResponse;
/**
* This is the implementation of {@link Response} for {@link HttpServletResponse}.
*
* @version $Id$
*/
-public class ServletResponse implements Response, RedirectResponse
+public class ServletResponse implements RedirectResponse
{
- private HttpServletResponse httpServletResponse;
+ private final HttpServletResponse jakartaHttpServletResponse;
+
+ /**
+ * @param jakartaHttpServletResponse the standard Jakarta {@link HttpServletResponse} instance
+ * @since 42.0.0
+ */
+ public ServletResponse(HttpServletResponse jakartaHttpServletResponse)
+ {
+ this.jakartaHttpServletResponse = jakartaHttpServletResponse;
+ }
+
+ /**
+ * @param javaxHttpServletResponse the legacy Javax {@link javax.servlet.http.HttpServletResponse} instance
+ * @deprecated use {@link #ServletResponse(HttpServletResponse)} instead
+ */
+ @Deprecated(since = "42.0.0")
+ public ServletResponse(javax.servlet.http.HttpServletResponse javaxHttpServletResponse)
+ {
+ this.jakartaHttpServletResponse = JakartaServletBridge.toJakarta(javaxHttpServletResponse);
+ }
- public ServletResponse(HttpServletResponse httpServletResponse)
+ /**
+ * @return the standard Jakarta {@link HttpServletResponse} instance
+ * @since 42.0.0
+ */
+ public HttpServletResponse getResponse()
{
- this.httpServletResponse = httpServletResponse;
+ return this.jakartaHttpServletResponse;
}
- public HttpServletResponse getHttpServletResponse()
+ /**
+ * @return the legacy Javax {@link javax.servlet.http.HttpServletResponse} instance
+ * @deprecated use {@link #getResponse()} instead
+ */
+ @Deprecated(since = "42.0.0")
+ public javax.servlet.http.HttpServletResponse getHttpServletResponse()
{
- return this.httpServletResponse;
+ return JakartaServletBridge.toJavax(this.jakartaHttpServletResponse);
}
@Override
public OutputStream getOutputStream() throws IOException
{
try {
- return this.httpServletResponse.getOutputStream();
+ return this.jakartaHttpServletResponse.getOutputStream();
} catch (IllegalStateException ex) {
return null;
}
@@ -59,18 +88,54 @@ public OutputStream getOutputStream() throws IOException
@Override
public void setContentLength(int length)
{
- this.httpServletResponse.setContentLength(length);
+ this.jakartaHttpServletResponse.setContentLength(length);
}
@Override
public void setContentType(String mimeType)
{
- this.httpServletResponse.setContentType(mimeType);
+ this.jakartaHttpServletResponse.setContentType(mimeType);
}
@Override
public void sendRedirect(String location) throws IOException
{
- this.httpServletResponse.sendRedirect(location);
+ this.jakartaHttpServletResponse.sendRedirect(location);
+ }
+
+ @Override
+ public void setStatus(int sc)
+ {
+ this.jakartaHttpServletResponse.setStatus(sc);
+ }
+
+ @Override
+ public void sendError(int sc, String msg) throws IOException
+ {
+ this.jakartaHttpServletResponse.sendError(sc, msg);
+ }
+
+ @Override
+ public void sendError(int sc) throws IOException
+ {
+ this.jakartaHttpServletResponse.sendRedirect(null);
+ }
+
+ @Override
+ public boolean containsHeader(String name)
+ {
+ return this.jakartaHttpServletResponse.containsHeader(name);
+ }
+
+ @Override
+ public void setHeader(String name, String value)
+ {
+ this.jakartaHttpServletResponse.setHeader(name, value);
+ }
+
+ @Override
+ public void addHeader(String name, String value)
+ {
+ this.jakartaHttpServletResponse.addHeader(name, value);
}
}
diff --git a/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/ServletSession.java b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/ServletSession.java
index a7e17b370af6..3840c93fa251 100644
--- a/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/ServletSession.java
+++ b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/ServletSession.java
@@ -19,22 +19,85 @@
*/
package org.xwiki.container.servlet;
+import java.util.Enumeration;
+
+import org.xwiki.container.Request;
import org.xwiki.container.Session;
+import org.xwiki.jakartabridge.servlet.JakartaServletBridge;
+import org.xwiki.stability.Unstable;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
+import jakarta.servlet.http.HttpSession;
+/**
+ * This is the implementation of {@link Request} for {@link HttpSession}.
+ *
+ * @version $Id$
+ */
public class ServletSession implements Session
{
- private HttpSession httpSession;
+ private final HttpSession httpSession;
+
+ /**
+ * @param request the servlet request
+ * @deprecated use {@link #ServletSession(HttpSession)} instead
+ */
+ @Deprecated(since = "42.0.0")
+ public ServletSession(javax.servlet.http.HttpServletRequest request)
+ {
+ this(JakartaServletBridge.toJakarta(request.getSession(true)));
+ }
- public ServletSession(HttpServletRequest request)
+ /**
+ * @param session the Servlet session
+ * @since 42.0.0
+ */
+ @Unstable
+ public ServletSession(HttpSession session)
{
- this.httpSession = request.getSession(true);
+ this.httpSession = session;
}
- public HttpSession getHttpSession()
+ /**
+ * @return the current Servlet session
+ * @deprecated use {@link #getSession()} instead
+ */
+ @Deprecated(since = "42.0.0")
+ public javax.servlet.http.HttpSession getHttpSession()
+ {
+ return JakartaServletBridge.toJavax(this.httpSession);
+ }
+
+ /**
+ * @return the current Servlet session
+ * @since 42.0.0
+ */
+ @Unstable
+ public HttpSession getSession()
{
return this.httpSession;
}
+
+ @Override
+ public Object getAttribute(String name)
+ {
+ return this.httpSession.getAttribute(name);
+ }
+
+ @Override
+ public Enumeration getAttributeNames()
+ {
+ return this.httpSession.getAttributeNames();
+ }
+
+ @Override
+ public void removeAttribute(String name)
+ {
+ this.httpSession.removeAttribute(name);
+ }
+
+ @Override
+ public void setAttribute(String name, Object value)
+ {
+ this.httpSession.setAttribute(name, value);
+ }
}
diff --git a/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/SetThreadNameServletRequestListener.java b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/SetThreadNameServletRequestListener.java
index d4d53998a749..2f2670d1f319 100644
--- a/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/SetThreadNameServletRequestListener.java
+++ b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/SetThreadNameServletRequestListener.java
@@ -19,22 +19,27 @@
*/
package org.xwiki.container.servlet;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletRequestEvent;
-import javax.servlet.ServletRequestListener;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.ServletRequest;
+import jakarta.servlet.ServletRequestEvent;
+import jakarta.servlet.ServletRequestListener;
+import jakarta.servlet.http.HttpServletRequest;
/**
- * Make threads names created by the application server more meaningful.
+ * Make threads names created by the application server more meaningful. TODO When it will be possible it would be
+ * better to do this a component like a RequestInitializer component to work for any kind of container. Right now
+ * component can't really access the initial URL.
+ *
+ * While the class is much older, the since annotation was moved to 42.0.0 because it implement a completely different
+ * API from Java point of view.
*
- * TODO When it will be possible it would be better to do this a component like a RequestInitializer component to work
- * for any kind of container. Right now component can't really access the initial URL.
* @version $Id$
- * @since 2.0M3
+ * @since 42.0.0
*/
public class SetThreadNameServletRequestListener implements ServletRequestListener
{
- /** The name of the servlet request attribute holding the original name of the processing thread. */
+ /**
+ * The name of the servlet request attribute holding the original name of the processing thread.
+ */
private static final String ORIGINAL_THREAD_NAME_ATTRIBUTE = "xwiki.thread.originalName";
@Override
@@ -42,9 +47,7 @@ public void requestInitialized(ServletRequestEvent sre)
{
ServletRequest servletRequest = sre.getServletRequest();
- if (servletRequest instanceof HttpServletRequest) {
- HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
-
+ if (servletRequest instanceof HttpServletRequest httpServletRequest) {
String threadName = httpServletRequest.getRequestURL().toString();
if (httpServletRequest.getQueryString() != null) {
@@ -65,8 +68,7 @@ public void requestInitialized(ServletRequestEvent sre)
public void requestDestroyed(ServletRequestEvent sre)
{
ServletRequest servletRequest = sre.getServletRequest();
- if (servletRequest instanceof HttpServletRequest) {
- HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
+ if (servletRequest instanceof HttpServletRequest httpServletRequest) {
Thread.currentThread().setName("" + httpServletRequest.getAttribute(ORIGINAL_THREAD_NAME_ATTRIBUTE));
}
}
diff --git a/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/XWikiServletContextListener.java b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/XWikiServletContextListener.java
index 7054d0fa2af8..b4b8656f86a3 100644
--- a/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/XWikiServletContextListener.java
+++ b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/XWikiServletContextListener.java
@@ -19,8 +19,7 @@
*/
package org.xwiki.container.servlet;
-import javax.servlet.ServletContextEvent;
-import javax.servlet.ServletContextListener;
+import java.lang.reflect.Method;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -33,17 +32,28 @@
import org.xwiki.environment.Environment;
import org.xwiki.environment.internal.ServletEnvironment;
import org.xwiki.extension.handler.ExtensionInitializer;
+import org.xwiki.jakartabridge.servlet.JakartaServletBridge;
import org.xwiki.observation.ObservationManager;
import org.xwiki.observation.event.ApplicationStartedEvent;
import org.xwiki.observation.event.ApplicationStoppedEvent;
+import jakarta.servlet.ServletContext;
+import jakarta.servlet.ServletContextEvent;
+import jakarta.servlet.ServletContextListener;
+
/**
* Implementation of the {@link ServletContextListener}. Initializes component manager and application context.
+ *
+ * While the class is much older, the since annotation was moved to 42.0.0 because it implement a completely different
+ * API from Java point of view.
*
* @version $Id$
+ * @since 42.0.0
*/
public class XWikiServletContextListener implements ServletContextListener
{
+ private static final Logger LOGGER = LoggerFactory.getLogger(XWikiServletContextListener.class);
+
/**
* Logger to use to log shutdown information (opposite of initialization).
*/
@@ -55,6 +65,11 @@ public class XWikiServletContextListener implements ServletContextListener
@Override
public void contextInitialized(ServletContextEvent servletContextEvent)
{
+ // FIXME: This is ugly, but I could not find any other way to really fully support any character in URL starting
+ // with Jetty 12 EE10
+ // Remove when https://jira.xwiki.org/browse/XWIKI-19167 is fully fixed
+ setDecodeAmbiguousURIs(servletContextEvent);
+
// Initializes the Embeddable Component Manager
EmbeddableComponentManager ecm = new EmbeddableComponentManager();
@@ -63,14 +78,8 @@ public void contextInitialized(ServletContextEvent servletContextEvent)
ecm.initialize(this.getClass().getClassLoader());
this.componentManager = ecm;
- // This is a temporary bridge to allow non XWiki components to lookup XWiki components.
// We're putting the XWiki Component Manager instance in the Servlet Context so that it's
- // available in the XWikiAction class which in turn puts it into the XWikiContext instance.
- // Class that need to lookup then just need to get it from the XWikiContext instance.
- // This is of course not necessary for XWiki components since they just need to implement
- // the Composable interface to get access to the Component Manager or better they simply
- // need to declare their components requirements using the @Inject annotation of the xwiki
- // component manager together with a private class member, for automatic injection by the CM on init.
+ // available in Servlets and Filters.
servletContextEvent.getServletContext()
.setAttribute(org.xwiki.component.manager.ComponentManager.class.getName(), this.componentManager);
@@ -97,7 +106,8 @@ public void contextInitialized(ServletContextEvent servletContextEvent)
try {
ServletContainerInitializer containerInitializer =
this.componentManager.getInstance(ServletContainerInitializer.class);
- containerInitializer.initializeApplicationContext(servletContextEvent.getServletContext());
+ containerInitializer
+ .initializeApplicationContext(JakartaServletBridge.toJavax(servletContextEvent.getServletContext()));
} catch (ComponentLookupException e) {
throw new RuntimeException("Failed to initialize the Application Context", e);
}
@@ -118,7 +128,7 @@ public void contextInitialized(ServletContextEvent servletContextEvent)
throw new RuntimeException("Failed to initialize installed extensions", e);
}
- // Register the HttpSessionManager as a listener.
+ // Register the HttpSessionManager as a listener.
try {
HttpSessionManager httpSessionManager = this.componentManager.getInstance(HttpSessionManager.class);
servletContextEvent.getServletContext().addListener(httpSessionManager);
@@ -173,4 +183,20 @@ public void contextDestroyed(ServletContextEvent sce)
SHUTDOWN_LOGGER.debug("XWiki has been stopped!");
}
+
+ private void setDecodeAmbiguousURIs(ServletContextEvent servletContextEvent)
+ {
+ ServletContext servletContext = servletContextEvent.getServletContext();
+ try {
+ Method getContextHandler = servletContext.getClass().getMethod("getContextHandler", null);
+ Object contextHandler = getContextHandler.invoke(servletContext);
+ Method getServletHandler = contextHandler.getClass().getMethod("getServletHandler", null);
+ Object servletHandler = getServletHandler.invoke(contextHandler);
+ Method setDecodeAmbiguousURIs =
+ servletHandler.getClass().getMethod("setDecodeAmbiguousURIs", boolean.class);
+ setDecodeAmbiguousURIs.invoke(servletHandler, true);
+ } catch (Exception e) {
+ LOGGER.debug("Failed to switch the decode ambiguous URS to true", e);
+ }
+ }
}
diff --git a/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/filters/SavedRequestManager.java b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/filters/SavedRequestManager.java
index 9c62160c4367..c4fefc52b713 100644
--- a/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/filters/SavedRequestManager.java
+++ b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/filters/SavedRequestManager.java
@@ -23,11 +23,13 @@
import java.util.HashMap;
import java.util.Map;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
-
import org.apache.commons.lang3.RandomStringUtils;
import org.apache.commons.lang3.StringUtils;
+import org.xwiki.jakartabridge.servlet.JakartaServletBridge;
+import org.xwiki.stability.Unstable;
+
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpSession;
/**
* Allows to save a request and restore it later from the stored request identifier (SRID).
@@ -64,8 +66,21 @@ public static class SavedRequest implements Serializable
* Constructor that copies the needed information from a request.
*
* @param request the request that needs to be saved
+ * @deprecated use {@link #SavedRequest(HttpServletRequest)}) instead
*/
- @SuppressWarnings("unchecked")
+ @Deprecated(since = "42.0.0")
+ public SavedRequest(javax.servlet.http.HttpServletRequest request)
+ {
+ this(JakartaServletBridge.toJakarta(request));
+ }
+
+ /**
+ * Constructor that copies the needed information from a request.
+ *
+ * @param request the request that needs to be saved
+ * @since 42.0.0
+ */
+ @Unstable
public SavedRequest(HttpServletRequest request)
{
this.parameters = new HashMap<>(request.getParameterMap());
@@ -73,11 +88,11 @@ public SavedRequest(HttpServletRequest request)
}
/**
- * Gets the value for a parameter, just like {@link javax.servlet.ServletRequest#getParameter(String)}.
+ * Gets the value for a parameter, just like {@link jakarta.servlet.ServletRequest#getParameter(String)}.
*
* @param name the name of the parameter
* @return The first value for this parameter, or null
if no value was sent for this parameter.
- * @see javax.servlet.ServletRequest#getParameter(String)
+ * @see jakarta.servlet.ServletRequest#getParameter(String)
* @see #getParameterValues(String)
*/
public String getParameter(String name)
@@ -91,11 +106,11 @@ public String getParameter(String name)
/**
* Gets all the values stored for a parameter, just like
- * {@link javax.servlet.ServletRequest#getParameterValues(String)}.
+ * {@link jakarta.servlet.ServletRequest#getParameterValues(String)}.
*
* @param name the name of the parameter
* @return All the values for this parameter, or null
if no value was sent for this parameter.
- * @see javax.servlet.ServletRequest#getParameterValues(String)
+ * @see jakarta.servlet.ServletRequest#getParameterValues(String)
* @see #getParameter(String)
*/
public String[] getParameterValues(String name)
@@ -104,10 +119,10 @@ public String[] getParameterValues(String name)
}
/**
- * Gets all the stored parameters, just like {@link javax.servlet.ServletRequest#getParameterMap()}.
+ * Gets all the stored parameters, just like {@link jakarta.servlet.ServletRequest#getParameterMap()}.
*
* @return A map with all the stored parameters.
- * @see javax.servlet.ServletRequest#getParameterMap()
+ * @see jakarta.servlet.ServletRequest#getParameterMap()
*/
public Map getParameterMap()
{
@@ -156,7 +171,24 @@ public static String getSavedRequestKey()
*
* @param request the request to save
* @return the identifier of the saved request
+ * @deprecated use {@link #saveRequest(HttpServletRequest)} instead
*/
+ @Deprecated(since = "42.0.0")
+ public static String saveRequest(javax.servlet.http.HttpServletRequest request)
+ {
+ return saveRequest(JakartaServletBridge.toJakarta(request));
+ }
+
+ /**
+ * Saves the data from a request and stores it in the current session. This method is not thread safe, and does not
+ * guarantee that saved requests are not overwritten, but given that this should only happen sparingly, and that
+ * each client uses his own session to save this kind of information, this is not a real issue.
+ *
+ * @param request the request to save
+ * @return the identifier of the saved request
+ * @since 42.0.0
+ */
+ @Unstable
@SuppressWarnings("unchecked")
public static String saveRequest(HttpServletRequest request)
{
@@ -190,7 +222,25 @@ public static String saveRequest(HttpServletRequest request)
* @param request the current request
* @return the original requested URL that triggered a detour, or null
if there isn't any original
* request information
+ * @deprecated use {@link #getOriginalUrl(HttpServletRequest)} instead
+ */
+ @Deprecated(since = "42.0.0")
+ public static String getOriginalUrl(javax.servlet.http.HttpServletRequest request)
+ {
+ return getOriginalUrl(JakartaServletBridge.toJakarta(request));
+ }
+
+ /**
+ * Retrieves the original URL requested before a detour. This method returns something different from
+ * null
only when there's a srid parameter in the current request, indicating that there was
+ * another request which data was saved, related to the current request.
+ *
+ * @param request the current request
+ * @return the original requested URL that triggered a detour, or null
if there isn't any original
+ * request information
+ * @since 42.0.0
*/
+ @Unstable
@SuppressWarnings("unchecked")
public static String getOriginalUrl(HttpServletRequest request)
{
diff --git a/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/filters/internal/ResolveRelativeRedirectFilter.java b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/filters/internal/ResolveRelativeRedirectFilter.java
new file mode 100644
index 000000000000..72ab90ee232c
--- /dev/null
+++ b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/filters/internal/ResolveRelativeRedirectFilter.java
@@ -0,0 +1,185 @@
+/*
+ * See the NOTICE file distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.xwiki.container.servlet.filters.internal;
+
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URISyntaxException;
+
+import org.apache.commons.lang3.StringUtils;
+import org.xwiki.component.manager.ComponentLookupException;
+import org.xwiki.component.manager.ComponentManager;
+import org.xwiki.configuration.ConfigurationSource;
+import org.xwiki.container.servlet.HttpServletUtils;
+
+import jakarta.servlet.Filter;
+import jakarta.servlet.FilterChain;
+import jakarta.servlet.FilterConfig;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.ServletRequest;
+import jakarta.servlet.ServletResponse;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletResponseWrapper;
+
+/**
+ * Filter which inject a response wrapper in charge of resolving the relative URLs on XWiki side instead of application
+ * server side, to reduce setup requirements.
+ *
+ * @version $Id$
+ * @since 42.0.0
+ */
+public class ResolveRelativeRedirectFilter implements Filter
+{
+ /**
+ * Response wrapper in charge of resolving relative references to absolute ones.
+ *
+ * @version $Id$
+ */
+ public class ResolveRelativeRedirectResponse extends HttpServletResponseWrapper
+ {
+ private final HttpServletRequest request;
+
+ private String sourceURL;
+
+ private String sourceBaseURL;
+
+ /**
+ * @param request the request
+ * @param response the wrapped response
+ * @throws MalformedURLException when failing to get the current URL
+ */
+ public ResolveRelativeRedirectResponse(HttpServletRequest request, HttpServletResponse response)
+ throws MalformedURLException
+ {
+ super(response);
+
+ this.request = request;
+ }
+
+ private String removeEndSlash(String str)
+ {
+ return StringUtils.removeEnd(str, "/");
+ }
+
+ /**
+ * @return the sourceURL
+ */
+ public String getSourceURL()
+ {
+ if (this.sourceURL == null) {
+ try {
+ this.sourceURL = removeEndSlash(HttpServletUtils.getSourceURL(this.request).toExternalForm()) + '/';
+ } catch (MalformedURLException e) {
+ // It's very unlikely that the source URL would be invalid, but just ignore it in this case
+ }
+ }
+
+ return this.sourceURL;
+ }
+
+ /**
+ * @return the sourceBaseURL
+ */
+ public String getSourceBaseURL()
+ {
+ if (this.sourceBaseURL == null) {
+ try {
+ this.sourceBaseURL =
+ removeEndSlash(HttpServletUtils.getSourceBaseURL(this.request).toExternalForm());
+ } catch (MalformedURLException e) {
+ // It's very unlikely that the source URL would be invalid, but just ignore it in this case
+ }
+ }
+
+ return this.sourceBaseURL;
+ }
+
+ @Override
+ public void sendRedirect(String location) throws IOException
+ {
+ String url = location;
+
+ // Resolve relative URLs
+ if (StringUtils.isNotBlank(location)) {
+ try {
+ URI uri = new URI(location);
+ if (!uri.isAbsolute()) {
+ url = resolve(location);
+ }
+ } catch (URISyntaxException e) {
+ // Let invalid URIs go through
+ }
+ }
+
+ // Redirect
+ super.sendRedirect(url);
+ }
+
+ private String resolve(String relativeLocation)
+ {
+ String resolvedLocation = relativeLocation;
+
+ if (relativeLocation.charAt(0) == '/') {
+ if (relativeLocation.length() > 1 && relativeLocation.charAt(1) != '/') {
+ resolvedLocation = getSourceBaseURL() + relativeLocation;
+ }
+ } else {
+ resolvedLocation = getSourceURL() + relativeLocation;
+ }
+
+ return resolvedLocation;
+ }
+ }
+
+ private boolean resolveRedirect = true;
+
+ @Override
+ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
+ throws IOException, ServletException
+ {
+ ServletResponse filteredResponse = response;
+
+ if (this.resolveRedirect && filteredResponse instanceof HttpServletResponse httpResponse) {
+ filteredResponse = new ResolveRelativeRedirectResponse((HttpServletRequest) request, httpResponse);
+ }
+
+ chain.doFilter(request, filteredResponse);
+ }
+
+ @Override
+ public void init(FilterConfig filterConfig) throws ServletException
+ {
+ // Get the Component Manager which has been initialized first in a Servlet Context Listener.
+ ComponentManager rootComponentManager =
+ (ComponentManager) filterConfig.getServletContext().getAttribute(ComponentManager.class.getName());
+
+ // Get the configuration
+ try {
+ ConfigurationSource properties =
+ rootComponentManager.getInstance(ConfigurationSource.class, "xwikiproperties");
+
+ this.resolveRedirect = properties.getProperty("container.request.resolveRelativeRedirect", true);
+ } catch (ComponentLookupException e) {
+ throw new ServletException("Failed to access configuration", e);
+ }
+ }
+}
diff --git a/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/filters/internal/SafeRedirectFilter.java b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/filters/internal/SafeRedirectFilter.java
new file mode 100644
index 000000000000..66e9c22f9fc7
--- /dev/null
+++ b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/filters/internal/SafeRedirectFilter.java
@@ -0,0 +1,123 @@
+/*
+ * See the NOTICE file distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.xwiki.container.servlet.filters.internal;
+
+import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
+
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.xwiki.component.manager.ComponentLookupException;
+import org.xwiki.component.manager.ComponentManager;
+import org.xwiki.url.URLSecurityManager;
+
+import jakarta.servlet.Filter;
+import jakarta.servlet.FilterChain;
+import jakarta.servlet.FilterConfig;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.ServletRequest;
+import jakarta.servlet.ServletResponse;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletResponseWrapper;
+
+/**
+ * Filter which inject a response wrapper in charge of converting the redirect location into a safe URL.
+ *
+ * @version $Id$
+ * @since 42.0.0
+ */
+public class SafeRedirectFilter implements Filter
+{
+ /**
+ * Response wrapper in charge of checking the references.
+ *
+ * @version $Id$
+ */
+ public class SafeRedirectResponse extends HttpServletResponseWrapper
+ {
+ private static final Logger LOGGER = LoggerFactory.getLogger(SafeRedirectResponse.class);
+
+ private final URLSecurityManager urlSecurityManager;
+
+ /**
+ * @param urlSecurityManager the tool in charge of validating the URL
+ * @param response the wrapped response
+ */
+ public SafeRedirectResponse(URLSecurityManager urlSecurityManager, HttpServletResponse response)
+ {
+ super(response);
+
+ this.urlSecurityManager = urlSecurityManager;
+ }
+
+ @Override
+ public void sendRedirect(String location) throws IOException
+ {
+ if (StringUtils.isNotBlank(location)) {
+ URI uri;
+ try {
+ uri = this.urlSecurityManager.parseToSafeURI(location);
+
+ super.sendRedirect(uri.toString());
+ } catch (URISyntaxException | SecurityException e) {
+ LOGGER.warn(
+ "Possible phishing attack, attempting to redirect to [{}], this request has been blocked. "
+ + "If the request was legitimate, please check the URL security configuration. You "
+ + "might need to add the domain related to this request in the list of trusted domains in "
+ + "the configuration: it can be configured in xwiki.properties in url.trustedDomains.",
+ location);
+ LOGGER.debug("Original error preventing the redirect: ", e);
+ }
+ }
+ }
+ }
+
+ private URLSecurityManager urlSecurityManager;
+
+ @Override
+ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
+ throws IOException, ServletException
+ {
+ ServletResponse filteredResponse = response;
+
+ if (filteredResponse instanceof HttpServletResponse httpResponse) {
+ filteredResponse = new SafeRedirectResponse(this.urlSecurityManager, httpResponse);
+ }
+
+ chain.doFilter(request, filteredResponse);
+ }
+
+ @Override
+ public void init(FilterConfig filterConfig) throws ServletException
+ {
+ // Get the Component Manager which has been initialized first in a Servlet Context Listener.
+ ComponentManager rootComponentManager =
+ (ComponentManager) filterConfig.getServletContext().getAttribute(ComponentManager.class.getName());
+
+ // Get the configuration
+ try {
+ this.urlSecurityManager = rootComponentManager.getInstance(URLSecurityManager.class);
+ } catch (ComponentLookupException e) {
+ throw new ServletException("Failed to access configuration", e);
+ }
+ }
+}
diff --git a/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/filters/internal/SavedRequestRestorerFilter.java b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/filters/internal/SavedRequestRestorerFilter.java
index 497f09f8e284..291d70f34314 100644
--- a/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/filters/internal/SavedRequestRestorerFilter.java
+++ b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/filters/internal/SavedRequestRestorerFilter.java
@@ -27,15 +27,15 @@
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import javax.servlet.Filter;
-import javax.servlet.FilterChain;
-import javax.servlet.FilterConfig;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletRequestWrapper;
-import javax.servlet.http.HttpSession;
+import jakarta.servlet.Filter;
+import jakarta.servlet.FilterChain;
+import jakarta.servlet.FilterConfig;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.ServletRequest;
+import jakarta.servlet.ServletResponse;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequestWrapper;
+import jakarta.servlet.http.HttpSession;
import org.apache.commons.lang3.StringUtils;
import org.xwiki.container.servlet.filters.SavedRequestManager;
@@ -61,8 +61,12 @@
* safe as a session is, and it will not be available after the session is invalidated. Another consequence is that only
* HTTP requests are saved.
*
+ *
+ * While the class is much older, the since annotation was moved to 42.0.0 because it implement a completely
+ * different API from Java point of view.
*
* @version $Id$
+ * @since 42.0.0
*/
public class SavedRequestRestorerFilter implements Filter
{
@@ -156,7 +160,6 @@ public String[] getParameterValues(String name)
* @return an immutable Map containing parameter names as keys and parameter values as map values
* @see javax.servlet.ServletRequest#getParameterMap()
*/
- @SuppressWarnings("unchecked")
@Override
public Map getParameterMap()
{
@@ -191,13 +194,13 @@ public void init(FilterConfig filterConfig)
}
@Override
- public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
- ServletException
+ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
+ throws IOException, ServletException
{
ServletRequest filteredRequest = request;
// This filter works only for HTTP requests, because they are the only ones with a session.
if (request instanceof HttpServletRequest
- && !Boolean.valueOf((String) request.getAttribute(ATTRIBUTE_APPLIED))) {
+ && !Boolean.valueOf((String) request.getAttribute(ATTRIBUTE_APPLIED))) {
// Get the saved request, if any (returns null if not applicable)
SavedRequest savedRequest = getSavedRequest((HttpServletRequest) request);
// Merge the new and the saved request
diff --git a/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/filters/internal/SetCharacterEncodingFilter.java b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/filters/internal/SetCharacterEncodingFilter.java
index 650288c51cc8..346c9dd94d2b 100644
--- a/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/filters/internal/SetCharacterEncodingFilter.java
+++ b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/filters/internal/SetCharacterEncodingFilter.java
@@ -21,12 +21,12 @@
import java.io.IOException;
-import javax.servlet.Filter;
-import javax.servlet.FilterChain;
-import javax.servlet.FilterConfig;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
+import jakarta.servlet.Filter;
+import jakarta.servlet.FilterChain;
+import jakarta.servlet.FilterConfig;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.ServletRequest;
+import jakarta.servlet.ServletResponse;
/**
*
@@ -51,9 +51,12 @@
* characteristics of the incoming request (such as the values of the Accept-Language
* and User-Agent
headers, or a value stashed in the current user's session.
*
+ *
+ * While the class is much older, the since annotation was moved to 42.0.0 because it implement a completely different API
+ * from Java point of view.
*
- * @author Craig McClanahan
* @version $Id$
+ * @since 42.0.0
*/
public class SetCharacterEncodingFilter implements Filter
{
diff --git a/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/filters/internal/SetHTTPHeaderFilter.java b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/filters/internal/SetHTTPHeaderFilter.java
index a306a2b297e1..f7ae02c175a6 100644
--- a/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/filters/internal/SetHTTPHeaderFilter.java
+++ b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/filters/internal/SetHTTPHeaderFilter.java
@@ -21,19 +21,22 @@
import java.io.IOException;
-import javax.servlet.Filter;
-import javax.servlet.FilterChain;
-import javax.servlet.FilterConfig;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.Filter;
+import jakarta.servlet.FilterChain;
+import jakarta.servlet.FilterConfig;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.ServletRequest;
+import jakarta.servlet.ServletResponse;
+import jakarta.servlet.http.HttpServletResponse;
/**
* Filter that set the desired header of the HTTP response to the desired value.
+ *
+ * While the class is much older, the since annotation was moved to 42.0.0 because it implement a completely
+ * different API from Java point of view.
*
* @version $Id$
- * @since 6.3M2
+ * @since 42.0.0
*/
public class SetHTTPHeaderFilter implements Filter
{
diff --git a/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/internal/CacheControlRequestInitializer.java b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/internal/CacheControlRequestInitializer.java
index 542c7a0429a3..6023ab382f95 100644
--- a/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/internal/CacheControlRequestInitializer.java
+++ b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/internal/CacheControlRequestInitializer.java
@@ -47,8 +47,8 @@ public class CacheControlRequestInitializer implements RequestInitializer
public void initialize(Request request) throws RequestInitializerException
{
// Indicate if the request explicitly disable getting resources from the cache
- if (request instanceof ServletRequest
- && !HttpServletUtils.isCacheReadAllowed(((ServletRequest) request).getHttpServletRequest())) {
+ if (request instanceof ServletRequest servletRequest
+ && !HttpServletUtils.isCacheReadAllowed(servletRequest.getRequest())) {
this.cacheControl.setCacheReadAllowed(false);
}
}
diff --git a/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/internal/DefaultServletContainerInitializer.java b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/internal/DefaultServletContainerInitializer.java
index 6b710c25d00b..21419de3fbe7 100644
--- a/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/internal/DefaultServletContainerInitializer.java
+++ b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/internal/DefaultServletContainerInitializer.java
@@ -22,8 +22,6 @@
import javax.inject.Inject;
import javax.inject.Singleton;
import javax.servlet.ServletContext;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
import org.xwiki.component.annotation.Component;
import org.xwiki.component.manager.ComponentManager;
@@ -41,17 +39,13 @@
import org.xwiki.context.ExecutionContext;
import org.xwiki.context.ExecutionContextManager;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+
@Component
@Singleton
public class DefaultServletContainerInitializer implements ServletContainerInitializer
{
- // Implementation note: It's important that we don't use @Inject annotations here
- // for RequestInitializerManager and ExecutionContextManager since we can have
- // RequestInitializer and ExecutionContextInitializer components which try to access
- // the Application Context in their initialize() method and we need it to be available
- // (i.e. initializeApplicationContext() needs to have been called) before they are
- // looked up (and thus initialized).
-
@Inject
private ApplicationContextListenerManager applicationContextListenerManager;
@@ -64,6 +58,41 @@ public class DefaultServletContainerInitializer implements ServletContainerIniti
@Inject
private ComponentManager componentManager;
+ @Override
+ public void initializeRequest(HttpServletRequest request, HttpServletResponse response)
+ throws ServletContainerException
+ {
+ // 1) Set the request and the response in the Container. From this point forward request initializers can use
+ // the Container object to get any data they want from the Request.
+ this.container.setRequest(new ServletRequest(request));
+ if (response != null) {
+ this.container.setResponse(new ServletResponse(response));
+ }
+ this.container.setSession(new ServletSession(request.getSession(false)));
+
+ // 2) Create an empty Execution context so that the Container initializers can put things in the
+ // execution context when they execute.
+ this.execution.setContext(new ExecutionContext());
+
+ // 3) Call the request initializers to populate the Request further.
+ try {
+ RequestInitializerManager manager = this.componentManager.getInstance(RequestInitializerManager.class);
+ manager.initializeRequest(this.container.getRequest());
+ } catch (Exception e) {
+ throw new ServletContainerException("Failed to initialize request", e);
+ }
+
+ // 4) Call Execution Context initializers to perform further Execution Context initializations
+ try {
+ ExecutionContextManager manager = this.componentManager.getInstance(ExecutionContextManager.class);
+ manager.initialize(this.execution.getContext());
+ } catch (Exception e) {
+ throw new ServletContainerException("Failed to initialize Execution Context", e);
+ }
+ }
+
+ // Deprecated
+
/**
* @deprecated use the notion of Environment instead
*/
@@ -77,12 +106,14 @@ public void initializeApplicationContext(ServletContext servletContext)
}
@Override
- public void initializeRequest(HttpServletRequest httpServletRequest, Object xwikiContext)
+ @Deprecated(since = "42.0.0")
+ public void initializeRequest(javax.servlet.http.HttpServletRequest httpServletRequest, Object xwikiContext)
throws ServletContainerException
{
// 1) Create an empty request. From this point forward request initializers can use the
// Container object to get any data they want from the Request.
this.container.setRequest(new ServletRequest(httpServletRequest));
+ this.container.setSession(new ServletSession(httpServletRequest));
// 2) Create an empty Execution context so that the Container initializers can put things in the
// execution context when they execute.
@@ -118,19 +149,23 @@ public void initializeRequest(HttpServletRequest httpServletRequest, Object xwik
}
@Override
- public void initializeRequest(HttpServletRequest httpServletRequest) throws ServletContainerException
+ @Deprecated(since = "42.0.0")
+ public void initializeRequest(javax.servlet.http.HttpServletRequest httpServletRequest)
+ throws ServletContainerException
{
initializeRequest(httpServletRequest, null);
}
@Override
- public void initializeResponse(HttpServletResponse httpServletResponse)
+ @Deprecated(since = "42.0.0")
+ public void initializeResponse(javax.servlet.http.HttpServletResponse httpServletResponse)
{
this.container.setResponse(new ServletResponse(httpServletResponse));
}
@Override
- public void initializeSession(HttpServletRequest httpServletRequest)
+ @Deprecated(since = "42.0.0")
+ public void initializeSession(javax.servlet.http.HttpServletRequest httpServletRequest)
{
this.container.setSession(new ServletSession(httpServletRequest));
}
diff --git a/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/internal/HttpSessionManager.java b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/internal/HttpSessionManager.java
index c60ed9b24550..0e52f5c4a38e 100644
--- a/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/internal/HttpSessionManager.java
+++ b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/internal/HttpSessionManager.java
@@ -23,11 +23,11 @@
import java.util.List;
import java.util.concurrent.ConcurrentLinkedQueue;
-import javax.inject.Inject;
-import javax.inject.Singleton;
-import javax.servlet.http.HttpSession;
-import javax.servlet.http.HttpSessionEvent;
-import javax.servlet.http.HttpSessionListener;
+import jakarta.inject.Inject;
+import jakarta.inject.Singleton;
+import jakarta.servlet.http.HttpSession;
+import jakarta.servlet.http.HttpSessionEvent;
+import jakarta.servlet.http.HttpSessionListener;
import org.xwiki.component.annotation.Component;
import org.xwiki.component.manager.ComponentLifecycleException;
@@ -39,13 +39,15 @@
import org.xwiki.observation.ObservationManager;
/**
- * Manager in charge of keeping track of the {@link HttpSession}.
- * One of the role of this component is to properly call {@link HttpSession#invalidate()} on all sessions before
- * disposal of the component: this ensures that all listeners relying on the session disposal can be executed.
+ * Manager in charge of keeping track of the {@link HttpSession}. One of the role of this component is to properly call
+ * {@link HttpSession#invalidate()} on all sessions before disposal of the component: this ensures that all listeners
+ * relying on the session disposal can be executed.
+ *
+ * While the class is much older, the since annotation was moved to 42.0.0 because it implements a completely
+ * different API from Java point of view.
*
* @version $Id$
- * @since 14.5
- * @since 14.4.1
+ * @since 42.0.0
*/
@Component(roles = HttpSessionManager.class)
@Singleton
diff --git a/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/test/java/org/xwiki/container/servlet/internal/HttpSessionManagerTest.java b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/test/java/org/xwiki/container/servlet/internal/HttpSessionManagerTest.java
index 02ac3b975375..bcbd3e2cc5ff 100644
--- a/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/test/java/org/xwiki/container/servlet/internal/HttpSessionManagerTest.java
+++ b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/test/java/org/xwiki/container/servlet/internal/HttpSessionManagerTest.java
@@ -21,8 +21,8 @@
import java.util.List;
-import javax.servlet.http.HttpSession;
-import javax.servlet.http.HttpSessionEvent;
+import jakarta.servlet.http.HttpSession;
+import jakarta.servlet.http.HttpSessionEvent;
import org.junit.jupiter.api.Test;
import org.xwiki.component.manager.ComponentLifecycleException;
diff --git a/xwiki-platform-core/xwiki-platform-oldcore/src/test/java/com/xpn/xwiki/web/XWikiServletResponseTest.java b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/test/java/org/xwiki/container/servlet/internal/SafeRedirectFilterTest.java
similarity index 64%
rename from xwiki-platform-core/xwiki-platform-oldcore/src/test/java/com/xpn/xwiki/web/XWikiServletResponseTest.java
rename to xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/test/java/org/xwiki/container/servlet/internal/SafeRedirectFilterTest.java
index 5f434daf53b5..8c90b115bb26 100644
--- a/xwiki-platform-core/xwiki-platform-oldcore/src/test/java/com/xpn/xwiki/web/XWikiServletResponseTest.java
+++ b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/test/java/org/xwiki/container/servlet/internal/SafeRedirectFilterTest.java
@@ -17,47 +17,61 @@
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
-package com.xpn.xwiki.web;
+package org.xwiki.container.servlet.internal;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
-import javax.servlet.http.HttpServletResponse;
-
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
import org.xwiki.component.manager.ComponentManager;
+import org.xwiki.container.servlet.filters.internal.SafeRedirectFilter;
import org.xwiki.test.LogLevel;
import org.xwiki.test.annotation.BeforeComponent;
import org.xwiki.test.junit5.LogCaptureExtension;
import org.xwiki.test.junit5.mockito.ComponentTest;
+import org.xwiki.test.junit5.mockito.InjectComponentManager;
import org.xwiki.test.junit5.mockito.MockComponent;
import org.xwiki.test.mockito.MockitoComponentManager;
import org.xwiki.url.URLSecurityManager;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
+import jakarta.servlet.FilterChain;
+import jakarta.servlet.FilterConfig;
+import jakarta.servlet.ServletContext;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.ServletRequest;
+import jakarta.servlet.ServletResponse;
+import jakarta.servlet.http.HttpServletResponse;
/**
- * Tests for {@link XWikiServletResponse}.
- *
+ * Validate {@link SafeRedirectFilter}.
+ *
* @version $Id$
*/
@ComponentTest
-class XWikiServletResponseTest
+class SafeRedirectFilterTest
{
@MockComponent
private URLSecurityManager urlSecurityManager;
- private XWikiServletResponse servletResponse;
+ @InjectComponentManager
+ private ComponentManager componentManager;
+
+ private SafeRedirectFilter filter;
+
private HttpServletResponse httpServletResponse;
+ private HttpServletResponse safeServletResponse;
+
@RegisterExtension
private LogCaptureExtension logCapture = new LogCaptureExtension(LogLevel.WARN);
@@ -65,32 +79,48 @@ class XWikiServletResponseTest
void beforeComponent(MockitoComponentManager mockitoComponentManager) throws Exception
{
mockitoComponentManager.registerComponent(ComponentManager.class, "context", mockitoComponentManager);
- Utils.setComponentManager(mockitoComponentManager);
}
@BeforeEach
- void setup()
+ void setup() throws IOException, ServletException
{
- this.httpServletResponse = mock(HttpServletResponse.class);
- this.servletResponse = new XWikiServletResponse(this.httpServletResponse);
+ this.httpServletResponse = mock();
+
+ this.filter = new SafeRedirectFilter();
+
+ FilterConfig filterConfig = mock();
+ ServletContext servletContext = mock();
+ when(filterConfig.getServletContext()).thenReturn(servletContext);
+ when(servletContext.getAttribute(ComponentManager.class.getName())).thenReturn(this.componentManager);
+ this.filter.init(filterConfig);
+
+ this.filter.doFilter(null, this.httpServletResponse, new FilterChain()
+ {
+ @Override
+ public void doFilter(ServletRequest request, ServletResponse response) throws IOException, ServletException
+ {
+ safeServletResponse = (HttpServletResponse) response;
+ }
+ });
}
@Test
void sendRedirect() throws IOException, URISyntaxException
{
- this.servletResponse.sendRedirect("");
+ this.safeServletResponse.sendRedirect("");
verify(this.httpServletResponse, never()).sendRedirect(any());
String location = "//xwiki.org/xwiki/something/";
URI expectedURI = new URI("//xwiki.org/xwiki/something/");
when(this.urlSecurityManager.parseToSafeURI(location)).thenReturn(expectedURI);
- this.servletResponse.sendRedirect(location);
+ this.safeServletResponse.sendRedirect(location);
verify(this.httpServletResponse).sendRedirect(location);
when(this.urlSecurityManager.parseToSafeURI(location)).thenThrow(new SecurityException("Unsafe location"));
- this.servletResponse.sendRedirect(location);
+ this.safeServletResponse.sendRedirect(location);
assertEquals(1, this.logCapture.size());
- assertEquals("Possible phishing attack, attempting to redirect to [//xwiki.org/xwiki/something/], this request"
+ assertEquals(
+ "Possible phishing attack, attempting to redirect to [//xwiki.org/xwiki/something/], this request"
+ " has been blocked. If the request was legitimate, please check the URL security configuration. "
+ "You might need to add the domain related to this request in the list of trusted domains in the "
+ "configuration: it can be configured in xwiki.properties in url.trustedDomains.",
diff --git a/xwiki-platform-core/xwiki-platform-crypto/xwiki-platform-crypto-store/xwiki-platform-crypto-store-wiki/pom.xml b/xwiki-platform-core/xwiki-platform-crypto/xwiki-platform-crypto-store/xwiki-platform-crypto-store-wiki/pom.xml
index dbce045ffb4c..495818f4af65 100644
--- a/xwiki-platform-core/xwiki-platform-crypto/xwiki-platform-crypto-store/xwiki-platform-crypto-store-wiki/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-crypto/xwiki-platform-crypto-store/xwiki-platform-crypto-store-wiki/pom.xml
@@ -91,8 +91,8 @@
test
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
test
diff --git a/xwiki-platform-core/xwiki-platform-csrf/pom.xml b/xwiki-platform-core/xwiki-platform-csrf/pom.xml
index 35f112812b3e..d9d994d2aef0 100644
--- a/xwiki-platform-core/xwiki-platform-csrf/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-csrf/pom.xml
@@ -66,8 +66,8 @@
${project.version}
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
commons-codec
diff --git a/xwiki-platform-core/xwiki-platform-csrf/src/main/java/org/xwiki/csrf/internal/DefaultCSRFToken.java b/xwiki-platform-core/xwiki-platform-csrf/src/main/java/org/xwiki/csrf/internal/DefaultCSRFToken.java
index de4e66e9ac36..9d5abbfcb73d 100644
--- a/xwiki-platform-core/xwiki-platform-csrf/src/main/java/org/xwiki/csrf/internal/DefaultCSRFToken.java
+++ b/xwiki-platform-core/xwiki-platform-csrf/src/main/java/org/xwiki/csrf/internal/DefaultCSRFToken.java
@@ -28,7 +28,6 @@
import javax.inject.Inject;
import javax.inject.Singleton;
-import javax.servlet.http.HttpServletRequest;
import org.apache.commons.codec.binary.Base64;
import org.slf4j.Logger;
@@ -44,6 +43,8 @@
import org.xwiki.csrf.CSRFTokenConfiguration;
import org.xwiki.model.reference.DocumentReference;
+import jakarta.servlet.http.HttpServletRequest;
+
/**
* Concrete implementation of the {@link CSRFToken} component.
*
@@ -70,7 +71,7 @@ public class DefaultCSRFToken implements CSRFToken, Initializable
private static final String RESUBMIT_TEMPLATE = "resubmit";
/** Token storage (one token per user). */
- private final ConcurrentMap tokens = new ConcurrentHashMap();
+ private final ConcurrentMap tokens = new ConcurrentHashMap<>();
/** Token for guest user. */
private String guestToken;
@@ -172,6 +173,7 @@ public boolean isTokenValid(String token)
if (token == null || token.isEmpty() || !storedToken.equals(token)) {
this.logger.warn("Secret CSRF token verification failed (token: [{}], stored token: [{}])", token,
storedToken);
+
return false;
}
return true;
@@ -241,8 +243,9 @@ private HttpServletRequest getRequest()
{
Request request = this.container.getRequest();
if (request instanceof ServletRequest servletRequest) {
- return servletRequest.getHttpServletRequest();
+ return servletRequest.getRequest();
}
+
throw new RuntimeException("Not supported request type");
}
diff --git a/xwiki-platform-core/xwiki-platform-dashboard/xwiki-platform-dashboard-macro/pom.xml b/xwiki-platform-core/xwiki-platform-dashboard/xwiki-platform-dashboard-macro/pom.xml
index e00fbf595432..3820159f7eb2 100644
--- a/xwiki-platform-core/xwiki-platform-dashboard/xwiki-platform-dashboard-macro/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-dashboard/xwiki-platform-dashboard-macro/pom.xml
@@ -82,13 +82,8 @@
test
- javax.servlet
- javax.servlet-api
- test
-
-
- org.mortbay.jasper
- apache-el
+ org.glassfish.expressly
+ expressly
test
diff --git a/xwiki-platform-core/xwiki-platform-diff/xwiki-platform-diff-xml/pom.xml b/xwiki-platform-core/xwiki-platform-diff/xwiki-platform-diff-xml/pom.xml
index d713f768bd2f..6d93e9c11d2f 100644
--- a/xwiki-platform-core/xwiki-platform-diff/xwiki-platform-diff-xml/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-diff/xwiki-platform-diff-xml/pom.xml
@@ -53,22 +53,12 @@
xwiki-platform-security-authentication-api
${project.version}
-
- javax.servlet
- javax.servlet-api
-
-
- org.xwiki.commons
- xwiki-commons-tool-test-component
- ${commons.version}
- test
-
org.xwiki.platform
- xwiki-platform-oldcore
+ xwiki-platform-test-oldcore
${project.version}
+ pom
test
- test-jar
\ No newline at end of file
diff --git a/xwiki-platform-core/xwiki-platform-eventstream/xwiki-platform-eventstream-stores/xwiki-platform-eventstream-store-solr/pom.xml b/xwiki-platform-core/xwiki-platform-eventstream/xwiki-platform-eventstream-stores/xwiki-platform-eventstream-store-solr/pom.xml
index 57e683709f65..9b42bcdfde56 100644
--- a/xwiki-platform-core/xwiki-platform-eventstream/xwiki-platform-eventstream-stores/xwiki-platform-eventstream-store-solr/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-eventstream/xwiki-platform-eventstream-stores/xwiki-platform-eventstream-store-solr/pom.xml
@@ -98,11 +98,6 @@
${commons.version}
test
-
- javax.servlet
- javax.servlet-api
- test
-
org.xwiki.platform
xwiki-platform-search-solr-api
diff --git a/xwiki-platform-core/xwiki-platform-export/xwiki-platform-export-pdf/xwiki-platform-export-pdf-api/pom.xml b/xwiki-platform-core/xwiki-platform-export/xwiki-platform-export-pdf/xwiki-platform-export-pdf-api/pom.xml
index d625cb77ed2d..102e9cba8279 100644
--- a/xwiki-platform-core/xwiki-platform-export/xwiki-platform-export-pdf/xwiki-platform-export-pdf-api/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-export/xwiki-platform-export-pdf/xwiki-platform-export-pdf-api/pom.xml
@@ -78,8 +78,8 @@
${project.version}
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
diff --git a/xwiki-platform-core/xwiki-platform-export/xwiki-platform-export-pdf/xwiki-platform-export-pdf-api/src/main/java/org/xwiki/export/pdf/browser/BrowserTab.java b/xwiki-platform-core/xwiki-platform-export/xwiki-platform-export-pdf/xwiki-platform-export-pdf-api/src/main/java/org/xwiki/export/pdf/browser/BrowserTab.java
index 434a0cd54f54..4ace7285ff2e 100644
--- a/xwiki-platform-core/xwiki-platform-export/xwiki-platform-export-pdf/xwiki-platform-export-pdf-api/src/main/java/org/xwiki/export/pdf/browser/BrowserTab.java
+++ b/xwiki-platform-core/xwiki-platform-export/xwiki-platform-export-pdf/xwiki-platform-export-pdf-api/src/main/java/org/xwiki/export/pdf/browser/BrowserTab.java
@@ -23,7 +23,10 @@
import java.io.InputStream;
import java.net.URL;
-import javax.servlet.http.Cookie;
+import org.xwiki.jakartabridge.servlet.JakartaServletBridge;
+import org.xwiki.stability.Unstable;
+
+import jakarta.servlet.http.Cookie;
/**
* Represents a web browser tab.
@@ -43,8 +46,42 @@ public interface BrowserTab extends AutoCloseable
* @return {@code true} if the navigation was successful, {@code false} otherwise
* @throws IOException if navigating to the specified web page fails
* @since 14.9
+ * @deprecated use {@link #navigate(URL, Cookie[], boolean, int)} instead
+ */
+ @Deprecated(since = "42.0.0")
+ boolean navigate(URL url, javax.servlet.http.Cookie[] cookies, boolean wait, int timeout) throws IOException;
+
+ /**
+ * Navigates to the specified web page, optionally waiting for it to be ready (fully loaded).
+ *
+ * @param url the URL of the web page we are going to navigate to
+ * @param cookies the cookies to use when loading the specified web page
+ * @param wait {@code true} to wait for the page to be ready, {@code false} otherwise
+ * @param timeout the number of seconds to wait for the web page to be ready before timing out
+ * @return {@code true} if the navigation was successful, {@code false} otherwise
+ * @throws IOException if navigating to the specified web page fails
+ * @since 42.0.0
*/
- boolean navigate(URL url, Cookie[] cookies, boolean wait, int timeout) throws IOException;
+ @Unstable
+ default boolean navigate(URL url, Cookie[] cookies, boolean wait, int timeout) throws IOException
+ {
+ return navigate(url, JakartaServletBridge.toJavax(cookies), wait, timeout);
+ }
+
+ /**
+ * Navigates to the specified web page, optionally waiting for it to be ready (fully loaded).
+ *
+ * @param url the URL of the web page we are going to navigate to
+ * @param cookies the cookies to use when loading the specified web page
+ * @param wait {@code true} to wait for the page to be ready, {@code false} otherwise
+ * @return {@code true} if the navigation was successful, {@code false} otherwise
+ * @throws IOException if navigating to the specified web page fails
+ */
+ @Deprecated(since = "42.0.0")
+ default boolean navigate(URL url, javax.servlet.http.Cookie[] cookies, boolean wait) throws IOException
+ {
+ return navigate(url, cookies, wait, 60);
+ }
/**
* Navigates to the specified web page, optionally waiting for it to be ready (fully loaded).
@@ -54,7 +91,9 @@ public interface BrowserTab extends AutoCloseable
* @param wait {@code true} to wait for the page to be ready, {@code false} otherwise
* @return {@code true} if the navigation was successful, {@code false} otherwise
* @throws IOException if navigating to the specified web page fails
+ * @since 42.0.0
*/
+ @Unstable
default boolean navigate(URL url, Cookie[] cookies, boolean wait) throws IOException
{
return navigate(url, cookies, wait, 60);
@@ -70,7 +109,7 @@ default boolean navigate(URL url, Cookie[] cookies, boolean wait) throws IOExcep
*/
default boolean navigate(URL url, boolean wait) throws IOException
{
- return navigate(url, null, wait);
+ return navigate(url, (Cookie[]) null, wait);
}
/**
diff --git a/xwiki-platform-core/xwiki-platform-export/xwiki-platform-export-pdf/xwiki-platform-export-pdf-api/src/main/java/org/xwiki/export/pdf/macro/PDFTocMacroParameters.java b/xwiki-platform-core/xwiki-platform-export/xwiki-platform-export-pdf/xwiki-platform-export-pdf-api/src/main/java/org/xwiki/export/pdf/macro/PDFTocMacroParameters.java
index 574b09d4e120..66d1c94f4e7e 100644
--- a/xwiki-platform-core/xwiki-platform-export/xwiki-platform-export-pdf/xwiki-platform-export-pdf-api/src/main/java/org/xwiki/export/pdf/macro/PDFTocMacroParameters.java
+++ b/xwiki-platform-core/xwiki-platform-export/xwiki-platform-export-pdf/xwiki-platform-export-pdf-api/src/main/java/org/xwiki/export/pdf/macro/PDFTocMacroParameters.java
@@ -19,7 +19,7 @@
*/
package org.xwiki.export.pdf.macro;
-import javax.validation.constraints.Min;
+import jakarta.validation.constraints.Min;
import org.xwiki.export.pdf.internal.macro.PDFTocMacro;
import org.xwiki.properties.annotation.PropertyDescription;
diff --git a/xwiki-platform-core/xwiki-platform-export/xwiki-platform-export-pdf/xwiki-platform-export-pdf-api/src/test/java/org/xwiki/export/pdf/browser/BrowserPDFPrinterTest.java b/xwiki-platform-core/xwiki-platform-export/xwiki-platform-export-pdf/xwiki-platform-export-pdf-api/src/test/java/org/xwiki/export/pdf/browser/BrowserPDFPrinterTest.java
index 342560b4aeb5..50db1700c181 100644
--- a/xwiki-platform-core/xwiki-platform-export/xwiki-platform-export-pdf/xwiki-platform-export-pdf-api/src/test/java/org/xwiki/export/pdf/browser/BrowserPDFPrinterTest.java
+++ b/xwiki-platform-core/xwiki-platform-export/xwiki-platform-export-pdf/xwiki-platform-export-pdf-api/src/test/java/org/xwiki/export/pdf/browser/BrowserPDFPrinterTest.java
@@ -232,7 +232,7 @@ void isAvailable()
void navigate() throws Exception
{
URL url = new URL("http://xwiki.org");
- when(this.browserTab.navigate(url, null, false, 60)).thenReturn(true);
+ when(this.browserTab.navigate(url, (jakarta.servlet.http.Cookie[]) null, false, 60)).thenReturn(true);
assertTrue(this.browserTab.navigate(url));
}
}
diff --git a/xwiki-platform-core/xwiki-platform-export/xwiki-platform-export-pdf/xwiki-platform-export-pdf-default/pom.xml b/xwiki-platform-core/xwiki-platform-export/xwiki-platform-export-pdf/xwiki-platform-export-pdf-default/pom.xml
index 9a19f258f7a5..2668fb22f8d5 100644
--- a/xwiki-platform-core/xwiki-platform-export/xwiki-platform-export-pdf/xwiki-platform-export-pdf-default/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-export/xwiki-platform-export-pdf/xwiki-platform-export-pdf-default/pom.xml
@@ -65,8 +65,8 @@
${project.version}
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
diff --git a/xwiki-platform-core/xwiki-platform-export/xwiki-platform-export-pdf/xwiki-platform-export-pdf-default/src/main/java/org/xwiki/export/pdf/internal/chrome/ChromeTab.java b/xwiki-platform-core/xwiki-platform-export/xwiki-platform-export-pdf/xwiki-platform-export-pdf-default/src/main/java/org/xwiki/export/pdf/internal/chrome/ChromeTab.java
index 671fdcbfb94c..9c4c61501cce 100644
--- a/xwiki-platform-core/xwiki-platform-export/xwiki-platform-export-pdf/xwiki-platform-export-pdf-default/src/main/java/org/xwiki/export/pdf/internal/chrome/ChromeTab.java
+++ b/xwiki-platform-core/xwiki-platform-export/xwiki-platform-export-pdf/xwiki-platform-export-pdf-default/src/main/java/org/xwiki/export/pdf/internal/chrome/ChromeTab.java
@@ -29,13 +29,12 @@
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import javax.servlet.http.Cookie;
-
import org.apache.commons.io.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.xwiki.export.pdf.PDFExportConfiguration;
import org.xwiki.export.pdf.browser.BrowserTab;
+import org.xwiki.jakartabridge.servlet.JakartaServletBridge;
import com.github.kklisura.cdt.protocol.commands.Network;
import com.github.kklisura.cdt.protocol.commands.Page;
@@ -50,6 +49,8 @@
import com.github.kklisura.cdt.protocol.types.target.TargetInfo;
import com.github.kklisura.cdt.services.ChromeDevToolsService;
+import jakarta.servlet.http.Cookie;
+
/**
* Represents a Chrome web browser tab.
*
@@ -101,6 +102,12 @@ public void close()
this.browserDevToolsService.getTarget().disposeBrowserContext(browserContextId);
}
+ @Override
+ public boolean navigate(URL url, javax.servlet.http.Cookie[] cookies, boolean wait, int timeout) throws IOException
+ {
+ return navigate(url, JakartaServletBridge.toJakarta(cookies), wait, timeout);
+ }
+
@Override
public boolean navigate(URL url, Cookie[] cookies, boolean wait, int timeout) throws IOException
{
diff --git a/xwiki-platform-core/xwiki-platform-export/xwiki-platform-export-pdf/xwiki-platform-export-pdf-default/src/test/java/org/xwiki/export/pdf/internal/chrome/ChromeTabTest.java b/xwiki-platform-core/xwiki-platform-export/xwiki-platform-export-pdf/xwiki-platform-export-pdf-default/src/test/java/org/xwiki/export/pdf/internal/chrome/ChromeTabTest.java
index 17753f049b71..e80e81aeaefd 100644
--- a/xwiki-platform-core/xwiki-platform-export/xwiki-platform-export-pdf/xwiki-platform-export-pdf-default/src/test/java/org/xwiki/export/pdf/internal/chrome/ChromeTabTest.java
+++ b/xwiki-platform-core/xwiki-platform-export/xwiki-platform-export-pdf/xwiki-platform-export-pdf-default/src/test/java/org/xwiki/export/pdf/internal/chrome/ChromeTabTest.java
@@ -25,7 +25,7 @@
import java.nio.charset.StandardCharsets;
import java.util.List;
-import javax.servlet.http.Cookie;
+import jakarta.servlet.http.Cookie;
import org.apache.commons.io.IOUtils;
import org.junit.jupiter.api.BeforeEach;
@@ -168,7 +168,7 @@ void navigateWithError() throws Exception
when(this.page.navigate(url.toString())).thenReturn(navigate);
when(navigate.getErrorText()).thenReturn("Failed to navigate!");
- assertFalse(this.chromeTab.navigate(url, null, false));
+ assertFalse(this.chromeTab.navigate(url, (Cookie[]) null, false));
}
@Test
@@ -192,7 +192,7 @@ void navigateWithWait() throws Exception
when(evaluate.getResult()).thenReturn(result);
when(result.getValue()).thenReturn("Page ready.");
- assertTrue(this.chromeTab.navigate(url, null, true, 25));
+ assertTrue(this.chromeTab.navigate(url, (Cookie[]) null, true, 25));
verify(this.runtime).enable();
}
@@ -222,7 +222,7 @@ void navigateWithWaitAndException() throws Exception
when(exception.getValue()).thenReturn("'xwiki-page-ready' module not found");
try {
- this.chromeTab.navigate(url, null, true);
+ this.chromeTab.navigate(url, (Cookie[]) null, true);
fail("Navigation should have thrown an exception.");
} catch (IOException e) {
assertEquals("Failed to wait for page to be ready. Root cause: 'xwiki-page-ready' module not found",
diff --git a/xwiki-platform-core/xwiki-platform-extension/xwiki-platform-extension-distribution/pom.xml b/xwiki-platform-core/xwiki-platform-extension/xwiki-platform-extension-distribution/pom.xml
index 179772108246..07028c2eda92 100644
--- a/xwiki-platform-core/xwiki-platform-extension/xwiki-platform-extension-distribution/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-extension/xwiki-platform-extension-distribution/pom.xml
@@ -66,8 +66,8 @@
${project.version}
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
diff --git a/xwiki-platform-core/xwiki-platform-extension/xwiki-platform-extension-handlers/xwiki-platform-extension-handler-xar/pom.xml b/xwiki-platform-core/xwiki-platform-extension/xwiki-platform-extension-handlers/xwiki-platform-extension-handler-xar/pom.xml
index be525f8a221b..1113d1e661e9 100644
--- a/xwiki-platform-core/xwiki-platform-extension/xwiki-platform-extension-handlers/xwiki-platform-extension-handler-xar/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-extension/xwiki-platform-extension-handlers/xwiki-platform-extension-handler-xar/pom.xml
@@ -132,11 +132,6 @@
${commons.version}
test
-
- javax.servlet
- javax.servlet-api
- test
-
org.xwiki.platform
xwiki-platform-security-authorization-bridge
diff --git a/xwiki-platform-core/xwiki-platform-extension/xwiki-platform-extension-index/pom.xml b/xwiki-platform-core/xwiki-platform-extension/xwiki-platform-extension-index/pom.xml
index 522cde34cf57..371c7e96eeb6 100644
--- a/xwiki-platform-core/xwiki-platform-extension/xwiki-platform-extension-index/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-extension/xwiki-platform-extension-index/pom.xml
@@ -65,17 +65,6 @@
-
- org.xwiki.commons
- xwiki-commons-tool-test-component
- ${commons.version}
- test
-
-
- javax.servlet
- javax.servlet-api
- test
-
org.xwiki.platform
xwiki-platform-search-solr-api
diff --git a/xwiki-platform-core/xwiki-platform-extension/xwiki-platform-extension-script/pom.xml b/xwiki-platform-core/xwiki-platform-extension/xwiki-platform-extension-script/pom.xml
index ddeff77adab1..aad9c565d017 100644
--- a/xwiki-platform-core/xwiki-platform-extension/xwiki-platform-extension-script/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-extension/xwiki-platform-extension-script/pom.xml
@@ -78,11 +78,6 @@
pom
test
-
- javax.servlet
- javax.servlet-api
- test
-
diff --git a/xwiki-platform-core/xwiki-platform-extension/xwiki-platform-extension-security/xwiki-platform-extension-security-api/pom.xml b/xwiki-platform-core/xwiki-platform-extension/xwiki-platform-extension-security/xwiki-platform-extension-security-api/pom.xml
index 057531e7ac0d..5109da849997 100644
--- a/xwiki-platform-core/xwiki-platform-extension/xwiki-platform-extension-security/xwiki-platform-extension-security-api/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-extension/xwiki-platform-extension-security/xwiki-platform-extension-security-api/pom.xml
@@ -62,8 +62,8 @@
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
test
diff --git a/xwiki-platform-core/xwiki-platform-feed/xwiki-platform-feed-api/pom.xml b/xwiki-platform-core/xwiki-platform-feed/xwiki-platform-feed-api/pom.xml
index 338e00e70937..90e653642ab7 100644
--- a/xwiki-platform-core/xwiki-platform-feed/xwiki-platform-feed-api/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-feed/xwiki-platform-feed-api/pom.xml
@@ -60,10 +60,7 @@
org.jdom
jdom
-
- javax.servlet
- javax.servlet-api
-
+
org.xwiki.platform
diff --git a/xwiki-platform-core/xwiki-platform-flamingo/xwiki-platform-flamingo-skin/xwiki-platform-flamingo-skin-test/xwiki-platform-flamingo-skin-test-docker/src/main/java/org/xwiki/test/TestMacroParameters.java b/xwiki-platform-core/xwiki-platform-flamingo/xwiki-platform-flamingo-skin/xwiki-platform-flamingo-skin-test/xwiki-platform-flamingo-skin-test-docker/src/main/java/org/xwiki/test/TestMacroParameters.java
index 33fdd755f6c7..c20be5a78d81 100644
--- a/xwiki-platform-core/xwiki-platform-flamingo/xwiki-platform-flamingo-skin/xwiki-platform-flamingo-skin-test/xwiki-platform-flamingo-skin-test-docker/src/main/java/org/xwiki/test/TestMacroParameters.java
+++ b/xwiki-platform-core/xwiki-platform-flamingo/xwiki-platform-flamingo-skin/xwiki-platform-flamingo-skin-test/xwiki-platform-flamingo-skin-test-docker/src/main/java/org/xwiki/test/TestMacroParameters.java
@@ -19,7 +19,7 @@
*/
package org.xwiki.test;
-import javax.validation.constraints.AssertTrue;
+import jakarta.validation.constraints.AssertTrue;
/**
* Java bean defining the parameters of {@link TestMacro}.
diff --git a/xwiki-platform-core/xwiki-platform-icon/xwiki-platform-icon-default/pom.xml b/xwiki-platform-core/xwiki-platform-icon/xwiki-platform-icon-default/pom.xml
index cda5c6839910..06ae7f24459f 100644
--- a/xwiki-platform-core/xwiki-platform-icon/xwiki-platform-icon-default/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-icon/xwiki-platform-icon-default/pom.xml
@@ -72,8 +72,8 @@
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
test
diff --git a/xwiki-platform-core/xwiki-platform-icon/xwiki-platform-icon-macro/pom.xml b/xwiki-platform-core/xwiki-platform-icon/xwiki-platform-icon-macro/pom.xml
index bea1b58981bb..aafb4563bf2c 100644
--- a/xwiki-platform-core/xwiki-platform-icon/xwiki-platform-icon-macro/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-icon/xwiki-platform-icon-macro/pom.xml
@@ -62,6 +62,8 @@
xwiki-platform-rendering-async-macro
${project.version}
+
+
org.xwiki.rendering
xwiki-rendering-test
@@ -87,13 +89,13 @@
test
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
test
- org.mortbay.jasper
- apache-el
+ org.glassfish.expressly
+ expressly
test
@@ -105,10 +107,10 @@
org.xwiki.platform
- xwiki-platform-oldcore
+ xwiki-platform-test-oldcore
${project.version}
+ pom
test
- test-jar
org.xwiki.rendering
diff --git a/xwiki-platform-core/xwiki-platform-image/xwiki-platform-image-processing/xwiki-platform-image-processing-plugin/pom.xml b/xwiki-platform-core/xwiki-platform-image/xwiki-platform-image-processing/xwiki-platform-image-processing-plugin/pom.xml
index 298cd603728e..f45cfe2851d7 100644
--- a/xwiki-platform-core/xwiki-platform-image/xwiki-platform-image-processing/xwiki-platform-image-processing-plugin/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-image/xwiki-platform-image-processing/xwiki-platform-image-processing-plugin/pom.xml
@@ -47,24 +47,13 @@
xwiki-platform-oldcore
${project.version}
-
- javax.servlet
- javax.servlet-api
- compile
-
org.xwiki.platform
- xwiki-platform-oldcore
+ xwiki-platform-test-oldcore
${project.version}
- test-jar
- test
-
-
- org.xwiki.commons
- xwiki-commons-tool-test-component
- ${commons.version}
+ pom
test
diff --git a/xwiki-platform-core/xwiki-platform-image/xwiki-platform-image-style/xwiki-platform-image-style-api/pom.xml b/xwiki-platform-core/xwiki-platform-image/xwiki-platform-image-style/xwiki-platform-image-style-api/pom.xml
index b4a93cdb4eb2..c0d59c7c7904 100644
--- a/xwiki-platform-core/xwiki-platform-image/xwiki-platform-image-style/xwiki-platform-image-style-api/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-image/xwiki-platform-image-style/xwiki-platform-image-style-api/pom.xml
@@ -56,8 +56,8 @@
test
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
test
diff --git a/xwiki-platform-core/xwiki-platform-image/xwiki-platform-image-style/xwiki-platform-image-style-rest/pom.xml b/xwiki-platform-core/xwiki-platform-image/xwiki-platform-image-style/xwiki-platform-image-style-rest/pom.xml
index d863878c8a28..e64fc577ba1d 100644
--- a/xwiki-platform-core/xwiki-platform-image/xwiki-platform-image-style/xwiki-platform-image-style-rest/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-image/xwiki-platform-image-style/xwiki-platform-image-style-rest/pom.xml
@@ -75,8 +75,8 @@
test
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
test
diff --git a/xwiki-platform-core/xwiki-platform-index/xwiki-platform-index-default/pom.xml b/xwiki-platform-core/xwiki-platform-index/xwiki-platform-index-default/pom.xml
index 29a5f0b44069..80e153be8614 100644
--- a/xwiki-platform-core/xwiki-platform-index/xwiki-platform-index-default/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-index/xwiki-platform-index-default/pom.xml
@@ -60,8 +60,8 @@
test
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
test
diff --git a/xwiki-platform-core/xwiki-platform-index/xwiki-platform-index-tree/xwiki-platform-index-tree-api/pom.xml b/xwiki-platform-core/xwiki-platform-index/xwiki-platform-index-tree/xwiki-platform-index-tree-api/pom.xml
index 08e54725d679..9a6654c12773 100644
--- a/xwiki-platform-core/xwiki-platform-index/xwiki-platform-index-tree/xwiki-platform-index-tree-api/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-index/xwiki-platform-index-tree/xwiki-platform-index-tree-api/pom.xml
@@ -88,8 +88,8 @@
test
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
test
diff --git a/xwiki-platform-core/xwiki-platform-job/xwiki-platform-job-handler/pom.xml b/xwiki-platform-core/xwiki-platform-job/xwiki-platform-job-handler/pom.xml
index 797147719c7d..411f544f6314 100644
--- a/xwiki-platform-core/xwiki-platform-job/xwiki-platform-job-handler/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-job/xwiki-platform-job-handler/pom.xml
@@ -76,8 +76,8 @@
${project.version}
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
diff --git a/xwiki-platform-core/xwiki-platform-legacy/xwiki-platform-legacy-events-hibernate/xwiki-platform-legacy-events-hibernate-api/pom.xml b/xwiki-platform-core/xwiki-platform-legacy/xwiki-platform-legacy-events-hibernate/xwiki-platform-legacy-events-hibernate-api/pom.xml
index 1b8f6cbb7d9f..c33887ae39ab 100644
--- a/xwiki-platform-core/xwiki-platform-legacy/xwiki-platform-legacy-events-hibernate/xwiki-platform-legacy-events-hibernate-api/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-legacy/xwiki-platform-legacy-events-hibernate/xwiki-platform-legacy-events-hibernate-api/pom.xml
@@ -68,8 +68,8 @@
test
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
test
diff --git a/xwiki-platform-core/xwiki-platform-legacy/xwiki-platform-legacy-mail/xwiki-platform-legacy-mail-send/xwiki-platform-legacy-mail-send-storage/pom.xml b/xwiki-platform-core/xwiki-platform-legacy/xwiki-platform-legacy-mail/xwiki-platform-legacy-mail-send/xwiki-platform-legacy-mail-send-storage/pom.xml
index 900a00957449..bca4d76341d1 100644
--- a/xwiki-platform-core/xwiki-platform-legacy/xwiki-platform-legacy-mail/xwiki-platform-legacy-mail-send/xwiki-platform-legacy-mail-send-storage/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-legacy/xwiki-platform-legacy-mail/xwiki-platform-legacy-mail-send/xwiki-platform-legacy-mail-send-storage/pom.xml
@@ -62,8 +62,8 @@
test
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
test
diff --git a/xwiki-platform-core/xwiki-platform-legacy/xwiki-platform-legacy-messagestream/xwiki-platform-legacy-messagestream-api/pom.xml b/xwiki-platform-core/xwiki-platform-legacy/xwiki-platform-legacy-messagestream/xwiki-platform-legacy-messagestream-api/pom.xml
index bf8636f26a52..187ddd5dedb2 100644
--- a/xwiki-platform-core/xwiki-platform-legacy/xwiki-platform-legacy-messagestream/xwiki-platform-legacy-messagestream-api/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-legacy/xwiki-platform-legacy-messagestream/xwiki-platform-legacy-messagestream-api/pom.xml
@@ -84,8 +84,8 @@
test
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
test
diff --git a/xwiki-platform-core/xwiki-platform-legacy/xwiki-platform-legacy-rendering/xwiki-platform-legacy-rendering-wikimacro/xwiki-platform-legacy-rendering-wikimacro-store/pom.xml b/xwiki-platform-core/xwiki-platform-legacy/xwiki-platform-legacy-rendering/xwiki-platform-legacy-rendering-wikimacro/xwiki-platform-legacy-rendering-wikimacro-store/pom.xml
index 4c72be5ce49e..0555b01fb492 100644
--- a/xwiki-platform-core/xwiki-platform-legacy/xwiki-platform-legacy-rendering/xwiki-platform-legacy-rendering-wikimacro/xwiki-platform-legacy-rendering-wikimacro-store/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-legacy/xwiki-platform-legacy-rendering/xwiki-platform-legacy-rendering-wikimacro/xwiki-platform-legacy-rendering-wikimacro-store/pom.xml
@@ -61,6 +61,7 @@
org.aspectj
aspectjrt
+
org.xwiki.platform
diff --git a/xwiki-platform-core/xwiki-platform-legacy/xwiki-platform-legacy-security/xwiki-platform-legacy-security-authentication/xwiki-platform-legacy-security-authentication-api/pom.xml b/xwiki-platform-core/xwiki-platform-legacy/xwiki-platform-legacy-security/xwiki-platform-legacy-security-authentication/xwiki-platform-legacy-security-authentication-api/pom.xml
index 6d1522520a80..6df37ddefcb6 100644
--- a/xwiki-platform-core/xwiki-platform-legacy/xwiki-platform-legacy-security/xwiki-platform-legacy-security-authentication/xwiki-platform-legacy-security-authentication-api/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-legacy/xwiki-platform-legacy-security/xwiki-platform-legacy-security-authentication/xwiki-platform-legacy-security-authentication-api/pom.xml
@@ -60,8 +60,8 @@
aspectjrt
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
diff --git a/xwiki-platform-core/xwiki-platform-legacy/xwiki-platform-legacy-url/pom.xml b/xwiki-platform-core/xwiki-platform-legacy/xwiki-platform-legacy-url/pom.xml
index 465dd705d9c6..aface58dcee1 100644
--- a/xwiki-platform-core/xwiki-platform-legacy/xwiki-platform-legacy-url/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-legacy/xwiki-platform-legacy-url/pom.xml
@@ -48,8 +48,8 @@
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
diff --git a/xwiki-platform-core/xwiki-platform-lesscss/xwiki-platform-lesscss-default/pom.xml b/xwiki-platform-core/xwiki-platform-lesscss/xwiki-platform-lesscss-default/pom.xml
index 9d8446658194..b55097270e3a 100644
--- a/xwiki-platform-core/xwiki-platform-lesscss/xwiki-platform-lesscss-default/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-lesscss/xwiki-platform-lesscss-default/pom.xml
@@ -63,8 +63,8 @@
${project.version}
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
com.github.sommeri
diff --git a/xwiki-platform-core/xwiki-platform-lesscss/xwiki-platform-lesscss-script/pom.xml b/xwiki-platform-core/xwiki-platform-lesscss/xwiki-platform-lesscss-script/pom.xml
index c625d1cdfd92..f414eff9226d 100644
--- a/xwiki-platform-core/xwiki-platform-lesscss/xwiki-platform-lesscss-script/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-lesscss/xwiki-platform-lesscss-script/pom.xml
@@ -68,8 +68,8 @@
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
test
diff --git a/xwiki-platform-core/xwiki-platform-like/xwiki-platform-like-api/pom.xml b/xwiki-platform-core/xwiki-platform-like/xwiki-platform-like-api/pom.xml
index 194d4eb88be0..8dc229504ded 100644
--- a/xwiki-platform-core/xwiki-platform-like/xwiki-platform-like-api/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-like/xwiki-platform-like-api/pom.xml
@@ -91,8 +91,8 @@
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
test
diff --git a/xwiki-platform-core/xwiki-platform-linkchecker/xwiki-platform-linkchecker-api/pom.xml b/xwiki-platform-core/xwiki-platform-linkchecker/xwiki-platform-linkchecker-api/pom.xml
index 6c6ad8c0df82..52a408eeffff 100644
--- a/xwiki-platform-core/xwiki-platform-linkchecker/xwiki-platform-linkchecker-api/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-linkchecker/xwiki-platform-linkchecker-api/pom.xml
@@ -61,8 +61,8 @@
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
test
diff --git a/xwiki-platform-core/xwiki-platform-livedata/xwiki-platform-livedata-livetable/pom.xml b/xwiki-platform-core/xwiki-platform-livedata/xwiki-platform-livedata-livetable/pom.xml
index 98edde2d29ca..68f933041a70 100644
--- a/xwiki-platform-core/xwiki-platform-livedata/xwiki-platform-livedata-livetable/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-livedata/xwiki-platform-livedata-livetable/pom.xml
@@ -53,8 +53,8 @@
${project.version}
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
diff --git a/xwiki-platform-core/xwiki-platform-livedata/xwiki-platform-livedata-rest/pom.xml b/xwiki-platform-core/xwiki-platform-livedata/xwiki-platform-livedata-rest/pom.xml
index 57eb6408c1f8..477a5568b6f2 100644
--- a/xwiki-platform-core/xwiki-platform-livedata/xwiki-platform-livedata-rest/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-livedata/xwiki-platform-livedata-rest/pom.xml
@@ -81,8 +81,8 @@
test
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
test
diff --git a/xwiki-platform-core/xwiki-platform-livetable/xwiki-platform-livetable-ui/pom.xml b/xwiki-platform-core/xwiki-platform-livetable/xwiki-platform-livetable-ui/pom.xml
index d363a5c97289..7be7ae197718 100644
--- a/xwiki-platform-core/xwiki-platform-livetable/xwiki-platform-livetable-ui/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-livetable/xwiki-platform-livetable-ui/pom.xml
@@ -75,11 +75,6 @@
runtime
-
- javax.servlet
- javax.servlet-api
- test
-
org.xwiki.platform
xwiki-platform-test-page
diff --git a/xwiki-platform-core/xwiki-platform-localization/xwiki-platform-localization-sources/xwiki-platform-localization-source-legacy/pom.xml b/xwiki-platform-core/xwiki-platform-localization/xwiki-platform-localization-sources/xwiki-platform-localization-source-legacy/pom.xml
index e6488da73901..e1a4a058cba3 100644
--- a/xwiki-platform-core/xwiki-platform-localization/xwiki-platform-localization-sources/xwiki-platform-localization-source-legacy/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-localization/xwiki-platform-localization-sources/xwiki-platform-localization-source-legacy/pom.xml
@@ -64,7 +64,6 @@
-
org.xwiki.platform
xwiki-platform-test-oldcore
@@ -72,13 +71,6 @@
pom
test
-
-
-
- org.jmock
- jmock-legacy
- test
-
diff --git a/xwiki-platform-core/xwiki-platform-localization/xwiki-platform-localization-sources/xwiki-platform-localization-source-wiki/pom.xml b/xwiki-platform-core/xwiki-platform-localization/xwiki-platform-localization-sources/xwiki-platform-localization-source-wiki/pom.xml
index b06a192a848b..a55985f405aa 100644
--- a/xwiki-platform-core/xwiki-platform-localization/xwiki-platform-localization-sources/xwiki-platform-localization-source-wiki/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-localization/xwiki-platform-localization-sources/xwiki-platform-localization-source-wiki/pom.xml
@@ -68,7 +68,6 @@
-
org.xwiki.platform
xwiki-platform-test-oldcore
@@ -76,13 +75,6 @@
pom
test
-
-
-
- org.jmock
- jmock-legacy
- test
-
diff --git a/xwiki-platform-core/xwiki-platform-mail/xwiki-platform-mail-general/pom.xml b/xwiki-platform-core/xwiki-platform-mail/xwiki-platform-mail-general/pom.xml
index ae9a4ec30936..46525a90027b 100644
--- a/xwiki-platform-core/xwiki-platform-mail/xwiki-platform-mail-general/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-mail/xwiki-platform-mail-general/pom.xml
@@ -67,13 +67,6 @@
${commons.version}
test
-
-
- javax.servlet
- javax.servlet-api
- test
-
-
org.xwiki.platform
xwiki-platform-oldcore
diff --git a/xwiki-platform-core/xwiki-platform-mail/xwiki-platform-mail-send/xwiki-platform-mail-send-default/pom.xml b/xwiki-platform-core/xwiki-platform-mail/xwiki-platform-mail-send/xwiki-platform-mail-send-default/pom.xml
index 46e0105cdd7a..cfdf46133e11 100644
--- a/xwiki-platform-core/xwiki-platform-mail/xwiki-platform-mail-send/xwiki-platform-mail-send-default/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-mail/xwiki-platform-mail-send/xwiki-platform-mail-send-default/pom.xml
@@ -73,8 +73,8 @@
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
org.xwiki.platform
@@ -99,9 +99,9 @@
org.xwiki.platform
- xwiki-platform-oldcore
+ xwiki-platform-test-oldcore
${project.version}
- test-jar
+ pom
test
@@ -109,12 +109,6 @@
greenmail-junit5
test
-
- org.xwiki.commons
- xwiki-commons-tool-test-component
- ${commons.version}
- test
-
org.xwiki.platform
xwiki-platform-security-authorization-bridge
diff --git a/xwiki-platform-core/xwiki-platform-mail/xwiki-platform-mail-send/xwiki-platform-mail-send-storage/pom.xml b/xwiki-platform-core/xwiki-platform-mail/xwiki-platform-mail-send/xwiki-platform-mail-send-storage/pom.xml
index e44ac9e2956a..bc19bf683518 100644
--- a/xwiki-platform-core/xwiki-platform-mail/xwiki-platform-mail-send/xwiki-platform-mail-send-storage/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-mail/xwiki-platform-mail-send/xwiki-platform-mail-send-storage/pom.xml
@@ -70,8 +70,8 @@
test
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
test
diff --git a/xwiki-platform-core/xwiki-platform-mailsender/pom.xml b/xwiki-platform-core/xwiki-platform-mailsender/pom.xml
index cc533d22f067..3e6e819587a2 100644
--- a/xwiki-platform-core/xwiki-platform-mailsender/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-mailsender/pom.xml
@@ -44,6 +44,8 @@
xwiki-platform-oldcore
${project.version}
+
+
com.icegreen
greenmail-junit5
diff --git a/xwiki-platform-core/xwiki-platform-mentions/pom.xml b/xwiki-platform-core/xwiki-platform-mentions/pom.xml
index 503e9b88a995..57cd509110dc 100644
--- a/xwiki-platform-core/xwiki-platform-mentions/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-mentions/pom.xml
@@ -39,8 +39,8 @@
test
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
test
diff --git a/xwiki-platform-core/xwiki-platform-model/xwiki-platform-model-validation/xwiki-platform-model-validation-default/pom.xml b/xwiki-platform-core/xwiki-platform-model/xwiki-platform-model-validation/xwiki-platform-model-validation-default/pom.xml
index 9bbda2b14170..48a07e9324d6 100644
--- a/xwiki-platform-core/xwiki-platform-model/xwiki-platform-model-validation/xwiki-platform-model-validation-default/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-model/xwiki-platform-model-validation/xwiki-platform-model-validation-default/pom.xml
@@ -48,8 +48,8 @@
${project.version}
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
diff --git a/xwiki-platform-core/xwiki-platform-model/xwiki-platform-model-validation/xwiki-platform-model-validation-default/src/main/resources/ApplicationResources_de.properties b/xwiki-platform-core/xwiki-platform-model/xwiki-platform-model-validation/xwiki-platform-model-validation-default/src/main/resources/ApplicationResources_de.properties
deleted file mode 100644
index 0633301106ab..000000000000
--- a/xwiki-platform-core/xwiki-platform-model/xwiki-platform-model-validation/xwiki-platform-model-validation-default/src/main/resources/ApplicationResources_de.properties
+++ /dev/null
@@ -1,24 +0,0 @@
-# ---------------------------------------------------------------------------
-# See the NOTICE file distributed with this work for additional
-# information regarding copyright ownership.
-#
-# This is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation; either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# This software is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this software; if not, write to the Free
-# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-# ---------------------------------------------------------------------------
-entitynamevalidation.ReplaceCharacterEntityNameValidation.name=Zeichenersetzung
-entitynamevalidation.ReplaceCharacterEntityNameValidation.usage=Einige Zeichen sind bei dieser Strategie verboten und sollten ersetzt oder entfernt werden. Erkundige Dich bei deinem Administrator nach der genauen Liste der verbotenen Zeichen und nach dem zu verwendenden Ersatz.
-## Missing: entitynamevalidation.ReplaceCharacterEntityNameValidation.usage=Some characters are forbidden with this strategy and should be replaced or removed. Ask your administrator to know exactly the list of forbidden characters, and the replacement to use.
-entitynamevalidation.SlugEntityNameValidation.name=Vorformatierte Namen (keine Akzente, kein Leerzeichen, keine Sonderzeichen)
-entitynamevalidation.SlugEntityNameValidation.usage=Alle Sonderzeichen, einschlie\u00DFlich Leerzeichen und Akzente, sind verboten.
diff --git a/xwiki-platform-core/xwiki-platform-netflux/xwiki-platform-netflux-api/pom.xml b/xwiki-platform-core/xwiki-platform-netflux/xwiki-platform-netflux-api/pom.xml
index c49d49d994ad..dd3719a82d7e 100644
--- a/xwiki-platform-core/xwiki-platform-netflux/xwiki-platform-netflux-api/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-netflux/xwiki-platform-netflux-api/pom.xml
@@ -68,9 +68,10 @@
${project.version}
- javax.websocket
- javax.websocket-api
+ jakarta.websocket
+ jakarta.websocket-client-api
+
org.xwiki.commons
@@ -78,5 +79,15 @@
${commons.version}
test
+
+ jakarta.servlet
+ jakarta.servlet-api
+ test
+
+
+ jakarta.websocket
+ jakarta.websocket-api
+ test
+
diff --git a/xwiki-platform-core/xwiki-platform-netflux/xwiki-platform-netflux-api/src/test/java/org/xwiki/netflux/internal/DefaultEntityChannelStoreTest.java b/xwiki-platform-core/xwiki-platform-netflux/xwiki-platform-netflux-api/src/test/java/org/xwiki/netflux/internal/DefaultEntityChannelStoreTest.java
index 35dce1a5d652..c04a12100952 100644
--- a/xwiki-platform-core/xwiki-platform-netflux/xwiki-platform-netflux-api/src/test/java/org/xwiki/netflux/internal/DefaultEntityChannelStoreTest.java
+++ b/xwiki-platform-core/xwiki-platform-netflux/xwiki-platform-netflux-api/src/test/java/org/xwiki/netflux/internal/DefaultEntityChannelStoreTest.java
@@ -26,7 +26,7 @@
import java.util.List;
-import javax.websocket.Session;
+import jakarta.websocket.Session;
import org.junit.jupiter.api.Test;
import org.mockito.Mock;
diff --git a/xwiki-platform-core/xwiki-platform-netflux/xwiki-platform-netflux-api/src/test/java/org/xwiki/netflux/internal/EntityChannelScriptAuthorBotTest.java b/xwiki-platform-core/xwiki-platform-netflux/xwiki-platform-netflux-api/src/test/java/org/xwiki/netflux/internal/EntityChannelScriptAuthorBotTest.java
index 0a27fdb81c8a..bdce80c4e834 100644
--- a/xwiki-platform-core/xwiki-platform-netflux/xwiki-platform-netflux-api/src/test/java/org/xwiki/netflux/internal/EntityChannelScriptAuthorBotTest.java
+++ b/xwiki-platform-core/xwiki-platform-netflux/xwiki-platform-netflux-api/src/test/java/org/xwiki/netflux/internal/EntityChannelScriptAuthorBotTest.java
@@ -31,7 +31,7 @@
import java.util.List;
import java.util.Optional;
-import javax.websocket.Session;
+import jakarta.websocket.Session;
import org.junit.jupiter.api.Test;
import org.xwiki.model.reference.DocumentReference;
diff --git a/xwiki-platform-core/xwiki-platform-netflux/xwiki-platform-netflux-rest/pom.xml b/xwiki-platform-core/xwiki-platform-netflux/xwiki-platform-netflux-rest/pom.xml
index 5884652cf7f8..ae2cecb7f12b 100644
--- a/xwiki-platform-core/xwiki-platform-netflux/xwiki-platform-netflux-rest/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-netflux/xwiki-platform-netflux-rest/pom.xml
@@ -59,6 +59,7 @@
jakarta.ws.rs
jakarta.ws.rs-api
+
org.xwiki.commons
@@ -72,8 +73,8 @@
test
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
test
diff --git a/xwiki-platform-core/xwiki-platform-notifications/xwiki-platform-notifications-filters/xwiki-platform-notifications-filters-api/pom.xml b/xwiki-platform-core/xwiki-platform-notifications/xwiki-platform-notifications-filters/xwiki-platform-notifications-filters-api/pom.xml
index 48ae3cea7ff2..45f601d06ae0 100644
--- a/xwiki-platform-core/xwiki-platform-notifications/xwiki-platform-notifications-filters/xwiki-platform-notifications-filters-api/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-notifications/xwiki-platform-notifications-filters/xwiki-platform-notifications-filters-api/pom.xml
@@ -72,8 +72,8 @@
test
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
test
diff --git a/xwiki-platform-core/xwiki-platform-notifications/xwiki-platform-notifications-filters/xwiki-platform-notifications-filters-default/pom.xml b/xwiki-platform-core/xwiki-platform-notifications/xwiki-platform-notifications-filters/xwiki-platform-notifications-filters-default/pom.xml
index a0357723631d..2c3a9fecbdf0 100644
--- a/xwiki-platform-core/xwiki-platform-notifications/xwiki-platform-notifications-filters/xwiki-platform-notifications-filters-default/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-notifications/xwiki-platform-notifications-filters/xwiki-platform-notifications-filters-default/pom.xml
@@ -52,23 +52,12 @@
-
- org.xwiki.commons
- xwiki-commons-tool-test-component
- ${commons.version}
- test
-
-
- javax.servlet
- javax.servlet-api
- test
-
org.xwiki.platform
- xwiki-platform-oldcore
+ xwiki-platform-test-oldcore
${project.version}
+ pom
test
- test-jar
\ No newline at end of file
diff --git a/xwiki-platform-core/xwiki-platform-notifications/xwiki-platform-notifications-filters/xwiki-platform-notifications-filters-watch/pom.xml b/xwiki-platform-core/xwiki-platform-notifications/xwiki-platform-notifications-filters/xwiki-platform-notifications-filters-watch/pom.xml
index 064101ba5bef..dc3cf253f0c0 100644
--- a/xwiki-platform-core/xwiki-platform-notifications/xwiki-platform-notifications-filters/xwiki-platform-notifications-filters-watch/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-notifications/xwiki-platform-notifications-filters/xwiki-platform-notifications-filters-watch/pom.xml
@@ -52,8 +52,8 @@
test
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
test
diff --git a/xwiki-platform-core/xwiki-platform-notifications/xwiki-platform-notifications-notifiers/xwiki-platform-notifications-notifiers-api/pom.xml b/xwiki-platform-core/xwiki-platform-notifications/xwiki-platform-notifications-notifiers/xwiki-platform-notifications-notifiers-api/pom.xml
index 61281858ee0c..7ca470e923d9 100644
--- a/xwiki-platform-core/xwiki-platform-notifications/xwiki-platform-notifications-notifiers/xwiki-platform-notifications-notifiers-api/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-notifications/xwiki-platform-notifications-notifiers/xwiki-platform-notifications-notifiers-api/pom.xml
@@ -81,11 +81,6 @@
${rendering.version}
test
-
- javax.servlet
- javax.servlet-api
- test
-
org.xwiki.platform
xwiki-platform-test-oldcore
diff --git a/xwiki-platform-core/xwiki-platform-notifications/xwiki-platform-notifications-notifiers/xwiki-platform-notifications-notifiers-default/pom.xml b/xwiki-platform-core/xwiki-platform-notifications/xwiki-platform-notifications-notifiers/xwiki-platform-notifications-notifiers-default/pom.xml
index 02b71fe81d47..6c3b7ac571ea 100644
--- a/xwiki-platform-core/xwiki-platform-notifications/xwiki-platform-notifications-notifiers/xwiki-platform-notifications-notifiers-default/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-notifications/xwiki-platform-notifications-notifiers/xwiki-platform-notifications-notifiers-default/pom.xml
@@ -75,8 +75,8 @@
test
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
test
diff --git a/xwiki-platform-core/xwiki-platform-notifications/xwiki-platform-notifications-notifiers/xwiki-platform-notifications-notifiers-default/src/test/java/org/xwiki/notifications/notifiers/internal/email/DefaultNotificationEmailRendererTest.java b/xwiki-platform-core/xwiki-platform-notifications/xwiki-platform-notifications-notifiers/xwiki-platform-notifications-notifiers-default/src/test/java/org/xwiki/notifications/notifiers/internal/email/DefaultNotificationEmailRendererTest.java
index 39d23ffa19e3..a540ec7eb1db 100644
--- a/xwiki-platform-core/xwiki-platform-notifications/xwiki-platform-notifications-notifiers/xwiki-platform-notifications-notifiers-default/src/test/java/org/xwiki/notifications/notifiers/internal/email/DefaultNotificationEmailRendererTest.java
+++ b/xwiki-platform-core/xwiki-platform-notifications/xwiki-platform-notifications-notifiers/xwiki-platform-notifications-notifiers-default/src/test/java/org/xwiki/notifications/notifiers/internal/email/DefaultNotificationEmailRendererTest.java
@@ -159,7 +159,7 @@ void executeTemplate() throws Exception
XWiki wiki = mock(XWiki.class);
when(context.getWiki()).thenReturn(wiki);
- XWikiServletRequestStub xWikiServletRequestStub = mock(XWikiServletRequestStub.class);
+ XWikiServletRequestStub xWikiServletRequestStub = new XWikiServletRequestStub();
when(context.getRequest()).thenReturn(xWikiServletRequestStub);
ScriptContext scriptContext = mock(ScriptContext.class);
diff --git a/xwiki-platform-core/xwiki-platform-notifications/xwiki-platform-notifications-preferences/xwiki-platform-notifications-preferences-api/pom.xml b/xwiki-platform-core/xwiki-platform-notifications/xwiki-platform-notifications-preferences/xwiki-platform-notifications-preferences-api/pom.xml
index ef3cd49e14f2..2b54be040405 100644
--- a/xwiki-platform-core/xwiki-platform-notifications/xwiki-platform-notifications-preferences/xwiki-platform-notifications-preferences-api/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-notifications/xwiki-platform-notifications-preferences/xwiki-platform-notifications-preferences-api/pom.xml
@@ -60,8 +60,8 @@
test
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
test
diff --git a/xwiki-platform-core/xwiki-platform-notifications/xwiki-platform-notifications-preferences/xwiki-platform-notifications-preferences-default/pom.xml b/xwiki-platform-core/xwiki-platform-notifications/xwiki-platform-notifications-preferences/xwiki-platform-notifications-preferences-default/pom.xml
index 46136c8c7985..b71c0c2dc1aa 100644
--- a/xwiki-platform-core/xwiki-platform-notifications/xwiki-platform-notifications-preferences/xwiki-platform-notifications-preferences-default/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-notifications/xwiki-platform-notifications-preferences/xwiki-platform-notifications-preferences-default/pom.xml
@@ -57,8 +57,8 @@
test
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
test
diff --git a/xwiki-platform-core/xwiki-platform-notifications/xwiki-platform-notifications-rest/pom.xml b/xwiki-platform-core/xwiki-platform-notifications/xwiki-platform-notifications-rest/pom.xml
index 6a82a3ee8019..27e388bbaab7 100644
--- a/xwiki-platform-core/xwiki-platform-notifications/xwiki-platform-notifications-rest/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-notifications/xwiki-platform-notifications-rest/pom.xml
@@ -76,9 +76,8 @@
rome
- javax.servlet
- javax.servlet-api
- compile
+ jakarta.servlet
+ jakarta.servlet-api
org.xwiki.commons
diff --git a/xwiki-platform-core/xwiki-platform-notifications/xwiki-platform-notifications-sources/pom.xml b/xwiki-platform-core/xwiki-platform-notifications/xwiki-platform-notifications-sources/pom.xml
index c9187155d555..95ce84340e50 100644
--- a/xwiki-platform-core/xwiki-platform-notifications/xwiki-platform-notifications-sources/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-notifications/xwiki-platform-notifications-sources/pom.xml
@@ -75,8 +75,8 @@
test
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
test
diff --git a/xwiki-platform-core/xwiki-platform-observation/xwiki-platform-observation-test/xwiki-platform-observation-test-tests/pom.xml b/xwiki-platform-core/xwiki-platform-observation/xwiki-platform-observation-test/xwiki-platform-observation-test-tests/pom.xml
index 1fcb6de62e74..beb83733b9a1 100644
--- a/xwiki-platform-core/xwiki-platform-observation/xwiki-platform-observation-test/xwiki-platform-observation-test-tests/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-observation/xwiki-platform-observation-test/xwiki-platform-observation-test-tests/pom.xml
@@ -105,8 +105,8 @@
test
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
test
diff --git a/xwiki-platform-core/xwiki-platform-oldcore/pom.xml b/xwiki-platform-core/xwiki-platform-oldcore/pom.xml
index 1c6472b19144..cf4b30c5a131 100644
--- a/xwiki-platform-core/xwiki-platform-oldcore/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-oldcore/pom.xml
@@ -130,6 +130,10 @@
javax.servlet
javax.servlet-api
+
+ jakarta.servlet
+ jakarta.servlet-api
+
+
+ javax.validation
+ validation-api
+
jakarta.xml.bind
@@ -165,6 +174,10 @@
hibernate-validator
runtime
+
+ org.glassfish.expressly
+ expressly
+
org.liquibase
liquibase-core
@@ -633,12 +646,6 @@
test
-
-
- org.mortbay.jasper
- apache-el
- test
-
org.xwiki.platform
xwiki-platform-index-api
diff --git a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/XWiki.java b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/XWiki.java
index 68bb8e850a12..c34c3f3ab014 100644
--- a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/XWiki.java
+++ b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/XWiki.java
@@ -1129,6 +1129,7 @@ private static EntityResourceReference initializeResourceFromURL(XWikiContext co
return entityResourceReference;
}
+ @Deprecated(since = "42.0.0")
public static URL getRequestURL(XWikiRequest request) throws XWikiException
{
return HttpServletUtils.getSourceURL(request);
@@ -3227,6 +3228,7 @@ public String getLanguagePreference(XWikiContext context)
* @return A list of language codes, in the client preference order; might be empty if the header is not well
* formed.
*/
+ @Deprecated(since = "42.0.0")
private List getAcceptedLanguages(XWikiRequest request)
{
List result = new ArrayList();
@@ -5716,6 +5718,7 @@ public int checkActive(String user, XWikiContext context) throws XWikiException
/**
* @since 2.3M1
*/
+ @Deprecated(since = "42.0.0")
public DocumentReference getDocumentReference(XWikiRequest request, XWikiContext context)
{
DocumentReference reference;
@@ -5782,6 +5785,7 @@ public static String stripSegmentFromPath(String path, String segment)
return path.substring(segment.length());
}
+ @Deprecated(since = "42.0.0")
public boolean prepareDocuments(XWikiRequest request, XWikiContext context, VelocityContext vcontext)
throws XWikiException
{
diff --git a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/XWikiContext.java b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/XWikiContext.java
index 69e37bc70cad..55b58092db3f 100644
--- a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/XWikiContext.java
+++ b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/XWikiContext.java
@@ -35,6 +35,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.xwiki.component.util.DefaultParameterizedType;
+import org.xwiki.container.Container;
import org.xwiki.context.Execution;
import org.xwiki.context.ExecutionContext;
import org.xwiki.localization.LocaleUtils;
@@ -269,11 +270,21 @@ public void setEngineContext(XWikiEngineContext engine_context)
this.engine_context = engine_context;
}
+ /**
+ * @return the request in the context
+ * @deprecated use the {@link Container} API instead
+ */
+ @Deprecated(since = "42.0.0")
public XWikiRequest getRequest()
{
return this.request;
}
+ /**
+ * @param request the request to put in the context
+ * @deprecated use the {@link Container} API instead
+ */
+ @Deprecated(since = "42.0.0")
public void setRequest(XWikiRequest request)
{
this.request = request;
@@ -289,11 +300,21 @@ public void setAction(String action)
this.action = action;
}
+ /**
+ * @return the response in the context
+ * @deprecated use the {@link Container} API instead
+ */
+ @Deprecated(since = "42.0.0")
public XWikiResponse getResponse()
{
return this.response;
}
+ /**
+ * @param response the response to put in the context
+ * @deprecated use the {@link Container} API instead
+ */
+ @Deprecated(since = "42.0.0")
public void setResponse(XWikiResponse response)
{
this.response = response;
diff --git a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/api/Context.java b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/api/Context.java
index 674723936f93..fafbae89f2e4 100644
--- a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/api/Context.java
+++ b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/api/Context.java
@@ -27,6 +27,7 @@
import com.xpn.xwiki.XWikiContext;
import com.xpn.xwiki.doc.XWikiDocument;
import com.xpn.xwiki.render.ScriptXWikiServletRequest;
+import com.xpn.xwiki.render.ScriptXWikiServletResponse;
import com.xpn.xwiki.util.Programming;
import com.xpn.xwiki.validation.XWikiValidationStatus;
import com.xpn.xwiki.web.XWikiRequest;
@@ -64,7 +65,8 @@ public Context(XWikiContext context)
*/
public XWikiRequest getRequest()
{
- return new ScriptXWikiServletRequest(getXWikiContext().getRequest(), getContextualAuthorizationManager());
+ XWikiRequest request = getXWikiContext().getRequest();
+ return request != null ? new ScriptXWikiServletRequest(request, getContextualAuthorizationManager()) : request;
}
/**
@@ -75,7 +77,8 @@ public XWikiRequest getRequest()
*/
public XWikiResponse getResponse()
{
- return getXWikiContext().getResponse();
+ XWikiResponse response = getXWikiContext().getResponse();
+ return response != null ? new ScriptXWikiServletResponse(response) : response;
}
/**
diff --git a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/internal/DefaultXWikiContextInitializer.java b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/internal/DefaultXWikiContextInitializer.java
index db9b82b11646..361157e7f240 100644
--- a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/internal/DefaultXWikiContextInitializer.java
+++ b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/internal/DefaultXWikiContextInitializer.java
@@ -19,11 +19,6 @@
*/
package com.xpn.xwiki.internal;
-import javax.inject.Inject;
-import javax.inject.Named;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
import org.slf4j.Logger;
import org.xwiki.component.annotation.Component;
import org.xwiki.component.annotation.InstantiationStrategy;
@@ -33,6 +28,7 @@
import org.xwiki.container.servlet.ServletRequest;
import org.xwiki.container.servlet.ServletResponse;
import org.xwiki.context.ExecutionContext;
+import org.xwiki.jakartabridge.servlet.JakartaServletBridge;
import org.xwiki.model.reference.DocumentReference;
import org.xwiki.model.reference.DocumentReferenceResolver;
import org.xwiki.model.reference.SpaceReference;
@@ -50,6 +46,11 @@
import com.xpn.xwiki.web.XWikiServletRequest;
import com.xpn.xwiki.web.XWikiServletResponse;
+import jakarta.inject.Inject;
+import jakarta.inject.Named;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+
/**
* Default implementation of {@link XWikiContextInitializer}.
*
@@ -103,18 +104,11 @@ public XWikiContext initialize(ExecutionContext econtext) throws XWikiException
XWikiContext xcontext;
- if (!(request instanceof ServletRequest)) {
- if (this.fallbackOnStub) {
- xcontext = this.contextProvider.createStubContext();
- } else {
- throw new XWikiException(XWikiException.MODULE_XWIKI_USER, XWikiException.ERROR_XWIKI_USER_INIT,
- "Unsupported request type [" + request.getClass() + "]");
- }
- } else {
+ if (request instanceof ServletRequest servletRequest) {
try {
- HttpServletRequest httpServletRequest = ((ServletRequest) request).getHttpServletRequest();
+ HttpServletRequest httpServletRequest = servletRequest.getRequest();
HttpServletResponse httpServletReponse =
- ((ServletResponse) this.container.getResponse()).getHttpServletResponse();
+ ((ServletResponse) this.container.getResponse()).getResponse();
xcontext = initializeXWikiContext(httpServletRequest, httpServletReponse);
@@ -134,6 +128,13 @@ public XWikiContext initialize(ExecutionContext econtext) throws XWikiException
"Failed to initialize XWikiContext", e);
}
}
+ } else {
+ if (this.fallbackOnStub) {
+ xcontext = this.contextProvider.createStubContext();
+ } else {
+ throw new XWikiException(XWikiException.MODULE_XWIKI_USER, XWikiException.ERROR_XWIKI_USER_INIT,
+ "Unsupported request type [" + request.getClass() + "]");
+ }
}
// Put the XWikiContext in the ExecutionContext
@@ -147,9 +148,10 @@ public XWikiContext initialize(ExecutionContext econtext) throws XWikiException
private static XWikiContext initializeXWikiContext(HttpServletRequest request, HttpServletResponse response)
throws XWikiException
{
- XWikiServletContext xwikiEngine = new XWikiServletContext(request.getServletContext());
- XWikiServletRequest xwikiRequest = new XWikiServletRequest(request);
- XWikiServletResponse xwikiResponse = new XWikiServletResponse(response);
+ XWikiServletContext xwikiEngine =
+ new XWikiServletContext(JakartaServletBridge.toJavax(request.getServletContext()));
+ XWikiServletRequest xwikiRequest = new XWikiServletRequest(JakartaServletBridge.toJavax(request));
+ XWikiServletResponse xwikiResponse = new XWikiServletResponse(JakartaServletBridge.toJavax(response));
// Create the XWiki context.
XWikiContext context = Utils.prepareContext("", xwikiRequest, xwikiResponse, xwikiEngine);
diff --git a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/internal/XWikiContextProvider.java b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/internal/XWikiContextProvider.java
index ab490f5c17ac..5c472d3f305b 100644
--- a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/internal/XWikiContextProvider.java
+++ b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/internal/XWikiContextProvider.java
@@ -27,6 +27,7 @@
import org.xwiki.container.Container;
import org.xwiki.container.servlet.ServletRequest;
import org.xwiki.container.servlet.ServletResponse;
+import org.xwiki.container.servlet.ServletSession;
import org.xwiki.context.Execution;
import org.xwiki.context.ExecutionContext;
@@ -96,10 +97,11 @@ private XWikiContext createStubContext(ExecutionContext econtext)
xcontext.declareInExecutionContext(econtext);
// Set the stub request and the response
- if (this.container.getRequest() == null) {
+ if (this.container.getRequest() == null && xcontext.getRequest() != null) {
this.container.setRequest(new ServletRequest(xcontext.getRequest()));
+ this.container.setSession(new ServletSession(xcontext.getRequest()));
}
- if (this.container.getResponse() == null) {
+ if (this.container.getResponse() == null && xcontext.getResponse() != null) {
this.container.setResponse(new ServletResponse(xcontext.getResponse()));
}
}
diff --git a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/internal/XWikiStubContextInitializer.java b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/internal/XWikiStubContextInitializer.java
index bfaf303731d8..2111f94f0dab 100644
--- a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/internal/XWikiStubContextInitializer.java
+++ b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/internal/XWikiStubContextInitializer.java
@@ -27,6 +27,7 @@
import org.xwiki.container.Container;
import org.xwiki.container.servlet.ServletRequest;
import org.xwiki.container.servlet.ServletResponse;
+import org.xwiki.container.servlet.ServletSession;
import org.xwiki.context.ExecutionContext;
import org.xwiki.context.ExecutionContextException;
import org.xwiki.context.ExecutionContextInitializer;
@@ -69,10 +70,11 @@ public void initialize(ExecutionContext context) throws ExecutionContextExceptio
stubContext.declareInExecutionContext(context);
// Set the stub request and the response
- if (this.container.getRequest() == null) {
+ if (this.container.getRequest() == null && stubContext.getRequest() != null) {
this.container.setRequest(new ServletRequest(stubContext.getRequest()));
+ this.container.setSession(new ServletSession(stubContext.getRequest()));
}
- if (this.container.getResponse() == null) {
+ if (this.container.getResponse() == null && stubContext.getResponse() != null) {
this.container.setResponse(new ServletResponse(stubContext.getResponse()));
}
}
diff --git a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/internal/context/RequestInitializer.java b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/internal/context/RequestInitializer.java
index 768f3c3f2ff9..b8a41a84907d 100644
--- a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/internal/context/RequestInitializer.java
+++ b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/internal/context/RequestInitializer.java
@@ -36,6 +36,7 @@
import org.xwiki.container.Container;
import org.xwiki.container.servlet.HttpServletUtils;
import org.xwiki.container.servlet.ServletRequest;
+import org.xwiki.container.servlet.ServletSession;
import com.xpn.xwiki.XWikiContext;
import com.xpn.xwiki.web.XWikiRequest;
@@ -181,6 +182,7 @@ private void restoreRequest(URL url, XWikiServletRequestStub stubRequest, XWikiC
{
xcontext.setRequest(stubRequest);
this.container.setRequest(new ServletRequest(stubRequest));
+ this.container.setSession(new ServletSession(stubRequest));
// Update to create the URL factory
XWikiURLFactory urlFactory = xcontext.getURLFactory();
diff --git a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/internal/web/LegacyAction.java b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/internal/web/LegacyAction.java
index 15a09520e8f1..097bf0dcfbc7 100644
--- a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/internal/web/LegacyAction.java
+++ b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/internal/web/LegacyAction.java
@@ -19,13 +19,14 @@
*/
package com.xpn.xwiki.internal.web;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
import org.xwiki.component.annotation.Role;
+import org.xwiki.jakartabridge.servlet.JakartaServletBridge;
import com.xpn.xwiki.web.XWikiAction;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+
/**
* A component role for the old {@link XWikiAction} based entry points.
*
@@ -41,6 +42,23 @@ public interface LegacyAction
* @param servletRequest the request passed to the servlet
* @param servletResponse the response passed to the servlet
* @throws Exception when the action produces an unexptected error
+ * @deprecated use {@link #execute(HttpServletRequest, HttpServletResponse)} instead
+ */
+ @Deprecated(since = "42.0.0")
+ default void execute(javax.servlet.http.HttpServletRequest servletRequest,
+ javax.servlet.http.HttpServletResponse servletResponse) throws Exception
+ {
+ execute(JakartaServletBridge.toJakarta(servletRequest), JakartaServletBridge.toJakarta(servletResponse));
+ }
+
+ /**
+ * @param servletRequest the request passed to the servlet
+ * @param servletResponse the response passed to the servlet
+ * @throws Exception when the action produces an unexptected error
+ * @since 42.0.0
*/
- void execute(HttpServletRequest servletRequest, HttpServletResponse servletResponse) throws Exception;
+ default void execute(HttpServletRequest servletRequest, HttpServletResponse servletResponse) throws Exception
+ {
+ execute(JakartaServletBridge.toJavax(servletRequest), JakartaServletBridge.toJavax(servletResponse));
+ }
}
diff --git a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/render/ScriptHttpSession.java b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/render/ScriptHttpSession.java
index 06547a79c272..d2ec8ad914a4 100644
--- a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/render/ScriptHttpSession.java
+++ b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/render/ScriptHttpSession.java
@@ -37,7 +37,10 @@
* @version $Id$
* @since 12.4RC1
* @since 11.10.5
+ * @deprecated use the container script service instead
*/
+// TODO: uncomment the annotation when XWiki Standard scripts are fully migrated to the new API
+// @Deprecated(since = "42.0.0")
public class ScriptHttpSession implements HttpSession, HttpSessionContext
{
private static final String KEY_SAFESESSION = ScriptHttpSession.class.getName();
diff --git a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/render/ScriptXWikiServletRequest.java b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/render/ScriptXWikiServletRequest.java
index 81e486d2330a..3355ea84e87f 100644
--- a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/render/ScriptXWikiServletRequest.java
+++ b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/render/ScriptXWikiServletRequest.java
@@ -39,7 +39,10 @@
* @since 12.3RC1
* @since 12.2.1
* @since 11.10.5
+ * @deprecated use the {@link org.xwiki.container.script.ContainerScriptService} instead
*/
+// TODO: uncomment the annotation when XWiki Standard scripts are fully migrated to the new API
+// @Deprecated(since = "42.0.0")
public class ScriptXWikiServletRequest extends WrappingXWikiRequest
{
/**
diff --git a/xwiki-platform-core/xwiki-platform-wysiwyg/xwiki-platform-wysiwyg-api/src/main/java/org/xwiki/wysiwyg/filter/XWikiContextInitializationFilter.java b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/render/ScriptXWikiServletResponse.java
similarity index 59%
rename from xwiki-platform-core/xwiki-platform-wysiwyg/xwiki-platform-wysiwyg-api/src/main/java/org/xwiki/wysiwyg/filter/XWikiContextInitializationFilter.java
rename to xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/render/ScriptXWikiServletResponse.java
index d2f4e50aa5c4..062e80edb914 100644
--- a/xwiki-platform-core/xwiki-platform-wysiwyg/xwiki-platform-wysiwyg-api/src/main/java/org/xwiki/wysiwyg/filter/XWikiContextInitializationFilter.java
+++ b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/render/ScriptXWikiServletResponse.java
@@ -17,16 +17,27 @@
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
-package org.xwiki.wysiwyg.filter;
+package com.xpn.xwiki.render;
+
+import com.xpn.xwiki.web.WrappingXWikiResponse;
+import com.xpn.xwiki.web.XWikiResponse;
/**
- * This filter can be used to initialize the XWiki context before processing a request.
+ * A wrapper around {@link XWikiResponse} for scripts.
*
* @version $Id$
- * @deprecated since 13.4RC1, use {@link com.xpn.xwiki.web.XWikiContextInitializationFilter} instead
+ * @since 42.0.0
+ * @deprecated use the {@link org.xwiki.container.script.ContainerScriptService} instead
*/
-@Deprecated
-public class XWikiContextInitializationFilter extends com.xpn.xwiki.web.XWikiContextInitializationFilter
+// TODO: uncomment the annotation when XWiki Standard scripts are fully migrated to the new API
+// @Deprecated(since = "42.0.0")
+public class ScriptXWikiServletResponse extends WrappingXWikiResponse
{
-
+ /**
+ * @param response the wrapped response
+ */
+ public ScriptXWikiServletResponse(XWikiResponse response)
+ {
+ super(response);
+ }
}
diff --git a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/util/Util.java b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/util/Util.java
index 66163c1b3774..ee0c4839b465 100644
--- a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/util/Util.java
+++ b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/util/Util.java
@@ -193,6 +193,7 @@ public static PatternCache getPatterns()
return patterns;
}
+ @Deprecated(since = "42.0.0")
public static Map getObject(XWikiRequest request, String prefix)
{
@SuppressWarnings("unchecked")
diff --git a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/ActionFilter.java b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/ActionFilter.java
index 38b0fe51d9a8..3d5afcc9cc69 100644
--- a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/ActionFilter.java
+++ b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/ActionFilter.java
@@ -24,14 +24,14 @@
import java.util.Objects;
import java.util.stream.Stream;
-import javax.servlet.Filter;
-import javax.servlet.FilterChain;
-import javax.servlet.FilterConfig;
-import javax.servlet.RequestDispatcher;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.Filter;
+import jakarta.servlet.FilterChain;
+import jakarta.servlet.FilterConfig;
+import jakarta.servlet.RequestDispatcher;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.ServletRequest;
+import jakarta.servlet.ServletResponse;
+import jakarta.servlet.http.HttpServletRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -46,8 +46,8 @@
* XHTML form has only one target URL. In previous versions of XWiki this was accomplished using javascript code, with a
* fall-back on a pseudo-dispatcher inside the {@link PreviewAction}, which was on obvious case of bad code design.
*
- * The filter dispatches requests based on the presence of a request parameter starting with {@code action_} followed
- * by the name of the action that should actually process the request. For example, the button that does
+ * The filter dispatches requests based on the presence of a request parameter starting with {@code action_} followed by
+ * the name of the action that should actually process the request. For example, the button that does
* {@code Save and Continue} looks like:
*
*
@@ -56,9 +56,13 @@
*
* As a result, when clicking the button, the request is not sent to the form's target ({@code preview}), but is
* actually forwarded internally to {@code /bin/saveandcontinue/The/Document}.
+ *
+ * While the class is much older, the since annotation was moved to 42.0.0 because it implement a completely
+ * different API from Java point of view.
*
* @version $Id$
* @since 1.8M1
+ * @since 42.0.0
*/
public class ActionFilter implements Filter
{
@@ -83,31 +87,28 @@ public void init(FilterConfig filterConfig) throws ServletException
{
}
- @SuppressWarnings("unchecked")
@Override
- public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
- ServletException
+ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
+ throws IOException, ServletException
{
// Only HTTP requests can be dispatched.
- if (request instanceof HttpServletRequest
- && !Boolean.parseBoolean((String) request.getAttribute(ATTRIBUTE_ACTION_DISPATCHED)))
- {
- HttpServletRequest hrequest = (HttpServletRequest) request;
+ if (request instanceof HttpServletRequest hrequest
+ && !Boolean.parseBoolean((String) request.getAttribute(ATTRIBUTE_ACTION_DISPATCHED))) {
Enumeration parameterNames = hrequest.getParameterNames();
while (parameterNames.hasMoreElements()) {
String parameter = parameterNames.nextElement();
-
+
// If some xactions are passed as parameter, the parameters prefixed with 'action_' are only taken into
// account if they are part of the xaction list. Otherwise, all the parameters prefixed with 'action_'
// are accepted.
String[] xactions = request.getParameterValues("xaction");
- if (parameter.startsWith(ACTION_PREFIX) && (xactions == null || Stream.of(xactions)
- .anyMatch(it -> Objects.equals(parameter, String.format("action_%s", it)))))
- {
+ if (parameter.startsWith(ACTION_PREFIX) && (xactions == null
+ || Stream.of(xactions).anyMatch(it -> Objects.equals(parameter, String.format("action_%s", it))))) {
String targetURL = getTargetURL(hrequest, parameter);
RequestDispatcher dispatcher = hrequest.getRequestDispatcher(targetURL);
if (dispatcher != null) {
- LOGGER.debug("Forwarding request to " + targetURL);
+ LOGGER.debug("Forwarding request to [{}]", targetURL);
+
request.setAttribute(ATTRIBUTE_ACTION_DISPATCHED, "true");
dispatcher.forward(hrequest, response);
// Allow multiple calls to this filter as long as they are not nested.
@@ -136,8 +137,8 @@ public void destroy()
*
* @param request the original request
* @param action the action parameter, starting with {@code action_}
- * @return The rebuilt URL path, with the specified action in place of the original action. Note that unlike
- * the HTTP path, this does not contain the application context part.
+ * @return The rebuilt URL path, with the specified action in place of the original action. Note that unlike the
+ * HTTP path, this does not contain the application context part.
*/
private String getTargetURL(HttpServletRequest request, String action)
{
@@ -163,9 +164,8 @@ private String getTargetURL(HttpServletRequest request, String action)
ConfigurationSource configuration =
Utils.getComponent(ConfigurationSource.class, XWikiCfgConfigurationSource.ROLEHINT);
if ("1".equals(configuration.getProperty("xwiki.virtual.usepath", "1"))) {
- if (servletPath.equals(PATH_SEPARATOR
- + configuration.getProperty("xwiki.virtual.usepath.servletpath", "wiki")))
- {
+ if (servletPath
+ .equals(PATH_SEPARATOR + configuration.getProperty("xwiki.virtual.usepath.servletpath", "wiki"))) {
// Move the wiki name together with the servlet path
servletPath += path.substring(0, index);
index = path.indexOf(PATH_SEPARATOR, index + 1);
diff --git a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/CommentAddAction.java b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/CommentAddAction.java
index 8484241350f6..7b568c19ac37 100644
--- a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/CommentAddAction.java
+++ b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/CommentAddAction.java
@@ -190,6 +190,7 @@ private boolean checkCaptcha(XWikiContext context) throws XWikiException
}
}
+ @Deprecated(since = "42.0.0")
protected void handleTemporaryUploadedFiles(XWikiDocument document, XWikiRequest request) throws XWikiException
{
String[] uploadedFiles = request.getParameterValues("uploadedFiles");
diff --git a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/DownloadAction.java b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/DownloadAction.java
index 7e3a0fd33b07..c668086b9628 100644
--- a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/DownloadAction.java
+++ b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/DownloadAction.java
@@ -296,6 +296,7 @@ private void writeByteRange(final XWikiAttachment attachment, Long start, Long e
* @param context the XWikiContext just in case it is needed to load the attachment content
* @throws XWikiException if something goes wrong
*/
+ @Deprecated(since = "42.0.0")
protected void sendContent(final XWikiAttachment attachment, final XWikiRequest request,
final XWikiResponse response, final XWikiContext context) throws XWikiException
{
diff --git a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/HomePageRedirectServlet.java b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/HomePageRedirectServlet.java
index 624e22640048..2827958ebfb3 100644
--- a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/HomePageRedirectServlet.java
+++ b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/HomePageRedirectServlet.java
@@ -21,15 +21,20 @@
import java.io.IOException;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServlet;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
/**
* A simple action that redirects to the main page of the wiki. This is to allow users to enter a URL like
* http://localhost:8080/xwiki
and be redirected automatically to
* http://localhost:8080/xwiki/bin/view/Main/
.
+ *
+ * While the class is much older, the since annotation was moved to 42.0.0 because it implement a completely different API
+ * from Java point of view.
+ *
+ * @since 42.0.0
*/
public class HomePageRedirectServlet extends HttpServlet
{
@@ -39,7 +44,6 @@ public class HomePageRedirectServlet extends HttpServlet
@Override
public void init() throws ServletException
{
- super.init();
// TODO: we cannot use the XWiki API to determine the right URL, because this is a servlet and the core
// is reachable mainly from Struts. Getting access to the core requires too much duplication, so for the
// moment we're going the easy way: hardcoded values.
diff --git a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/LegacyActionServlet.java b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/LegacyActionServlet.java
index e876b1fd02d3..f0348391cf3a 100644
--- a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/LegacyActionServlet.java
+++ b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/LegacyActionServlet.java
@@ -23,11 +23,6 @@
import java.net.URL;
import java.util.Collections;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
import org.xwiki.component.manager.ComponentLookupException;
import org.xwiki.component.manager.ComponentManager;
import org.xwiki.component.util.DefaultParameterizedType;
@@ -39,12 +34,20 @@
import com.xpn.xwiki.internal.web.LegacyAction;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServlet;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+
/**
* Executed the right right action depending on the XWiki configuration (for example leading to view action by default
* if enabled, etc.).
+ *
+ * While the class is much older, the since annotation was moved to 42.0.0 because it implement a completely different
+ * API from Java point of view.
*
* @version $Id$
- * @since 13.0
+ * @since 42.0.0
*/
public class LegacyActionServlet extends HttpServlet
{
diff --git a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/SkinAction.java b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/SkinAction.java
index dd694284bd29..d1f8381eb52c 100644
--- a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/SkinAction.java
+++ b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/SkinAction.java
@@ -530,6 +530,7 @@ protected void setupHeaders(XWikiResponse response, String mimetype, Date lastCh
* @since 11.3.6
* @since 10.11.10
*/
+ @Deprecated(since = "42.0.0")
protected void setupHeaders(XWikiResponse response, String mimetype, Date lastChanged, long length)
{
if (!StringUtils.isBlank(mimetype)) {
diff --git a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/Utils.java b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/Utils.java
index 88a4f843d766..d44c369a6de9 100644
--- a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/Utils.java
+++ b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/Utils.java
@@ -242,6 +242,7 @@ public static void parseTemplate(String template, boolean write, XWikiContext co
* @param defaultRedirect the default value to use if no {@code xredirect} parameter is present
* @return the destination URL, as specified in the {@code xredirect} parameter, or the specified default URL
*/
+ @Deprecated(since = "42.0.0")
public static String getRedirect(XWikiRequest request, String defaultRedirect)
{
String redirect = request.getParameter("xredirect");
@@ -327,6 +328,7 @@ public static String getRedirect(String action, XWikiContext context)
* @return the name of the requested template, as specified in the {@code xpage} parameter, or the specified default
* template
*/
+ @Deprecated(since = "42.0.0")
public static String getPage(XWikiRequest request, String defaultpage)
{
String page = request.getParameter("xpage");
@@ -389,6 +391,7 @@ public static byte[] getContent(List filelist, String name) throws XWi
return null;
}
+ @Deprecated(since = "42.0.0")
public static XWikiContext prepareContext(String action, XWikiRequest request, XWikiResponse response,
XWikiEngineContext engine_context) throws XWikiException
{
diff --git a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/WrappingXWikiRequest.java b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/WrappingXWikiRequest.java
index 1a50d89ff66c..998dccc5f01c 100644
--- a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/WrappingXWikiRequest.java
+++ b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/WrappingXWikiRequest.java
@@ -19,32 +19,11 @@
*/
package com.xpn.xwiki.web;
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.security.Principal;
-import java.util.Collection;
-import java.util.Enumeration;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Optional;
-
-import javax.servlet.AsyncContext;
-import javax.servlet.DispatcherType;
-import javax.servlet.RequestDispatcher;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.ServletInputStream;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpSession;
-import javax.servlet.http.HttpUpgradeHandler;
-import javax.servlet.http.Part;
+import javax.servlet.http.HttpServletRequestWrapper;
-import org.xwiki.user.UserReference;
+import org.xwiki.container.Container;
/**
* A wrapper around {@link XWikiRequest}.
@@ -52,8 +31,11 @@
* @version $Id$
* @since 12.4RC1
* @since 11.10.5
+ * @deprecated use the {@link Container} API instead
*/
-public class WrappingXWikiRequest implements XWikiRequest
+// TODO: uncomment the annotation when XWiki Standard scripts are fully migrated to the new API
+// @Deprecated(since = "42.0.0")
+public class WrappingXWikiRequest extends HttpServletRequestWrapper implements XWikiRequest
{
protected final XWikiRequest request;
@@ -62,13 +44,9 @@ public class WrappingXWikiRequest implements XWikiRequest
*/
public WrappingXWikiRequest(XWikiRequest request)
{
- this.request = request;
- }
+ super(request);
- @Override
- public ServletContext getServletContext()
- {
- return this.request.getServletContext();
+ this.request = request;
}
@Override
@@ -77,415 +55,6 @@ public HttpServletRequest getHttpServletRequest()
return this.request.getHttpServletRequest();
}
- @Override
- public HttpSession getSession()
- {
- return this.request.getSession();
- }
-
- @Override
- public HttpSession getSession(boolean create)
- {
- return this.request.getSession(create);
- }
-
- @Override
- public String getAuthType()
- {
- return this.request.getAuthType();
- }
-
- @Override
- public Cookie[] getCookies()
- {
- return this.request.getCookies();
- }
-
- @Override
- public long getDateHeader(String name)
- {
- return this.request.getDateHeader(name);
- }
-
- @Override
- public String getHeader(String name)
- {
- return this.request.getHeader(name);
- }
-
- @Override
- public Enumeration getHeaders(String name)
- {
- return this.request.getHeaders(name);
- }
-
- @Override
- public Enumeration getHeaderNames()
- {
- return this.request.getHeaderNames();
- }
-
- @Override
- public int getIntHeader(String name)
- {
- return this.request.getIntHeader(name);
- }
-
- @Override
- public String getMethod()
- {
- return this.request.getMethod();
- }
-
- @Override
- public String getPathInfo()
- {
- return this.request.getPathInfo();
- }
-
- @Override
- public String getPathTranslated()
- {
- return this.request.getPathTranslated();
- }
-
- @Override
- public String getContextPath()
- {
- return this.request.getContextPath();
- }
-
- @Override
- public String getQueryString()
- {
- return this.request.getQueryString();
- }
-
- @Override
- public String getRemoteUser()
- {
- return this.request.getRemoteUser();
- }
-
- @Override
- public boolean isUserInRole(String role)
- {
- return this.request.isUserInRole(role);
- }
-
- @Override
- public Principal getUserPrincipal()
- {
- return this.request.getUserPrincipal();
- }
-
- @Override
- public String getRequestedSessionId()
- {
- return this.request.getRequestedSessionId();
- }
-
- @Override
- public String getRequestURI()
- {
- return this.request.getRequestURI();
- }
-
- @Override
- public StringBuffer getRequestURL()
- {
- return this.request.getRequestURL();
- }
-
- @Override
- public String getServletPath()
- {
- return this.request.getServletPath();
- }
-
- @Override
- public String changeSessionId()
- {
- return this.request.changeSessionId();
- }
-
- @Override
- public boolean isRequestedSessionIdValid()
- {
- return this.request.isRequestedSessionIdValid();
- }
-
- @Override
- public boolean isRequestedSessionIdFromCookie()
- {
- return this.request.isRequestedSessionIdFromCookie();
- }
-
- @Override
- public boolean isRequestedSessionIdFromURL()
- {
- return this.request.isRequestedSessionIdFromURL();
- }
-
- @Override
- public boolean isRequestedSessionIdFromUrl()
- {
- return this.request.isRequestedSessionIdFromUrl();
- }
-
- @Override
- public boolean authenticate(HttpServletResponse response) throws IOException, ServletException
- {
- return this.request.authenticate(response);
- }
-
- @Override
- public void login(String username, String password) throws ServletException
- {
- this.request.login(username, password);
- }
-
- @Override
- public void logout() throws ServletException
- {
- this.request.logout();
- }
-
- @Override
- public Collection getParts() throws IOException, ServletException
- {
- return this.request.getParts();
- }
-
- @Override
- public Part getPart(String name) throws IOException, ServletException
- {
- return this.request.getPart(name);
- }
-
- @Override
- public T upgrade(Class handlerClass) throws IOException, ServletException
- {
- return this.request.upgrade(handlerClass);
- }
-
- @Override
- public Object getAttribute(String name)
- {
- return this.request.getAttribute(name);
- }
-
- @Override
- public Enumeration getAttributeNames()
- {
- return this.request.getAttributeNames();
- }
-
- @Override
- public String getCharacterEncoding()
- {
- return this.request.getCharacterEncoding();
- }
-
- @Override
- public void setCharacterEncoding(String env) throws UnsupportedEncodingException
- {
- this.request.setCharacterEncoding(env);
- }
-
- @Override
- public int getContentLength()
- {
- return this.request.getContentLength();
- }
-
- @Override
- public long getContentLengthLong()
- {
- return this.request.getContentLengthLong();
- }
-
- @Override
- public String getContentType()
- {
- return this.request.getContentType();
- }
-
- @Override
- public ServletInputStream getInputStream() throws IOException
- {
- return this.request.getInputStream();
- }
-
- @Override
- public String getParameter(String name)
- {
- return this.request.getParameter(name);
- }
-
- @Override
- public Enumeration getParameterNames()
- {
- return this.request.getParameterNames();
- }
-
- @Override
- public String[] getParameterValues(String name)
- {
- return this.request.getParameterValues(name);
- }
-
- @Override
- public Map getParameterMap()
- {
- return this.request.getParameterMap();
- }
-
- @Override
- public String getProtocol()
- {
- return this.request.getProtocol();
- }
-
- @Override
- public String getScheme()
- {
- return this.request.getScheme();
- }
-
- @Override
- public String getServerName()
- {
- return this.request.getServerName();
- }
-
- @Override
- public int getServerPort()
- {
- return this.request.getServerPort();
- }
-
- @Override
- public BufferedReader getReader() throws IOException
- {
- return this.request.getReader();
- }
-
- @Override
- public String getRemoteAddr()
- {
- return this.request.getRemoteAddr();
- }
-
- @Override
- public String getRemoteHost()
- {
- return this.request.getRemoteHost();
- }
-
- @Override
- public void setAttribute(String name, Object o)
- {
- this.request.setAttribute(name, o);
- }
-
- @Override
- public void removeAttribute(String name)
- {
- this.request.removeAttribute(name);
- }
-
- @Override
- public Locale getLocale()
- {
- return this.request.getLocale();
- }
-
- @Override
- public Enumeration getLocales()
- {
- return this.request.getLocales();
- }
-
- @Override
- public boolean isSecure()
- {
- return this.request.isSecure();
- }
-
- @Override
- public RequestDispatcher getRequestDispatcher(String path)
- {
- return this.request.getRequestDispatcher(path);
- }
-
- @Override
- public String getRealPath(String path)
- {
- return this.request.getRealPath(path);
- }
-
- @Override
- public int getRemotePort()
- {
- return this.request.getRemotePort();
- }
-
- @Override
- public String getLocalName()
- {
- return this.request.getLocalName();
- }
-
- @Override
- public String getLocalAddr()
- {
- return this.request.getLocalAddr();
- }
-
- @Override
- public int getLocalPort()
- {
- return this.request.getLocalPort();
- }
-
- @Override
- public AsyncContext startAsync() throws IllegalStateException
- {
- return this.request.startAsync();
- }
-
- @Override
- public AsyncContext startAsync(ServletRequest servletRequest, ServletResponse servletResponse)
- throws IllegalStateException
- {
- return this.request.startAsync(servletRequest, servletResponse);
- }
-
- @Override
- public boolean isAsyncStarted()
- {
- return this.request.isAsyncStarted();
- }
-
- @Override
- public boolean isAsyncSupported()
- {
- return this.request.isAsyncSupported();
- }
-
- @Override
- public AsyncContext getAsyncContext()
- {
- return this.request.getAsyncContext();
- }
-
- @Override
- public DispatcherType getDispatcherType()
- {
- return this.request.getDispatcherType();
- }
-
@Override
public String get(String name)
{
@@ -497,10 +66,4 @@ public Cookie getCookie(String cookieName)
{
return this.request.getCookie(cookieName);
}
-
- @Override
- public Optional getEffectiveAuthor()
- {
- return this.request.getEffectiveAuthor();
- }
}
diff --git a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/WrappingXWikiResponse.java b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/WrappingXWikiResponse.java
new file mode 100644
index 000000000000..2d7f6db215ff
--- /dev/null
+++ b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/WrappingXWikiResponse.java
@@ -0,0 +1,61 @@
+/*
+ * See the NOTICE file distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package com.xpn.xwiki.web;
+
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpServletResponseWrapper;
+
+import org.xwiki.container.Container;
+
+/**
+ * A wrapper around {@link XWikiResponse}.
+ *
+ * @version $Id$
+ * @since 42.0.0
+ * @deprecated use the {@link Container} API instead
+ */
+// TODO: uncomment the annotation when XWiki Standard scripts are fully migrated to the new API
+// @Deprecated(since = "42.0.0")
+public class WrappingXWikiResponse extends HttpServletResponseWrapper implements XWikiResponse
+{
+ protected final XWikiResponse response;
+
+ /**
+ * @param response the wrapped response
+ */
+ public WrappingXWikiResponse(XWikiResponse response)
+ {
+ super(response);
+
+ this.response = response;
+ }
+
+ @Override
+ public HttpServletResponse getHttpServletResponse()
+ {
+ return this.response.getHttpServletResponse();
+ }
+
+ @Override
+ public void removeCookie(String cookieName, XWikiRequest request)
+ {
+ this.response.removeCookie(cookieName, request);
+ }
+}
diff --git a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/XWikiAction.java b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/XWikiAction.java
index 4797c1f76b83..7291d1bc9704 100644
--- a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/XWikiAction.java
+++ b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/XWikiAction.java
@@ -33,8 +33,6 @@
import javax.inject.Named;
import javax.script.ScriptContext;
import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.exception.ExceptionUtils;
@@ -56,6 +54,7 @@
import org.xwiki.context.ExecutionContext;
import org.xwiki.csrf.CSRFToken;
import org.xwiki.internal.web.DocExistValidator;
+import org.xwiki.jakartabridge.servlet.JakartaServletBridge;
import org.xwiki.job.event.status.JobProgressManager;
import org.xwiki.job.internal.DefaultJobProgress;
import org.xwiki.localization.ContextualLocalizationManager;
@@ -106,6 +105,9 @@
import com.xpn.xwiki.plugin.fileupload.FileUploadPlugin;
import com.xpn.xwiki.redirection.RedirectionFilter;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+
/**
*
* Root class for most XWiki actions. It provides a common framework that allows actions to execute just the specific
@@ -333,7 +335,8 @@ public void execute(HttpServletRequest servletRequest, HttpServletResponse servl
// Initialize the XWiki Context which is the main object used to pass information across
// classes/methods. It's also wrapping the request, response, and all container objects
// in general.
- context = initializeXWikiContext(servletRequest, servletResponse);
+ context =
+ initializeXWikiContext(JakartaServletBridge.toJavax(servletRequest), JakartaServletBridge.toJavax(servletResponse));
// From this line forward all information can be found in the XWiki Context.
execute(context);
@@ -831,8 +834,9 @@ private void renderInit(XWikiContext xcontext) throws Exception
xcontext.setFinished(true);
}
- protected XWikiContext initializeXWikiContext(HttpServletRequest servletRequest,
- HttpServletResponse servletResponse)
+ @Deprecated(since = "42.0.0")
+ protected XWikiContext initializeXWikiContext(javax.servlet.http.HttpServletRequest servletRequest,
+ javax.servlet.http.HttpServletResponse servletResponse)
throws XWikiException, ServletException, InstantiationException, IllegalAccessException
{
XWikiForm form;
@@ -854,8 +858,9 @@ protected String getName()
return this.componentDescriptor.getRoleHint();
}
- protected XWikiContext initializeXWikiContext(HttpServletRequest servletRequest,
- HttpServletResponse servletResponse, XWikiForm form) throws XWikiException, ServletException
+ @Deprecated(since = "42.0.0")
+ protected XWikiContext initializeXWikiContext(javax.servlet.http.HttpServletRequest servletRequest,
+ javax.servlet.http.HttpServletResponse servletResponse, XWikiForm form) throws XWikiException, ServletException
{
String action = getName();
@@ -910,8 +915,8 @@ public String getRealPath(String path)
{
Request request = this.container.getRequest();
- if (request instanceof ServletRequest) {
- return ((ServletRequest) request).getHttpServletRequest().getServletContext().getRealPath(path);
+ if (request instanceof ServletRequest servletRequest) {
+ return servletRequest.getRequest().getServletContext().getRealPath(path);
}
return null;
diff --git a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/XWikiContextInitializationFilter.java b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/XWikiContextInitializationFilter.java
index 374ce5c727d8..ca0ff5a1a0e4 100644
--- a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/XWikiContextInitializationFilter.java
+++ b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/XWikiContextInitializationFilter.java
@@ -22,19 +22,11 @@
import java.io.IOException;
import java.lang.reflect.Type;
-import javax.servlet.Filter;
-import javax.servlet.FilterChain;
-import javax.servlet.FilterConfig;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
import org.xwiki.container.Container;
import org.xwiki.container.servlet.ServletContainerException;
import org.xwiki.container.servlet.ServletContainerInitializer;
import org.xwiki.context.Execution;
+import org.xwiki.jakartabridge.servlet.JakartaServletBridge;
import org.xwiki.model.reference.DocumentReference;
import com.xpn.xwiki.XWiki;
@@ -43,30 +35,31 @@
import com.xpn.xwiki.user.api.XWikiRightService;
import com.xpn.xwiki.user.api.XWikiUser;
+import jakarta.servlet.Filter;
+import jakarta.servlet.FilterChain;
+import jakarta.servlet.FilterConfig;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.ServletRequest;
+import jakarta.servlet.ServletResponse;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+
/**
* This filter can be used to initialize the XWiki context before processing a request.
+ *
+ * While the class is much older, the since annotation was moved to 42.0.0 because it implement a completely different
+ * API from Java point of view.
*
* @version $Id$
- * @since 13.4RC1
+ * @since 42.0.0
*/
public class XWikiContextInitializationFilter implements Filter
{
- /**
- * The filter configuration object.
- */
- private FilterConfig filterConfig;
-
/**
* XWiki context mode.
*/
private int mode;
- @Override
- public void destroy()
- {
- this.filterConfig = null;
- }
-
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException
@@ -87,8 +80,6 @@ public void doFilter(ServletRequest request, ServletResponse response, FilterCha
@Override
public void init(FilterConfig filterConfig) throws ServletException
{
- this.filterConfig = filterConfig;
-
try {
this.mode = Integer.parseInt(filterConfig.getInitParameter("mode"));
} catch (Exception e) {
@@ -102,15 +93,34 @@ public void init(FilterConfig filterConfig) throws ServletException
* @param request the request being processed
* @param response the response
* @throws ServletException if the initialization fails
+ * @deprecated use {@link #initializeXWikiContext(ServletRequest, ServletResponse)} instead
+ */
+ @Deprecated(since = "42.0.0")
+ protected void initializeXWikiContext(javax.servlet.ServletRequest request, javax.servlet.ServletResponse response)
+ throws ServletException
+ {
+ initializeXWikiContext(JakartaServletBridge.toJakarta(request), JakartaServletBridge.toJakarta(response));
+ }
+
+ /**
+ * Initializes the XWiki context.
+ *
+ * @param request the request being processed
+ * @param response the response
+ * @throws ServletException if the initialization fails
+ * @since 42.0.0
*/
protected void initializeXWikiContext(ServletRequest request, ServletResponse response) throws ServletException
{
try {
// Not all request types specify an action (e.g. GWT-RPC) so we default to the empty string.
String action = "";
- XWikiServletContext xwikiEngine = new XWikiServletContext(this.filterConfig.getServletContext());
- XWikiServletRequest xwikiRequest = new XWikiServletRequest((HttpServletRequest) request);
- XWikiServletResponse xwikiResponse = new XWikiServletResponse((HttpServletResponse) response);
+ XWikiServletContext xwikiEngine =
+ new XWikiServletContext(JakartaServletBridge.toJavax(request.getServletContext()));
+ XWikiServletRequest xwikiRequest =
+ new XWikiServletRequest(JakartaServletBridge.toJavax((HttpServletRequest) request));
+ XWikiServletResponse xwikiResponse =
+ new XWikiServletResponse(JakartaServletBridge.toJavax((HttpServletResponse) response));
// Create the XWiki context.
XWikiContext context = Utils.prepareContext(action, xwikiRequest, xwikiResponse, xwikiEngine);
diff --git a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/XWikiForm.java b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/XWikiForm.java
index d141b0518276..5bd97cdf2f83 100644
--- a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/XWikiForm.java
+++ b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/XWikiForm.java
@@ -56,12 +56,14 @@ public void reset(HttpServletRequest request)
* @param request The servlet request we are processing
* @since 13.0
*/
+ @Deprecated(since = "42.0.0")
public void reset(XWikiRequest request)
{
this.request = request;
readRequest();
}
+ @Deprecated(since = "42.0.0")
public XWikiRequest getRequest()
{
return this.request;
diff --git a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/XWikiRequest.java b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/XWikiRequest.java
index a39e3612217f..5a9adad8dd1b 100644
--- a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/XWikiRequest.java
+++ b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/XWikiRequest.java
@@ -24,9 +24,15 @@
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
+import org.xwiki.container.Request;
import org.xwiki.stability.Unstable;
import org.xwiki.user.UserReference;
+/**
+ * @version $Id$
+ * @deprecated use the {@link org.xwiki.container.Container} API instead
+ */
+@Deprecated(since = "42.0.0")
public interface XWikiRequest extends HttpServletRequest
{
String get(String name);
@@ -47,6 +53,6 @@ public interface XWikiRequest extends HttpServletRequest
@Unstable
default Optional getEffectiveAuthor()
{
- return Optional.empty();
+ return Optional.ofNullable((UserReference) getAttribute(Request.ATTRIBUTE_EFFECTIVE_AUTHOR));
}
}
diff --git a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/XWikiResponse.java b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/XWikiResponse.java
index b3de82729421..55f314b054da 100644
--- a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/XWikiResponse.java
+++ b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/XWikiResponse.java
@@ -21,6 +21,11 @@
import javax.servlet.http.HttpServletResponse;
+/**
+ * @version $Id$
+ * @deprecated use {@link org.xwiki.container.Container} API instead
+ */
+@Deprecated(since = "42.0.0")
public interface XWikiResponse extends HttpServletResponse
{
/**
diff --git a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/XWikiServletContext.java b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/XWikiServletContext.java
index 98ecd06b161a..f738f6d8252a 100644
--- a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/XWikiServletContext.java
+++ b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/XWikiServletContext.java
@@ -25,6 +25,13 @@
import javax.servlet.ServletContext;
+/**
+ * Servlet based implementation of {@link XWikiEngineContext}.
+ *
+ * @version $Id$
+ * @deprecated use the {@link org.xwiki.container.Container} API instead
+ */
+@Deprecated(since = "42.0.0")
public class XWikiServletContext implements XWikiEngineContext
{
private ServletContext scontext;
diff --git a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/XWikiServletRequest.java b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/XWikiServletRequest.java
index f77e5ec2c7c2..163888d6f45b 100644
--- a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/XWikiServletRequest.java
+++ b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/XWikiServletRequest.java
@@ -19,13 +19,12 @@
*/
package com.xpn.xwiki.web;
-import java.util.Optional;
-
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
-import org.xwiki.user.UserReference;
+import org.xwiki.container.Request;
+import org.xwiki.jakartabridge.JavaxToJakartaWrapper;
import com.xpn.xwiki.util.Util;
@@ -34,9 +33,11 @@
*
* @version $Id$
*/
-public class XWikiServletRequest extends HttpServletRequestWrapper implements XWikiRequest
+@Deprecated(since = "42.0.0")
+public class XWikiServletRequest extends HttpServletRequestWrapper
+ implements XWikiRequest, JavaxToJakartaWrapper
{
- public static final String ATTRIBUTE_EFFECTIVE_AUTHOR = XWikiRequest.class.getName() + "#effectiveAuthor";
+ public static final String ATTRIBUTE_EFFECTIVE_AUTHOR = Request.ATTRIBUTE_EFFECTIVE_AUTHOR;
public XWikiServletRequest(HttpServletRequest request)
{
@@ -44,6 +45,18 @@ public XWikiServletRequest(HttpServletRequest request)
super(request != null ? request : new XWikiServletRequestStub());
}
+ // JavaxToJakartaWrapper
+
+ @Override
+ public jakarta.servlet.http.HttpServletRequest getJakarta()
+ {
+ if (getRequest() instanceof JavaxToJakartaWrapper wrapper) {
+ return (jakarta.servlet.http.HttpServletRequest) wrapper.getJakarta();
+ }
+
+ return null;
+ }
+
// XWikiRequest
@Override
@@ -66,12 +79,6 @@ public Cookie getCookie(String cookieName)
// HttpServletRequest
- @Override
- public StringBuffer getRequestURL()
- {
- return getHttpServletRequest().getRequestURL();
- }
-
@Override
public String getParameter(String s)
{
@@ -107,10 +114,4 @@ public String getRemoteHost()
return request.getRemoteHost();
}
-
- @Override
- public Optional getEffectiveAuthor()
- {
- return Optional.ofNullable((UserReference) getAttribute(ATTRIBUTE_EFFECTIVE_AUTHOR));
- }
}
diff --git a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/XWikiServletRequestStub.java b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/XWikiServletRequestStub.java
index a1efa9b0d9cf..d947af828959 100644
--- a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/XWikiServletRequestStub.java
+++ b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/XWikiServletRequestStub.java
@@ -19,52 +19,33 @@
*/
package com.xpn.xwiki.web;
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
import java.net.URL;
-import java.security.Principal;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.LinkedHashMap;
import java.util.List;
-import java.util.Locale;
import java.util.Map;
-import java.util.Objects;
-import java.util.Optional;
-import java.util.TreeMap;
-import java.util.Vector;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-
-import javax.servlet.AsyncContext;
-import javax.servlet.DispatcherType;
-import javax.servlet.RequestDispatcher;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.ServletInputStream;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
+
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpSession;
-import javax.servlet.http.HttpUpgradeHandler;
-import javax.servlet.http.Part;
-import org.apache.commons.lang3.ArrayUtils;
-import org.xwiki.user.UserReference;
+import org.xwiki.container.servlet.HttpServletRequestStub;
+import org.xwiki.jakartabridge.JavaxToJakartaWrapper;
+import org.xwiki.jakartabridge.servlet.JakartaServletBridge;
+import org.xwiki.stability.Unstable;
+
+import com.xpn.xwiki.util.Util;
/**
* This stub is intended to simulate a servlet request in a daemon context, in order to be able to create a custom XWiki
* context. This trick is used in to give a daemon thread access to the XWiki api.
*
* @version $Id$
+ * @deprecated use {@link HttpServletRequestStub} instead
*/
-public class XWikiServletRequestStub implements XWikiRequest
+// TODO: uncomment the annotation when XWiki Standard scripts are fully migrated to the new API
+// @Deprecated(since = "42.0.0")
+public class XWikiServletRequestStub extends HttpServletRequestWrapper
+ implements XWikiRequest, JavaxToJakartaWrapper
{
/**
* Builder for {@link XWikiServletRequestStub}.
@@ -175,67 +156,40 @@ public XWikiServletRequestStub build()
}
}
- private boolean secure;
-
- private String scheme;
-
- private String protocol;
-
- private String queryString;
-
- private String contextPath;
-
- private String servletPath;
-
- private String serverName;
-
- private int serverPort;
-
- private Map> headers;
-
- private Map parameters;
-
- private Cookie[] cookies;
-
- private List parts = new ArrayList<>();
-
- private String requestURI;
-
- private StringBuffer requestURL;
-
- private String remoteAddr;
-
- private boolean daemon = true;
-
- private HttpSession httpSession;
-
public XWikiServletRequestStub()
{
+ this(new HttpServletRequestStub());
}
- protected XWikiServletRequestStub(Builder builder)
+ /**
+ * @param request the request to copy
+ * @since 10.7RC1
+ */
+ public XWikiServletRequestStub(XWikiRequest request)
{
- if (builder.requestURL != null) {
- this.protocol = builder.requestURL.getProtocol();
- this.scheme = builder.requestURL.getProtocol();
-
- this.serverName = builder.requestURL.getHost();
- this.serverPort = builder.requestURL.getPort();
-
- this.secure = this.protocol.equalsIgnoreCase("https");
+ this(new HttpServletRequestStub(JakartaServletBridge.toJakarta(request)));
- this.requestURI = builder.requestURL.getPath();
- this.requestURL = new StringBuffer(builder.requestURL.toString());
-
- setHost(builder.requestURL.getHost());
+ if (request instanceof XWikiServletRequestStub requestStub) {
+ setDaemon(requestStub.isDaemon());
}
+ }
- this.contextPath = builder.contextPath;
- this.parameters = clone(builder.requestParameters);
- this.headers = cloneHeaders(builder.headers);
- this.cookies = clone(builder.cookies);
- this.remoteAddr = builder.remoteAddr;
- this.httpSession = builder.httpSession;
+ /**
+ * @param jakarta the request wrap
+ * @since 42.0.0
+ */
+ @Unstable
+ public XWikiServletRequestStub(HttpServletRequestStub jakarta)
+ {
+ super(JakartaServletBridge.toJavax(jakarta));
+ }
+
+ protected XWikiServletRequestStub(Builder builder)
+ {
+ this(new HttpServletRequestStub.Builder().setRequestURL(builder.requestURL).setContextPath(builder.contextPath)
+ .setRequestParameters(builder.requestParameters).setHeaders(builder.headers)
+ .setRemoteAddr(builder.remoteAddr).setCookies(JakartaServletBridge.toJakarta(builder.cookies))
+ .setHttpSession(JakartaServletBridge.toJakarta(builder.httpSession)).build());
}
/**
@@ -272,96 +226,19 @@ public XWikiServletRequestStub(URL requestURL, String contextPath, Map Map.entry(headerName, Collections.list(request.getHeaders(headerName))))
- .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (left, right) -> right,
- () -> new TreeMap<>(String.CASE_INSENSITIVE_ORDER)));
- }
-
- this.parameters = clone(request.getParameterMap());
- this.cookies = clone(request.getCookies());
- this.remoteAddr = request.getRemoteAddr();
-
- if (request instanceof XWikiServletRequestStub) {
- this.daemon = ((XWikiServletRequestStub) request).daemon;
- this.parts = new ArrayList<>(((XWikiServletRequestStub) request).parts);
- }
- }
-
- private Map clone(Map map)
- {
- Map clone;
- if (map != null) {
- clone = new LinkedHashMap<>(map.size());
- for (Map.Entry entry : map.entrySet()) {
- clone.put(entry.getKey(), entry.getValue().clone());
- }
- } else {
- clone = null;
- }
-
- return clone;
- }
-
- private Map> cloneHeaders(Map> headers)
- {
- if (headers == null) {
- return null;
- }
-
- return headers.entrySet().stream().filter(entry -> entry.getValue() != null && !entry.getValue().isEmpty())
- .map(entry -> Map.entry(entry.getKey(), entry.getValue().stream().collect(Collectors.toList())))
- .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (left, right) -> right,
- () -> new TreeMap<>(String.CASE_INSENSITIVE_ORDER)));
- }
-
- private Cookie[] clone(Cookie[] cookies)
- {
- if (cookies != null) {
- return Stream.of(cookies).map(Cookie::clone).toArray(Cookie[]::new);
- } else {
- return null;
- }
- }
-
public void setContextPath(String contextPath)
{
- this.contextPath = contextPath;
+ getJakarta().setContextPath(contextPath);
}
public void setHost(String host)
{
- if (this.headers == null) {
- this.headers = new LinkedHashMap<>();
- }
-
- this.headers.put("x-forwarded-host", new Vector(Arrays.asList(host)));
+ getJakarta().setHost(host);
}
public void setScheme(String scheme)
{
- this.scheme = scheme;
+ getJakarta().setScheme(scheme);
}
/**
@@ -370,7 +247,7 @@ public void setScheme(String scheme)
*/
public void setrequestURL(StringBuffer requestURL)
{
- this.requestURL = requestURL;
+ getJakarta().setrequestURL(requestURL);
}
/**
@@ -378,7 +255,7 @@ public void setrequestURL(StringBuffer requestURL)
*/
public void setRequestURI(String requestURI)
{
- this.requestURI = requestURI;
+ getJakarta().setRequestURI(requestURI);
}
/**
@@ -387,21 +264,7 @@ public void setRequestURI(String requestURI)
*/
public void setServerName(String serverName)
{
- this.serverName = serverName;
- }
-
- @Override
- public String getHeader(String headerName)
- {
- if (this.headers != null) {
- List values = this.headers.get(headerName);
-
- if (values != null && !values.isEmpty()) {
- return values.get(0);
- }
- }
-
- return null;
+ getJakarta().setServerName(serverName);
}
/**
@@ -409,176 +272,7 @@ public String getHeader(String headerName)
*/
public void put(String key, String value)
{
- if (this.parameters == null) {
- this.parameters = new LinkedHashMap<>();
- }
-
- String[] values = this.parameters.get(key);
- if (values == null) {
- values = new String[] {value};
- } else {
- values = ArrayUtils.add(values, value);
- }
- this.parameters.put(key, values);
- }
-
- @Override
- public String get(String name)
- {
- return getParameter(name);
- }
-
- @Override
- public HttpServletRequest getHttpServletRequest()
- {
- return this;
- }
-
- @Override
- public Cookie getCookie(String cookieName)
- {
- if (this.cookies != null) {
- return Stream.of(this.cookies).filter(cookie -> Objects.equals(cookieName, cookie.getName())).findFirst()
- .orElse(null);
- } else {
- return null;
- }
- }
-
- @Override
- public String getAuthType()
- {
- return null;
- }
-
- @Override
- public Cookie[] getCookies()
- {
- return clone(this.cookies);
- }
-
- @Override
- public long getDateHeader(String s)
- {
- return 0;
- }
-
- @Override
- public Enumeration getHeaders(String headerName)
- {
- if (this.headers != null) {
- List values = this.headers.get(headerName);
-
- if (values != null) {
- return Collections.enumeration(values);
- }
- }
-
- return Collections.emptyEnumeration();
- }
-
- @Override
- public Enumeration getHeaderNames()
- {
- return this.headers != null ? Collections.enumeration(this.headers.keySet()) : Collections.emptyEnumeration();
- }
-
- @Override
- public int getIntHeader(String s)
- {
- String header = getHeader(s);
-
- return header != null ? Integer.parseInt(header) : -1;
- }
-
- @Override
- public String getMethod()
- {
- return null;
- }
-
- @Override
- public String getPathInfo()
- {
- return null;
- }
-
- @Override
- public String getPathTranslated()
- {
- return null;
- }
-
- @Override
- public String getContextPath()
- {
- return this.contextPath;
- }
-
- @Override
- public String getQueryString()
- {
- return this.queryString;
- }
-
- @Override
- public String getRemoteUser()
- {
- return null;
- }
-
- @Override
- public boolean isUserInRole(String s)
- {
- return false;
- }
-
- @Override
- public Principal getUserPrincipal()
- {
- return null;
- }
-
- @Override
- public String getRequestedSessionId()
- {
- return null;
- }
-
- @Override
- public String getRequestURI()
- {
- return this.requestURI;
- }
-
- @Override
- public StringBuffer getRequestURL()
- {
- return this.requestURL == null ? new StringBuffer() : this.requestURL;
- }
-
- @Override
- public String getServletPath()
- {
- return this.servletPath;
- }
-
- @Override
- public HttpSession getSession(boolean b)
- {
- return this.httpSession;
- }
-
- @Override
- public String changeSessionId()
- {
- return null;
- }
-
- @Override
- public HttpSession getSession()
- {
- return this.httpSession;
+ getJakarta().put(key, value);
}
/**
@@ -589,338 +283,59 @@ public HttpSession getSession()
*/
public void setSession(HttpSession httpSession)
{
- this.httpSession = httpSession;
- }
-
- @Override
- public boolean isRequestedSessionIdValid()
- {
- return false;
- }
-
- @Override
- public boolean isRequestedSessionIdFromCookie()
- {
- return false;
- }
-
- @Override
- public boolean isRequestedSessionIdFromURL()
- {
- return false;
+ getJakarta().setSession(JakartaServletBridge.toJakarta(httpSession));
}
/**
- * @deprecated
+ * @return true if the request is intended to be used in a long standing daemon thread (mails, etc.) and should not
+ * be taken into account when generating a URL
+ * @since 10.11RC1
*/
- @Override
- @Deprecated
- public boolean isRequestedSessionIdFromUrl()
- {
- return false;
- }
-
- @Override
- public Object getAttribute(String s)
- {
- return null;
- }
-
- @Override
- public Enumeration getAttributeNames()
- {
- return Collections.emptyEnumeration();
- }
-
- @Override
- public String getCharacterEncoding()
- {
- return null;
- }
-
- @Override
- public void setCharacterEncoding(String s) throws UnsupportedEncodingException
- {
-
- }
-
- @Override
- public int getContentLength()
- {
- return 0;
- }
-
- @Override
- public long getContentLengthLong()
- {
- return 0;
- }
-
- @Override
- public String getContentType()
- {
- return null;
- }
-
- @Override
- public ServletInputStream getInputStream() throws IOException
- {
- return null;
- }
-
- @Override
- public String getParameter(String s)
- {
- if (this.parameters != null) {
- String[] values = this.parameters.get(s);
-
- if (ArrayUtils.isNotEmpty(values)) {
- return values[0];
- }
- }
-
- return null;
- }
-
- @Override
- public Enumeration getParameterNames()
- {
- return this.parameters != null ? Collections.enumeration(this.parameters.keySet()) : null;
- }
-
- @Override
- public String[] getParameterValues(String s)
- {
- if (this.parameters != null) {
- String[] values = this.parameters.get(s);
-
- return values != null ? values.clone() : null;
- }
-
- return ArrayUtils.EMPTY_STRING_ARRAY;
- }
-
- @Override
- public Map getParameterMap()
- {
- return clone(this.parameters);
- }
-
- @Override
- public String getProtocol()
- {
- return this.protocol;
- }
-
- @Override
- public String getScheme()
- {
- return this.scheme;
- }
-
- @Override
- public String getServerName()
- {
- return this.serverName;
- }
-
- @Override
- public int getServerPort()
- {
- return this.serverPort;
- }
-
- @Override
- public BufferedReader getReader() throws IOException
- {
- return null;
- }
-
- @Override
- public String getRemoteAddr()
- {
- return this.remoteAddr;
- }
-
- @Override
- public String getRemoteHost()
- {
- return null;
- }
-
- @Override
- public void setAttribute(String s, Object o)
- {
-
- }
-
- @Override
- public void removeAttribute(String s)
- {
-
- }
-
- @Override
- public Locale getLocale()
- {
- return null;
- }
-
- @Override
- public Enumeration getLocales()
- {
- return null;
- }
-
- @Override
- public boolean isSecure()
- {
- return this.secure;
- }
-
- @Override
- public RequestDispatcher getRequestDispatcher(String s)
+ public boolean isDaemon()
{
- return null;
+ return getJakarta().isDaemon();
}
/**
- * @deprecated
+ * @param daemon the daemon to set
+ * @since 10.11RC1
*/
- @Override
- @Deprecated
- public String getRealPath(String s)
- {
- return null;
- }
-
- @Override
- public int getRemotePort()
- {
- return 0;
- }
-
- @Override
- public String getLocalName()
- {
- return null;
- }
-
- @Override
- public String getLocalAddr()
- {
- return null;
- }
-
- @Override
- public int getLocalPort()
- {
- return 0;
- }
-
- @Override
- public boolean authenticate(HttpServletResponse httpServletResponse) throws IOException, ServletException
- {
- return false;
- }
-
- @Override
- public void login(String s, String s1) throws ServletException
- {
- }
-
- @Override
- public void logout() throws ServletException
- {
-
- }
-
- @Override
- public Collection getParts() throws IOException, ServletException
- {
- return this.parts;
- }
-
- @Override
- public Part getPart(String s) throws IOException, ServletException
+ public void setDaemon(boolean daemon)
{
- return this.parts.stream()
- .filter(part -> Objects.equals(part.getName(), s))
- .findFirst()
- .orElse(null);
+ getJakarta().setDaemon(daemon);
}
- @Override
- public ServletContext getServletContext()
- {
- return null;
- }
+ // JavaxToJakartaWrapper
@Override
- public AsyncContext startAsync() throws IllegalStateException
+ public HttpServletRequestStub getJakarta()
{
- return null;
- }
+ if (getRequest() instanceof JavaxToJakartaWrapper wrapper) {
+ return (HttpServletRequestStub) wrapper.getJakarta();
+ }
- @Override
- public AsyncContext startAsync(ServletRequest servletRequest, ServletResponse servletResponse)
- throws IllegalStateException
- {
return null;
}
- @Override
- public boolean isAsyncStarted()
- {
- return false;
- }
-
- @Override
- public boolean isAsyncSupported()
- {
- return false;
- }
-
- @Override
- public AsyncContext getAsyncContext()
- {
- return null;
- }
+ // XWikiRequest
@Override
- public DispatcherType getDispatcherType()
+ public HttpServletRequest getHttpServletRequest()
{
- return null;
+ // For retro compatibility reason it's expected that #getHttpServletRequest() return this in the case of a
+ // XWikiServletRequestStub
+ return this;
}
@Override
- public T upgrade(Class handlerClass) throws IOException, ServletException
- {
- return null;
- }
-
- /**
- * @return true if the request is intended to be used in a long standing daemon thread (mails, etc.) and should not
- * be taken into account when generating a URL
- * @since 10.11RC1
- */
- public boolean isDaemon()
- {
- return this.daemon;
- }
-
- /**
- * @param daemon the daemon to set
- * @since 10.11RC1
- */
- public void setDaemon(boolean daemon)
+ public String get(String name)
{
- this.daemon = daemon;
+ return getRequest().getParameter(name);
}
@Override
- public Optional getEffectiveAuthor()
+ public Cookie getCookie(String cookieName)
{
- return Optional.ofNullable((UserReference) getAttribute(XWikiServletRequest.ATTRIBUTE_EFFECTIVE_AUTHOR));
+ return Util.getCookie(cookieName, this);
}
}
diff --git a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/XWikiServletResponse.java b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/XWikiServletResponse.java
index 1974c4eeb355..617327e62828 100644
--- a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/XWikiServletResponse.java
+++ b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/XWikiServletResponse.java
@@ -19,57 +19,39 @@
*/
package com.xpn.xwiki.web;
-import java.io.IOException;
-import java.net.URI;
-import java.net.URISyntaxException;
-
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
-import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.xwiki.url.URLSecurityManager;
+import org.xwiki.jakartabridge.JavaxToJakartaWrapper;
-public class XWikiServletResponse extends HttpServletResponseWrapper implements XWikiResponse
+@Deprecated(since = "42.0.0")
+public class XWikiServletResponse extends HttpServletResponseWrapper
+ implements XWikiResponse, JavaxToJakartaWrapper
{
- private static final Logger LOGGER = LoggerFactory.getLogger(XWikiServletResponse.class);
-
public XWikiServletResponse(HttpServletResponse response)
{
super(response);
}
- @Override
- public HttpServletResponse getHttpServletResponse()
- {
- return (HttpServletResponse) getResponse();
- }
+ // JavaxToJakartaWrapper
@Override
- public void sendRedirect(String redirect) throws IOException
+ public jakarta.servlet.http.HttpServletResponse getJakarta()
{
- if (!StringUtils.isBlank(redirect)) {
- URI uri;
- try {
- uri = getURLSecurityManager().parseToSafeURI(redirect);
- getHttpServletResponse().sendRedirect(uri.toString());
- } catch (URISyntaxException | SecurityException e) {
- LOGGER.warn(
- "Possible phishing attack, attempting to redirect to [{}], this request has been blocked. "
- + "If the request was legitimate, please check the URL security configuration. You "
- + "might need to add the domain related to this request in the list of trusted domains in "
- + "the configuration: it can be configured in xwiki.properties in url.trustedDomains.",
- redirect);
- LOGGER.debug("Original error preventing the redirect: ", e);
- }
+ if (getResponse() instanceof JavaxToJakartaWrapper wrapper) {
+ return (jakarta.servlet.http.HttpServletResponse) wrapper.getJakarta();
}
+
+ return null;
}
- private URLSecurityManager getURLSecurityManager()
+ // XWikiResponse
+
+ @Override
+ public HttpServletResponse getHttpServletResponse()
{
- return Utils.getComponent(URLSecurityManager.class);
+ return (HttpServletResponse) getResponse();
}
public void addCookie(String cookieName, String cookieValue, int age)
diff --git a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/XWikiServletResponseStub.java b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/XWikiServletResponseStub.java
index 5aa18a4c4b24..54e9cda868d7 100644
--- a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/XWikiServletResponseStub.java
+++ b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/XWikiServletResponseStub.java
@@ -19,264 +19,72 @@
*/
package com.xpn.xwiki.web;
-import java.io.IOException;
import java.io.OutputStream;
-import java.io.PrintWriter;
-import java.util.Collection;
-import java.util.Locale;
-import javax.servlet.ServletOutputStream;
-import javax.servlet.WriteListener;
-import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpServletResponseWrapper;
+
+import org.xwiki.container.Container;
+import org.xwiki.container.servlet.HttpServletResponseStub;
+import org.xwiki.jakartabridge.JavaxToJakartaWrapper;
+import org.xwiki.jakartabridge.servlet.JakartaServletBridge;
+import org.xwiki.stability.Unstable;
/**
* This stub is intended to simulate a servlet request in a daemon context, in order to be able to create a custom XWiki
* context. This trick is used in to give a daemon thread access to the XWiki api.
*
* @version $Id$
+ * @deprecated use the {@link Container} API instead
*/
-public class XWikiServletResponseStub implements XWikiResponse
+// TODO: uncomment the annotation when XWiki Standard scripts are fully migrated to the new API
+// @Deprecated(since = "42.0.0")
+public class XWikiServletResponseStub extends HttpServletResponseWrapper
+ implements XWikiResponse, JavaxToJakartaWrapper
{
- private OutputStream outputStream;
-
- private ServletOutputStream servletOutputStream = new ServletOutputStream()
- {
- @Override
- public void write(int b) throws IOException
- {
- if (XWikiServletResponseStub.this.outputStream != null) {
- XWikiServletResponseStub.this.outputStream.write(b);
- }
- }
-
- @Override
- public boolean isReady()
- {
- return true;
- }
-
- @Override
- public void setWriteListener(WriteListener writeListener)
- {
- // Not needed
- }
- };
-
- public void setOutpuStream(OutputStream outputStream)
- {
- this.outputStream = outputStream;
- }
-
- @Override
- public HttpServletResponse getHttpServletResponse()
- {
- return null;
- }
-
- @Override
- public void setCharacterEncoding(String s)
+ public XWikiServletResponseStub()
{
+ this(new HttpServletResponseStub());
}
- @Override
- public void removeCookie(String cookieName, XWikiRequest request)
- {
- }
-
- @Override
- public void addCookie(Cookie cookie)
- {
- }
-
- @Override
- public boolean containsHeader(String name)
+ /**
+ * @param jakarta the request wrap
+ * @since 42.0.0
+ */
+ @Unstable
+ public XWikiServletResponseStub(HttpServletResponseStub jakarta)
{
- return false;
+ super(JakartaServletBridge.toJavax(jakarta));
}
- @Override
- public String encodeURL(String url)
- {
- return url;
- }
-
- @Override
- public String encodeRedirectURL(String url)
- {
- return url;
- }
-
- @Override
- public String encodeUrl(String url)
- {
- return url;
- }
-
- @Override
- public String encodeRedirectUrl(String url)
- {
- return url;
- }
-
- @Override
- public void sendError(int sc, String msg) throws IOException
- {
- }
-
- @Override
- public void sendError(int sc) throws IOException
- {
- }
-
- @Override
- public void sendRedirect(String location) throws IOException
- {
- }
-
- @Override
- public void setDateHeader(String name, long date)
- {
- }
-
- @Override
- public void addDateHeader(String name, long date)
- {
- }
-
- @Override
- public void setHeader(String name, String value)
- {
- }
-
- @Override
- public void addHeader(String name, String value)
- {
- }
-
- @Override
- public void setIntHeader(String name, int value)
- {
- }
-
- @Override
- public void addIntHeader(String name, int value)
- {
- }
-
- @Override
- public void setStatus(int sc)
- {
- }
-
- @Override
- public void setStatus(int sc, String sm)
- {
- }
-
- @Override
- public String getCharacterEncoding()
- {
- return null;
- }
-
- @Override
- public String getContentType()
- {
- return null;
- }
-
- @Override
- public ServletOutputStream getOutputStream() throws IOException
- {
- return this.servletOutputStream;
- }
-
- @Override
- public PrintWriter getWriter() throws IOException
- {
- return null;
- }
-
- @Override
- public void setContentLength(int len)
- {
- }
-
- @Override
- public void setContentLengthLong(long len)
- {
- }
-
- @Override
- public void setContentType(String type)
- {
- }
-
- @Override
- public void setBufferSize(int size)
- {
- }
-
- @Override
- public int getBufferSize()
- {
- return 0;
- }
-
- @Override
- public void flushBuffer() throws IOException
- {
- }
-
- @Override
- public void resetBuffer()
- {
- }
-
- @Override
- public boolean isCommitted()
+ public void setOutpuStream(OutputStream outputStream)
{
- return false;
+ getJakarta().setOutpuStream(outputStream);
}
- @Override
- public void reset()
- {
- }
+ // JavaxToJakartaWrapper
@Override
- public void setLocale(Locale loc)
+ public HttpServletResponseStub getJakarta()
{
- }
+ if (getResponse() instanceof JavaxToJakartaWrapper wrapper) {
+ return (HttpServletResponseStub) wrapper.getJakarta();
+ }
- @Override
- public Locale getLocale()
- {
return null;
}
- @Override
- public int getStatus()
- {
- return 0;
- }
+ // XWikiResponse
@Override
- public String getHeader(String s)
+ public HttpServletResponse getHttpServletResponse()
{
- return null;
+ return this;
}
@Override
- public Collection getHeaders(String s)
+ public void removeCookie(String cookieName, XWikiRequest request)
{
- return null;
- }
- @Override
- public Collection getHeaderNames()
- {
- return null;
}
}
diff --git a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/XWikiServletURLFactory.java b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/XWikiServletURLFactory.java
index d2c852bce1d0..223acb09ba24 100644
--- a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/XWikiServletURLFactory.java
+++ b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/web/XWikiServletURLFactory.java
@@ -54,6 +54,7 @@
import com.xpn.xwiki.doc.XWikiAttachment;
import com.xpn.xwiki.doc.XWikiDocument;
+@Deprecated(since = "42.0.0")
public class XWikiServletURLFactory extends XWikiDefaultURLFactory
{
private static final Logger LOGGER = LoggerFactory.getLogger(XWikiServletURLFactory.class);
diff --git a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/org/xwiki/internal/script/XWikiScriptContextInitializer.java b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/org/xwiki/internal/script/XWikiScriptContextInitializer.java
index f1f0353f45c4..8940096f91ca 100644
--- a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/org/xwiki/internal/script/XWikiScriptContextInitializer.java
+++ b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/org/xwiki/internal/script/XWikiScriptContextInitializer.java
@@ -37,6 +37,7 @@
import com.xpn.xwiki.api.XWiki;
import com.xpn.xwiki.doc.XWikiDocument;
import com.xpn.xwiki.render.ScriptXWikiServletRequest;
+import com.xpn.xwiki.render.ScriptXWikiServletResponse;
/**
* Inject in the {@link ScriptContext} the XWiki context and the {@link XWiki} instance for backward compatibility.
@@ -83,9 +84,14 @@ public void initialize(ScriptContext scriptContext)
// It's safe to overwrite the following bindings because they don't have a real state. Moreover the request and
// the response objects from the XWiki context can be replaced so the script bindings have to be synchronized.
- scriptContext.setAttribute("request", new ScriptXWikiServletRequest(xcontext.getRequest(), this.authorization),
- ScriptContext.ENGINE_SCOPE);
- scriptContext.setAttribute("response", xcontext.getResponse(), ScriptContext.ENGINE_SCOPE);
+ if (xcontext.getRequest() != null) {
+ scriptContext.setAttribute("request",
+ new ScriptXWikiServletRequest(xcontext.getRequest(), this.authorization), ScriptContext.ENGINE_SCOPE);
+ }
+ if (xcontext.getResponse() != null) {
+ scriptContext.setAttribute("response", new ScriptXWikiServletResponse(xcontext.getResponse()),
+ ScriptContext.ENGINE_SCOPE);
+ }
// Current document
Document docAPI = null;
diff --git a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/org/xwiki/store/TemporaryAttachmentSessionsManager.java b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/org/xwiki/store/TemporaryAttachmentSessionsManager.java
index 0105b2439de5..3cf4493d0b2e 100644
--- a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/org/xwiki/store/TemporaryAttachmentSessionsManager.java
+++ b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/org/xwiki/store/TemporaryAttachmentSessionsManager.java
@@ -23,21 +23,22 @@
import java.util.List;
import java.util.Optional;
-import javax.servlet.http.Part;
-
import org.xwiki.attachment.validation.AttachmentValidationException;
import org.xwiki.component.annotation.Role;
+import org.xwiki.jakartabridge.servlet.JakartaServletBridge;
import org.xwiki.model.reference.AttachmentReference;
import org.xwiki.model.reference.DocumentReference;
+import org.xwiki.stability.Unstable;
import com.xpn.xwiki.doc.XWikiAttachment;
import com.xpn.xwiki.doc.XWikiDocument;
+import jakarta.servlet.http.Part;
+
/**
- * Interface for operations related to temporary upload of attachments.
- * The idea of this API is to allow obtaining directly a temporary {@link XWikiAttachment} from a {@link Part} and to
- * keep it in cache until it's saved.
- * The manager is handling a separated map of attachments for each {@link javax.servlet.http.HttpSession}.
+ * Interface for operations related to temporary upload of attachments. The idea of this API is to allow obtaining
+ * directly a temporary {@link XWikiAttachment} from a {@link Part} and to keep it in cache until it's saved. The
+ * manager is handling a separated map of attachments for each {@link jakarta.servlet.http.HttpSession}.
*
* @version $Id$
* @since 14.3RC1
@@ -53,11 +54,35 @@ public interface TemporaryAttachmentSessionsManager
* @param part the actual data that is uploaded.
* @return an attachment that is not saved yet but cached and contains the data of the given part.
* @throws TemporaryAttachmentException in case of problem when reading the part
- * @throws AttachmentValidationException in case of error when validating the attachment (e.g., the maximum
- * filesize is reached)
+ * @throws AttachmentValidationException in case of error when validating the attachment (e.g., the maximum filesize
+ * is reached)
+ * @deprecated use {@link #uploadAttachment(DocumentReference, Part)} instead
*/
- XWikiAttachment uploadAttachment(DocumentReference documentReference, Part part)
- throws TemporaryAttachmentException, AttachmentValidationException;
+ @Deprecated(since = "42.0.0")
+ default XWikiAttachment uploadAttachment(DocumentReference documentReference, javax.servlet.http.Part part)
+ throws TemporaryAttachmentException, AttachmentValidationException
+ {
+ return uploadAttachment(documentReference, part, null);
+ }
+
+ /**
+ * Temporary store the given {@link Part} to a cached {@link XWikiAttachment} attached to the given
+ * {@link DocumentReference}.
+ *
+ * @param documentReference the reference of the document that the attachment should be attached to.
+ * @param part the actual data that is uploaded.
+ * @return an attachment that is not saved yet but cached and contains the data of the given part.
+ * @throws TemporaryAttachmentException in case of problem when reading the part
+ * @throws AttachmentValidationException in case of error when validating the attachment (e.g., the maximum filesize
+ * is reached)
+ * @since 42.0.0
+ */
+ @Unstable
+ default XWikiAttachment uploadAttachment(DocumentReference documentReference, Part part)
+ throws TemporaryAttachmentException, AttachmentValidationException
+ {
+ return uploadAttachment(documentReference, part, null);
+ }
/**
* Temporary store the given {@link Part} to a cached {@link XWikiAttachment} attached to the given
@@ -66,22 +91,45 @@ XWikiAttachment uploadAttachment(DocumentReference documentReference, Part part)
* @param documentReference the reference of the document that the attachment should be attached to
* @param part the actual data that is uploaded
* @param filename an optional filename used instead of using {@link Part#getSubmittedFileName()}, ignored when
- * {@code null} or blank
+ * {@code null} or blank
* @return an attachment that is not saved yet but cached and contains the data of the given part
* @throws TemporaryAttachmentException in case of problem when reading the part
- * @throws AttachmentValidationException in case of error when validating the attachment (e.g., the maximum
- * filesize is reached)
+ * @throws AttachmentValidationException in case of error when validating the attachment (e.g., the maximum filesize
+ * is reached)
* @since 14.9RC1
+ * @deprecated use {@link #uploadAttachment(DocumentReference, Part, String)} instead
*/
- XWikiAttachment uploadAttachment(DocumentReference documentReference, Part part, String filename)
+ @Deprecated(since = "42.0.0")
+ XWikiAttachment uploadAttachment(DocumentReference documentReference, javax.servlet.http.Part part, String filename)
throws TemporaryAttachmentException, AttachmentValidationException;
/**
- * Allow to temporarily attach the given instance of {@link XWikiAttachment} to the given document reference.
- * This can be useful if an API manipulates an {@link XWikiAttachment} without saving it, and want it to be
- * discoverable when parsing a document through the download action for example.
- * Note that consumer of this API needs to be aware that the file attached to the {@link XWikiAttachment} might be
- * deleted at the end of the session, as any temporary attachment.
+ * Temporary store the given {@link Part} to a cached {@link XWikiAttachment} attached to the given
+ * {@link DocumentReference}.
+ *
+ * @param documentReference the reference of the document that the attachment should be attached to
+ * @param part the actual data that is uploaded
+ * @param filename an optional filename used instead of using {@link Part#getSubmittedFileName()}, ignored when
+ * {@code null} or blank
+ * @return an attachment that is not saved yet but cached and contains the data of the given part
+ * @throws TemporaryAttachmentException in case of problem when reading the part
+ * @throws AttachmentValidationException in case of error when validating the attachment (e.g., the maximum filesize
+ * is reached)
+ * @since 42.0.0
+ */
+ @Unstable
+ default XWikiAttachment uploadAttachment(DocumentReference documentReference, Part part, String filename)
+ throws TemporaryAttachmentException, AttachmentValidationException
+ {
+ return uploadAttachment(documentReference, JakartaServletBridge.toJavax(part), filename);
+ }
+
+ /**
+ * Allow to temporarily attach the given instance of {@link XWikiAttachment} to the given document reference. This
+ * can be useful if an API manipulates an {@link XWikiAttachment} without saving it, and want it to be discoverable
+ * when parsing a document through the download action for example. Note that consumer of this API needs to be aware
+ * that the file attached to the {@link XWikiAttachment} might be deleted at the end of the session, as any
+ * temporary attachment.
*
* @param attachment the attachment to be temporarily attached to the document
* @param documentReference the reference of the document to link this attachment to
@@ -129,7 +177,7 @@ default Optional getUploadedAttachment(AttachmentReference atta
* @param documentReference the reference for which to retrieve the temporary attachment.
* @param filename the filename to look for.
* @return {@code true} if the attachment have been found for deletion, {@code false} if no matching attachment
- * could be find.
+ * could be find.
*/
boolean removeUploadedAttachment(DocumentReference documentReference, String filename);
@@ -139,17 +187,17 @@ default Optional getUploadedAttachment(AttachmentReference atta
*
* @param documentReference the reference for which to retrieve the temporary attachments.
* @return {@code true} if there was some temporary attachments in cache for the given document reference in the
- * current user session, {@code false} if there was no matching temporary attachment in cache.
+ * current user session, {@code false} if there was no matching temporary attachment in cache.
*/
boolean removeUploadedAttachments(DocumentReference documentReference);
/**
* This method aims at attaching the {@link XWikiAttachment} that might have been previously temporary upload to the
- * {@link XWikiDocument} they are targeting.
- * This method should only be called before performing a save of the document to actually persist them. Also note
- * that this method cannot call {@link #removeUploadedAttachment(DocumentReference, String)} as removing the
- * attachment would delete the data before they can be properly saved in the persistent storage. So the consumer of
- * the API should take care of properly calling this API when needed.
+ * {@link XWikiDocument} they are targeting. This method should only be called before performing a save of the
+ * document to actually persist them. Also note that this method cannot call
+ * {@link #removeUploadedAttachment(DocumentReference, String)} as removing the attachment would delete the data
+ * before they can be properly saved in the persistent storage. So the consumer of the API should take care of
+ * properly calling this API when needed.
*
* @param document the actual document instance that should receive the attachments
* @param fileNames the names of the uploaded files to attach
diff --git a/xwiki-platform-core/xwiki-platform-oldcore/src/test/java/com/xpn/xwiki/internal/context/XWikiContextContextStoreTest.java b/xwiki-platform-core/xwiki-platform-oldcore/src/test/java/com/xpn/xwiki/internal/context/XWikiContextContextStoreTest.java
index 3cf45f15ba4d..af3345082597 100644
--- a/xwiki-platform-core/xwiki-platform-oldcore/src/test/java/com/xpn/xwiki/internal/context/XWikiContextContextStoreTest.java
+++ b/xwiki-platform-core/xwiki-platform-oldcore/src/test/java/com/xpn/xwiki/internal/context/XWikiContextContextStoreTest.java
@@ -63,6 +63,7 @@
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertNotSame;
import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertSame;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
@@ -182,7 +183,7 @@ void saveAndRestoreRequest() throws Exception
assertEquals(headers, contextStore.get(XWikiContextContextStore.PROP_REQUEST_HEADERS));
assertEquals("172.12.0.2", contextStore.get(XWikiContextContextStore.PROP_REQUEST_REMOTE_ADDR));
- assertEquals(session,
+ assertSame(session,
((SerializableHttpSessionWrapper) contextStore.get(XWikiContextContextStore.PROP_REQUEST_SESSION))
.getSession());
diff --git a/xwiki-platform-core/xwiki-platform-oldcore/src/test/java/com/xpn/xwiki/test/AbstractBridgedComponentTestCase.java b/xwiki-platform-core/xwiki-platform-oldcore/src/test/java/com/xpn/xwiki/test/AbstractBridgedComponentTestCase.java
index df69c6bd7b38..194c2e7d3484 100644
--- a/xwiki-platform-core/xwiki-platform-oldcore/src/test/java/com/xpn/xwiki/test/AbstractBridgedComponentTestCase.java
+++ b/xwiki-platform-core/xwiki-platform-oldcore/src/test/java/com/xpn/xwiki/test/AbstractBridgedComponentTestCase.java
@@ -103,7 +103,7 @@ public void setUp() throws Exception
will(returnValue(null));
allowing(mockServletContext).getResourceAsStream("/WEB-INF/xwiki.cfg");
will(returnValue(null));
- allowing(mockServletContext).getAttribute("javax.servlet.context.tempdir");
+ allowing(mockServletContext).getAttribute("jakarta.servlet.context.tempdir");
will(returnValue(new File(System.getProperty("java.io.tmpdir"))));
}});
diff --git a/xwiki-platform-core/xwiki-platform-oldcore/src/test/java/com/xpn/xwiki/test/MockitoOldcore.java b/xwiki-platform-core/xwiki-platform-oldcore/src/test/java/com/xpn/xwiki/test/MockitoOldcore.java
index 17435d57d8a4..421890b09f90 100644
--- a/xwiki-platform-core/xwiki-platform-oldcore/src/test/java/com/xpn/xwiki/test/MockitoOldcore.java
+++ b/xwiki-platform-core/xwiki-platform-oldcore/src/test/java/com/xpn/xwiki/test/MockitoOldcore.java
@@ -515,11 +515,11 @@ public InputStream answer(InvocationOnMock invocation) throws Throwable
// Also note that setting a non null request forces us to set a non null URL as otherwise it would lead
// to another NPE...
XWikiRequest originalRequest = getXWikiContext().getRequest();
- if (getXWikiContext().getRequest() == null) {
+ if (originalRequest == null) {
getXWikiContext().setRequest(new XWikiServletRequestStub());
}
URL originalURL = getXWikiContext().getURL();
- if (getXWikiContext().getURL() == null) {
+ if (originalURL == null) {
getXWikiContext().setURL(new URL("http://localhost:8080"));
}
stubContextProvider.initialize(getXWikiContext());
diff --git a/xwiki-platform-core/xwiki-platform-oldcore/src/test/java/com/xpn/xwiki/web/ActionFilterTest.java b/xwiki-platform-core/xwiki-platform-oldcore/src/test/java/com/xpn/xwiki/web/ActionFilterTest.java
index f5911a91b607..ec4f07d3049f 100644
--- a/xwiki-platform-core/xwiki-platform-oldcore/src/test/java/com/xpn/xwiki/web/ActionFilterTest.java
+++ b/xwiki-platform-core/xwiki-platform-oldcore/src/test/java/com/xpn/xwiki/web/ActionFilterTest.java
@@ -19,10 +19,10 @@
*/
package com.xpn.xwiki.web;
-import javax.servlet.FilterChain;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.FilterChain;
+import jakarta.servlet.ServletRequest;
+import jakarta.servlet.ServletResponse;
+import jakarta.servlet.http.HttpServletRequest;
import org.junit.jupiter.api.Test;
import org.xwiki.component.manager.ComponentManager;
diff --git a/xwiki-platform-core/xwiki-platform-oldcore/src/test/java/com/xpn/xwiki/web/XWikiServletURLFactoryTest.java b/xwiki-platform-core/xwiki-platform-oldcore/src/test/java/com/xpn/xwiki/web/XWikiServletURLFactoryTest.java
index d6b23470b3ae..6a82ed6c094d 100644
--- a/xwiki-platform-core/xwiki-platform-oldcore/src/test/java/com/xpn/xwiki/web/XWikiServletURLFactoryTest.java
+++ b/xwiki-platform-core/xwiki-platform-oldcore/src/test/java/com/xpn/xwiki/web/XWikiServletURLFactoryTest.java
@@ -19,6 +19,14 @@
*/
package com.xpn.xwiki.web;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Arrays;
@@ -31,6 +39,8 @@
import org.junit.jupiter.api.Test;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
+import org.xwiki.container.servlet.HttpServletRequestStub;
+import org.xwiki.jakartabridge.servlet.JakartaServletBridge;
import org.xwiki.model.reference.DocumentReference;
import org.xwiki.model.reference.WikiReference;
import org.xwiki.resource.internal.entity.EntityResourceActionLister;
@@ -48,13 +58,8 @@
import com.xpn.xwiki.test.junit5.mockito.OldcoreTest;
import com.xpn.xwiki.test.reference.ReferenceComponentList;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
/**
* Validate {@link XWikiServletURLFactory}.
@@ -63,7 +68,7 @@
*/
@OldcoreTest
@ReferenceComponentList
-public class XWikiServletURLFactoryTest
+class XWikiServletURLFactoryTest
{
@MockComponent
private WikiDescriptorManager descriptorManager;
@@ -76,7 +81,7 @@ public class XWikiServletURLFactoryTest
private XWikiServletURLFactory urlFactory;
- private XWikiRequest mockXWikiRequest;
+ private HttpServletRequest mockHttpRequest;
/**
* Flag indicating if the request is secure. A request is secure if either its URL uses the HTTPS scheme or the
@@ -103,12 +108,12 @@ public void beforeEach() throws Exception
doReturn("DefaultSpace").when(this.oldcore.getSpyXWiki()).getDefaultSpace(any(XWikiContext.class));
// Request
- this.mockXWikiRequest = mock(XWikiRequest.class);
+ this.mockHttpRequest = mock();
prepareMockRequest("127.0.0.1", -1);
// Response
- XWikiResponse xwikiResponse = mock(XWikiResponse.class);
- when(xwikiResponse.encodeURL(any())).then(new Answer()
+ HttpServletResponse httpResponse = mock();
+ when(httpResponse.encodeURL(any())).then(new Answer()
{
@Override
public String answer(InvocationOnMock invocation) throws Throwable
@@ -116,7 +121,8 @@ public String answer(InvocationOnMock invocation) throws Throwable
return invocation.getArgument(0);
}
});
- this.oldcore.getXWikiContext().setResponse(xwikiResponse);
+ this.oldcore.getXWikiContext()
+ .setResponse(new XWikiServletResponse(JakartaServletBridge.toJavax(httpResponse)));
// Create sub-wikis.
createWiki("wiki1");
@@ -141,10 +147,10 @@ private void createWiki(String wikiName) throws XWikiException, WikiManagerExcep
private void prepareMockRequest(String host, int port)
{
- when(this.mockXWikiRequest.getScheme()).thenReturn("http");
- when(this.mockXWikiRequest.getServerName()).thenReturn(host);
- when(this.mockXWikiRequest.getServerPort()).thenReturn(port);
- when(this.mockXWikiRequest.isSecure()).then(new Answer()
+ when(this.mockHttpRequest.getScheme()).thenReturn("http");
+ when(this.mockHttpRequest.getServerName()).thenReturn(host);
+ when(this.mockHttpRequest.getServerPort()).thenReturn(port);
+ when(this.mockHttpRequest.isSecure()).then(new Answer()
{
@Override
public Boolean answer(InvocationOnMock invocation) throws Throwable
@@ -152,9 +158,9 @@ public Boolean answer(InvocationOnMock invocation) throws Throwable
return secure;
}
});
- when(this.mockXWikiRequest.getServletPath()).thenReturn("");
- when(this.mockXWikiRequest.getContextPath()).thenReturn("/xwiki");
- when(this.mockXWikiRequest.getHeader(any())).then(new Answer()
+ when(this.mockHttpRequest.getServletPath()).thenReturn("");
+ when(this.mockHttpRequest.getContextPath()).thenReturn("/xwiki");
+ when(this.mockHttpRequest.getHeader(any())).then(new Answer()
{
@Override
public String answer(InvocationOnMock invocation) throws Throwable
@@ -162,7 +168,13 @@ public String answer(InvocationOnMock invocation) throws Throwable
return httpHeaders.get(invocation.getArgument(0));
}
});
- this.oldcore.getXWikiContext().setRequest(mockXWikiRequest);
+ XWikiRequest request;
+ if (this.mockHttpRequest instanceof HttpServletRequestStub httpServletStub) {
+ request = new XWikiServletRequestStub(httpServletStub);
+ } else {
+ request = new XWikiServletRequest(JakartaServletBridge.toJavax(this.mockHttpRequest));
+ }
+ this.oldcore.getXWikiContext().setRequest(request);
}
private void initRequest(String host, int port)
@@ -170,15 +182,13 @@ private void initRequest(String host, int port)
prepareMockRequest(host, port);
// Reinitialize the URL factory to take into account the new request URL.
- urlFactory.init(this.oldcore.getXWikiContext());
+ this.urlFactory.init(this.oldcore.getXWikiContext());
}
private void initDaemonRequest(String host, int port)
{
- this.mockXWikiRequest = mock(XWikiServletRequestStub.class);
- when(((XWikiServletRequestStub) this.mockXWikiRequest).isDaemon()).thenReturn(true);
- when(((XWikiServletRequestStub) this.mockXWikiRequest).getHttpServletRequest())
- .thenReturn(this.mockXWikiRequest);
+ this.mockHttpRequest = mock(HttpServletRequestStub.class);
+ when(((HttpServletRequestStub) this.mockHttpRequest).isDaemon()).thenReturn(true);
initRequest(host, port);
}
@@ -186,7 +196,7 @@ private void initDaemonRequest(String host, int port)
// Tests
@Test
- public void createURLOnMainWiki()
+ void createURLOnMainWiki()
{
URL url = this.urlFactory.createURL("Space", "Page", "view", "param1=1", "anchor", "xwiki",
this.oldcore.getXWikiContext());
@@ -194,7 +204,7 @@ public void createURLOnMainWiki()
}
@Test
- public void createURLOnSubWiki()
+ void createURLOnSubWiki()
{
URL url = this.urlFactory.createURL("Space", "Page", "view", "param1=1", "anchor", "wiki1",
this.oldcore.getXWikiContext());
@@ -202,7 +212,7 @@ public void createURLOnSubWiki()
}
@Test
- public void createURLOnMainWikiInPathMode()
+ void createURLOnMainWikiInPathMode()
{
this.oldcore.getMockXWikiCfg().setProperty("xwiki.virtual.usepath", "1");
@@ -212,7 +222,7 @@ public void createURLOnMainWikiInPathMode()
}
@Test
- public void createURLOnSubWikiInPathMode() throws MalformedURLException
+ void createURLOnSubWikiInPathMode() throws MalformedURLException
{
this.oldcore.getMockXWikiCfg().setProperty("xwiki.virtual.usepath", "1");
@@ -226,7 +236,7 @@ public void createURLOnSubWikiInPathMode() throws MalformedURLException
}
@Test
- public void createURLOnSubWikiInPathModeDaemonThread() throws WikiManagerException
+ void createURLOnSubWikiInPathModeDaemonThread() throws WikiManagerException
{
this.oldcore.getMockXWikiCfg().setProperty("xwiki.virtual.usepath", "1");
initDaemonRequest("request", 8080);
@@ -240,7 +250,7 @@ public void createURLOnSubWikiInPathModeDaemonThread() throws WikiManagerExcepti
}
@Test
- public void createURLOnSubWikiFromSubWikiInPathMode() throws MalformedURLException
+ void createURLOnSubWikiFromSubWikiInPathMode() throws MalformedURLException
{
this.oldcore.getMockXWikiCfg().setProperty("xwiki.virtual.usepath", "1");
@@ -258,22 +268,22 @@ public void createURLOnSubWikiFromSubWikiInPathMode() throws MalformedURLExcepti
}
@Test
- public void createSecureURLOnSubWikiInPathMode()
+ void createSecureURLOnSubWikiInPathMode()
{
this.oldcore.getMockXWikiCfg().setProperty("xwiki.virtual.usepath", "1");
- secure = true;
+ this.secure = true;
initRequest("localhost", 8080);
URL url = this.urlFactory.createURL("Space", "Page", "view", "param1=1", "anchor", "wiki1",
this.oldcore.getXWikiContext());
assertEquals("https://localhost:8080/xwiki/wiki/wiki1server/view/Space/Page?param1=1#anchor", url.toString());
assertEquals("/xwiki/wiki/wiki1server/view/Space/Page?param1=1#anchor",
- urlFactory.getURL(url, this.oldcore.getXWikiContext()));
+ this.urlFactory.getURL(url, this.oldcore.getXWikiContext()));
}
@Test
- public void createURLOnMainWikiInDomainMode()
+ void createURLOnMainWikiInDomainMode()
{
this.oldcore.getMockXWikiCfg().setProperty("xwiki.virtual.usepath", "0");
@@ -283,7 +293,7 @@ public void createURLOnMainWikiInDomainMode()
}
@Test
- public void createURLOnSubWikiInDomainMode()
+ void createURLOnSubWikiInDomainMode()
{
this.oldcore.getMockXWikiCfg().setProperty("xwiki.virtual.usepath", "0");
@@ -296,75 +306,75 @@ public void createURLOnSubWikiInDomainMode()
* Checks the URLs created on the main wiki when XWiki is behind a reverse proxy.
*/
@Test
- public void createURLOnMainWikiInDomainModeInReverseProxyMode()
+ void createURLOnMainWikiInDomainModeInReverseProxyMode()
{
- secure = true;
- httpHeaders.put("x-forwarded-host", "www.xwiki.org");
+ this.secure = true;
+ this.httpHeaders.put("x-forwarded-host", "www.xwiki.org");
// Reinitialize the URL factory to take into account the new security level and HTTP headers.
- urlFactory.init(this.oldcore.getXWikiContext());
+ this.urlFactory.init(this.oldcore.getXWikiContext());
this.oldcore.getMockXWikiCfg().setProperty("xwiki.virtual.usepath", "0");
- URL url = urlFactory.createURL("Space", "Page", "view", "param1=1", "anchor", "xwiki",
+ URL url = this.urlFactory.createURL("Space", "Page", "view", "param1=1", "anchor", "xwiki",
this.oldcore.getXWikiContext());
assertEquals("https://www.xwiki.org/xwiki/bin/view/Space/Page?param1=1#anchor", url.toString());
assertEquals("/xwiki/bin/view/Space/Page?param1=1#anchor",
- urlFactory.getURL(url, this.oldcore.getXWikiContext()));
+ this.urlFactory.getURL(url, this.oldcore.getXWikiContext()));
}
@Test
- public void createURLOnSubWikiInDomainModeInReverseProxyMode()
+ void createURLOnSubWikiInDomainModeInReverseProxyMode()
{
- httpHeaders.put("x-forwarded-host", "www.xwiki.org");
+ this.httpHeaders.put("x-forwarded-host", "www.xwiki.org");
// Reinitialize the URL factory to take into account the new HTTP headers.
- urlFactory.init(this.oldcore.getXWikiContext());
+ this.urlFactory.init(this.oldcore.getXWikiContext());
this.oldcore.getMockXWikiCfg().setProperty("xwiki.virtual.usepath", "0");
- URL url = urlFactory.createURL("Space", "Page", "view", "param1=1", "anchor", "wiki1",
+ URL url = this.urlFactory.createURL("Space", "Page", "view", "param1=1", "anchor", "wiki1",
this.oldcore.getXWikiContext());
assertEquals("http://wiki1server/xwiki/bin/view/Space/Page?param1=1#anchor", url.toString());
// The URL remains absolute in this case.
assertEquals("http://wiki1server/xwiki/bin/view/Space/Page?param1=1#anchor",
- urlFactory.getURL(url, this.oldcore.getXWikiContext()));
+ this.urlFactory.getURL(url, this.oldcore.getXWikiContext()));
}
@Test
- public void createURLOnSubWikiModeInDomainModeInReverseProxyMode()
+ void createURLOnSubWikiModeInDomainModeInReverseProxyMode()
{
- secure = true;
- httpHeaders.put("x-forwarded-host", "www.xwiki.org");
+ this.secure = true;
+ this.httpHeaders.put("x-forwarded-host", "www.xwiki.org");
// Reinitialize the URL factory to take into account the new security level and HTTP headers.
- urlFactory.init(this.oldcore.getXWikiContext());
+ this.urlFactory.init(this.oldcore.getXWikiContext());
this.oldcore.getMockXWikiCfg().setProperty("xwiki.virtual.usepath", "0");
- URL url = urlFactory.createURL("Space", "Page", "view", "param1=1", "anchor", "wiki1",
+ URL url = this.urlFactory.createURL("Space", "Page", "view", "param1=1", "anchor", "wiki1",
this.oldcore.getXWikiContext());
assertEquals("http://wiki1server/xwiki/bin/view/Space/Page?param1=1#anchor", url.toString());
// The URL remains absolute in this case.
assertEquals("http://wiki1server/xwiki/bin/view/Space/Page?param1=1#anchor",
- urlFactory.getURL(url, this.oldcore.getXWikiContext()));
+ this.urlFactory.getURL(url, this.oldcore.getXWikiContext()));
}
@Test
- public void createURLOnMainWikiInPathModeInReverseProxyMode()
+ void createURLOnMainWikiInPathModeInReverseProxyMode()
{
- httpHeaders.put("x-forwarded-host", "www.xwiki.org");
+ this.httpHeaders.put("x-forwarded-host", "www.xwiki.org");
// Reinitialize the URL factory to take into account the new HTTP headers.
- urlFactory.init(this.oldcore.getXWikiContext());
+ this.urlFactory.init(this.oldcore.getXWikiContext());
this.oldcore.getMockXWikiCfg().setProperty("xwiki.virtual.usepath", "1");
- URL url = urlFactory.createURL("Space", "Page", "view", "param1=1", "anchor", "xwiki",
+ URL url = this.urlFactory.createURL("Space", "Page", "view", "param1=1", "anchor", "xwiki",
this.oldcore.getXWikiContext());
assertEquals("http://www.xwiki.org/xwiki/bin/view/Space/Page?param1=1#anchor", url.toString());
assertEquals("/xwiki/bin/view/Space/Page?param1=1#anchor",
- urlFactory.getURL(url, this.oldcore.getXWikiContext()));
+ this.urlFactory.getURL(url, this.oldcore.getXWikiContext()));
}
@Test
- public void createURLOnSubWikiInPathModeInReverseProxyHost()
+ void createURLOnSubWikiInPathModeInReverseProxyHost()
{
secure = true;
httpHeaders.put("x-forwarded-host", "www.xwiki.org");
@@ -381,7 +391,7 @@ public void createURLOnSubWikiInPathModeInReverseProxyHost()
}
@Test
- public void createURLOnSubWikiModeInPathModeInReverseProxyHostPort()
+ void createURLOnSubWikiModeInPathModeInReverseProxyHostPort()
{
httpHeaders.put("x-forwarded-host", "www.xwiki.org:8080");
// Reinitialize the URL factory to take into account the new HTTP headers.
@@ -398,7 +408,7 @@ public void createURLOnSubWikiModeInPathModeInReverseProxyHostPort()
}
@Test
- public void createURLOnMainWikiInPathModeWithForcedProtocol()
+ void createURLOnMainWikiInPathModeWithForcedProtocol()
{
this.oldcore.getMockXWikiCfg().setProperty("xwiki.url.protocol", "https");
// Reinitialize the URL factory to take into account the configuration
@@ -416,7 +426,7 @@ public void createURLOnMainWikiInPathModeWithForcedProtocol()
* set from code on the XWiki context) are different.
*/
@Test
- public void getURLWhenRequestWikiAndContextWikiAreDifferent() throws MalformedURLException
+ void getURLWhenRequestWikiAndContextWikiAreDifferent() throws MalformedURLException
{
initRequest("wiki1server", -1);
@@ -431,9 +441,11 @@ public void getURLWhenRequestWikiAndContextWikiAreDifferent() throws MalformedUR
assertEquals("http://wiki2server/xwiki/bin/view/Space/Page", url);
}
- /** When the URL contains only the hostname, without a path, / is returned instead of the empty string. */
+ /**
+ * When the URL contains only the hostname, without a path, / is returned instead of the empty string.
+ */
@Test
- public void getURLWithEmptyPathReturnsSlash() throws MalformedURLException
+ void getURLWithEmptyPathReturnsSlash() throws MalformedURLException
{
initRequest("wiki1server", -1);
@@ -445,7 +457,7 @@ public void getURLWithEmptyPathReturnsSlash() throws MalformedURLException
* Make sure the right reference URL used in daemon mode.
*/
@Test
- public void getURLWhenDeamonRequest() throws MalformedURLException
+ void getURLWhenDeamonRequest() throws MalformedURLException
{
this.oldcore.getMockXWikiCfg().setProperty("xwiki.virtual.usepath", "0");
@@ -454,19 +466,19 @@ public void getURLWhenDeamonRequest() throws MalformedURLException
this.oldcore.getXWikiContext().setWikiId("wiki1");
- assertEquals("/xwiki/bin/view/Space/Page",
- urlFactory.getURL(new URL("http://wiki1server/xwiki/bin/view/Space/Page"), this.oldcore.getXWikiContext()));
+ assertEquals("/xwiki/bin/view/Space/Page", this.urlFactory
+ .getURL(new URL("http://wiki1server/xwiki/bin/view/Space/Page"), this.oldcore.getXWikiContext()));
- assertEquals("http://wiki2server/xwiki/bin/view/Space/Page",
- urlFactory.getURL(new URL("http://wiki2server/xwiki/bin/view/Space/Page"), this.oldcore.getXWikiContext()));
+ assertEquals("http://wiki2server/xwiki/bin/view/Space/Page", this.urlFactory
+ .getURL(new URL("http://wiki2server/xwiki/bin/view/Space/Page"), this.oldcore.getXWikiContext()));
this.oldcore.getXWikiContext().setWikiId("wiki2");
- assertEquals("http://wiki1server/xwiki/bin/view/Space/Page",
- urlFactory.getURL(new URL("http://wiki1server/xwiki/bin/view/Space/Page"), this.oldcore.getXWikiContext()));
+ assertEquals("http://wiki1server/xwiki/bin/view/Space/Page", this.urlFactory
+ .getURL(new URL("http://wiki1server/xwiki/bin/view/Space/Page"), this.oldcore.getXWikiContext()));
- assertEquals("/xwiki/bin/view/Space/Page",
- urlFactory.getURL(new URL("http://wiki2server/xwiki/bin/view/Space/Page"), this.oldcore.getXWikiContext()));
+ assertEquals("/xwiki/bin/view/Space/Page", this.urlFactory
+ .getURL(new URL("http://wiki2server/xwiki/bin/view/Space/Page"), this.oldcore.getXWikiContext()));
}
/**
@@ -474,7 +486,7 @@ public void getURLWhenDeamonRequest() throws MalformedURLException
* xwiki.home should be returned. see: XWIKI-5981
*/
@Test
- public void getServerURLFromSubWikiWithXWikiDotHomeEnabled() throws MalformedURLException
+ void getServerURLFromSubWikiWithXWikiDotHomeEnabled() throws MalformedURLException
{
// This is called by XWiki#getXWiki() and is set to whatever the user asks for.
// The test sets it to "xwiki" which is wrong for this test.
@@ -486,14 +498,14 @@ public void getServerURLFromSubWikiWithXWikiDotHomeEnabled() throws MalformedURL
initRequest("virtual1.mywiki.tld", -1);
assertEquals("http://mainwiki.mywiki.tld/",
- urlFactory.getServerURL("xwiki", this.oldcore.getXWikiContext()).toString());
+ this.urlFactory.getServerURL("xwiki", this.oldcore.getXWikiContext()).toString());
}
/**
* Proves that from a virtual wiki, URLs generated to point to the main wiki will use xwiki.home. see: XWIKI-5981
*/
@Test
- public void createURLWhenWikiDotHomeParameterFromSubWiki()
+ void createURLWhenWikiDotHomeParameterFromSubWiki()
{
this.oldcore.getXWikiContext().setWikiId("subwiki");
@@ -506,19 +518,19 @@ public void createURLWhenWikiDotHomeParameterFromSubWiki()
initRequest("virtual1.mywiki.tld", -1);
// No wiki passed, assume same wiki. we should expect it to return http://virtual1.mywiki.tld/
- URL url =
- urlFactory.createURL("Space", "Page", "view", "param1=1", "anchor", null, this.oldcore.getXWikiContext());
+ URL url = this.urlFactory.createURL("Space", "Page", "view", "param1=1", "anchor", null,
+ this.oldcore.getXWikiContext());
assertEquals("http://virtual1.mywiki.tld/xwiki/bin/view/Space/Page?param1=1#anchor", url.toString());
// We are already in virtual1 so it should be a relative reference.
assertEquals("/xwiki/bin/view/Space/Page?param1=1#anchor",
- urlFactory.getURL(url, this.oldcore.getXWikiContext()));
+ this.urlFactory.getURL(url, this.oldcore.getXWikiContext()));
// Pass "xwiki" as the wiki, expect it to return the main wiki as set in the xwiki.home parameter.
url = urlFactory.createURL("Space", "Page", "view", "param1=1", "anchor", "xwiki",
this.oldcore.getXWikiContext());
assertEquals("http://mainwiki.mywiki.tld/xwiki/bin/view/Space/Page?param1=1#anchor", url.toString());
assertEquals("http://mainwiki.mywiki.tld/xwiki/bin/view/Space/Page?param1=1#anchor",
- urlFactory.getURL(url, this.oldcore.getXWikiContext()));
+ this.urlFactory.getURL(url, this.oldcore.getXWikiContext()));
}
/**
@@ -526,23 +538,23 @@ public void createURLWhenWikiDotHomeParameterFromSubWiki()
* set, xwiki.home should be returned. see: XWIKI-5981
*/
@Test
- public void getServerURLWithXWikiDotHomeEnabled() throws MalformedURLException
+ void getServerURLWithXWikiDotHomeEnabled() throws MalformedURLException
{
this.oldcore.getMockXWikiCfg().setProperty("xwiki.home", "http://mainwiki.mywiki.tld/");
initRequest("localhost", 8080);
// TODO: Fix getServerURL() so that is is consistent about returning a trailing / or not.
assertEquals("http://mainwiki.mywiki.tld/",
- urlFactory.getServerURL("xwiki", this.oldcore.getXWikiContext()).toString());
+ this.urlFactory.getServerURL("xwiki", this.oldcore.getXWikiContext()).toString());
assertEquals("http://mainwiki.mywiki.tld/",
- urlFactory.getServerURL(null, this.oldcore.getXWikiContext()).toString());
+ this.urlFactory.getServerURL(null, this.oldcore.getXWikiContext()).toString());
}
/**
* Proves that in a single wiki instance, URLs are always generated using xwiki.home if present. see: XWIKI-5981
*/
@Test
- public void createURLWhenXWikiDotHomeParameterNonVirtualMode()
+ void createURLWhenXWikiDotHomeParameterNonVirtualMode()
{
// Some proxies will modify the host field without adding a x-forwarded-host field,
// Using xwiki.home we should be able to make it work anyway.
@@ -551,25 +563,25 @@ public void createURLWhenXWikiDotHomeParameterNonVirtualMode()
// No wiki passed, assume main wiki. we should expect it to return mainwiki.mywiki.tld and not
// xwiki.mywiki.tld.
- URL url =
- urlFactory.createURL("Space", "Page", "view", "param1=1", "anchor", null, this.oldcore.getXWikiContext());
+ URL url = this.urlFactory.createURL("Space", "Page", "view", "param1=1", "anchor", null,
+ this.oldcore.getXWikiContext());
assertEquals("http://mainwiki.mywiki.tld/xwiki/bin/view/Space/Page?param1=1#anchor", url.toString());
assertEquals("/xwiki/bin/view/Space/Page?param1=1#anchor",
- urlFactory.getURL(url, this.oldcore.getXWikiContext()));
+ this.urlFactory.getURL(url, this.oldcore.getXWikiContext()));
// Pass "xwiki" as the wiki, expect same result.
- url = urlFactory.createURL("Space", "Page", "view", "param1=1", "anchor", "xwiki",
+ url = this.urlFactory.createURL("Space", "Page", "view", "param1=1", "anchor", "xwiki",
this.oldcore.getXWikiContext());
assertEquals("http://mainwiki.mywiki.tld/xwiki/bin/view/Space/Page?param1=1#anchor", url.toString());
assertEquals("/xwiki/bin/view/Space/Page?param1=1#anchor",
- urlFactory.getURL(url, this.oldcore.getXWikiContext()));
+ this.urlFactory.getURL(url, this.oldcore.getXWikiContext()));
}
/**
* Verify that jsessionid is removed from URL.
*/
@Test
- public void normalizeURL() throws MalformedURLException
+ void normalizeURL() throws MalformedURLException
{
assertEquals("http://www.xwiki.org/xwiki/bin/view/Blog/Bug+Fixing+Day+35?language=en",
XWikiServletURLFactory
@@ -579,7 +591,7 @@ public void normalizeURL() throws MalformedURLException
}
@Test
- public void createURLWithNestedSpaces()
+ void createURLWithNestedSpaces()
{
URL url = this.urlFactory.createURL("Space1.Space2", "Page", this.oldcore.getXWikiContext());
assertEquals("http://127.0.0.1/xwiki/bin/view/Space1/Space2/Page", url.toString());
@@ -589,7 +601,7 @@ public void createURLWithNestedSpaces()
* Check that if the attachment cannot be found a URL is still created with the right schema.
*/
@Test
- public void createAttachmentURLFileNotAvailable()
+ void createAttachmentURLFileNotAvailable()
{
XWikiContext xwikiContext = this.oldcore.getXWikiContext();
xwikiContext.setDoc(new XWikiDocument(new DocumentReference("xwiki", "currentspace", "currentpage")));
@@ -602,7 +614,7 @@ public void createAttachmentURLFileNotAvailable()
* Check that the version of the attachment is looked for to create the URL
*/
@Test
- public void createAttachmentURLFindRev()
+ void createAttachmentURLFindRev()
{
XWikiContext xwikiContext = this.oldcore.getXWikiContext();
XWikiDocument doc = new XWikiDocument(new DocumentReference("xwiki", "currentspace", "currentpage"));
@@ -619,7 +631,7 @@ public void createAttachmentURLFindRev()
* Checked that the nested spaces are correctly resolved for creating the URL
*/
@Test
- public void createAttachmentURLFindRevNestedSpace()
+ void createAttachmentURLFindRevNestedSpace()
{
XWikiContext xwikiContext = this.oldcore.getXWikiContext();
XWikiDocument doc = new XWikiDocument(
@@ -638,7 +650,7 @@ public void createAttachmentURLFindRevNestedSpace()
* Checked that the context doc is taken into account for finding the attachment to create the URL
*/
@Test
- public void createAttachmentURLFindRevAnotherContextDoc() throws XWikiException, WikiManagerException
+ void createAttachmentURLFindRevAnotherContextDoc() throws XWikiException, WikiManagerException
{
XWikiContext xwikiContext = this.oldcore.getXWikiContext();
XWikiDocument contextDoc = new XWikiDocument(new DocumentReference("xwiki", "currentspace", "currentpage"));
@@ -671,7 +683,7 @@ public void createAttachmentURLFindRevAnotherContextDoc() throws XWikiException,
* Checked that the translation is not mixed up with the document for getting the URL
*/
@Test
- public void createAttachmentURLFindRevNestedSpaceTranslation() throws XWikiException
+ void createAttachmentURLFindRevNestedSpaceTranslation() throws XWikiException
{
XWikiContext xwikiContext = this.oldcore.getXWikiContext();
XWikiDocument contextDoc = new XWikiDocument(
@@ -693,7 +705,7 @@ public void createAttachmentURLFindRevNestedSpaceTranslation() throws XWikiExcep
}
@Test
- public void createAttachmentURLWhenViewRevAndRevSpecifiedAndIsNotContextDoc()
+ void createAttachmentURLWhenViewRevAndRevSpecifiedAndIsNotContextDoc()
{
XWikiContext xwikiContext = this.oldcore.getXWikiContext();
xwikiContext.put("rev", "1.0");
@@ -703,8 +715,7 @@ public void createAttachmentURLWhenViewRevAndRevSpecifiedAndIsNotContextDoc()
}
@Test
- public void createAttachmentURLWhenViewRevAndRevSpecifiedAndIsContextDocAndAttachmentDoesntExist()
- throws XWikiException
+ void createAttachmentURLWhenViewRevAndRevSpecifiedAndIsContextDocAndAttachmentDoesntExist() throws XWikiException
{
XWikiContext xwikiContext = this.oldcore.getXWikiContext();
xwikiContext.put("rev", "1.0");
@@ -721,7 +732,7 @@ public void createAttachmentURLWhenViewRevAndRevSpecifiedAndIsContextDocAndAttac
}
@Test
- public void createURLWhenShowViewActionFalse()
+ void createURLWhenShowViewActionFalse()
{
doReturn(false).when(this.oldcore.getSpyXWiki()).showViewAction(any(XWikiContext.class));
@@ -730,7 +741,7 @@ public void createURLWhenShowViewActionFalse()
}
@Test
- public void createURLWhenShowViewActionFalseAndSpaceIsNamedAfterAnAction()
+ void createURLWhenShowViewActionFalseAndSpaceIsNamedAfterAnAction()
{
doReturn(false).when(this.oldcore.getSpyXWiki()).showViewAction(any(XWikiContext.class));
@@ -739,7 +750,7 @@ public void createURLWhenShowViewActionFalseAndSpaceIsNamedAfterAnAction()
}
@Test
- public void createResourceURL()
+ void createResourceURL()
{
// Verify that the URL factory encodes each path segment.
URL url = this.urlFactory.createResourceURL("o;ne/t?w&o/t=hr#e e", false, this.oldcore.getXWikiContext());
@@ -768,7 +779,7 @@ public String toString()
}
@Test
- public void createURLWhenCharactersNeedToBeEncoded() throws Exception
+ void createURLWhenCharactersNeedToBeEncoded() throws Exception
{
// Note: The query string is not encoded, and used as is. It's the responsibility of the caller to
// url-encode it.
diff --git a/xwiki-platform-core/xwiki-platform-ratings/xwiki-platform-ratings-api/pom.xml b/xwiki-platform-core/xwiki-platform-ratings/xwiki-platform-ratings-api/pom.xml
index 403bdd7dbeb2..065d1c4ab432 100644
--- a/xwiki-platform-core/xwiki-platform-ratings/xwiki-platform-ratings-api/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-ratings/xwiki-platform-ratings-api/pom.xml
@@ -68,8 +68,8 @@
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
test
diff --git a/xwiki-platform-core/xwiki-platform-realtime/xwiki-platform-realtime-api/pom.xml b/xwiki-platform-core/xwiki-platform-realtime/xwiki-platform-realtime-api/pom.xml
index 32839ee4492d..9b803fd5e132 100644
--- a/xwiki-platform-core/xwiki-platform-realtime/xwiki-platform-realtime-api/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-realtime/xwiki-platform-realtime-api/pom.xml
@@ -67,8 +67,8 @@
test
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
test
diff --git a/xwiki-platform-core/xwiki-platform-realtime/xwiki-platform-realtime-wiki/xwiki-platform-realtime-wiki-test/xwiki-platform-realtime-wiki-test-docker/pom.xml b/xwiki-platform-core/xwiki-platform-realtime/xwiki-platform-realtime-wiki/xwiki-platform-realtime-wiki-test/xwiki-platform-realtime-wiki-test-docker/pom.xml
index 1772f97b4724..ca7de3518945 100644
--- a/xwiki-platform-core/xwiki-platform-realtime/xwiki-platform-realtime-wiki/xwiki-platform-realtime-wiki-test/xwiki-platform-realtime-wiki-test-docker/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-realtime/xwiki-platform-realtime-wiki/xwiki-platform-realtime-wiki-test/xwiki-platform-realtime-wiki-test-docker/pom.xml
@@ -76,8 +76,13 @@
- javax.websocket
- javax.websocket-api
+ jakarta.websocket
+ jakarta.websocket-api
+ test
+
+
+ jakarta.websocket
+ jakarta.websocket-client-api
test
diff --git a/xwiki-platform-core/xwiki-platform-realtime/xwiki-platform-realtime-wysiwyg/xwiki-platform-realtime-wysiwyg-test/xwiki-platform-realtime-wysiwyg-test-docker/pom.xml b/xwiki-platform-core/xwiki-platform-realtime/xwiki-platform-realtime-wysiwyg/xwiki-platform-realtime-wysiwyg-test/xwiki-platform-realtime-wysiwyg-test-docker/pom.xml
index de7cbfacc8d0..5fa97f7e3601 100644
--- a/xwiki-platform-core/xwiki-platform-realtime/xwiki-platform-realtime-wysiwyg/xwiki-platform-realtime-wysiwyg-test/xwiki-platform-realtime-wysiwyg-test-docker/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-realtime/xwiki-platform-realtime-wysiwyg/xwiki-platform-realtime-wysiwyg-test/xwiki-platform-realtime-wysiwyg-test-docker/pom.xml
@@ -107,8 +107,13 @@
- javax.websocket
- javax.websocket-api
+ jakarta.websocket
+ jakarta.websocket-api
+ test
+
+
+ jakarta.websocket
+ jakarta.websocket-client-api
test
diff --git a/xwiki-platform-core/xwiki-platform-refactoring/xwiki-platform-refactoring-default/pom.xml b/xwiki-platform-core/xwiki-platform-refactoring/xwiki-platform-refactoring-default/pom.xml
index 9b4a3f3f7d7a..8b0e736747f4 100644
--- a/xwiki-platform-core/xwiki-platform-refactoring/xwiki-platform-refactoring-default/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-refactoring/xwiki-platform-refactoring-default/pom.xml
@@ -62,11 +62,6 @@
-
- javax.servlet
- javax.servlet-api
- test
-
org.xwiki.commons
xwiki-commons-tool-test-component
diff --git a/xwiki-platform-core/xwiki-platform-rendering/xwiki-platform-rendering-async/xwiki-platform-rendering-async-macro/pom.xml b/xwiki-platform-core/xwiki-platform-rendering/xwiki-platform-rendering-async/xwiki-platform-rendering-async-macro/pom.xml
index 5a710769a918..3b99dfafd16e 100644
--- a/xwiki-platform-core/xwiki-platform-rendering/xwiki-platform-rendering-async/xwiki-platform-rendering-async-macro/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-rendering/xwiki-platform-rendering-async/xwiki-platform-rendering-async-macro/pom.xml
@@ -83,13 +83,13 @@
test
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
test
- org.mortbay.jasper
- apache-el
+ org.glassfish.expressly
+ expressly
test
diff --git a/xwiki-platform-core/xwiki-platform-rendering/xwiki-platform-rendering-macros/pom.xml b/xwiki-platform-core/xwiki-platform-rendering/xwiki-platform-rendering-macros/pom.xml
index 84bc30ade1ba..1b9a3e464f4d 100644
--- a/xwiki-platform-core/xwiki-platform-rendering/xwiki-platform-rendering-macros/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-rendering/xwiki-platform-rendering-macros/pom.xml
@@ -64,8 +64,8 @@
test
- org.mortbay.jasper
- apache-el
+ org.glassfish.expressly
+ expressly
test
diff --git a/xwiki-platform-core/xwiki-platform-rendering/xwiki-platform-rendering-macros/xwiki-platform-rendering-macro-context/pom.xml b/xwiki-platform-core/xwiki-platform-rendering/xwiki-platform-rendering-macros/xwiki-platform-rendering-macro-context/pom.xml
index c72705e23d4c..d7103ba315a0 100644
--- a/xwiki-platform-core/xwiki-platform-rendering/xwiki-platform-rendering-macros/xwiki-platform-rendering-macro-context/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-rendering/xwiki-platform-rendering-macros/xwiki-platform-rendering-macro-context/pom.xml
@@ -69,13 +69,13 @@
test
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
test
- org.mortbay.jasper
- apache-el
+ org.glassfish.expressly
+ expressly
test
diff --git a/xwiki-platform-core/xwiki-platform-rendering/xwiki-platform-rendering-wikimacro/xwiki-platform-rendering-wikimacro-store/pom.xml b/xwiki-platform-core/xwiki-platform-rendering/xwiki-platform-rendering-wikimacro/xwiki-platform-rendering-wikimacro-store/pom.xml
index f52a6ce8396d..5c4f1226352f 100644
--- a/xwiki-platform-core/xwiki-platform-rendering/xwiki-platform-rendering-wikimacro/xwiki-platform-rendering-wikimacro-store/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-rendering/xwiki-platform-rendering-wikimacro/xwiki-platform-rendering-wikimacro-store/pom.xml
@@ -162,14 +162,8 @@
test
- org.mortbay.jasper
- apache-el
- test
-
-
-
- org.jmock
- jmock-legacy
+ org.glassfish.expressly
+ expressly
test
diff --git a/xwiki-platform-core/xwiki-platform-rendering/xwiki-platform-rendering-xwiki/pom.xml b/xwiki-platform-core/xwiki-platform-rendering/xwiki-platform-rendering-xwiki/pom.xml
index 1c86a6133410..70e49e9a9426 100644
--- a/xwiki-platform-core/xwiki-platform-rendering/xwiki-platform-rendering-xwiki/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-rendering/xwiki-platform-rendering-xwiki/pom.xml
@@ -119,11 +119,6 @@
xwiki-platform-localization-api
${project.version}
-
diff --git a/xwiki-platform-core/xwiki-platform-resource/xwiki-platform-resource-servlet/pom.xml b/xwiki-platform-core/xwiki-platform-resource/xwiki-platform-resource-servlet/pom.xml
index a089fbae3c4a..207176586c70 100644
--- a/xwiki-platform-core/xwiki-platform-resource/xwiki-platform-resource-servlet/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-resource/xwiki-platform-resource-servlet/pom.xml
@@ -48,10 +48,11 @@
xwiki-platform-tika-detect
${project.version}
-
- javax.servlet
- javax.servlet-api
+
+ jakarta.servlet
+ jakarta.servlet-api
+
org.xwiki.commons
diff --git a/xwiki-platform-core/xwiki-platform-resource/xwiki-platform-resource-servlet/src/main/java/org/xwiki/resource/servlet/AbstractServletResourceReferenceHandler.java b/xwiki-platform-core/xwiki-platform-resource/xwiki-platform-resource-servlet/src/main/java/org/xwiki/resource/servlet/AbstractServletResourceReferenceHandler.java
index 7cdb6d3004be..d2584f15e4f2 100644
--- a/xwiki-platform-core/xwiki-platform-resource/xwiki-platform-resource-servlet/src/main/java/org/xwiki/resource/servlet/AbstractServletResourceReferenceHandler.java
+++ b/xwiki-platform-core/xwiki-platform-resource/xwiki-platform-resource-servlet/src/main/java/org/xwiki/resource/servlet/AbstractServletResourceReferenceHandler.java
@@ -27,9 +27,6 @@
import java.util.Date;
import java.util.Objects;
-import javax.inject.Inject;
-import javax.servlet.http.HttpServletResponse;
-
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpHeaders;
@@ -48,6 +45,9 @@
import org.xwiki.resource.ResourceType;
import org.xwiki.tika.internal.TikaUtils;
+import jakarta.inject.Inject;
+import jakarta.servlet.http.HttpServletResponse;
+
/**
* Base class for {@link ResourceReferenceHandler}s that can handle servlet resource requests.
*
@@ -122,18 +122,19 @@ private boolean shouldBrowserUseCachedContent(R resourceReference)
// If the request contains an "If-Modified-Since" header and the requested resource has not been modified then
// return a 304 Not Modified to tell the browser to use its cached version.
Request request = this.container.getRequest();
- if (request instanceof ServletRequest
- && ((ServletRequest) request).getHttpServletRequest().getHeader("If-Modified-Since") != null
- && isResourceCacheable(resourceReference))
- {
+ if (request instanceof ServletRequest servletRequest
+ && servletRequest.getRequest().getHeader("If-Modified-Since") != null
+ && isResourceCacheable(resourceReference)) {
// The user probably used F5 to reload the page and the browser checks if there are changes.
Response response = this.container.getResponse();
- if (response instanceof ServletResponse) {
+ if (response instanceof ServletResponse servletResponse) {
// Return the 304 Not Modified.
- ((ServletResponse) response).getHttpServletResponse().setStatus(HttpServletResponse.SC_NOT_MODIFIED);
+ servletResponse.getResponse().setStatus(HttpServletResponse.SC_NOT_MODIFIED);
+
return true;
}
}
+
return false;
}
@@ -169,7 +170,7 @@ private void serveResource(R resourceReference, InputStream rawResourceStream)
throws ResourceReferenceHandlerException
{
InputStream resourceStream = rawResourceStream;
-
+
// Make sure the resource stream supports mark & reset which is needed in order be able to detect the
// content type without affecting the stream (Tika may need to read a few bytes from the start of the
// stream, in which case it will mark & reset the stream).
@@ -189,8 +190,8 @@ private void serveResource(R resourceReference, InputStream rawResourceStream)
}
/**
- * Computes the content type of the resource. By default the content type is inferred by {@link
- * TikaUtils#detect(InputStream, String)} based on the resource content and name.
+ * Computes the content type of the resource. By default the content type is inferred by
+ * {@link TikaUtils#detect(InputStream, String)} based on the resource content and name.
*
* @param resourceStream the stream of the requested resource
* @param resourceReference the reference of the request resource
@@ -198,8 +199,7 @@ private void serveResource(R resourceReference, InputStream rawResourceStream)
* @throws IOException in case of error during the content type analysis
* @since 13.3RC1
*/
- protected String getContentType(InputStream resourceStream, R resourceReference)
- throws IOException
+ protected String getContentType(InputStream resourceStream, R resourceReference) throws IOException
{
return TikaUtils.detect(resourceStream, getResourceName(resourceReference));
}
@@ -228,7 +228,7 @@ private void setResponseHeaders(Response response, R resourceReference)
if (!(response instanceof ServletResponse)) {
return;
}
- HttpServletResponse httpResponse = ((ServletResponse) response).getHttpServletResponse();
+ HttpServletResponse httpResponse = ((ServletResponse) response).getResponse();
// Cache the resource if possible.
if (isResourceCacheable(resourceReference)) {
@@ -288,8 +288,9 @@ private void sendError(int statusCode, String message, Object... parameters)
throws ResourceReferenceHandlerException
{
Response response = this.container.getResponse();
- if (response instanceof ServletResponse) {
- HttpServletResponse httpResponse = ((ServletResponse) response).getHttpServletResponse();
+ if (response instanceof ServletResponse servletResponse) {
+ HttpServletResponse httpResponse = servletResponse.getResponse();
+
try {
httpResponse.sendError(statusCode, String.format(message, parameters));
} catch (IOException e) {
diff --git a/xwiki-platform-core/xwiki-platform-resource/xwiki-platform-resource-servlet/src/main/java/org/xwiki/resource/servlet/ResourceReferenceHandlerServlet.java b/xwiki-platform-core/xwiki-platform-resource/xwiki-platform-resource-servlet/src/main/java/org/xwiki/resource/servlet/ResourceReferenceHandlerServlet.java
index c0b733882a84..00ec33ca78a0 100644
--- a/xwiki-platform-core/xwiki-platform-resource/xwiki-platform-resource-servlet/src/main/java/org/xwiki/resource/servlet/ResourceReferenceHandlerServlet.java
+++ b/xwiki-platform-core/xwiki-platform-resource/xwiki-platform-resource-servlet/src/main/java/org/xwiki/resource/servlet/ResourceReferenceHandlerServlet.java
@@ -23,11 +23,6 @@
import java.lang.reflect.Type;
import java.util.Collections;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
import org.xwiki.component.manager.ComponentLookupException;
import org.xwiki.component.manager.ComponentManager;
import org.xwiki.component.util.DefaultParameterizedType;
@@ -42,14 +37,22 @@
import org.xwiki.resource.ResourceType;
import org.xwiki.url.ExtendedURL;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServlet;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+
/**
* Handles any Resource Reference discovered by the Routing Filter and put in the HTTP Request. Any module who wish to
* add a new Resource Type in the XWiki URL simply needs to register a Handler component (of role
* {@link org.xwiki.resource.ResourceReferenceHandler}) and any URL matching the corresponding {@link ResourceType} will
* be handled.
+ *
+ * While the class is much older, the since annotation was moved to 42.0.0 because it implements a completely
+ * different API from Java point of view.
*
* @version $Id$
- * @since 7.1M1
+ * @since 42.0.0
*/
public class ResourceReferenceHandlerServlet extends HttpServlet
{
@@ -58,7 +61,7 @@ public class ResourceReferenceHandlerServlet extends HttpServlet
*/
private static final long serialVersionUID = 1L;
- private ComponentManager rootComponentManager;
+ private transient ComponentManager rootComponentManager;
@Override
public void init() throws ServletException
@@ -136,9 +139,7 @@ private void initializeContainerComponent(HttpServletRequest httpRequest, HttpSe
throw new ServletException("Failed to locate a ServletContainerInitializer component", e);
}
try {
- containerInitializer.initializeRequest(httpRequest);
- containerInitializer.initializeResponse(httpResponse);
- containerInitializer.initializeSession(httpRequest);
+ containerInitializer.initializeRequest(httpRequest, httpResponse);
} catch (ServletContainerException e) {
throw new ServletException("Failed to initialize Request/Response or Session", e);
}
diff --git a/xwiki-platform-core/xwiki-platform-resource/xwiki-platform-resource-servlet/src/main/java/org/xwiki/resource/servlet/RoutingFilter.java b/xwiki-platform-core/xwiki-platform-resource/xwiki-platform-resource-servlet/src/main/java/org/xwiki/resource/servlet/RoutingFilter.java
index 96683321275a..b2fa1d1456f2 100644
--- a/xwiki-platform-core/xwiki-platform-resource/xwiki-platform-resource-servlet/src/main/java/org/xwiki/resource/servlet/RoutingFilter.java
+++ b/xwiki-platform-core/xwiki-platform-resource/xwiki-platform-resource-servlet/src/main/java/org/xwiki/resource/servlet/RoutingFilter.java
@@ -24,14 +24,14 @@
import java.net.URL;
import java.util.Collections;
-import javax.servlet.Filter;
-import javax.servlet.FilterChain;
-import javax.servlet.FilterConfig;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.Filter;
+import jakarta.servlet.FilterChain;
+import jakarta.servlet.FilterConfig;
+import jakarta.servlet.ServletContext;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.ServletRequest;
+import jakarta.servlet.ServletResponse;
+import jakarta.servlet.http.HttpServletRequest;
import org.apache.commons.lang3.StringUtils;
import org.xwiki.component.manager.ComponentLookupException;
@@ -46,23 +46,26 @@
/**
* Decides how to route an incoming URL into the XWiki system. There are various possibilities:
*
- * If there's a registered component of type {@link org.xwiki.resource.ResourceReferenceHandler} matching the
- * {@link ResourceType} passed in the URL (for example when using the {@code standard} URL scheme, the Resource
- * Type is the segment path just after the Context Path, i.e. {@code bin} in
- * {@code http:///xwiki/bin/view/Space/Page}), then the {@code resourceReferenceHandler} Servlet is
- * called to handle it.
- * If not, then continue executing the rest of the {@code web.xml} file, thus bridging to the old system,
- * including the existing Struts Action Servlet.
+ * If there's a registered component of type {@link org.xwiki.resource.ResourceReferenceHandler} matching the
+ * {@link ResourceType} passed in the URL (for example when using the {@code standard} URL scheme, the Resource Type is
+ * the segment path just after the Context Path, i.e. {@code bin} in {@code http:///xwiki/bin/view/Space/Page}),
+ * then the {@code resourceReferenceHandler} Servlet is called to handle it.
+ * If not, then continue executing the rest of the {@code web.xml} file, thus bridging to the old system, including
+ * the existing Struts Action Servlet.
*
* As time progresses it is expected that more and more Resource Types will have registered
* {@link org.xwiki.resource.ResourceReferenceHandler}.
+ *
+ * While the class is much older, the since annotation was moved to 42.0.0 because it implement a completely different
+ * API from Java point of view.
*
* @version $Id$
- * @since 7.1M1
+ * @since 42.0.0
*/
public class RoutingFilter implements Filter
{
static final String RESOURCE_TYPE_NAME = "resourceType";
+
static final String RESOURCE_EXTENDEDURL = "resourceURL";
private ComponentManager rootComponentManager;
@@ -169,8 +172,8 @@ private ResourceTypeResolver getResourceTypeResolver() throws Servl
{
ResourceTypeResolver urlResourceTypeResolver;
try {
- urlResourceTypeResolver = this.rootComponentManager.getInstance(
- new DefaultParameterizedType(null, ResourceTypeResolver.class, ExtendedURL.class));
+ urlResourceTypeResolver = this.rootComponentManager
+ .getInstance(new DefaultParameterizedType(null, ResourceTypeResolver.class, ExtendedURL.class));
} catch (ComponentLookupException e) {
// Should not happen since an ExtendedURL Resource Type Resolver should exist on the system.
throw new ServletException("Failed to locate an ExtendedURL Resource Type Resolver component", e);
@@ -208,7 +211,8 @@ private URL getRequestURL(HttpServletRequest request) throws ServletException
// Shouldn't happen normally!
throw new ServletException(
String.format("Failed to reconstruct URL from HTTP Servlet Request (URL [%s], Query String [%s])",
- request.getRequestURL(), request.getQueryString()), e);
+ request.getRequestURL(), request.getQueryString()),
+ e);
}
return url;
}
diff --git a/xwiki-platform-core/xwiki-platform-rest/xwiki-platform-rest-jersey/pom.xml b/xwiki-platform-core/xwiki-platform-rest/xwiki-platform-rest-jersey/pom.xml
index 3e354039c1fa..b7159510ac17 100644
--- a/xwiki-platform-core/xwiki-platform-rest/xwiki-platform-rest-jersey/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-rest/xwiki-platform-rest-jersey/pom.xml
@@ -84,8 +84,17 @@
aopalliance
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
+
+
+ javax.validation
+ validation-api
+
+
+ org.xwiki.commons
+ xwiki-commons-jakartabridge-servlet
+ ${commons.version}
diff --git a/xwiki-platform-core/xwiki-platform-rest/xwiki-platform-rest-jersey/src/main/java/org/xwiki/rest/jersey/internal/JerseyServletContainer.java b/xwiki-platform-core/xwiki-platform-rest/xwiki-platform-rest-jersey/src/main/java/org/xwiki/rest/jersey/internal/JerseyServletContainer.java
index 630611267ede..aaa994920a13 100644
--- a/xwiki-platform-core/xwiki-platform-rest/xwiki-platform-rest-jersey/src/main/java/org/xwiki/rest/jersey/internal/JerseyServletContainer.java
+++ b/xwiki-platform-core/xwiki-platform-rest/xwiki-platform-rest-jersey/src/main/java/org/xwiki/rest/jersey/internal/JerseyServletContainer.java
@@ -24,28 +24,32 @@
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicInteger;
-import javax.inject.Inject;
-import javax.inject.Named;
-import javax.inject.Singleton;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServlet;
-
import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.servlet.ServletContainer;
import org.xwiki.component.annotation.Component;
import org.xwiki.component.descriptor.ComponentDescriptor;
import org.xwiki.component.manager.ComponentManager;
+import org.xwiki.jakartabridge.servlet.JakartaServletBridge;
import org.xwiki.rest.XWikiRestComponent;
+import jakarta.inject.Inject;
+import jakarta.inject.Named;
+import jakarta.inject.Singleton;
+import jakarta.servlet.ServletContext;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.ServletRequest;
+import jakarta.servlet.ServletResponse;
+import jakarta.servlet.http.HttpServlet;
+
/**
* Encapsulate the Jersey {@link ServletContainer} to control it's initialization and reload (when a REST component is
* registered/unregistered).
+ *
+ * While the class is much older, the since annotation was moved to 42.0.0 because it implement a completely different
+ * API from Java point of view.
*
* @version $Id$
- * @since 16.2.0RC1
+ * @since 42.0.0
*/
@Component(roles = JerseyServletContainer.class)
@Singleton
@@ -66,7 +70,11 @@ public void init() throws ServletException
{
// Create and initialize the Jersey servlet
ServletContainer newContainer = new ServletContainer(createResourceConfig());
- newContainer.init(getServletConfig());
+ try {
+ newContainer.init(JakartaServletBridge.toJavax(getServletConfig()));
+ } catch (javax.servlet.ServletException e) {
+ throw new ServletException(e);
+ }
// Remember the previous container
ServletContainer previousContainer = this.container;
@@ -128,7 +136,9 @@ public void service(ServletRequest req, ServletResponse res) throws ServletExcep
try {
// Execute the request
- this.container.service(req, res);
+ this.container.service(JakartaServletBridge.toJavax(req), JakartaServletBridge.toJavax(res));
+ } catch (javax.servlet.ServletException e) {
+ throw new ServletException(e);
} finally {
// Decrement the counter
counter.decrementAndGet();
@@ -159,6 +169,6 @@ public void destroy()
@Override
public ServletContext getServletContext()
{
- return this.container.getServletContext();
+ return JakartaServletBridge.toJakarta(this.container.getServletContext());
}
}
diff --git a/xwiki-platform-core/xwiki-platform-rest/xwiki-platform-rest-jersey/src/main/java/org/xwiki/rest/jersey/internal/XWikiRESTServlet.java b/xwiki-platform-core/xwiki-platform-rest/xwiki-platform-rest-jersey/src/main/java/org/xwiki/rest/jersey/internal/XWikiRESTServlet.java
index b433c07cbc31..9051119406c9 100644
--- a/xwiki-platform-core/xwiki-platform-rest/xwiki-platform-rest-jersey/src/main/java/org/xwiki/rest/jersey/internal/XWikiRESTServlet.java
+++ b/xwiki-platform-core/xwiki-platform-rest/xwiki-platform-rest-jersey/src/main/java/org/xwiki/rest/jersey/internal/XWikiRESTServlet.java
@@ -21,25 +21,28 @@
import java.io.IOException;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServlet;
-
import org.glassfish.jersey.servlet.ServletContainer;
import org.glassfish.jersey.servlet.ServletProperties;
import org.xwiki.component.manager.ComponentLookupException;
import org.xwiki.component.manager.ComponentManager;
+import jakarta.servlet.ServletContext;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.ServletRequest;
+import jakarta.servlet.ServletResponse;
+import jakarta.servlet.http.HttpServlet;
+
/**
* Extends {@link ServletContainer} to add XWiki specific pieces.
*
* Injection of XWikiResource components
*
+ *
+ * While the class is much older, the since annotation was moved to 42.0.0 because it implement a completely different
+ * API from Java point of view.
*
* @version $Id$
- * @since 16.2.0RC1
+ * @since 42.0.0
*/
public class XWikiRESTServlet extends HttpServlet
{
diff --git a/xwiki-platform-core/xwiki-platform-rest/xwiki-platform-rest-server/pom.xml b/xwiki-platform-core/xwiki-platform-rest/xwiki-platform-rest-server/pom.xml
index 1e1eab8f91d6..776b73d9b2b3 100644
--- a/xwiki-platform-core/xwiki-platform-rest/xwiki-platform-rest-server/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-rest/xwiki-platform-rest-server/pom.xml
@@ -129,6 +129,10 @@
javax.servlet
javax.servlet-api
+
+ jakarta.servlet
+ jakarta.servlet-api
+
org.xwiki.platform
diff --git a/xwiki-platform-core/xwiki-platform-scheduler/xwiki-platform-scheduler-api/pom.xml b/xwiki-platform-core/xwiki-platform-scheduler/xwiki-platform-scheduler-api/pom.xml
index 449a94558a46..3a590853fdc6 100644
--- a/xwiki-platform-core/xwiki-platform-scheduler/xwiki-platform-scheduler-api/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-scheduler/xwiki-platform-scheduler-api/pom.xml
@@ -46,21 +46,11 @@
org.quartz-scheduler
quartz
-
- javax.servlet
- javax.servlet-api
-
org.xwiki.platform
- xwiki-platform-oldcore
+ xwiki-platform-test-oldcore
${project.version}
- test-jar
- test
-
-
- org.xwiki.commons
- xwiki-commons-tool-test-component
- ${commons.version}
+ pom
test
diff --git a/xwiki-platform-core/xwiki-platform-search/xwiki-platform-search-solr/xwiki-platform-search-solr-api/pom.xml b/xwiki-platform-core/xwiki-platform-search/xwiki-platform-search-solr/xwiki-platform-search-solr-api/pom.xml
index a8bdd47de815..50b74818d3df 100644
--- a/xwiki-platform-core/xwiki-platform-search/xwiki-platform-search-solr/xwiki-platform-search-solr-api/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-search/xwiki-platform-search-solr/xwiki-platform-search-solr-api/pom.xml
@@ -53,6 +53,11 @@
org.apache.solr
solr-core
+
+
+ javax.validation
+ validation-api
+
org.apache.solr
solr-analysis-extras
@@ -134,11 +139,6 @@
${commons.version}
test
-
- javax.servlet
- javax.servlet-api
- test
-
org.xwiki.platform
xwiki-platform-test-oldcore
diff --git a/xwiki-platform-core/xwiki-platform-security/xwiki-platform-security-authentication/xwiki-platform-security-authentication-api/pom.xml b/xwiki-platform-core/xwiki-platform-security/xwiki-platform-security-authentication/xwiki-platform-security-authentication-api/pom.xml
index 51c8892594fb..ed93418e01f7 100644
--- a/xwiki-platform-core/xwiki-platform-security/xwiki-platform-security-authentication/xwiki-platform-security-authentication-api/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-security/xwiki-platform-security-authentication/xwiki-platform-security-authentication-api/pom.xml
@@ -77,8 +77,13 @@
${project.version}
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
+
+
+ org.xwiki.commons
+ xwiki-commons-jakartabridge-servlet
+ ${commons.version}
diff --git a/xwiki-platform-core/xwiki-platform-security/xwiki-platform-security-authentication/xwiki-platform-security-authentication-api/src/main/java/org/xwiki/security/authentication/AuthenticationFailureManager.java b/xwiki-platform-core/xwiki-platform-security/xwiki-platform-security-authentication/xwiki-platform-security-authentication-api/src/main/java/org/xwiki/security/authentication/AuthenticationFailureManager.java
index 33318e7dd175..8a3db61c99cd 100644
--- a/xwiki-platform-core/xwiki-platform-security/xwiki-platform-security-authentication/xwiki-platform-security-authentication-api/src/main/java/org/xwiki/security/authentication/AuthenticationFailureManager.java
+++ b/xwiki-platform-core/xwiki-platform-security/xwiki-platform-security-authentication/xwiki-platform-security-authentication-api/src/main/java/org/xwiki/security/authentication/AuthenticationFailureManager.java
@@ -19,10 +19,12 @@
*/
package org.xwiki.security.authentication;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
import org.xwiki.component.annotation.Role;
+import org.xwiki.jakartabridge.servlet.JakartaServletBridge;
import org.xwiki.model.reference.DocumentReference;
+import org.xwiki.stability.Unstable;
/**
* Manager of the authentication failures strategies.
@@ -35,12 +37,33 @@ public interface AuthenticationFailureManager
{
/**
* Record that the given username fails to authenticate.
+ *
* @param username the username that fails the authentication. Should be the username typed by the user and not a
- * computed login.
+ * computed login.
* @param request a wrapping of the request used for the authentication.
* @return true if the authentication failure limits defined by the configuration has been reached.
+ * @deprecated use {@link #recordAuthenticationFailure(String, HttpServletRequest)}
*/
- boolean recordAuthenticationFailure(String username, HttpServletRequest request);
+ @Deprecated(since = "42.0.0")
+ default boolean recordAuthenticationFailure(String username, javax.servlet.http.HttpServletRequest request)
+ {
+ return recordAuthenticationFailure(username, JakartaServletBridge.toJakarta(request));
+ }
+
+ /**
+ * Record that the given username fails to authenticate.
+ *
+ * @param username the username that fails the authentication. Should be the username typed by the user and not a
+ * computed login.
+ * @param request a wrapping of the request used for the authentication.
+ * @return true if the authentication failure limits defined by the configuration has been reached.
+ * @since 42.0.0
+ */
+ @Unstable
+ default boolean recordAuthenticationFailure(String username, HttpServletRequest request)
+ {
+ return recordAuthenticationFailure(username, JakartaServletBridge.toJavax(request));
+ }
/**
* Remove all records of authentication failure for the given user.
@@ -56,19 +79,62 @@ public interface AuthenticationFailureManager
* not a computed login.
* @param request a wrapping of the request used for the authentication.
* @return the aggregated form information to add to the standard login form, or an empty string.
+ * @deprecated use {@link #getForm(String, HttpServletRequest)} instead
+ */
+ @Deprecated(since = "42.0.0")
+ default String getForm(String username, javax.servlet.http.HttpServletRequest request)
+ {
+ return getForm(username, JakartaServletBridge.toJakarta(request));
+ }
+
+ /**
+ * If the user reached the authentication failure limit, aggregate form information returned by the different
+ * strategies (see {@link AuthenticationFailureStrategy#getForm(String)}). Else return an empty string.
+ * @param username the username that is used for the authentication. Should be the username typed by the user and
+ * not a computed login.
+ * @param request a wrapping of the request used for the authentication.
+ * @return the aggregated form information to add to the standard login form, or an empty string.
+ * @since 42.0.0
*/
- String getForm(String username, HttpServletRequest request);
+ @Unstable
+ default String getForm(String username, HttpServletRequest request)
+ {
+ return getForm(username, JakartaServletBridge.toJavax(request));
+ }
/**
* If the user reached the authentication failure limit, validate the form information against the different
- * strategies used and return the result
- * (see {@link AuthenticationFailureStrategy#validateForm(String, HttpServletRequest)}). Else returns true.
+ * strategies used and return the result (see
+ * {@link AuthenticationFailureStrategy#validateForm(String, HttpServletRequest)}). Else returns true.
+ *
* @param username the username that is used for the authentication. Should be the username typed by the user and
- * not a computed login.
+ * not a computed login.
+ * @param request a wrapping of the request used for the authentication.
+ * @return true if all strategies validate the request or if the user didn't reach the limit.
+ * @deprecated use {@link #validateForm(String, HttpServletRequest)} instead
+ */
+ @Deprecated(since = "42.0.0")
+ default boolean validateForm(String username, javax.servlet.http.HttpServletRequest request)
+ {
+ return validateForm(username, JakartaServletBridge.toJakarta(request));
+ }
+
+ /**
+ * If the user reached the authentication failure limit, validate the form information against the different
+ * strategies used and return the result (see
+ * {@link AuthenticationFailureStrategy#validateForm(String, HttpServletRequest)}). Else returns true.
+ *
+ * @param username the username that is used for the authentication. Should be the username typed by the user and
+ * not a computed login.
* @param request a wrapping of the request used for the authentication.
* @return true if all strategies validate the request or if the user didn't reach the limit.
+ * @since 42.0.0
*/
- boolean validateForm(String username, HttpServletRequest request);
+ @Unstable
+ default boolean validateForm(String username, HttpServletRequest request)
+ {
+ return validateForm(username, JakartaServletBridge.toJavax(request));
+ }
/**
* If the user reached the authentication failure limit, aggregate the error message of the different strategies
diff --git a/xwiki-platform-core/xwiki-platform-security/xwiki-platform-security-authentication/xwiki-platform-security-authentication-api/src/main/java/org/xwiki/security/authentication/AuthenticationFailureStrategy.java b/xwiki-platform-core/xwiki-platform-security/xwiki-platform-security-authentication/xwiki-platform-security-authentication-api/src/main/java/org/xwiki/security/authentication/AuthenticationFailureStrategy.java
index a57f5b319fba..1abca3995d49 100644
--- a/xwiki-platform-core/xwiki-platform-security/xwiki-platform-security-authentication/xwiki-platform-security-authentication-api/src/main/java/org/xwiki/security/authentication/AuthenticationFailureStrategy.java
+++ b/xwiki-platform-core/xwiki-platform-security/xwiki-platform-security-authentication/xwiki-platform-security-authentication-api/src/main/java/org/xwiki/security/authentication/AuthenticationFailureStrategy.java
@@ -19,9 +19,11 @@
*/
package org.xwiki.security.authentication;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
import org.xwiki.component.annotation.Role;
+import org.xwiki.jakartabridge.servlet.JakartaServletBridge;
+import org.xwiki.stability.Unstable;
/**
* Describes a strategy to perform in case the limit of authentication failures is reached.
@@ -57,8 +59,25 @@ public interface AuthenticationFailureStrategy
* @param username the username used for the authentication failure.
* @param request the authentication request.
* @return true if the authentication request can be validated, i.e. if the user should be authorized to login.
+ * @deprecated use {@link #validateForm(String, HttpServletRequest)} instead
*/
- boolean validateForm(String username, HttpServletRequest request);
+ @Deprecated(since = "42.0.0")
+ default boolean validateForm(String username, javax.servlet.http.HttpServletRequest request)
+ {
+ return validateForm(username, JakartaServletBridge.toJakarta(request));
+ }
+
+ /**
+ * @param username the username used for the authentication failure.
+ * @param request the authentication request.
+ * @return true if the authentication request can be validated, i.e. if the user should be authorized to login.
+ * @since 42.0.0
+ */
+ @Unstable
+ default boolean validateForm(String username, HttpServletRequest request)
+ {
+ return validateForm(username, JakartaServletBridge.toJavax(request));
+ }
/**
* Notify the strategy about an authentication failure limit reached.
diff --git a/xwiki-platform-core/xwiki-platform-security/xwiki-platform-security-authentication/xwiki-platform-security-authentication-default/pom.xml b/xwiki-platform-core/xwiki-platform-security/xwiki-platform-security-authentication/xwiki-platform-security-authentication-default/pom.xml
index 3d4cb1606ac6..22bc900ab132 100644
--- a/xwiki-platform-core/xwiki-platform-security/xwiki-platform-security-authentication/xwiki-platform-security-authentication-default/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-security/xwiki-platform-security-authentication/xwiki-platform-security-authentication-default/pom.xml
@@ -31,7 +31,7 @@
Default implementation of the Authentication API
${basedir}/src/checkstyle/checkstyle-suppressions.xml
- 0.80
+ 0.79
Authentication API Implementation
@@ -78,8 +78,8 @@
${project.version}
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
diff --git a/xwiki-platform-core/xwiki-platform-security/xwiki-platform-security-authentication/xwiki-platform-security-authentication-default/src/main/java/org/xwiki/security/authentication/internal/CaptchaAuthenticationFailureStrategy.java b/xwiki-platform-core/xwiki-platform-security/xwiki-platform-security-authentication/xwiki-platform-security-authentication-default/src/main/java/org/xwiki/security/authentication/internal/CaptchaAuthenticationFailureStrategy.java
index 965a00579ce7..0aa393e1cb94 100644
--- a/xwiki-platform-core/xwiki-platform-security/xwiki-platform-security-authentication/xwiki-platform-security-authentication-default/src/main/java/org/xwiki/security/authentication/internal/CaptchaAuthenticationFailureStrategy.java
+++ b/xwiki-platform-core/xwiki-platform-security/xwiki-platform-security-authentication/xwiki-platform-security-authentication-default/src/main/java/org/xwiki/security/authentication/internal/CaptchaAuthenticationFailureStrategy.java
@@ -25,7 +25,6 @@
import javax.inject.Inject;
import javax.inject.Named;
import javax.inject.Singleton;
-import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.slf4j.Logger;
@@ -38,10 +37,11 @@
import org.xwiki.localization.ContextualLocalizationManager;
import org.xwiki.security.authentication.AuthenticationFailureStrategy;
+import jakarta.servlet.http.HttpServletRequest;
+
/**
- * Captcha Strategy for repeated authentication failures.
- * The main idea of this strategy is to add a captcha form field in the login form and to ask user to fill it for
- * validating their authentication.
+ * Captcha Strategy for repeated authentication failures. The main idea of this strategy is to add a captcha form field
+ * in the login form and to ask user to fill it for validating their authentication.
*
* @version $Id$
* @since 11.6RC1
@@ -54,8 +54,8 @@ public class CaptchaAuthenticationFailureStrategy implements AuthenticationFailu
/**
* Exception message thrown by jCaptcha library when no captcha is registered for the session id.
*/
- private static final String UNEXISTING_CAPTCHA_EXCEPTION = "Invalid ID, could not validate unexisting or already "
- + "validated captcha";
+ private static final String UNEXISTING_CAPTCHA_EXCEPTION =
+ "Invalid ID, could not validate unexisting or already " + "validated captcha";
@Inject
private CaptchaConfiguration captchaConfiguration;
diff --git a/xwiki-platform-core/xwiki-platform-security/xwiki-platform-security-authentication/xwiki-platform-security-authentication-default/src/main/java/org/xwiki/security/authentication/internal/DefaultAuthenticationFailureManager.java b/xwiki-platform-core/xwiki-platform-security/xwiki-platform-security-authentication/xwiki-platform-security-authentication-default/src/main/java/org/xwiki/security/authentication/internal/DefaultAuthenticationFailureManager.java
index 2a8359b30f68..5e055761601d 100644
--- a/xwiki-platform-core/xwiki-platform-security/xwiki-platform-security-authentication/xwiki-platform-security-authentication-default/src/main/java/org/xwiki/security/authentication/internal/DefaultAuthenticationFailureManager.java
+++ b/xwiki-platform-core/xwiki-platform-security/xwiki-platform-security-authentication/xwiki-platform-security-authentication-default/src/main/java/org/xwiki/security/authentication/internal/DefaultAuthenticationFailureManager.java
@@ -32,7 +32,6 @@
import javax.inject.Named;
import javax.inject.Provider;
import javax.inject.Singleton;
-import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
@@ -58,6 +57,8 @@
import com.xpn.xwiki.XWikiContext;
import com.xpn.xwiki.user.api.XWikiUser;
+import jakarta.servlet.http.HttpServletRequest;
+
/**
* Default implementation for {@link AuthenticationFailureManager}.
*
@@ -134,8 +135,8 @@ private void buildStrategyList()
this.failureStrategyList = new LinkedList<>();
for (String failureStrategyName : this.failureStrategyNames) {
try {
- this.failureStrategyList.add(this.componentManager.getInstance(AuthenticationFailureStrategy.class,
- failureStrategyName));
+ this.failureStrategyList
+ .add(this.componentManager.getInstance(AuthenticationFailureStrategy.class, failureStrategyName));
} catch (ComponentLookupException e) {
logger.error("Error while getting authentication failure strategy [{}]. ", failureStrategyName, e);
}
@@ -156,9 +157,7 @@ private boolean isAuthenticationSecurityEnabled()
{
// historically the feature was considered as disabled if max attempts = 0, max time = 0 or the strategy list
// was empty. We keep that as possible way to say it's disabled.
- return configuration.isAuthenticationSecurityEnabled()
- && getMaxNbAttempts() != 0
- && getMaxTime() != 0
+ return configuration.isAuthenticationSecurityEnabled() && getMaxNbAttempts() != 0 && getMaxTime() != 0
&& !getFailureStrategyList().isEmpty();
}
@@ -169,9 +168,9 @@ private void clearRecords()
}
/**
- * Determine which username we should skip.
- * We don't handle empty usernames to avoid triggering the security mechanism for nothing and having unexpected
- * behaviours.
+ * Determine which username we should skip. We don't handle empty usernames to avoid triggering the security
+ * mechanism for nothing and having unexpected behaviours.
+ *
* @param username the username to check.
* @return {@code true} if the username is empty.
*/
@@ -350,14 +349,14 @@ private int getMaxNbAttempts()
}
/**
- * This class aims at storing the authentication failure record information about a login.
- * It only stores the first failing date and the number of failing attempts since then.
- * Those two are resetted if another failure happens outside of the given time window.
- * (See {@link AuthenticationConfiguration#getTimeWindow()})
+ * This class aims at storing the authentication failure record information about a login. It only stores the first
+ * failing date and the number of failing attempts since then. Those two are resetted if another failure happens
+ * outside of the given time window. (See {@link AuthenticationConfiguration#getTimeWindow()})
*/
class AuthFailureRecord
{
private long firstFailingDate;
+
private int nbAttempts;
AuthFailureRecord()
@@ -374,12 +373,12 @@ void incrementAttemptOrReset()
this.firstFailingDate = new Date().getTime();
this.nbAttempts++;
- // If the threshold not reached yet and we're out of the time window, we can reset the data.
+ // If the threshold not reached yet and we're out of the time window, we can reset the data.
} else if (firstFailingDate + getMaxTime() < new Date().getTime()) {
this.firstFailingDate = new Date().getTime();
this.nbAttempts = 1;
- // Else the threshold not reached but we are in the time window: we increment the number of attempts.
+ // Else the threshold not reached but we are in the time window: we increment the number of attempts.
} else {
this.nbAttempts++;
}
diff --git a/xwiki-platform-core/xwiki-platform-security/xwiki-platform-security-authentication/xwiki-platform-security-authentication-default/src/main/java/org/xwiki/security/authentication/internal/DisableAccountFailureStrategy.java b/xwiki-platform-core/xwiki-platform-security/xwiki-platform-security-authentication/xwiki-platform-security-authentication-default/src/main/java/org/xwiki/security/authentication/internal/DisableAccountFailureStrategy.java
index 38cff2df7285..1e71b99a025a 100644
--- a/xwiki-platform-core/xwiki-platform-security/xwiki-platform-security-authentication/xwiki-platform-security-authentication-default/src/main/java/org/xwiki/security/authentication/internal/DisableAccountFailureStrategy.java
+++ b/xwiki-platform-core/xwiki-platform-security/xwiki-platform-security-authentication/xwiki-platform-security-authentication-default/src/main/java/org/xwiki/security/authentication/internal/DisableAccountFailureStrategy.java
@@ -26,7 +26,6 @@
import javax.inject.Named;
import javax.inject.Provider;
import javax.inject.Singleton;
-import javax.servlet.http.HttpServletRequest;
import org.xwiki.bridge.event.DocumentUpdatedEvent;
import org.xwiki.component.annotation.Component;
@@ -45,6 +44,8 @@
import com.xpn.xwiki.objects.BaseObject;
import com.xpn.xwiki.user.api.XWikiUser;
+import jakarta.servlet.http.HttpServletRequest;
+
/**
* A strategy to disable authentication in case of repeated failure with a login.
*
@@ -109,6 +110,7 @@ public boolean validateForm(String username, HttpServletRequest request)
if (userDocumentReference != null) {
return !new XWikiUser(userDocumentReference).isDisabled(this.contextProvider.get());
}
+
return false;
}
diff --git a/xwiki-platform-core/xwiki-platform-security/xwiki-platform-security-authentication/xwiki-platform-security-authentication-default/src/test/java/org/xwiki/security/authentication/internal/DefaultAuthenticationFailureManagerTest.java b/xwiki-platform-core/xwiki-platform-security/xwiki-platform-security-authentication/xwiki-platform-security-authentication-default/src/test/java/org/xwiki/security/authentication/internal/DefaultAuthenticationFailureManagerTest.java
index c37fed206dd5..22d4e5972686 100644
--- a/xwiki-platform-core/xwiki-platform-security/xwiki-platform-security-authentication/xwiki-platform-security-authentication-default/src/test/java/org/xwiki/security/authentication/internal/DefaultAuthenticationFailureManagerTest.java
+++ b/xwiki-platform-core/xwiki-platform-security/xwiki-platform-security-authentication/xwiki-platform-security-authentication-default/src/test/java/org/xwiki/security/authentication/internal/DefaultAuthenticationFailureManagerTest.java
@@ -25,8 +25,8 @@
import javax.inject.Named;
import javax.inject.Provider;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpSession;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -74,7 +74,7 @@
* @since 11.6RC1
*/
@ComponentTest
-public class DefaultAuthenticationFailureManagerTest
+class DefaultAuthenticationFailureManagerTest
{
@InjectMockComponents
private DefaultAuthenticationFailureManager defaultAuthenticationFailureManager;
@@ -163,7 +163,7 @@ private HttpServletRequest getRequest(String sessionId)
* Ensure that a AuthenticationFailureEvent is triggered.
*/
@Test
- public void authenticationFailureIsTriggered()
+ void authenticationFailureIsTriggered()
{
assertFalse(this.defaultAuthenticationFailureManager.recordAuthenticationFailure(this.failingLogin,
getRequest("something")));
@@ -234,7 +234,7 @@ void authenticationFailureEmptyLogin()
* Ensure that the time window configuration is taken into account properly.
*/
@Test
- public void repeatedAuthenticationFailureOutOfTimeWindow() throws InterruptedException
+ void repeatedAuthenticationFailureOutOfTimeWindow() throws InterruptedException
{
HttpServletRequest request = getRequest("anotherId");
when(configuration.getTimeWindow()).thenReturn(1);
@@ -258,7 +258,7 @@ public void repeatedAuthenticationFailureOutOfTimeWindow() throws InterruptedExc
* Ensure that the max attempt configuration is taken into account properly.
*/
@Test
- public void repeatedAuthenticationFailureDifferentThreshold()
+ void repeatedAuthenticationFailureDifferentThreshold()
{
HttpServletRequest request = getRequest("foobar");
when(configuration.getMaxAuthorizedAttempts()).thenReturn(5);
@@ -281,7 +281,7 @@ public void repeatedAuthenticationFailureDifferentThreshold()
* Ensure that the failure record reset is working properly.
*/
@Test
- public void resetAuthFailureRecord()
+ void resetAuthFailureRecord()
{
HttpServletRequest request = getRequest("reset");
assertFalse(this.defaultAuthenticationFailureManager.recordAuthenticationFailure(this.failingLogin, request));
@@ -304,7 +304,7 @@ public void resetAuthFailureRecord()
* Ensure that the failure record reset is working properly.
*/
@Test
- public void resetAuthFailureRecordWithDocumentReference()
+ void resetAuthFailureRecordWithDocumentReference()
{
HttpServletRequest request = getRequest("reset2");
assertFalse(this.defaultAuthenticationFailureManager.recordAuthenticationFailure(this.failingLogin, request));
@@ -327,7 +327,7 @@ public void resetAuthFailureRecordWithDocumentReference()
* Ensure that the threshold mechanism works properly with different login.
*/
@Test
- public void recordAuthFailureDifferentLogin()
+ void recordAuthFailureDifferentLogin()
{
HttpServletRequest request = getRequest("multilogin");
String login1 = this.failingLogin.toLowerCase();
@@ -390,7 +390,7 @@ void recordAuthenticationFailureWithFailingSession()
* Ensure that the authentication threshold auth is deactivated if max attempt is set to 0
*/
@Test
- public void deactivateThresholdAuthWithMaxAttempt()
+ void deactivateThresholdAuthWithMaxAttempt()
{
HttpServletRequest request = getRequest("manyattempt");
when(this.configuration.getMaxAuthorizedAttempts()).thenReturn(0);
@@ -410,7 +410,7 @@ public void deactivateThresholdAuthWithMaxAttempt()
* Ensure that the authentication threshold auth is deactivated if time window is set to 0
*/
@Test
- public void deactivateThresholdAuthWithTimeWindow()
+ void deactivateThresholdAuthWithTimeWindow()
{
HttpServletRequest request = getRequest("manyattempt2");
when(this.configuration.getTimeWindow()).thenReturn(0);
@@ -430,7 +430,7 @@ public void deactivateThresholdAuthWithTimeWindow()
* Validate that getForm is working properly.
*/
@Test
- public void getForm()
+ void getForm()
{
HttpServletRequest request = getRequest("getForm");
String formStrategy1 = "formStrategy1";
@@ -468,7 +468,7 @@ void getFormFailingSession()
* Validate that getErrorMessages is working properly.
*/
@Test
- public void getErrorMessages()
+ void getErrorMessages()
{
HttpServletRequest request = getRequest("errorMsg");
String errorMessage1 = "errorMessage1";
@@ -489,7 +489,7 @@ public void getErrorMessages()
* Validate that getForm is working properly.
*/
@Test
- public void validateForm()
+ void validateForm()
{
HttpServletRequest request = getRequest("validate");
String login1 = this.failingLogin;
@@ -506,13 +506,13 @@ public void validateForm()
this.defaultAuthenticationFailureManager.recordAuthenticationFailure(login2, request);
this.defaultAuthenticationFailureManager.recordAuthenticationFailure(login2, request);
- when(this.strategy1.validateForm(login1, null)).thenReturn(true);
- when(this.strategy2.validateForm(login1, null)).thenReturn(true);
- assertTrue(this.defaultAuthenticationFailureManager.validateForm(login1, null));
+ when(this.strategy1.validateForm(login1, (HttpServletRequest) null)).thenReturn(true);
+ when(this.strategy2.validateForm(login1, (HttpServletRequest) null)).thenReturn(true);
+ assertTrue(this.defaultAuthenticationFailureManager.validateForm(login1, (HttpServletRequest) null));
- when(this.strategy1.validateForm(login2, null)).thenReturn(true);
- when(this.strategy2.validateForm(login2, null)).thenReturn(false);
- assertFalse(this.defaultAuthenticationFailureManager.validateForm(login2, null));
+ when(this.strategy1.validateForm(login2, (HttpServletRequest) null)).thenReturn(true);
+ when(this.strategy2.validateForm(login2, (HttpServletRequest) null)).thenReturn(false);
+ assertFalse(this.defaultAuthenticationFailureManager.validateForm(login2, (HttpServletRequest) null));
}
@Test
@@ -531,7 +531,7 @@ void validateFormFailingSession()
* Validate that getUser is working properly.
*/
@Test
- public void getUserNotFound() throws XWikiException
+ void getUserNotFound() throws XWikiException
{
when(context.getMainXWiki()).thenReturn("mainwiki");
when(context.getWikiId()).thenReturn("currentwiki");
@@ -553,7 +553,7 @@ public void getUserNotFound() throws XWikiException
* Validate that getUser is working properly.
*/
@Test
- public void getUserGlobalFound() throws XWikiException
+ void getUserGlobalFound() throws XWikiException
{
when(context.getMainXWiki()).thenReturn("mainwiki");
DocumentReference globalReference = new DocumentReference("mainwiki", "XWiki", "foo");
@@ -575,7 +575,7 @@ public void getUserGlobalFound() throws XWikiException
* Validate that getUser is working properly.
*/
@Test
- public void getUserLocalFound() throws XWikiException
+ void getUserLocalFound() throws XWikiException
{
when(context.getMainXWiki()).thenReturn("mainwiki");
when(context.getWikiId()).thenReturn("currentwiki");
@@ -597,7 +597,7 @@ public void getUserLocalFound() throws XWikiException
}
@Test
- public void strategiesAreRebuildInCaseOfReset()
+ void strategiesAreRebuildInCaseOfReset()
{
HttpServletRequest request = getRequest("reset");
when(configuration.getFailureStrategies()).thenReturn(new String[] { "strategy1" });
diff --git a/xwiki-platform-core/xwiki-platform-security/xwiki-platform-security-authentication/xwiki-platform-security-authentication-default/src/test/java/org/xwiki/security/authentication/internal/DisableAccountFailureStrategyTest.java b/xwiki-platform-core/xwiki-platform-security/xwiki-platform-security-authentication/xwiki-platform-security-authentication-default/src/test/java/org/xwiki/security/authentication/internal/DisableAccountFailureStrategyTest.java
index f5cabc1afc92..d033d8b7638f 100644
--- a/xwiki-platform-core/xwiki-platform-security/xwiki-platform-security-authentication/xwiki-platform-security-authentication-default/src/test/java/org/xwiki/security/authentication/internal/DisableAccountFailureStrategyTest.java
+++ b/xwiki-platform-core/xwiki-platform-security/xwiki-platform-security-authentication/xwiki-platform-security-authentication-default/src/test/java/org/xwiki/security/authentication/internal/DisableAccountFailureStrategyTest.java
@@ -19,6 +19,12 @@
*/
package org.xwiki.security.authentication.internal;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
import javax.inject.Provider;
import org.junit.jupiter.api.BeforeEach;
@@ -32,16 +38,9 @@
import org.xwiki.test.junit5.mockito.InjectMockComponents;
import org.xwiki.test.junit5.mockito.MockComponent;
-import com.xpn.xwiki.XWikiException;
import com.xpn.xwiki.doc.XWikiDocument;
import com.xpn.xwiki.objects.BaseObject;
-import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
/**
* Unit tests for {@link DisableAccountFailureStrategy}.
*
@@ -49,7 +48,7 @@
* @since 11.8RC1
*/
@ComponentTest
-public class DisableAccountFailureStrategyTest
+class DisableAccountFailureStrategyTest
{
@InjectMockComponents(role = AuthenticationFailureStrategy.class)
private DisableAccountFailureStrategy disableStrategy;
@@ -61,7 +60,7 @@ public class DisableAccountFailureStrategyTest
private XWikiDocument updatedDocument;
@BeforeEach
- public void configure() throws XWikiException
+ public void configure()
{
DocumentReference documentReference = new DocumentReference("test", "Some", "Page");
@@ -81,7 +80,7 @@ public void configure() throws XWikiException
}
@Test
- public void resetAuthenticationFailureCounterWhenAccountIsActivated()
+ void resetAuthenticationFailureCounterWhenAccountIsActivated()
{
when(this.updatedDocument.getOriginalDocument().getXObject(DisableAccountFailureStrategy.USER_CLASS_REFERENCE)
.getIntValue("active")).thenReturn(0);
@@ -95,7 +94,7 @@ public void resetAuthenticationFailureCounterWhenAccountIsActivated()
}
@Test
- public void dontResetAuthenticationFailureCounterWhenAccountRemainsInactive()
+ void dontResetAuthenticationFailureCounterWhenAccountRemainsInactive()
{
when(this.updatedDocument.getOriginalDocument().getXObject(DisableAccountFailureStrategy.USER_CLASS_REFERENCE)
.getIntValue("active")).thenReturn(0);
@@ -109,7 +108,7 @@ public void dontResetAuthenticationFailureCounterWhenAccountRemainsInactive()
}
@Test
- public void dontResetAuthenticationFailureCounterWhenAccountRemainsActive()
+ void dontResetAuthenticationFailureCounterWhenAccountRemainsActive()
{
when(this.updatedDocument.getOriginalDocument().getXObject(DisableAccountFailureStrategy.USER_CLASS_REFERENCE)
.getIntValue("active")).thenReturn(1);
@@ -123,7 +122,7 @@ public void dontResetAuthenticationFailureCounterWhenAccountRemainsActive()
}
@Test
- public void dontResetAuthenticationFailureCounterWhenAccountIsDeactivated()
+ void dontResetAuthenticationFailureCounterWhenAccountIsDeactivated()
{
when(this.updatedDocument.getOriginalDocument().getXObject(DisableAccountFailureStrategy.USER_CLASS_REFERENCE)
.getIntValue("active")).thenReturn(1);
@@ -137,7 +136,7 @@ public void dontResetAuthenticationFailureCounterWhenAccountIsDeactivated()
}
@Test
- public void onDocumentUpdatedNoUserAccount()
+ void onDocumentUpdatedNoUserAccount()
{
when(this.updatedDocument.getXObject(DisableAccountFailureStrategy.USER_CLASS_REFERENCE)).thenReturn(null);
@@ -147,7 +146,7 @@ public void onDocumentUpdatedNoUserAccount()
}
@Test
- public void onDocumentUpdatedNoUserAccountStateChange()
+ void onDocumentUpdatedNoUserAccountStateChange()
{
disableStrategy.onEvent(new DocumentUpdatedEvent(), updatedDocument, null);
@@ -155,8 +154,8 @@ public void onDocumentUpdatedNoUserAccountStateChange()
}
@Test
- public void validateFormReturnsFalseWhenUserNotFound()
+ void validateFormReturnsFalseWhenUserNotFound()
{
- assertFalse(this.disableStrategy.validateForm("Foo", null));
+ assertFalse(this.disableStrategy.validateForm("Foo", (javax.servlet.http.HttpServletRequest) null));
}
}
diff --git a/xwiki-platform-core/xwiki-platform-security/xwiki-platform-security-authentication/xwiki-platform-security-authentication-script/pom.xml b/xwiki-platform-core/xwiki-platform-security/xwiki-platform-security-authentication/xwiki-platform-security-authentication-script/pom.xml
index 666b3492d2be..d92106bae5bb 100644
--- a/xwiki-platform-core/xwiki-platform-security/xwiki-platform-security-authentication/xwiki-platform-security-authentication-script/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-security/xwiki-platform-security-authentication/xwiki-platform-security-authentication-script/pom.xml
@@ -62,8 +62,8 @@
test
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
diff --git a/xwiki-platform-core/xwiki-platform-security/xwiki-platform-security-requiredrights/xwiki-platform-security-requiredrights-default/pom.xml b/xwiki-platform-core/xwiki-platform-security/xwiki-platform-security-requiredrights/xwiki-platform-security-requiredrights-default/pom.xml
index 8c5f85850a00..8d5b06967beb 100644
--- a/xwiki-platform-core/xwiki-platform-security/xwiki-platform-security-requiredrights/xwiki-platform-security-requiredrights-default/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-security/xwiki-platform-security-requiredrights/xwiki-platform-security-requiredrights-default/pom.xml
@@ -57,6 +57,8 @@
xwiki-platform-rendering-macro-script
${project.version}
+
+
org.xwiki.platform
xwiki-platform-test-oldcore
diff --git a/xwiki-platform-core/xwiki-platform-skin/xwiki-platform-skin-skinx/pom.xml b/xwiki-platform-core/xwiki-platform-skin/xwiki-platform-skin-skinx/pom.xml
index 6ba78e02e9d0..a8072b833fce 100644
--- a/xwiki-platform-core/xwiki-platform-skin/xwiki-platform-skin-skinx/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-skin/xwiki-platform-skin-skinx/pom.xml
@@ -41,8 +41,8 @@
aspectjrt
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
org.xwiki.platform
diff --git a/xwiki-platform-core/xwiki-platform-store/xwiki-platform-store-filesystem-oldcore/pom.xml b/xwiki-platform-core/xwiki-platform-store/xwiki-platform-store-filesystem-oldcore/pom.xml
index 609fb6389e3c..ef5d84c7d4d6 100644
--- a/xwiki-platform-core/xwiki-platform-store/xwiki-platform-store-filesystem-oldcore/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-store/xwiki-platform-store-filesystem-oldcore/pom.xml
@@ -99,8 +99,8 @@
${commons.version}
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
org.xwiki.platform
diff --git a/xwiki-platform-core/xwiki-platform-store/xwiki-platform-store-filesystem-oldcore/src/main/java/org/xwiki/store/filesystem/internal/DefaultTemporaryAttachmentSessionsManager.java b/xwiki-platform-core/xwiki-platform-store/xwiki-platform-store-filesystem-oldcore/src/main/java/org/xwiki/store/filesystem/internal/DefaultTemporaryAttachmentSessionsManager.java
index 2279a858b089..3b251eeef149 100644
--- a/xwiki-platform-core/xwiki-platform-store/xwiki-platform-store-filesystem-oldcore/src/main/java/org/xwiki/store/filesystem/internal/DefaultTemporaryAttachmentSessionsManager.java
+++ b/xwiki-platform-core/xwiki-platform-store/xwiki-platform-store-filesystem-oldcore/src/main/java/org/xwiki/store/filesystem/internal/DefaultTemporaryAttachmentSessionsManager.java
@@ -27,15 +27,15 @@
import javax.inject.Inject;
import javax.inject.Provider;
import javax.inject.Singleton;
-import javax.servlet.http.HttpSession;
-import javax.servlet.http.Part;
import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
import org.xwiki.attachment.validation.AttachmentValidationException;
import org.xwiki.attachment.validation.AttachmentValidator;
import org.xwiki.component.annotation.Component;
+import org.xwiki.container.Container;
+import org.xwiki.container.servlet.ServletSession;
import org.xwiki.internal.attachment.XWikiAttachmentAccessWrapper;
+import org.xwiki.jakartabridge.servlet.JakartaServletBridge;
import org.xwiki.model.reference.DocumentReference;
import org.xwiki.store.TemporaryAttachmentException;
import org.xwiki.store.TemporaryAttachmentSessionsManager;
@@ -44,6 +44,9 @@
import com.xpn.xwiki.doc.XWikiAttachment;
import com.xpn.xwiki.doc.XWikiDocument;
+import jakarta.servlet.http.HttpSession;
+import jakarta.servlet.http.Part;
+
/**
* Default implementation of {@link TemporaryAttachmentSessionsManager}.
*
@@ -63,12 +66,11 @@ public class DefaultTemporaryAttachmentSessionsManager implements TemporaryAttac
private Provider attachmentValidator;
@Inject
- private Logger logger;
+ private Provider container;
private HttpSession getSession()
{
- XWikiContext context = this.contextProvider.get();
- return context.getRequest().getSession();
+ return ((ServletSession) this.container.get().getSession()).getSession();
}
private TemporaryAttachmentSession getOrCreateSession()
@@ -90,6 +92,14 @@ public XWikiAttachment uploadAttachment(DocumentReference documentReference, Par
return uploadAttachment(documentReference, part, null);
}
+ @Override
+ @Deprecated
+ public XWikiAttachment uploadAttachment(DocumentReference documentReference, javax.servlet.http.Part part,
+ String filename) throws TemporaryAttachmentException, AttachmentValidationException
+ {
+ return uploadAttachment(documentReference, JakartaServletBridge.toJakarta(part), filename);
+ }
+
@Override
public XWikiAttachment uploadAttachment(DocumentReference documentReference, Part part, String filename)
throws TemporaryAttachmentException, AttachmentValidationException
@@ -107,7 +117,7 @@ public XWikiAttachment uploadAttachment(DocumentReference documentReference, Par
xWikiAttachment.setFilename(actualFilename);
xWikiAttachment.setContent(part.getInputStream());
xWikiAttachment.setAuthorReference(context.getUserReference());
- // Initialize an empty document with the right document reference and locale. We don't set the actual
+ // Initialize an empty document with the right document reference and locale. We don't set the actual
// document since it's a temporary attachment, but it is still useful to have a minimal knowledge of the
// document it is stored for.
xWikiAttachment.setDoc(new XWikiDocument(documentReference, documentReference.getLocale()), false);
diff --git a/xwiki-platform-core/xwiki-platform-store/xwiki-platform-store-filesystem-oldcore/src/test/java/org/xwiki/store/filesystem/internal/DefaultTemporaryAttachmentSessionsManagerTest.java b/xwiki-platform-core/xwiki-platform-store/xwiki-platform-store-filesystem-oldcore/src/test/java/org/xwiki/store/filesystem/internal/DefaultTemporaryAttachmentSessionsManagerTest.java
index dbc7d1d46da8..de266ea87238 100644
--- a/xwiki-platform-core/xwiki-platform-store/xwiki-platform-store-filesystem-oldcore/src/test/java/org/xwiki/store/filesystem/internal/DefaultTemporaryAttachmentSessionsManagerTest.java
+++ b/xwiki-platform-core/xwiki-platform-store/xwiki-platform-store-filesystem-oldcore/src/test/java/org/xwiki/store/filesystem/internal/DefaultTemporaryAttachmentSessionsManagerTest.java
@@ -19,8 +19,23 @@
*/
package org.xwiki.store.filesystem.internal;
+import static com.xpn.xwiki.plugin.fileupload.FileUploadPlugin.UPLOAD_MAXSIZE_PARAMETER;
+import static java.nio.charset.StandardCharsets.UTF_8;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.doThrow;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoInteractions;
+import static org.mockito.Mockito.when;
+
import java.io.ByteArrayInputStream;
-import java.io.File;
import java.io.InputStream;
import java.util.Arrays;
import java.util.Collections;
@@ -28,7 +43,6 @@
import java.util.Optional;
import javax.inject.Provider;
-import javax.servlet.http.HttpSession;
import javax.servlet.http.Part;
import org.junit.jupiter.api.BeforeEach;
@@ -39,11 +53,13 @@
import org.mockito.Mock;
import org.xwiki.attachment.validation.AttachmentValidationException;
import org.xwiki.attachment.validation.AttachmentValidator;
-import org.xwiki.environment.Environment;
+import org.xwiki.container.Container;
+import org.xwiki.container.servlet.ServletSession;
import org.xwiki.model.reference.DocumentReference;
import org.xwiki.model.reference.SpaceReference;
import org.xwiki.store.TemporaryAttachmentException;
-import org.xwiki.test.junit5.XWikiTempDir;
+import org.xwiki.test.TestEnvironment;
+import org.xwiki.test.annotation.ComponentList;
import org.xwiki.test.junit5.mockito.ComponentTest;
import org.xwiki.test.junit5.mockito.InjectMockComponents;
import org.xwiki.test.junit5.mockito.MockComponent;
@@ -54,23 +70,8 @@
import com.xpn.xwiki.doc.XWikiAttachment;
import com.xpn.xwiki.doc.XWikiDocument;
import com.xpn.xwiki.web.Utils;
-import com.xpn.xwiki.web.XWikiRequest;
-import static com.xpn.xwiki.plugin.fileupload.FileUploadPlugin.UPLOAD_MAXSIZE_PARAMETER;
-import static java.nio.charset.StandardCharsets.UTF_8;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-import static org.junit.jupiter.api.Assertions.assertThrows;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.doAnswer;
-import static org.mockito.Mockito.doThrow;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyNoInteractions;
-import static org.mockito.Mockito.when;
+import jakarta.servlet.http.HttpSession;
/**
* Tests for {@link DefaultTemporaryAttachmentSessionsManager}.
@@ -79,6 +80,7 @@
* @since 14.3RC1
*/
@ComponentTest
+@ComponentList(TestEnvironment.class)
class DefaultTemporaryAttachmentSessionsManagerTest
{
private static final String ATTRIBUTE_KEY = "xwikiTemporaryAttachments";
@@ -92,12 +94,12 @@ class DefaultTemporaryAttachmentSessionsManagerTest
@MockComponent
private Provider attachmentValidatorProvider;
+ @MockComponent
+ private Container container;
+
@Mock
private AttachmentValidator attachmentValidator;
- @XWikiTempDir
- private File tmpDir;
-
@Mock
private XWikiContext context;
@@ -109,14 +111,11 @@ void setup(MockitoComponentManager mockitoComponentManager) throws Exception
{
when(this.contextProvider.get()).thenReturn(this.context);
- XWikiRequest xWikiRequest = mock(XWikiRequest.class);
- when(xWikiRequest.getSession()).thenReturn(this.httpSession);
- when(this.context.getRequest()).thenReturn(xWikiRequest);
+ ServletSession session = mock(ServletSession.class);
+ when(session.getSession()).thenReturn(this.httpSession);
+ when(this.container.getSession()).thenReturn(session);
Utils.setComponentManager(mockitoComponentManager);
- Environment environment = mockitoComponentManager.registerMockComponent(Environment.class);
- when(environment.getTemporaryDirectory()).thenReturn(this.tmpDir);
-
when(this.attachmentValidatorProvider.get()).thenReturn(this.attachmentValidator);
}
diff --git a/xwiki-platform-core/xwiki-platform-tag/xwiki-platform-tag-api/pom.xml b/xwiki-platform-core/xwiki-platform-tag/xwiki-platform-tag-api/pom.xml
index cb5af8d3a122..203eb1a5cd1c 100644
--- a/xwiki-platform-core/xwiki-platform-tag/xwiki-platform-tag-api/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-tag/xwiki-platform-tag-api/pom.xml
@@ -65,10 +65,5 @@
${commons.version}
test
-
- javax.servlet
- javax.servlet-api
- test
-
diff --git a/xwiki-platform-core/xwiki-platform-test/xwiki-platform-test-docker/pom.xml b/xwiki-platform-core/xwiki-platform-test/xwiki-platform-test-docker/pom.xml
index 0cd27103b377..3996636542e2 100644
--- a/xwiki-platform-core/xwiki-platform-test/xwiki-platform-test-docker/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-test/xwiki-platform-test-docker/pom.xml
@@ -165,8 +165,8 @@
commons-httpclient
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
compile
diff --git a/xwiki-platform-core/xwiki-platform-test/xwiki-platform-test-docker/src/main/java/org/xwiki/test/docker/internal/junit5/servletengine/ServletContainerExecutor.java b/xwiki-platform-core/xwiki-platform-test/xwiki-platform-test-docker/src/main/java/org/xwiki/test/docker/internal/junit5/servletengine/ServletContainerExecutor.java
index 0748284935eb..b9d3b94cc587 100644
--- a/xwiki-platform-core/xwiki-platform-test/xwiki-platform-test-docker/src/main/java/org/xwiki/test/docker/internal/junit5/servletengine/ServletContainerExecutor.java
+++ b/xwiki-platform-core/xwiki-platform-test/xwiki-platform-test-docker/src/main/java/org/xwiki/test/docker/internal/junit5/servletengine/ServletContainerExecutor.java
@@ -269,9 +269,8 @@ private void configureTomcat(File sourceWARDirectory) throws Exception
catalinaOpts.add("-Xmx1024m");
catalinaOpts.add("-Dorg.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true");
catalinaOpts.add("-Dorg.apache.catalina.connector.CoyoteAdapter.ALLOW_BACKSLASH=true");
- catalinaOpts.add("-Dsecurerandom.source=file:/dev/urandom");
- // Note: Tomcat 9.x automatically add the various "--add-opens" to make XWiki work on Java 17, so we don't
+ // Note: Tomcat automatically add the various "--add-opens" to make XWiki work on Java 17, so we don't
// need to add them as we do for Jetty.
// see https://jira.xwiki.org/browse/XWIKI-19034 and https://jira.xwiki.org/browse/XRENDERING-616
@@ -372,7 +371,7 @@ private String getDockerImageTag(TestConfiguration testConfiguration)
// TODO: We currently cannot use Tomcat 10.x as it corresponds to a package change for JakartaEE and we'll need
// XWiki to move to the new packages first. This is why we force an older version for Tomcat.
return testConfiguration.getServletEngineTag() != null ? testConfiguration.getServletEngineTag()
- : (testConfiguration.getServletEngine().equals(ServletEngine.TOMCAT) ? "9-jdk17" : LATEST);
+ : (testConfiguration.getServletEngine().equals(ServletEngine.TOMCAT) ? "10-jdk17" : LATEST);
}
private GenericContainer> createServletContainer() throws Exception
diff --git a/xwiki-platform-core/xwiki-platform-test/xwiki-platform-test-integration/pom.xml b/xwiki-platform-core/xwiki-platform-test/xwiki-platform-test-integration/pom.xml
index bcc851850eb6..97cdcc02cbf5 100644
--- a/xwiki-platform-core/xwiki-platform-test/xwiki-platform-test-integration/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-test/xwiki-platform-test-integration/pom.xml
@@ -79,8 +79,8 @@
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
org.xwiki.platform
diff --git a/xwiki-platform-core/xwiki-platform-test/xwiki-platform-test-oldcore/pom.xml b/xwiki-platform-core/xwiki-platform-test/xwiki-platform-test-oldcore/pom.xml
index 5ea5f7f1d33c..8305c0a15426 100644
--- a/xwiki-platform-core/xwiki-platform-test/xwiki-platform-test-oldcore/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-test/xwiki-platform-test-oldcore/pom.xml
@@ -49,15 +49,15 @@
test-jar
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
compile
-
+
- org.mortbay.jasper
- apache-el
+ org.glassfish.expressly
+ expressly
runtime
diff --git a/xwiki-platform-core/xwiki-platform-test/xwiki-platform-test-page/pom.xml b/xwiki-platform-core/xwiki-platform-test/xwiki-platform-test-page/pom.xml
index 24181e86026a..e02a4a90da0a 100644
--- a/xwiki-platform-core/xwiki-platform-test/xwiki-platform-test-page/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-test/xwiki-platform-test-page/pom.xml
@@ -108,6 +108,10 @@
xwiki-platform-rendering-transformation-macro
${project.version}
+
+ jakarta.servlet
+ jakarta.servlet-api
+
org.jsoup
jsoup
diff --git a/xwiki-platform-core/xwiki-platform-test/xwiki-platform-test-page/src/main/java/org/xwiki/test/page/PageTest.java b/xwiki-platform-core/xwiki-platform-test/xwiki-platform-test-page/src/main/java/org/xwiki/test/page/PageTest.java
index d1312510a15d..273af0be6348 100644
--- a/xwiki-platform-core/xwiki-platform-test/xwiki-platform-test-page/src/main/java/org/xwiki/test/page/PageTest.java
+++ b/xwiki-platform-core/xwiki-platform-test/xwiki-platform-test-page/src/main/java/org/xwiki/test/page/PageTest.java
@@ -31,6 +31,8 @@
import org.xwiki.cache.CacheFactory;
import org.xwiki.cache.CacheManager;
import org.xwiki.cache.config.CacheConfiguration;
+import org.xwiki.container.servlet.HttpServletRequestStub;
+import org.xwiki.container.servlet.HttpServletResponseStub;
import org.xwiki.context.Execution;
import org.xwiki.context.ExecutionContext;
import org.xwiki.context.ExecutionContextManager;
@@ -89,12 +91,32 @@ public class PageTest
/**
* The stubbed request used to simulate a real Servlet Request.
+ *
+ * @since 42.0.0
*/
+ protected HttpServletRequestStub stubRequest;
+
+ /**
+ * The javax version of the stubbed request used to simulate a real Servlet Request.
+ *
+ * @deprecated use {@link #stubRequest} instead
+ */
+ @Deprecated(since = "42.0.0")
protected XWikiServletRequestStub request;
/**
* The stubbed response used to simulate a real Servlet Response.
+ *
+ * @since 42.0.0
+ */
+ protected HttpServletResponseStub stubResponse;
+
+ /**
+ * The javax version of the stubbed response used to simulate a real Servlet Response.
+ *
+ * @deprecated use {@link #stubResponse} instead
*/
+ @Deprecated(since = "42.0.0")
protected XWikiServletResponseStub response;
/**
@@ -261,39 +283,42 @@ protected void setOutputSyntax(Syntax syntax) throws Exception
void setUpForPageTest() throws Exception
{
// Configure mocks from OldcoreRule
- context = oldcore.getXWikiContext();
- xwiki = oldcore.getSpyXWiki();
+ this.context = this.oldcore.getXWikiContext();
+ this.xwiki = this.oldcore.getSpyXWiki();
// We need this one because some component in its init creates a query...
- when(oldcore.getQueryManager().createQuery(any(String.class), any(String.class))).thenReturn(mock(Query.class));
+ when(this.oldcore.getQueryManager().createQuery(any(String.class), any(String.class)))
+ .thenReturn(mock(Query.class));
// Set up a fake Request
// Configure request so that $!request.outputSyntax" == 'plain
// Need to be executed before ecm.initialize() so that XWikiScriptContextInitializer will initialize the
// script context properly
- request = new XWikiServletRequestStub();
- request.setScheme("http");
- context.setRequest(request);
+ this.stubRequest = new HttpServletRequestStub();
+ this.request = new XWikiServletRequestStub(this.stubRequest);
+ this.request.setScheme("http");
+ this.context.setRequest(this.request);
- response = new XWikiServletResponseStub();
- context.setResponse(response);
+ this.stubResponse = new HttpServletResponseStub();
+ this.response = new XWikiServletResponseStub(this.stubResponse);
+ this.context.setResponse(this.response);
- ExecutionContextManager ecm = componentManager.getInstance(ExecutionContextManager.class);
- ecm.initialize(oldcore.getExecutionContext());
+ ExecutionContextManager ecm = this.componentManager.getInstance(ExecutionContextManager.class);
+ ecm.initialize(this.oldcore.getExecutionContext());
- // Let the user have view access to all pages
- when(oldcore.getMockRightService().hasAccessLevel(eq("view"), eq("XWiki.XWikiGuest"), any(),
- eq(context))).thenReturn(true);
- when(oldcore.getMockContextualAuthorizationManager().hasAccess(same(Right.VIEW), any())).thenReturn(true);
+ // Let the user have view access on all pages
+ when(this.oldcore.getMockRightService().hasAccessLevel(eq("view"), eq("XWiki.XWikiGuest"), any(), eq(context)))
+ .thenReturn(true);
+ when(this.oldcore.getMockContextualAuthorizationManager().hasAccess(same(Right.VIEW), any())).thenReturn(true);
// Set up URL Factory
- URLFactorySetup.setUp(context);
+ URLFactorySetup.setUp(this.context);
// Set up Localization
- LocalizationSetup.setUp(componentManager);
+ LocalizationSetup.setUp(this.componentManager);
// Set up Skin Extensions
- SkinExtensionSetup.setUp(xwiki, context);
+ SkinExtensionSetup.setUp(this.xwiki, this.context);
}
/**
diff --git a/xwiki-platform-core/xwiki-platform-url/xwiki-platform-url-container/pom.xml b/xwiki-platform-core/xwiki-platform-url/xwiki-platform-url-container/pom.xml
index 83ac593958ce..70e831fb3cb0 100644
--- a/xwiki-platform-core/xwiki-platform-url/xwiki-platform-url-container/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-url/xwiki-platform-url-container/pom.xml
@@ -75,8 +75,8 @@
commons-lang3
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
diff --git a/xwiki-platform-core/xwiki-platform-url/xwiki-platform-url-default/pom.xml b/xwiki-platform-core/xwiki-platform-url/xwiki-platform-url-default/pom.xml
index 0495fc1448db..77421849eaaf 100644
--- a/xwiki-platform-core/xwiki-platform-url/xwiki-platform-url-default/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-url/xwiki-platform-url-default/pom.xml
@@ -44,7 +44,7 @@
org.xwiki.platform
- xwiki-platform-oldcore
+ xwiki-platform-container-servlet
${project.version}
@@ -52,10 +52,15 @@
xwiki-platform-wiki-api
${project.version}
+
+ org.xwiki.platform
+ xwiki-platform-oldcore
+ ${project.version}
+
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
diff --git a/xwiki-platform-core/xwiki-platform-url/xwiki-platform-url-default/src/main/java/org/xwiki/url/internal/DefaultURLSecurityManager.java b/xwiki-platform-core/xwiki-platform-url/xwiki-platform-url-default/src/main/java/org/xwiki/url/internal/DefaultURLSecurityManager.java
index 3972efde45e0..b7a4fdf840e8 100644
--- a/xwiki-platform-core/xwiki-platform-url/xwiki-platform-url-default/src/main/java/org/xwiki/url/internal/DefaultURLSecurityManager.java
+++ b/xwiki-platform-core/xwiki-platform-url/xwiki-platform-url-default/src/main/java/org/xwiki/url/internal/DefaultURLSecurityManager.java
@@ -29,13 +29,16 @@
import java.util.regex.Pattern;
import javax.inject.Inject;
-import javax.inject.Provider;
import javax.inject.Singleton;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.slf4j.Logger;
import org.xwiki.component.annotation.Component;
+import org.xwiki.container.Container;
+import org.xwiki.container.Request;
+import org.xwiki.container.servlet.HttpServletUtils;
+import org.xwiki.container.servlet.ServletRequest;
import org.xwiki.context.Execution;
import org.xwiki.url.URLConfiguration;
import org.xwiki.url.URLSecurityManager;
@@ -43,12 +46,10 @@
import org.xwiki.wiki.descriptor.WikiDescriptorManager;
import org.xwiki.wiki.manager.WikiManagerException;
-import com.xpn.xwiki.XWikiContext;
-
/**
- * Default implementation of {@link URLSecurityManager}.
- * This implementation keeps a HashSet in memory containing the trusted domains defined in the configuration and
- * for all subwikis. Use {@link #invalidateCache()} to compute back this hashset.
+ * Default implementation of {@link URLSecurityManager}. This implementation keeps a HashSet in memory containing the
+ * trusted domains defined in the configuration and for all subwikis. Use {@link #invalidateCache()} to compute back
+ * this hashset.
*
* @version $Id$
* @since 13.3RC1
@@ -59,10 +60,12 @@
public class DefaultURLSecurityManager implements URLSecurityManager
{
private static final char DOT = '.';
+
private static final char PERCENT = '%';
/**
* Dedicated string used to escape {@code %} character.
+ *
* @see #parseToSafeURI(String)
*/
private static final String PERCENT_ESCAPE = "__XWIKI_URL_SECURITY_PERCENT__";
@@ -83,13 +86,13 @@ public class DefaultURLSecurityManager implements URLSecurityManager
private WikiDescriptorManager wikiDescriptorManager;
@Inject
- private Execution execution;
+ private Container container;
@Inject
- private Logger logger;
+ private Execution execution;
@Inject
- private Provider contextProvider;
+ private Logger logger;
private Set trustedDomains;
@@ -108,8 +111,9 @@ private synchronized void computeTrustedDomains()
result.addAll(wikiDescriptor.getAliases());
}
} catch (WikiManagerException e) {
- logger.warn("Error while getting wiki descriptor to fill list of trusted domains: [{}]. "
- + "The subwikis won't be taken into account for the list of trusted domains.",
+ logger.warn(
+ "Error while getting wiki descriptor to fill list of trusted domains: [{}]. "
+ + "The subwikis won't be taken into account for the list of trusted domains.",
ExceptionUtils.getRootCauseMessage(e));
}
@@ -120,18 +124,19 @@ private synchronized void computeTrustedDomains()
private String getCurrentDomain()
{
- XWikiContext context = this.contextProvider.get();
- if (context.getRequest() != null && context.getRequest().getHttpServletRequest() != null) {
- String request = context.getRequest().getHttpServletRequest().getRequestURL().toString();
+ Request request = this.container.getRequest();
+ if (request instanceof ServletRequest servletRequest) {
try {
- URL requestURL = new URL(request);
- return requestURL.getHost();
+ URL sourceBaseURL = HttpServletUtils.getSourceBaseURL(servletRequest.getRequest());
+
+ return sourceBaseURL.getHost();
} catch (MalformedURLException e) {
// this should never happen
throw new RuntimeException(
- String.format("URL used to access the server is not a proper URL: [%s]", request));
+ String.format("Failed to resolve the source URL: [%s]", servletRequest.getRequest().toString()), e);
}
}
+
return "";
}
@@ -152,8 +157,8 @@ public boolean isDomainTrusted(URL urlToCheck)
}
} while (!"".equals(host));
- Object bypassCheckProperty = execution.getContext()
- .getProperty(URLSecurityManager.BYPASS_DOMAIN_SECURITY_CHECK_CONTEXT_PROPERTY);
+ Object bypassCheckProperty =
+ execution.getContext().getProperty(URLSecurityManager.BYPASS_DOMAIN_SECURITY_CHECK_CONTEXT_PROPERTY);
boolean bypassCheck = bypassCheckProperty != null && Boolean.parseBoolean(bypassCheckProperty.toString());
if (bypassCheck) {
@@ -214,10 +219,7 @@ public boolean isURITrusted(URI uri)
// it. Note that the scheme used here is only for building a proper URL for then checking domain:
// it's never actually used to perform any request.
if (!uri.isAbsolute()) {
- URI uriWithScheme = new URI("https",
- uri.getRawAuthority(),
- uri.getRawPath(),
- uri.getRawQuery(),
+ URI uriWithScheme = new URI("https", uri.getRawAuthority(), uri.getRawPath(), uri.getRawQuery(),
uri.getRawFragment());
result = this.isDomainTrusted(uriWithScheme.toURL());
} else if (this.urlConfiguration.getTrustedSchemes().contains(uri.getScheme().toLowerCase())) {
@@ -248,12 +250,11 @@ public URI parseToSafeURI(String serializedURI) throws URISyntaxException, Secur
} catch (URISyntaxException e) {
// We don't try to repair URI if they use our internal marker to avoid mistakes.
if (serializedURI.contains(PERCENT_ESCAPE)) {
- throw new IllegalArgumentException(
- String.format("The given uri [%s] contains the string [%s] which is used internally "
+ throw new IllegalArgumentException(String.format(
+ "The given uri [%s] contains the string [%s] which is used internally "
+ "for performing escaping operations when trying to 'repair' a URI which cannot be parsed. "
+ "Check the original error for repairing the URI or try to use a different marker.",
- serializedURI,
- PERCENT_ESCAPE), e);
+ serializedURI, PERCENT_ESCAPE), e);
}
// Attempt repairing the invalid URI similar to org.eclipse.jetty.client.HttpRedirector#sanitize by
// extracting the different parts and then passing them to the multi-argument constructor that quotes
@@ -279,8 +280,7 @@ public URI parseToSafeURI(String serializedURI) throws URISyntaxException, Secur
if (this.isURITrusted(uri)) {
return uri;
} else {
- throw new SecurityException(String.format("The given URI [%s] is not safe on this server.",
- uri));
+ throw new SecurityException(String.format("The given URI [%s] is not safe on this server.", uri));
}
}
@@ -297,8 +297,8 @@ public URI parseToSafeURI(String serializedURI, String requestHost) throws URISy
* replacement chain if and only if this {@code %} character belongs to a percent encoded byte.
*
* @param originalString the string to parse
- * @return a string containing a replacement chain for all {@code %} characters not belonging to a percent
- * encoded byte
+ * @return a string containing a replacement chain for all {@code %} characters not belonging to a percent encoded
+ * byte
*/
private String replaceUnquotedPercent(String originalString)
{
@@ -307,8 +307,8 @@ private String replaceUnquotedPercent(String originalString)
char[] charArray = originalString.toCharArray();
for (int i = 0; i < charArray.length; i++) {
char currentChar = charArray[i];
- if ((currentChar == PERCENT) && (i < (charArray.length - 2))
- && isQuotedChar(charArray[i + 1]) && isQuotedChar(charArray[i + 2])) {
+ if ((currentChar == PERCENT) && (i < (charArray.length - 2)) && isQuotedChar(charArray[i + 1])
+ && isQuotedChar(charArray[i + 2])) {
result.append(PERCENT_ESCAPE);
} else {
result.append(currentChar);
@@ -322,6 +322,7 @@ && isQuotedChar(charArray[i + 1]) && isQuotedChar(charArray[i + 2])) {
/**
* Check if the given char belongs to the range of character that forms a percent encoded byte.
+ *
* @param nextChar the char to check if it belongs to the range
* @return {@code true} if it belongs to the range
*/
diff --git a/xwiki-platform-core/xwiki-platform-url/xwiki-platform-url-default/src/test/java/org/xwiki/url/internal/DefaultURLSecurityManagerTest.java b/xwiki-platform-core/xwiki-platform-url/xwiki-platform-url-default/src/test/java/org/xwiki/url/internal/DefaultURLSecurityManagerTest.java
index 0e1e304271a4..7b0fe70b3935 100644
--- a/xwiki-platform-core/xwiki-platform-url/xwiki-platform-url-default/src/test/java/org/xwiki/url/internal/DefaultURLSecurityManagerTest.java
+++ b/xwiki-platform-core/xwiki-platform-url/xwiki-platform-url-default/src/test/java/org/xwiki/url/internal/DefaultURLSecurityManagerTest.java
@@ -19,6 +19,16 @@
*/
package org.xwiki.url.internal;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
@@ -28,11 +38,12 @@
import java.util.List;
import javax.inject.Provider;
-import javax.servlet.http.HttpServletRequest;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
+import org.xwiki.container.Container;
+import org.xwiki.container.servlet.ServletRequest;
import org.xwiki.context.Execution;
import org.xwiki.context.ExecutionContext;
import org.xwiki.test.LogLevel;
@@ -46,17 +57,8 @@
import org.xwiki.wiki.descriptor.WikiDescriptorManager;
import com.xpn.xwiki.XWikiContext;
-import com.xpn.xwiki.web.XWikiRequest;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertThrows;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
+import jakarta.servlet.http.HttpServletRequest;
/**
* Tests for {@link DefaultURLSecurityManager}.
@@ -80,6 +82,9 @@ class DefaultURLSecurityManagerTest
@MockComponent
private Execution execution;
+ @MockComponent
+ private Container container;
+
@MockComponent
private Provider contextProvider;
@@ -119,10 +124,11 @@ void isDomainTrusted() throws Exception
"enterprise.eu"
));
- XWikiRequest request = mock(XWikiRequest.class);
- when(this.xWikiContext.getRequest()).thenReturn(request);
- HttpServletRequest servletRequest = mock(HttpServletRequest.class);
- when(request.getHttpServletRequest()).thenReturn(servletRequest);
+ ServletRequest request = mock();
+ when(this.container.getRequest()).thenReturn(request);
+ HttpServletRequest servletRequest = mock();
+ when(request.getRequest()).thenReturn(servletRequest);
+ when(servletRequest.getScheme()).thenReturn("http");
when(servletRequest.getRequestURL()).thenReturn(new StringBuffer("http://localhost:8080/xwiki/bin/register/"));
when(this.wikiDescriptorManager.getAll()).thenReturn(Arrays.asList(wikiDescriptor1, wikiDescriptor2));
diff --git a/xwiki-platform-core/xwiki-platform-url/xwiki-platform-url-schemes/xwiki-platform-url-scheme-standard/pom.xml b/xwiki-platform-core/xwiki-platform-url/xwiki-platform-url-schemes/xwiki-platform-url-scheme-standard/pom.xml
index 385db8885f5b..7bd752e7f7d2 100644
--- a/xwiki-platform-core/xwiki-platform-url/xwiki-platform-url-schemes/xwiki-platform-url-scheme-standard/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-url/xwiki-platform-url-schemes/xwiki-platform-url-scheme-standard/pom.xml
@@ -65,8 +65,8 @@
${project.version}
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
diff --git a/xwiki-platform-core/xwiki-platform-user/xwiki-platform-user-default/pom.xml b/xwiki-platform-core/xwiki-platform-user/xwiki-platform-user-default/pom.xml
index 28adc4562892..6158eed32a45 100644
--- a/xwiki-platform-core/xwiki-platform-user/xwiki-platform-user-default/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-user/xwiki-platform-user-default/pom.xml
@@ -64,6 +64,7 @@
xwiki-platform-configuration-default
${project.version}
+
org.xwiki.platform
diff --git a/xwiki-platform-core/xwiki-platform-user/xwiki-platform-user-resource/pom.xml b/xwiki-platform-core/xwiki-platform-user/xwiki-platform-user-resource/pom.xml
index a49b1d8eb1ad..c3e76452f80f 100644
--- a/xwiki-platform-core/xwiki-platform-user/xwiki-platform-user-resource/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-user/xwiki-platform-user-resource/pom.xml
@@ -59,8 +59,8 @@
test
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
test
diff --git a/xwiki-platform-core/xwiki-platform-velocity/xwiki-platform-velocity-webapp/pom.xml b/xwiki-platform-core/xwiki-platform-velocity/xwiki-platform-velocity-webapp/pom.xml
index 1de6482ed7c1..ee36e082b98a 100644
--- a/xwiki-platform-core/xwiki-platform-velocity/xwiki-platform-velocity-webapp/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-velocity/xwiki-platform-velocity-webapp/pom.xml
@@ -46,8 +46,8 @@
${project.version}
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
diff --git a/xwiki-platform-core/xwiki-platform-vfs/xwiki-platform-vfs-api/pom.xml b/xwiki-platform-core/xwiki-platform-vfs/xwiki-platform-vfs-api/pom.xml
index 0ccfc72c3b14..eba861abfcf8 100644
--- a/xwiki-platform-core/xwiki-platform-vfs/xwiki-platform-vfs-api/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-vfs/xwiki-platform-vfs-api/pom.xml
@@ -223,8 +223,8 @@
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
test
diff --git a/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-war/src/main/webapp/WEB-INF/jetty-web.xml b/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-war/src/main/webapp/WEB-INF/jetty-web.xml
index 489e4a8e6d2d..474918d675ad 100644
--- a/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-war/src/main/webapp/WEB-INF/jetty-web.xml
+++ b/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-war/src/main/webapp/WEB-INF/jetty-web.xml
@@ -1,5 +1,5 @@
-
+
-
+
+
+ ResolveRelativeRedirectFilter
+ org.xwiki.container.servlet.filters.internal.ResolveRelativeRedirectFilter
+
+
+
+
+ SafeRedirectFilter
+ org.xwiki.container.servlet.filters.internal.SafeRedirectFilter
+
+
diff --git a/xwiki-platform-core/xwiki-platform-webjars/xwiki-platform-webjars-api/src/test/java/org/xwiki/webjars/internal/WebJarsResourceReferenceHandlerTest.java b/xwiki-platform-core/xwiki-platform-webjars/xwiki-platform-webjars-api/src/test/java/org/xwiki/webjars/internal/WebJarsResourceReferenceHandlerTest.java
index 33ccf91b7342..38e119c9a44b 100644
--- a/xwiki-platform-core/xwiki-platform-webjars/xwiki-platform-webjars-api/src/test/java/org/xwiki/webjars/internal/WebJarsResourceReferenceHandlerTest.java
+++ b/xwiki-platform-core/xwiki-platform-webjars/xwiki-platform-webjars-api/src/test/java/org/xwiki/webjars/internal/WebJarsResourceReferenceHandlerTest.java
@@ -19,6 +19,23 @@
*/
package org.xwiki.webjars.internal;
+import static ch.qos.logback.classic.Level.ERROR;
+import static java.util.Arrays.asList;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotSame;
+import static org.junit.jupiter.api.Assertions.assertSame;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoInteractions;
+import static org.mockito.Mockito.when;
+import static org.xwiki.test.LogLevel.DEBUG;
+
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
@@ -26,8 +43,6 @@
import java.util.Date;
import javax.inject.Named;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.input.CharSequenceInputStream;
import org.apache.velocity.exception.VelocityException;
@@ -49,22 +64,8 @@
import org.xwiki.test.junit5.mockito.MockComponent;
import org.xwiki.webjars.internal.filter.WebJarsResourceFilter;
-import static ch.qos.logback.classic.Level.ERROR;
-import static java.util.Arrays.asList;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertNotSame;
-import static org.junit.jupiter.api.Assertions.assertSame;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyLong;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyNoInteractions;
-import static org.mockito.Mockito.when;
-import static org.xwiki.test.LogLevel.DEBUG;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
/**
* Unit tests for {@link WebJarsResourceReferenceHandler}.
@@ -114,11 +115,11 @@ void setUp() throws Exception
when(this.response.getOutputStream()).thenReturn(responseOutputStream);
HttpServletResponse httpResponse = mock(HttpServletResponse.class);
- when(this.response.getHttpServletResponse()).thenReturn(httpResponse);
+ when(this.response.getResponse()).thenReturn(httpResponse);
when(this.container.getResponse()).thenReturn(this.response);
HttpServletRequest httpRequest = mock(HttpServletRequest.class);
- when(this.request.getHttpServletRequest()).thenReturn(httpRequest);
+ when(this.request.getRequest()).thenReturn(httpRequest);
when(this.container.getRequest()).thenReturn(this.request);
when(this.classLoaderManager.getURLClassLoader("wiki:wiki", true)).thenReturn(this.classLoader);
@@ -133,8 +134,8 @@ void executeWhenResourceDoesntExist() throws Exception
this.handler.handle(reference, this.chain);
verify(this.classLoader).getResourceAsStream("META-INF/resources/webjars/angular/2.1.11/angular.js");
- verify(this.response.getHttpServletResponse())
- .sendError(404, "Resource not found [angular/2.1.11/angular.js].");
+ verify(this.response.getResponse()).sendError(404,
+ "Resource not found [angular/2.1.11/angular.js].");
verify(this.chain).handleNext(reference);
}
@@ -145,8 +146,8 @@ void executeWhenResourceExists() throws Exception
new WebJarsResourceReference("wiki:wiki", asList("angular", "2.1.11", "angular.js"));
ByteArrayInputStream resourceStream = new ByteArrayInputStream("content".getBytes());
- when(this.classLoader.getResourceAsStream("META-INF/resources/webjars/angular/2.1.11/angular.js")).thenReturn(
- resourceStream);
+ when(this.classLoader.getResourceAsStream("META-INF/resources/webjars/angular/2.1.11/angular.js"))
+ .thenReturn(resourceStream);
long now = new Date().getTime();
this.handler.handle(reference, this.chain);
@@ -160,15 +161,15 @@ void executeWhenResourceExists() throws Exception
verify(this.response).setContentType("application/javascript");
// Verify that the static resource is cached permanently.
- verify(this.response.getHttpServletResponse()).setHeader("Cache-Control", "public");
+ verify(this.response.getResponse()).setHeader("Cache-Control", "public");
ArgumentCaptor expireDate = ArgumentCaptor.forClass(Long.class);
- verify(this.response.getHttpServletResponse()).setDateHeader(eq("Expires"), expireDate.capture());
+ verify(this.response.getResponse()).setDateHeader(eq("Expires"), expireDate.capture());
// The expiration date should be in one year from now.
assertTrue(expireDate.getValue() >= (now + 365 * 24 * 3600 * 1000L));
// Also verify that the "Last-Modified" header has been set in the response so that the browser will send
// an If-Modified-Since header for the next request and we can tell it to use its cache.
- verify(this.response.getHttpServletResponse()).setDateHeader(eq("Last-Modified"), anyLong());
+ verify(this.response.getResponse()).setDateHeader(eq("Last-Modified"), anyLong());
verify(this.chain).handleNext(reference);
}
@@ -179,12 +180,12 @@ void return304WhenIfModifiedSinceHeader() throws Exception
WebJarsResourceReference reference =
new WebJarsResourceReference("wiki:wiki", asList("angular", "2.1.11", "angular.js"));
- when(this.request.getHttpServletRequest().getHeader("If-Modified-Since")).thenReturn("some value");
+ when(this.request.getRequest().getHeader("If-Modified-Since")).thenReturn("some value");
this.handler.handle(reference, this.chain);
// This the test: we verify that 304 is returned when the "If-Modified-Since" header is found in the request
- verify(this.response.getHttpServletResponse()).setStatus(304);
+ verify(this.response.getResponse()).setStatus(304);
verify(this.chain).handleNext(reference);
}
@@ -198,8 +199,7 @@ void evaluateResource() throws Exception
try (ByteArrayInputStream resourceStream = new ByteArrayInputStream("content".getBytes())) {
when(this.classLoader.getResourceAsStream("META-INF/resources/webjars/angular/2.1.11/angular.js"))
- .thenReturn(
- resourceStream);
+ .thenReturn(resourceStream);
}
when(this.velocityFilter.filter(any(), any()))
@@ -214,8 +214,8 @@ void evaluateResource() throws Exception
verify(this.response).setContentType("application/javascript");
// Verify that the dynamic resource is not cached.
- verify(this.response.getHttpServletResponse(), never()).setHeader(any(), any());
- verify(this.response.getHttpServletResponse(), never()).setDateHeader(any(), anyLong());
+ verify(this.response.getResponse(), never()).setHeader(any(), any());
+ verify(this.response.getResponse(), never()).setDateHeader(any(), anyLong());
}
@Test
@@ -243,7 +243,7 @@ void failingResourceEvaluation() throws Exception
this.logCapture.getMessage(0));
// Verify that the client is properly notified about the failure.
- verify(this.response.getHttpServletResponse()).sendError(500,
+ verify(this.response.getResponse()).sendError(500,
"Failed to evaluate the Velocity code from WebJar resource [angular/2.1.11/angular.js]");
// The next handlers are still called.
@@ -284,9 +284,8 @@ void getContentType() throws Exception
WebJarsResourceReference resourceReference =
new WebJarsResourceReference("testNamespace", asList("testdirectory", "testfile.less"));
- String mimeType =
- this.handler.getContentType(new CharSequenceInputStream("a:\n color: #f00;", StandardCharsets.UTF_8),
- resourceReference);
+ String mimeType = this.handler.getContentType(
+ new CharSequenceInputStream("a:\n color: #f00;", StandardCharsets.UTF_8), resourceReference);
assertEquals("text/x-less", mimeType);
}
@@ -297,9 +296,8 @@ void getContentTypeLessAndEvaluate() throws Exception
new WebJarsResourceReference("testNamespace", asList("testdirectory", "testfile.less"));
resourceReference.addParameter("evaluate", "true");
- String mimeType =
- this.handler.getContentType(new CharSequenceInputStream("a:\n color: #f00;", StandardCharsets.UTF_8),
- resourceReference);
+ String mimeType = this.handler.getContentType(
+ new CharSequenceInputStream("a:\n color: #f00;", StandardCharsets.UTF_8), resourceReference);
assertEquals("text/css", mimeType);
}
diff --git a/xwiki-platform-core/xwiki-platform-websocket/pom.xml b/xwiki-platform-core/xwiki-platform-websocket/pom.xml
index c0c2f13730b3..0443e1391652 100644
--- a/xwiki-platform-core/xwiki-platform-websocket/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-websocket/pom.xml
@@ -52,12 +52,16 @@
${project.version}
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
- javax.websocket
- javax.websocket-api
+ jakarta.websocket
+ jakarta.websocket-api
+
+
+ jakarta.websocket
+ jakarta.websocket-client-api
diff --git a/xwiki-platform-core/xwiki-platform-websocket/src/main/java/org/xwiki/websocket/AbstractXWikiEndpoint.java b/xwiki-platform-core/xwiki-platform-websocket/src/main/java/org/xwiki/websocket/AbstractXWikiEndpoint.java
index af8cee9fc621..30db06d8117f 100644
--- a/xwiki-platform-core/xwiki-platform-websocket/src/main/java/org/xwiki/websocket/AbstractXWikiEndpoint.java
+++ b/xwiki-platform-core/xwiki-platform-websocket/src/main/java/org/xwiki/websocket/AbstractXWikiEndpoint.java
@@ -26,10 +26,10 @@
import java.util.List;
import javax.inject.Inject;
-import javax.websocket.CloseReason;
-import javax.websocket.EncodeException;
-import javax.websocket.Endpoint;
-import javax.websocket.Session;
+import jakarta.websocket.CloseReason;
+import jakarta.websocket.EncodeException;
+import jakarta.websocket.Endpoint;
+import jakarta.websocket.Session;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.slf4j.Logger;
diff --git a/xwiki-platform-core/xwiki-platform-websocket/src/main/java/org/xwiki/websocket/internal/DefaultWebSocketContext.java b/xwiki-platform-core/xwiki-platform-websocket/src/main/java/org/xwiki/websocket/internal/DefaultWebSocketContext.java
index 767e51efea53..17630e188d19 100644
--- a/xwiki-platform-core/xwiki-platform-websocket/src/main/java/org/xwiki/websocket/internal/DefaultWebSocketContext.java
+++ b/xwiki-platform-core/xwiki-platform-websocket/src/main/java/org/xwiki/websocket/internal/DefaultWebSocketContext.java
@@ -25,10 +25,6 @@
import javax.inject.Inject;
import javax.inject.Singleton;
-import javax.websocket.HandshakeResponse;
-import javax.websocket.Session;
-import javax.websocket.server.HandshakeRequest;
-import javax.websocket.server.ServerEndpointConfig;
import org.slf4j.Logger;
import org.xwiki.component.annotation.Component;
@@ -38,11 +34,19 @@
import org.xwiki.container.servlet.ServletSession;
import org.xwiki.context.Execution;
import org.xwiki.context.ExecutionContext;
+import org.xwiki.jakartabridge.servlet.JakartaServletBridge;
import org.xwiki.websocket.WebSocketContext;
import com.xpn.xwiki.XWikiContext;
import com.xpn.xwiki.user.api.XWikiUser;
import com.xpn.xwiki.util.XWikiStubContextProvider;
+import com.xpn.xwiki.web.XWikiServletRequest;
+import com.xpn.xwiki.web.XWikiServletResponse;
+
+import jakarta.websocket.HandshakeResponse;
+import jakarta.websocket.Session;
+import jakarta.websocket.server.HandshakeRequest;
+import jakarta.websocket.server.ServerEndpointConfig;
/**
* Default {@link WebSocketContext} implementation. Initializes the XWiki execution context and binds it to the
@@ -52,6 +56,7 @@
* @version $Id$
* @since 13.7RC1
*/
+@SuppressWarnings("checkstyle:ClassFanOutComplexity")
@Component
@Singleton
public class DefaultWebSocketContext implements WebSocketContext
@@ -116,9 +121,13 @@ private void initialize(ExecutionContext context)
XWikiContext xcontext = getXWikiContext();
if (xcontext != null) {
- this.container.setRequest(new ServletRequest(xcontext.getRequest()));
- this.container.setResponse(new ServletResponse(xcontext.getResponse()));
- this.container.setSession(new ServletSession(xcontext.getRequest()));
+ if (xcontext.getRequest() != null) {
+ this.container.setRequest(new ServletRequest(xcontext.getRequest()));
+ this.container.setSession(new ServletSession(xcontext.getRequest()));
+ }
+ if (xcontext.getResponse() != null) {
+ this.container.setResponse(new ServletResponse(xcontext.getResponse()));
+ }
}
}
@@ -159,8 +168,10 @@ private ExecutionContext createExecutionContext(ServerEndpointConfig config, Han
xcontext.setWikiId(wiki);
}
- xcontext.setRequest(new XWikiWebSocketRequestStub(request));
- xcontext.setResponse(new XWikiWebSocketResponseStub(response));
+ xcontext.setRequest(
+ new XWikiServletRequest(JakartaServletBridge.toJavax(new XWikiWebSocketRequestStub(request))));
+ xcontext.setResponse(
+ new XWikiServletResponse(JakartaServletBridge.toJavax(new XWikiWebSocketResponseStub(response))));
xcontext.declareInExecutionContext(context);
}
diff --git a/xwiki-platform-core/xwiki-platform-websocket/src/main/java/org/xwiki/websocket/internal/DynamicEchoEndpoint.java b/xwiki-platform-core/xwiki-platform-websocket/src/main/java/org/xwiki/websocket/internal/DynamicEchoEndpoint.java
index 9db5a523f5a8..5ce9bafb44d3 100644
--- a/xwiki-platform-core/xwiki-platform-websocket/src/main/java/org/xwiki/websocket/internal/DynamicEchoEndpoint.java
+++ b/xwiki-platform-core/xwiki-platform-websocket/src/main/java/org/xwiki/websocket/internal/DynamicEchoEndpoint.java
@@ -22,10 +22,10 @@
import javax.inject.Inject;
import javax.inject.Named;
import javax.inject.Singleton;
-import javax.websocket.CloseReason;
-import javax.websocket.EndpointConfig;
-import javax.websocket.MessageHandler;
-import javax.websocket.Session;
+import jakarta.websocket.CloseReason;
+import jakarta.websocket.EndpointConfig;
+import jakarta.websocket.MessageHandler;
+import jakarta.websocket.Session;
import org.xwiki.bridge.DocumentAccessBridge;
import org.xwiki.component.annotation.Component;
diff --git a/xwiki-platform-core/xwiki-platform-websocket/src/main/java/org/xwiki/websocket/internal/StaticEchoEndpoint.java b/xwiki-platform-core/xwiki-platform-websocket/src/main/java/org/xwiki/websocket/internal/StaticEchoEndpoint.java
index d25f5e935a3e..240ebf4d4875 100644
--- a/xwiki-platform-core/xwiki-platform-websocket/src/main/java/org/xwiki/websocket/internal/StaticEchoEndpoint.java
+++ b/xwiki-platform-core/xwiki-platform-websocket/src/main/java/org/xwiki/websocket/internal/StaticEchoEndpoint.java
@@ -24,11 +24,11 @@
import javax.inject.Inject;
import javax.inject.Named;
import javax.inject.Singleton;
-import javax.websocket.CloseReason;
-import javax.websocket.OnMessage;
-import javax.websocket.OnOpen;
-import javax.websocket.Session;
-import javax.websocket.server.ServerEndpoint;
+import jakarta.websocket.CloseReason;
+import jakarta.websocket.OnMessage;
+import jakarta.websocket.OnOpen;
+import jakarta.websocket.Session;
+import jakarta.websocket.server.ServerEndpoint;
import org.slf4j.Logger;
import org.xwiki.bridge.DocumentAccessBridge;
diff --git a/xwiki-platform-core/xwiki-platform-websocket/src/main/java/org/xwiki/websocket/internal/XWikiWebSocketRequestStub.java b/xwiki-platform-core/xwiki-platform-websocket/src/main/java/org/xwiki/websocket/internal/XWikiWebSocketRequestStub.java
index aa6148f633ba..a827718132df 100644
--- a/xwiki-platform-core/xwiki-platform-websocket/src/main/java/org/xwiki/websocket/internal/XWikiWebSocketRequestStub.java
+++ b/xwiki-platform-core/xwiki-platform-websocket/src/main/java/org/xwiki/websocket/internal/XWikiWebSocketRequestStub.java
@@ -32,20 +32,19 @@
import java.util.Optional;
import java.util.TreeMap;
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpSession;
-import javax.websocket.server.HandshakeRequest;
+import org.xwiki.container.servlet.HttpServletRequestStub;
-import com.xpn.xwiki.web.XWikiRequest;
-import com.xpn.xwiki.web.XWikiServletRequestStub;
+import jakarta.servlet.http.Cookie;
+import jakarta.servlet.http.HttpSession;
+import jakarta.websocket.server.HandshakeRequest;
/**
- * Adapts a {@link HandshakeRequest} to {@link XWikiRequest}.
+ * Adapts a {@link HandshakeRequest} to {@link jakarta.servlet.http.HttpServletRequest}.
*
* @version $Id$
* @since 13.7RC1
*/
-public class XWikiWebSocketRequestStub extends XWikiServletRequestStub
+public class XWikiWebSocketRequestStub extends HttpServletRequestStub
{
private final HandshakeRequest request;
diff --git a/xwiki-platform-core/xwiki-platform-websocket/src/main/java/org/xwiki/websocket/internal/XWikiWebSocketResponseStub.java b/xwiki-platform-core/xwiki-platform-websocket/src/main/java/org/xwiki/websocket/internal/XWikiWebSocketResponseStub.java
index 1581c6e8ede8..2f60a320673f 100644
--- a/xwiki-platform-core/xwiki-platform-websocket/src/main/java/org/xwiki/websocket/internal/XWikiWebSocketResponseStub.java
+++ b/xwiki-platform-core/xwiki-platform-websocket/src/main/java/org/xwiki/websocket/internal/XWikiWebSocketResponseStub.java
@@ -32,22 +32,19 @@
import java.util.Set;
import java.util.stream.Collectors;
-import javax.servlet.http.Cookie;
-import javax.websocket.HandshakeResponse;
+import jakarta.servlet.http.Cookie;
+import jakarta.websocket.HandshakeResponse;
import org.apache.commons.lang3.StringUtils;
-
-import com.xpn.xwiki.web.XWikiRequest;
-import com.xpn.xwiki.web.XWikiResponse;
-import com.xpn.xwiki.web.XWikiServletResponseStub;
+import org.xwiki.container.servlet.HttpServletResponseStub;
/**
- * Adapts a {@link HandshakeResponse} to {@link XWikiResponse}.
+ * Adapts a {@link HandshakeResponse} to {@link jakarta.servlet.http.HttpServletResponse}.
*
* @version $Id$
* @since 13.7RC1
*/
-public class XWikiWebSocketResponseStub extends XWikiServletResponseStub
+public class XWikiWebSocketResponseStub extends HttpServletResponseStub
{
private final HandshakeResponse response;
@@ -171,15 +168,4 @@ public void addCookie(Cookie cookie)
addHeader("Set-Cookie", header.toString());
}
-
- @Override
- public void removeCookie(String cookieName, XWikiRequest request)
- {
- Cookie cookie = request.getCookie(cookieName);
- if (cookie != null) {
- cookie.setMaxAge(0);
- cookie.setPath(cookie.getPath());
- addCookie(cookie);
- }
- }
}
diff --git a/xwiki-platform-core/xwiki-platform-websocket/src/test/java/org/xwiki/websocket/internal/DefaultWebSocketContextTest.java b/xwiki-platform-core/xwiki-platform-websocket/src/test/java/org/xwiki/websocket/internal/DefaultWebSocketContextTest.java
index ecb65ddffa8f..22677bccfd74 100644
--- a/xwiki-platform-core/xwiki-platform-websocket/src/test/java/org/xwiki/websocket/internal/DefaultWebSocketContextTest.java
+++ b/xwiki-platform-core/xwiki-platform-websocket/src/test/java/org/xwiki/websocket/internal/DefaultWebSocketContextTest.java
@@ -24,11 +24,11 @@
import java.util.HashMap;
import java.util.Map;
-import javax.servlet.http.HttpSession;
-import javax.websocket.HandshakeResponse;
-import javax.websocket.Session;
-import javax.websocket.server.HandshakeRequest;
-import javax.websocket.server.ServerEndpointConfig;
+import jakarta.servlet.http.HttpSession;
+import jakarta.websocket.HandshakeResponse;
+import jakarta.websocket.Session;
+import jakarta.websocket.server.HandshakeRequest;
+import jakarta.websocket.server.ServerEndpointConfig;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
diff --git a/xwiki-platform-core/xwiki-platform-websocket/src/test/java/org/xwiki/websocket/internal/DynamicEchoEndpointTest.java b/xwiki-platform-core/xwiki-platform-websocket/src/test/java/org/xwiki/websocket/internal/DynamicEchoEndpointTest.java
index e3b6a08bde71..df9831a14d3d 100644
--- a/xwiki-platform-core/xwiki-platform-websocket/src/test/java/org/xwiki/websocket/internal/DynamicEchoEndpointTest.java
+++ b/xwiki-platform-core/xwiki-platform-websocket/src/test/java/org/xwiki/websocket/internal/DynamicEchoEndpointTest.java
@@ -19,10 +19,10 @@
*/
package org.xwiki.websocket.internal;
-import javax.websocket.CloseReason;
-import javax.websocket.MessageHandler;
-import javax.websocket.RemoteEndpoint.Basic;
-import javax.websocket.Session;
+import jakarta.websocket.CloseReason;
+import jakarta.websocket.MessageHandler;
+import jakarta.websocket.RemoteEndpoint.Basic;
+import jakarta.websocket.Session;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
diff --git a/xwiki-platform-core/xwiki-platform-websocket/src/test/java/org/xwiki/websocket/internal/XWikiWebSocketRequestStubTest.java b/xwiki-platform-core/xwiki-platform-websocket/src/test/java/org/xwiki/websocket/internal/XWikiWebSocketRequestStubTest.java
index 2e3182d1f469..57d7aec7db4a 100644
--- a/xwiki-platform-core/xwiki-platform-websocket/src/test/java/org/xwiki/websocket/internal/XWikiWebSocketRequestStubTest.java
+++ b/xwiki-platform-core/xwiki-platform-websocket/src/test/java/org/xwiki/websocket/internal/XWikiWebSocketRequestStubTest.java
@@ -19,6 +19,14 @@
*/
package org.xwiki.websocket.internal;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertSame;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
import java.net.URI;
import java.security.Principal;
import java.util.Arrays;
@@ -26,19 +34,12 @@
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
-
-import javax.servlet.http.HttpSession;
-import javax.websocket.server.HandshakeRequest;
+import java.util.stream.Stream;
import org.junit.jupiter.api.Test;
-import static org.junit.jupiter.api.Assertions.assertArrayEquals;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertSame;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
+import jakarta.servlet.http.HttpSession;
+import jakarta.websocket.server.HandshakeRequest;
/**
* Unit tests for {@link XWikiWebSocketRequestStub}.
@@ -79,7 +80,9 @@ void verifyStub() throws Exception
assertEquals("red", stub.getParameter("color"));
assertArrayEquals(new String[] {"red", "blue"}, stub.getParameterValues("color"));
- assertEquals("xyz", stub.getCookie("validation").getValue());
+ String validationCookie = Stream.of(stub.getCookies()).filter(c -> c.getName().equals("validation"))
+ .map(c -> c.getValue()).findFirst().get();
+ assertEquals("xyz", validationCookie);
assertEquals(6, stub.getCookies().length);
assertEquals(1212491130000L, stub.getDateHeader("daTe"));
diff --git a/xwiki-platform-core/xwiki-platform-websocket/src/test/java/org/xwiki/websocket/internal/XWikiWebSocketResponseStubTest.java b/xwiki-platform-core/xwiki-platform-websocket/src/test/java/org/xwiki/websocket/internal/XWikiWebSocketResponseStubTest.java
index afee2e62b06e..ebacb5d802ec 100644
--- a/xwiki-platform-core/xwiki-platform-websocket/src/test/java/org/xwiki/websocket/internal/XWikiWebSocketResponseStubTest.java
+++ b/xwiki-platform-core/xwiki-platform-websocket/src/test/java/org/xwiki/websocket/internal/XWikiWebSocketResponseStubTest.java
@@ -19,6 +19,12 @@
*/
package org.xwiki.websocket.internal;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedHashMap;
@@ -26,18 +32,10 @@
import java.util.List;
import java.util.Map;
-import javax.servlet.http.Cookie;
-import javax.websocket.HandshakeResponse;
-
import org.junit.jupiter.api.Test;
-import com.xpn.xwiki.web.XWikiRequest;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
+import jakarta.servlet.http.Cookie;
+import jakarta.websocket.HandshakeResponse;
/**
* Unit tests for {@link XWikiWebSocketResponseStub}.
@@ -58,15 +56,13 @@ void verifyStub() throws Exception
stub.addCookie(new Cookie("foo", "bar"));
- XWikiRequest request = mock(XWikiRequest.class);
Cookie cookie = new Cookie("bar", "abc");
cookie.setDomain("xwiki.org");
cookie.setPath("/xwiki/websocket");
- cookie.setMaxAge(3600);
cookie.setHttpOnly(true);
cookie.setSecure(true);
- when(request.getCookie("bar")).thenReturn(cookie);
- stub.removeCookie("bar", request);
+ cookie.setMaxAge(0);
+ stub.addCookie(cookie);
stub.setDateHeader("datE", 1626247690000L);
stub.addDateHeader("Date", 1212491130000L);
diff --git a/xwiki-platform-core/xwiki-platform-wiki/xwiki-platform-wiki-creationjob/pom.xml b/xwiki-platform-core/xwiki-platform-wiki/xwiki-platform-wiki-creationjob/pom.xml
index a5c0e7f8fe8b..5715a97c508f 100644
--- a/xwiki-platform-core/xwiki-platform-wiki/xwiki-platform-wiki-creationjob/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-wiki/xwiki-platform-wiki-creationjob/pom.xml
@@ -92,8 +92,8 @@
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
test
diff --git a/xwiki-platform-core/xwiki-platform-wiki/xwiki-platform-wiki-default/pom.xml b/xwiki-platform-core/xwiki-platform-wiki/xwiki-platform-wiki-default/pom.xml
index 4d97cac1b8d9..9597d746d8ec 100644
--- a/xwiki-platform-core/xwiki-platform-wiki/xwiki-platform-wiki-default/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-wiki/xwiki-platform-wiki-default/pom.xml
@@ -76,8 +76,8 @@
${project.version}
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
diff --git a/xwiki-platform-core/xwiki-platform-wiki/xwiki-platform-wiki-script/pom.xml b/xwiki-platform-core/xwiki-platform-wiki/xwiki-platform-wiki-script/pom.xml
index 07cdb7c34ce3..4405ebcd86d8 100644
--- a/xwiki-platform-core/xwiki-platform-wiki/xwiki-platform-wiki-script/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-wiki/xwiki-platform-wiki-script/pom.xml
@@ -65,8 +65,8 @@
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
test
diff --git a/xwiki-platform-core/xwiki-platform-wiki/xwiki-platform-wiki-template/xwiki-platform-wiki-template-default/pom.xml b/xwiki-platform-core/xwiki-platform-wiki/xwiki-platform-wiki-template/xwiki-platform-wiki-template-default/pom.xml
index bfd228ffc686..7c369ac5a664 100644
--- a/xwiki-platform-core/xwiki-platform-wiki/xwiki-platform-wiki-template/xwiki-platform-wiki-template-default/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-wiki/xwiki-platform-wiki-template/xwiki-platform-wiki-template-default/pom.xml
@@ -53,8 +53,8 @@
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
test
diff --git a/xwiki-platform-core/xwiki-platform-wiki/xwiki-platform-wiki-template/xwiki-platform-wiki-template-script/pom.xml b/xwiki-platform-core/xwiki-platform-wiki/xwiki-platform-wiki-template/xwiki-platform-wiki-template-script/pom.xml
index 1fc59c39a7d9..aeacb3a9e742 100644
--- a/xwiki-platform-core/xwiki-platform-wiki/xwiki-platform-wiki-template/xwiki-platform-wiki-template-script/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-wiki/xwiki-platform-wiki-template/xwiki-platform-wiki-template-script/pom.xml
@@ -50,8 +50,8 @@
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
test
diff --git a/xwiki-platform-core/xwiki-platform-wiki/xwiki-platform-wiki-user/xwiki-platform-wiki-user-script/pom.xml b/xwiki-platform-core/xwiki-platform-wiki/xwiki-platform-wiki-user/xwiki-platform-wiki-user-script/pom.xml
index 11b1416b53fe..df61688fd360 100644
--- a/xwiki-platform-core/xwiki-platform-wiki/xwiki-platform-wiki-user/xwiki-platform-wiki-user-script/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-wiki/xwiki-platform-wiki-user/xwiki-platform-wiki-user-script/pom.xml
@@ -53,8 +53,8 @@
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
test
diff --git a/xwiki-platform-core/xwiki-platform-wiki/xwiki-platform-wiki-workspaces-migrator/pom.xml b/xwiki-platform-core/xwiki-platform-wiki/xwiki-platform-wiki-workspaces-migrator/pom.xml
index f41e89e30e50..be79d9900f0e 100644
--- a/xwiki-platform-core/xwiki-platform-wiki/xwiki-platform-wiki-workspaces-migrator/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-wiki/xwiki-platform-wiki-workspaces-migrator/pom.xml
@@ -53,8 +53,8 @@
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
test
diff --git a/xwiki-platform-core/xwiki-platform-wysiwyg/xwiki-platform-wysiwyg-api/pom.xml b/xwiki-platform-core/xwiki-platform-wysiwyg/xwiki-platform-wysiwyg-api/pom.xml
index ee07a97743ac..c8a27f848c48 100644
--- a/xwiki-platform-core/xwiki-platform-wysiwyg/xwiki-platform-wysiwyg-api/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-wysiwyg/xwiki-platform-wysiwyg-api/pom.xml
@@ -37,9 +37,9 @@
WYSIWYG Editor Module
-
- javax.servlet
- javax.servlet-api
+
+ jakarta.servlet
+ jakarta.servlet-api
diff --git a/xwiki-platform-core/xwiki-platform-wysiwyg/xwiki-platform-wysiwyg-api/src/main/java/org/xwiki/wysiwyg/converter/JakartaRequestParameterConversionResult.java b/xwiki-platform-core/xwiki-platform-wysiwyg/xwiki-platform-wysiwyg-api/src/main/java/org/xwiki/wysiwyg/converter/JakartaRequestParameterConversionResult.java
new file mode 100644
index 000000000000..319e8b02806c
--- /dev/null
+++ b/xwiki-platform-core/xwiki-platform-wysiwyg/xwiki-platform-wysiwyg-api/src/main/java/org/xwiki/wysiwyg/converter/JakartaRequestParameterConversionResult.java
@@ -0,0 +1,78 @@
+/*
+ * See the NOTICE file distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.xwiki.wysiwyg.converter;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import org.xwiki.wysiwyg.filter.MutableJakartaServletRequest;
+
+/**
+ * Simple POJO holding the result of a conversion performed with {@link RequestParameterConverter}. More specifically
+ * this class contains a mutable request, resulting of the conversion, a map of errors that might have occurred during
+ * the conversion for each parameter, and a map of the output of the conversion for each parameter.
+ *
+ * @version $Id$
+ * @since 42.0.0
+ */
+public class JakartaRequestParameterConversionResult
+{
+ private MutableJakartaServletRequest request;
+
+ private Map errors;
+
+ private Map output;
+
+ /**
+ * Default constructor.
+ *
+ * @param request a mutable copy of the original request used for the conversion
+ */
+ public JakartaRequestParameterConversionResult(MutableJakartaServletRequest request)
+ {
+ this.request = request;
+ this.errors = new LinkedHashMap<>();
+ this.output = new LinkedHashMap<>();
+ }
+
+ /**
+ * @return the mutable request
+ */
+ public MutableJakartaServletRequest getRequest()
+ {
+ return request;
+ }
+
+ /**
+ * @return the map of errors indexed by parameters
+ */
+ public Map getErrors()
+ {
+ return errors;
+ }
+
+ /**
+ * @return the map of conversion output indexed by parameters
+ */
+ public Map getOutput()
+ {
+ return output;
+ }
+}
diff --git a/xwiki-platform-core/xwiki-platform-wysiwyg/xwiki-platform-wysiwyg-api/src/main/java/org/xwiki/wysiwyg/converter/RequestParameterConversionResult.java b/xwiki-platform-core/xwiki-platform-wysiwyg/xwiki-platform-wysiwyg-api/src/main/java/org/xwiki/wysiwyg/converter/RequestParameterConversionResult.java
index f81bb6c53ebd..8672b6a31659 100644
--- a/xwiki-platform-core/xwiki-platform-wysiwyg/xwiki-platform-wysiwyg-api/src/main/java/org/xwiki/wysiwyg/converter/RequestParameterConversionResult.java
+++ b/xwiki-platform-core/xwiki-platform-wysiwyg/xwiki-platform-wysiwyg-api/src/main/java/org/xwiki/wysiwyg/converter/RequestParameterConversionResult.java
@@ -23,19 +23,24 @@
import java.util.Map;
import org.xwiki.wysiwyg.filter.MutableServletRequest;
+import org.xwiki.wysiwyg.internal.filter.http.JavaxToJakartaMutableHttpServletRequest;
/**
- * Simple POJO holding the result of a conversion performed with {@link RequestParameterConverter}.
- * More specifically this class contains a mutable request, resulting of the conversion, a map of errors that might have
- * occurred during the conversion for each parameter, and a map of the output of the conversion for each parameter.
+ * Simple POJO holding the result of a conversion performed with {@link RequestParameterConverter}. More specifically
+ * this class contains a mutable request, resulting of the conversion, a map of errors that might have occurred during
+ * the conversion for each parameter, and a map of the output of the conversion for each parameter.
*
* @version $Id$
* @since 14.10
+ * @deprecated use {@link JakartaRequestParameterConversionResult} instead
*/
+@Deprecated(since = "42.0.0")
public class RequestParameterConversionResult
{
private MutableServletRequest request;
+
private Map errors;
+
private Map output;
/**
@@ -50,6 +55,19 @@ public RequestParameterConversionResult(MutableServletRequest request)
this.output = new LinkedHashMap<>();
}
+ /**
+ * Default constructor.
+ *
+ * @param result the jakarta result to copy
+ * @since 42.0.0
+ */
+ public RequestParameterConversionResult(JakartaRequestParameterConversionResult result)
+ {
+ this.request = new JavaxToJakartaMutableHttpServletRequest(result.getRequest());
+ this.errors = result.getErrors();
+ this.output = result.getOutput();
+ }
+
/**
* @return the mutable request
*/
diff --git a/xwiki-platform-core/xwiki-platform-wysiwyg/xwiki-platform-wysiwyg-api/src/main/java/org/xwiki/wysiwyg/converter/RequestParameterConverter.java b/xwiki-platform-core/xwiki-platform-wysiwyg/xwiki-platform-wysiwyg-api/src/main/java/org/xwiki/wysiwyg/converter/RequestParameterConverter.java
index a7e9910a1ceb..eaa6433a53ba 100644
--- a/xwiki-platform-core/xwiki-platform-wysiwyg/xwiki-platform-wysiwyg-api/src/main/java/org/xwiki/wysiwyg/converter/RequestParameterConverter.java
+++ b/xwiki-platform-core/xwiki-platform-wysiwyg/xwiki-platform-wysiwyg-api/src/main/java/org/xwiki/wysiwyg/converter/RequestParameterConverter.java
@@ -22,10 +22,13 @@
import java.io.IOException;
import java.util.Optional;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-
import org.xwiki.component.annotation.Role;
+import org.xwiki.jakartabridge.servlet.JakartaServletBridge;
+import org.xwiki.stability.Unstable;
+import org.xwiki.wysiwyg.internal.filter.http.JakartaToJavaxMutableHttpServletRequest;
+
+import jakarta.servlet.ServletRequest;
+import jakarta.servlet.ServletResponse;
/**
* Check if the given request contains parameters that needs conversion and perform the needing conversion.
@@ -37,30 +40,83 @@
public interface RequestParameterConverter
{
/**
- * Check if the given request needs conversion and perform those conversions.
- * This method creates a mutable request, modifies and returns it. However in case of
- * error it will return an empty optional, and it will handle directly the errors in the response.
- * See {@link #convert(ServletRequest)} for using an exception for handling the errors.
+ * Check if the given request needs conversion and perform those conversions. This method creates a mutable request,
+ * modifies and returns it. However in case of error it will return an empty optional, and it will handle directly
+ * the errors in the response. See {@link #convert(javax.servlet.ServletRequest)} for using an exception for
+ * handling the errors.
*
* @param request the request that might contain parameter needing conversion or an {@link Optional#empty()} in case
- * of error
+ * of error
* @param response the response used to redirect or do changes in case of conversion error
* @return a mutable request with the converted parameters, or an empty optional in case of error
* @throws IOException in case of problem to write an answer in the response
+ * @deprecated use {@link #convert(ServletRequest, ServletResponse)} instead
*/
- Optional convert(ServletRequest request, ServletResponse response) throws IOException;
+ @Deprecated(since = "42.0.0")
+ default Optional convert(javax.servlet.ServletRequest request,
+ javax.servlet.ServletResponse response) throws IOException
+ {
+ Optional result =
+ convert(JakartaServletBridge.toJakarta(request), JakartaServletBridge.toJakarta(response));
+
+ return result.isEmpty() ? Optional.empty() : Optional.of(JakartaServletBridge.toJavax(result.get()));
+ }
/**
- * Check if the given request needs conversion and perform those conversions.
- * This method creates a mutable request, modifies it and returns it along with the errors and output that have
- * occurred as part of the conversion, all that holds in the returned {@link RequestParameterConversionResult}.
- * Consumer of this API should always check if the obtained result contains errors or not to know if the conversion
- * properly succeeded.
+ * Check if the given request needs conversion and perform those conversions. This method creates a mutable request,
+ * modifies and returns it. However in case of error it will return an empty optional, and it will handle directly
+ * the errors in the response. See {@link #convert(javax.servlet.ServletRequest)} for using an exception for
+ * handling the errors.
+ *
+ * @param request the request that might contain parameter needing conversion or an {@link Optional#empty()} in case
+ * of error
+ * @param response the response used to redirect or do changes in case of conversion error
+ * @return a mutable request with the converted parameters, or an empty optional in case of error
+ * @throws IOException in case of problem to write an answer in the response
+ * @since 42.0.0
+ */
+ @Unstable
+ default Optional convert(ServletRequest request, ServletResponse response) throws IOException
+ {
+ Optional result =
+ convert(JakartaServletBridge.toJavax(request), JakartaServletBridge.toJavax(response));
+
+ return result.isEmpty() ? Optional.empty() : Optional.of(JakartaServletBridge.toJakarta(result.get()));
+ }
+
+ /**
+ * Check if the given request needs conversion and perform those conversions. This method creates a mutable request,
+ * modifies it and returns it along with the errors and output that have occurred as part of the conversion, all
+ * that holds in the returned {@link RequestParameterConversionResult}. Consumer of this API should always check if
+ * the obtained result contains errors or not to know if the conversion properly succeeded.
*
* @param request the request that might contain parameter needing conversion
* @return an instance of {@link RequestParameterConversionResult} containing the modified request and the output
* and errors that might have occurred
* @since 14.10
+ * @deprecated use {@link #convert(ServletRequest)} instead
+ */
+ @Deprecated(since = "42.0.0")
+ default RequestParameterConversionResult convert(javax.servlet.ServletRequest request)
+ {
+ return new RequestParameterConversionResult(convert(JakartaServletBridge.toJakarta(request)));
+ }
+
+ /**
+ * Check if the given request needs conversion and perform those conversions. This method creates a mutable request,
+ * modifies it and returns it along with the errors and output that have occurred as part of the conversion, all
+ * that holds in the returned {@link RequestParameterConversionResult}. Consumer of this API should always check if
+ * the obtained result contains errors or not to know if the conversion properly succeeded.
+ *
+ * @param request the request that might contain parameter needing conversion
+ * @return an instance of {@link RequestParameterConversionResult} containing the modified request and the output
+ * and errors that might have occurred
+ * @since 42.0.0
*/
- RequestParameterConversionResult convert(ServletRequest request);
+ @Unstable
+ default JakartaRequestParameterConversionResult convert(ServletRequest request)
+ {
+ return new JakartaRequestParameterConversionResult(
+ new JakartaToJavaxMutableHttpServletRequest(convert(JakartaServletBridge.toJavax(request)).getRequest()));
+ }
}
diff --git a/xwiki-platform-core/xwiki-platform-wysiwyg/xwiki-platform-wysiwyg-api/src/main/java/org/xwiki/wysiwyg/filter/ConversionFilter.java b/xwiki-platform-core/xwiki-platform-wysiwyg/xwiki-platform-wysiwyg-api/src/main/java/org/xwiki/wysiwyg/filter/ConversionFilter.java
index 995db15d284b..989fc954ac36 100644
--- a/xwiki-platform-core/xwiki-platform-wysiwyg/xwiki-platform-wysiwyg-api/src/main/java/org/xwiki/wysiwyg/filter/ConversionFilter.java
+++ b/xwiki-platform-core/xwiki-platform-wysiwyg/xwiki-platform-wysiwyg-api/src/main/java/org/xwiki/wysiwyg/filter/ConversionFilter.java
@@ -22,12 +22,12 @@
import java.io.IOException;
import java.util.Optional;
-import javax.servlet.Filter;
-import javax.servlet.FilterChain;
-import javax.servlet.FilterConfig;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
+import jakarta.servlet.Filter;
+import jakarta.servlet.FilterChain;
+import jakarta.servlet.FilterConfig;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.ServletRequest;
+import jakarta.servlet.ServletResponse;
import org.xwiki.context.Execution;
import org.xwiki.context.ExecutionContext;
@@ -38,8 +38,12 @@
/**
* This filter is used to convert the values of request parameters that require HTML conversion before being processed.
* A HTML editor can use this filter to convert its output to a specific syntax before it is saved.
+ *
+ * While the class is much older, the since annotation was moved to 42.0.0 because it implement a completely different
+ * API from Java point of view.
*
* @version $Id$
+ * @since 42.0.0
*/
public class ConversionFilter implements Filter
{
diff --git a/xwiki-platform-core/xwiki-platform-wysiwyg/xwiki-platform-wysiwyg-api/src/main/java/org/xwiki/wysiwyg/filter/MutableJakartaServletRequest.java b/xwiki-platform-core/xwiki-platform-wysiwyg/xwiki-platform-wysiwyg-api/src/main/java/org/xwiki/wysiwyg/filter/MutableJakartaServletRequest.java
new file mode 100644
index 000000000000..8136d84351a0
--- /dev/null
+++ b/xwiki-platform-core/xwiki-platform-wysiwyg/xwiki-platform-wysiwyg-api/src/main/java/org/xwiki/wysiwyg/filter/MutableJakartaServletRequest.java
@@ -0,0 +1,98 @@
+/*
+ * See the NOTICE file distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.xwiki.wysiwyg.filter;
+
+import java.io.IOException;
+
+import jakarta.servlet.ServletRequest;
+import jakarta.servlet.ServletResponse;
+
+/**
+ * A servlet request that can be modified. It is very useful, for instance, when you need to change the values of some
+ * request parameters, inside a filter.
+ *
+ * @version $Id$
+ * @since 42.0.0
+ */
+public interface MutableJakartaServletRequest extends ServletRequest
+{
+ /**
+ * Sets the value of a request parameter.
+ *
+ * @param name the name of the request parameter
+ * @param value the new value of the request parameter
+ * @return the old value of the specified request parameter, or {@code null} if this is the first time we set its
+ * value
+ */
+ String setParameter(String name, String value);
+
+ /**
+ * Sets the values of a request parameter.
+ *
+ * @param name the name of the request parameter
+ * @param values the new array of values for the specified request parameter
+ * @return the old values of the specified request parameter, or {@code null} if this is the first time we set its
+ * values
+ */
+ String[] setParameterValues(String name, String[] values);
+
+ /**
+ * Removes the request parameter with the specified name.
+ *
+ * @param name a string representing the name of the request parameter to be removed
+ * @return the old value of the specified request parameter, or {@code null} if it wasn't set
+ */
+ String removeParameter(String name);
+
+ /**
+ * Redirects this request to the specified URL. We had to add this method since there's no generic way to redirect a
+ * {@link ServletRequest}.
+ *
+ * @param response the response object used to redirect
+ * @param url the location where to redirect
+ * @throws IOException if the redirect fails
+ */
+ void sendRedirect(ServletResponse response, String url) throws IOException;
+
+ /**
+ * @return the URL of the requester
+ */
+ String getReferer();
+
+ /**
+ * @param attrName the name of the session attribute whose value should be retrieved
+ * @return the value of the specified session attribute
+ */
+ Object getSessionAttribute(String attrName);
+
+ /**
+ * Sets the value of a session attribute.
+ *
+ * @param attrName the name of the session attribute
+ * @param attrValue the value to be set
+ * @return the previous value of the specified session attribute
+ */
+ Object setSessionAttribute(String attrName, Object attrValue);
+
+ /**
+ * @return the request object wrapped by this object
+ */
+ ServletRequest getRequest();
+}
diff --git a/xwiki-platform-core/xwiki-platform-wysiwyg/xwiki-platform-wysiwyg-api/src/main/java/org/xwiki/wysiwyg/filter/MutableServletRequest.java b/xwiki-platform-core/xwiki-platform-wysiwyg/xwiki-platform-wysiwyg-api/src/main/java/org/xwiki/wysiwyg/filter/MutableServletRequest.java
index c3efb91d4899..8adb847f2b05 100644
--- a/xwiki-platform-core/xwiki-platform-wysiwyg/xwiki-platform-wysiwyg-api/src/main/java/org/xwiki/wysiwyg/filter/MutableServletRequest.java
+++ b/xwiki-platform-core/xwiki-platform-wysiwyg/xwiki-platform-wysiwyg-api/src/main/java/org/xwiki/wysiwyg/filter/MutableServletRequest.java
@@ -29,7 +29,9 @@
* request parameters, inside a filter.
*
* @version $Id$
+ * @deprecated use {@link MutableJakartaServletRequest} instead
*/
+@Deprecated(since = "42.0.0")
public interface MutableServletRequest extends ServletRequest
{
/**
diff --git a/xwiki-platform-core/xwiki-platform-wysiwyg/xwiki-platform-wysiwyg-api/src/main/java/org/xwiki/wysiwyg/filter/MutableServletRequestFactory.java b/xwiki-platform-core/xwiki-platform-wysiwyg/xwiki-platform-wysiwyg-api/src/main/java/org/xwiki/wysiwyg/filter/MutableServletRequestFactory.java
index e1db8ec5280d..625e20053249 100644
--- a/xwiki-platform-core/xwiki-platform-wysiwyg/xwiki-platform-wysiwyg-api/src/main/java/org/xwiki/wysiwyg/filter/MutableServletRequestFactory.java
+++ b/xwiki-platform-core/xwiki-platform-wysiwyg/xwiki-platform-wysiwyg-api/src/main/java/org/xwiki/wysiwyg/filter/MutableServletRequestFactory.java
@@ -19,9 +19,13 @@
*/
package org.xwiki.wysiwyg.filter;
-import javax.servlet.ServletRequest;
-
import org.xwiki.component.annotation.Role;
+import org.xwiki.jakartabridge.servlet.JakartaServletBridge;
+import org.xwiki.stability.Unstable;
+import org.xwiki.wysiwyg.internal.filter.http.JakartaToJavaxMutableHttpServletRequest;
+import org.xwiki.wysiwyg.internal.filter.http.JavaxToJakartaMutableHttpServletRequest;
+
+import jakarta.servlet.ServletRequest;
/**
* A factory for mutable servlet requests. This factory is needed because concrete mutable servlet requests don't have a
@@ -38,6 +42,24 @@ public interface MutableServletRequestFactory
*
* @param request The original servlet request to wrap.
* @return a new mutable servlet request.
+ * @deprecated use {@link #newInstance(ServletRequest)} instead
+ */
+ @Deprecated(since = "42.0.0")
+ default MutableServletRequest newInstance(javax.servlet.ServletRequest request)
+ {
+ return new JavaxToJakartaMutableHttpServletRequest(newInstance(JakartaServletBridge.toJakarta(request)));
+ }
+
+ /**
+ * Creates a new mutable servlet request.
+ *
+ * @param request The original servlet request to wrap.
+ * @return a new mutable servlet request.
+ * @since 42.0.0
*/
- MutableServletRequest newInstance(ServletRequest request);
+ @Unstable
+ default MutableJakartaServletRequest newInstance(ServletRequest request)
+ {
+ return new JakartaToJavaxMutableHttpServletRequest(newInstance(JakartaServletBridge.toJavax(request)));
+ }
}
diff --git a/xwiki-platform-core/xwiki-platform-wysiwyg/xwiki-platform-wysiwyg-api/src/main/java/org/xwiki/wysiwyg/internal/converter/DefaultRequestParameterConverter.java b/xwiki-platform-core/xwiki-platform-wysiwyg/xwiki-platform-wysiwyg-api/src/main/java/org/xwiki/wysiwyg/internal/converter/DefaultRequestParameterConverter.java
index 210938131c63..65c5d7088ccb 100644
--- a/xwiki-platform-core/xwiki-platform-wysiwyg/xwiki-platform-wysiwyg-api/src/main/java/org/xwiki/wysiwyg/internal/converter/DefaultRequestParameterConverter.java
+++ b/xwiki-platform-core/xwiki-platform-wysiwyg/xwiki-platform-wysiwyg-api/src/main/java/org/xwiki/wysiwyg/internal/converter/DefaultRequestParameterConverter.java
@@ -28,10 +28,6 @@
import javax.inject.Inject;
import javax.inject.Singleton;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang3.RandomStringUtils;
import org.apache.commons.lang3.StringUtils;
@@ -39,11 +35,16 @@
import org.xwiki.component.annotation.Component;
import org.xwiki.url.URLSecurityManager;
import org.xwiki.wysiwyg.converter.HTMLConverter;
-import org.xwiki.wysiwyg.converter.RequestParameterConversionResult;
+import org.xwiki.wysiwyg.converter.JakartaRequestParameterConversionResult;
import org.xwiki.wysiwyg.converter.RequestParameterConverter;
-import org.xwiki.wysiwyg.filter.MutableServletRequest;
+import org.xwiki.wysiwyg.filter.MutableJakartaServletRequest;
import org.xwiki.wysiwyg.filter.MutableServletRequestFactory;
+import jakarta.servlet.ServletRequest;
+import jakarta.servlet.ServletResponse;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+
/**
* Default implementation of {@link RequestParameterConverter} that handles HTML conversion of parameters needing such
* conversion.
@@ -93,22 +94,25 @@ public class DefaultRequestParameterConverter implements RequestParameterConvert
@Override
public Optional convert(ServletRequest request, ServletResponse response) throws IOException
{
- RequestParameterConversionResult conversionResult = this.convert(request);
+ JakartaRequestParameterConversionResult conversionResult = convert(request);
Optional result;
if (conversionResult.getErrors().isEmpty()) {
result = Optional.of(conversionResult.getRequest());
} else {
result = Optional.empty();
- this.handleConversionErrors(conversionResult, response);
+ handleConversionErrors(conversionResult, response);
}
+
return result;
}
@Override
- public RequestParameterConversionResult convert(ServletRequest request)
+ public JakartaRequestParameterConversionResult convert(ServletRequest request)
{
- MutableServletRequest mutableServletRequest = this.mutableServletRequestFactory.newInstance(request);
- RequestParameterConversionResult result = new RequestParameterConversionResult(mutableServletRequest);
+ MutableJakartaServletRequest mutableServletRequest = this.mutableServletRequestFactory.newInstance(request);
+ JakartaRequestParameterConversionResult result =
+ new JakartaRequestParameterConversionResult(mutableServletRequest);
+
// Take the list of request parameters that require HTML conversion.
String[] parametersRequiringHTMLConversion = request.getParameterValues(REQUIRES_HTML_CONVERSION);
if (parametersRequiringHTMLConversion != null) {
@@ -116,13 +120,14 @@ public RequestParameterConversionResult convert(ServletRequest request)
result.getRequest().removeParameter(REQUIRES_HTML_CONVERSION);
convertHTML(parametersRequiringHTMLConversion, result);
}
+
return result;
}
private void convertHTML(String[] parametersRequiringHTMLConversion,
- RequestParameterConversionResult conversionResult)
+ JakartaRequestParameterConversionResult conversionResult)
{
- MutableServletRequest request = conversionResult.getRequest();
+ MutableJakartaServletRequest request = conversionResult.getRequest();
for (String parameterName : parametersRequiringHTMLConversion) {
String html = request.getParameter(parameterName);
// Remove the syntax parameter from the request to avoid interference with further request processing.
@@ -141,13 +146,13 @@ private void convertHTML(String[] parametersRequiringHTMLConversion,
}
}
- private void handleConversionErrors(RequestParameterConversionResult conversionResult, ServletResponse res)
+ private void handleConversionErrors(JakartaRequestParameterConversionResult conversionResult, ServletResponse res)
throws IOException
{
- MutableServletRequest mutableRequest = conversionResult.getRequest();
+ MutableJakartaServletRequest mutableRequest = conversionResult.getRequest();
ServletRequest originalRequest = mutableRequest.getRequest();
- if (originalRequest instanceof HttpServletRequest httpServletRequest
- && "XMLHttpRequest".equals((httpServletRequest).getHeader("X-Requested-With"))) {
+ if (originalRequest instanceof HttpServletRequest httpRequest
+ && "XMLHttpRequest".equals(httpRequest.getHeader("X-Requested-With"))) {
// If this is an AJAX request then we should simply send back the error.
StringBuilder errorMessage = new StringBuilder();
// Aggregate all error messages (for all fields that have conversion errors).
@@ -205,11 +210,11 @@ private void handleConversionErrors(RequestParameterConversionResult conversionR
* {@value #CONVERSION_ERRORS} session attributes
*/
@SuppressWarnings("unchecked")
- private String save(RequestParameterConversionResult conversionResult)
+ private String save(JakartaRequestParameterConversionResult conversionResult)
{
// Generate a random key to identify the request.
String key = RandomStringUtils.secure().nextAlphanumeric(4);
- MutableServletRequest request = conversionResult.getRequest();
+ MutableJakartaServletRequest request = conversionResult.getRequest();
// Save the output on the session.
Map> conversionOutput =
diff --git a/xwiki-platform-core/xwiki-platform-wysiwyg/xwiki-platform-wysiwyg-api/src/main/java/org/xwiki/wysiwyg/internal/filter/http/JakartaToJavaxMutableHttpServletRequest.java b/xwiki-platform-core/xwiki-platform-wysiwyg/xwiki-platform-wysiwyg-api/src/main/java/org/xwiki/wysiwyg/internal/filter/http/JakartaToJavaxMutableHttpServletRequest.java
new file mode 100644
index 000000000000..8bfd894cdcc6
--- /dev/null
+++ b/xwiki-platform-core/xwiki-platform-wysiwyg/xwiki-platform-wysiwyg-api/src/main/java/org/xwiki/wysiwyg/internal/filter/http/JakartaToJavaxMutableHttpServletRequest.java
@@ -0,0 +1,93 @@
+/*
+ * See the NOTICE file distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.xwiki.wysiwyg.internal.filter.http;
+
+import java.io.IOException;
+
+import org.xwiki.jakartabridge.servlet.JakartaServletBridge;
+import org.xwiki.jakartabridge.servlet.internal.JakartaToJavaxServletRequest;
+import org.xwiki.wysiwyg.filter.MutableJakartaServletRequest;
+import org.xwiki.wysiwyg.filter.MutableServletRequest;
+
+import jakarta.servlet.ServletRequest;
+import jakarta.servlet.ServletResponse;
+
+/**
+ * @version $Id$
+ */
+public class JakartaToJavaxMutableHttpServletRequest extends JakartaToJavaxServletRequest
+ implements MutableJakartaServletRequest
+{
+ /**
+ * @param wrapped
+ */
+ public JakartaToJavaxMutableHttpServletRequest(MutableServletRequest wrapped)
+ {
+ super(wrapped);
+ }
+
+ @Override
+ public String setParameter(String name, String value)
+ {
+ return this.wrapped.setParameter(name, value);
+ }
+
+ @Override
+ public String[] setParameterValues(String name, String[] values)
+ {
+ return this.wrapped.setParameterValues(name, values);
+ }
+
+ @Override
+ public String removeParameter(String name)
+ {
+ return this.wrapped.removeParameter(name);
+ }
+
+ @Override
+ public void sendRedirect(ServletResponse response, String url) throws IOException
+ {
+ this.wrapped.sendRedirect(JakartaServletBridge.toJavax(response), url);
+ }
+
+ @Override
+ public String getReferer()
+ {
+ return this.wrapped.getReferer();
+ }
+
+ @Override
+ public Object getSessionAttribute(String attrName)
+ {
+ return this.wrapped.getSessionAttribute(attrName);
+ }
+
+ @Override
+ public Object setSessionAttribute(String attrName, Object attrValue)
+ {
+ return this.wrapped.setSessionAttribute(attrName, attrValue);
+ }
+
+ @Override
+ public ServletRequest getRequest()
+ {
+ return JakartaServletBridge.toJakarta(this.wrapped.getRequest());
+ }
+}
diff --git a/xwiki-platform-core/xwiki-platform-wysiwyg/xwiki-platform-wysiwyg-api/src/main/java/org/xwiki/wysiwyg/internal/filter/http/JavaxToJakartaMutableHttpServletRequest.java b/xwiki-platform-core/xwiki-platform-wysiwyg/xwiki-platform-wysiwyg-api/src/main/java/org/xwiki/wysiwyg/internal/filter/http/JavaxToJakartaMutableHttpServletRequest.java
new file mode 100644
index 000000000000..5f31ca009817
--- /dev/null
+++ b/xwiki-platform-core/xwiki-platform-wysiwyg/xwiki-platform-wysiwyg-api/src/main/java/org/xwiki/wysiwyg/internal/filter/http/JavaxToJakartaMutableHttpServletRequest.java
@@ -0,0 +1,93 @@
+/*
+ * See the NOTICE file distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.xwiki.wysiwyg.internal.filter.http;
+
+import java.io.IOException;
+
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+
+import org.xwiki.jakartabridge.servlet.JakartaServletBridge;
+import org.xwiki.jakartabridge.servlet.internal.JavaxToJakartaServletRequest;
+import org.xwiki.wysiwyg.filter.MutableJakartaServletRequest;
+import org.xwiki.wysiwyg.filter.MutableServletRequest;
+
+/**
+ * @version $Id$
+ */
+public class JavaxToJakartaMutableHttpServletRequest extends JavaxToJakartaServletRequest
+ implements MutableServletRequest
+{
+ /**
+ * @param wrapped
+ */
+ public JavaxToJakartaMutableHttpServletRequest(MutableJakartaServletRequest wrapped)
+ {
+ super(wrapped);
+ }
+
+ @Override
+ public String setParameter(String name, String value)
+ {
+ return this.wrapped.setParameter(name, value);
+ }
+
+ @Override
+ public String[] setParameterValues(String name, String[] values)
+ {
+ return this.wrapped.setParameterValues(name, values);
+ }
+
+ @Override
+ public String removeParameter(String name)
+ {
+ return this.wrapped.removeParameter(name);
+ }
+
+ @Override
+ public void sendRedirect(ServletResponse response, String url) throws IOException
+ {
+ this.wrapped.sendRedirect(JakartaServletBridge.toJakarta(response), url);
+ }
+
+ @Override
+ public String getReferer()
+ {
+ return this.wrapped.getReferer();
+ }
+
+ @Override
+ public Object getSessionAttribute(String attrName)
+ {
+ return this.wrapped.getSessionAttribute(attrName);
+ }
+
+ @Override
+ public Object setSessionAttribute(String attrName, Object attrValue)
+ {
+ return this.wrapped.setSessionAttribute(attrName, attrValue);
+ }
+
+ @Override
+ public ServletRequest getRequest()
+ {
+ return JakartaServletBridge.toJavax(this.wrapped.getRequest());
+ }
+}
diff --git a/xwiki-platform-core/xwiki-platform-wysiwyg/xwiki-platform-wysiwyg-api/src/main/java/org/xwiki/wysiwyg/internal/filter/http/MutableHttpServletRequestFactory.java b/xwiki-platform-core/xwiki-platform-wysiwyg/xwiki-platform-wysiwyg-api/src/main/java/org/xwiki/wysiwyg/internal/filter/http/MutableHttpServletRequestFactory.java
index 8e5338691ccd..a15eedecf938 100644
--- a/xwiki-platform-core/xwiki-platform-wysiwyg/xwiki-platform-wysiwyg-api/src/main/java/org/xwiki/wysiwyg/internal/filter/http/MutableHttpServletRequestFactory.java
+++ b/xwiki-platform-core/xwiki-platform-wysiwyg/xwiki-platform-wysiwyg-api/src/main/java/org/xwiki/wysiwyg/internal/filter/http/MutableHttpServletRequestFactory.java
@@ -19,14 +19,13 @@
*/
package org.xwiki.wysiwyg.internal.filter.http;
-import javax.inject.Singleton;
-import javax.servlet.ServletRequest;
-import javax.servlet.http.HttpServletRequest;
-
import org.xwiki.component.annotation.Component;
-import org.xwiki.wysiwyg.filter.MutableServletRequest;
+import org.xwiki.wysiwyg.filter.MutableJakartaServletRequest;
import org.xwiki.wysiwyg.filter.MutableServletRequestFactory;
+import jakarta.inject.Singleton;
+import jakarta.servlet.http.HttpServletRequest;
+
/**
* {@link MutableServletRequestFactory} implementation for the HTTP protocol.
*
@@ -37,10 +36,10 @@
public class MutableHttpServletRequestFactory implements MutableServletRequestFactory
{
@Override
- public synchronized MutableServletRequest newInstance(ServletRequest request)
+ public synchronized MutableJakartaServletRequest newInstance(jakarta.servlet.ServletRequest request)
{
- if (request instanceof HttpServletRequest) {
- return new MutableHttpServletRequest((HttpServletRequest) request);
+ if (request instanceof HttpServletRequest httpRequest) {
+ return new MutableJakartaHttpServletRequest(httpRequest);
} else {
throw new IllegalArgumentException(String.format("Expecting HttpServletRequest, got [%s]!", request));
}
diff --git a/xwiki-platform-core/xwiki-platform-wysiwyg/xwiki-platform-wysiwyg-api/src/main/java/org/xwiki/wysiwyg/internal/filter/http/MutableHttpServletRequest.java b/xwiki-platform-core/xwiki-platform-wysiwyg/xwiki-platform-wysiwyg-api/src/main/java/org/xwiki/wysiwyg/internal/filter/http/MutableJakartaHttpServletRequest.java
similarity index 87%
rename from xwiki-platform-core/xwiki-platform-wysiwyg/xwiki-platform-wysiwyg-api/src/main/java/org/xwiki/wysiwyg/internal/filter/http/MutableHttpServletRequest.java
rename to xwiki-platform-core/xwiki-platform-wysiwyg/xwiki-platform-wysiwyg-api/src/main/java/org/xwiki/wysiwyg/internal/filter/http/MutableJakartaHttpServletRequest.java
index a67bea9dae75..9ead0430ad0a 100644
--- a/xwiki-platform-core/xwiki-platform-wysiwyg/xwiki-platform-wysiwyg-api/src/main/java/org/xwiki/wysiwyg/internal/filter/http/MutableHttpServletRequest.java
+++ b/xwiki-platform-core/xwiki-platform-wysiwyg/xwiki-platform-wysiwyg-api/src/main/java/org/xwiki/wysiwyg/internal/filter/http/MutableJakartaHttpServletRequest.java
@@ -25,33 +25,33 @@
import java.util.HashMap;
import java.util.Map;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletRequestWrapper;
-import javax.servlet.http.HttpServletResponse;
-
+import org.xwiki.wysiwyg.filter.MutableJakartaServletRequest;
import org.xwiki.wysiwyg.filter.MutableServletRequest;
+import jakarta.servlet.ServletResponse;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequestWrapper;
+import jakarta.servlet.http.HttpServletResponse;
+
/**
* {@link MutableServletRequest} implementation for the HTTP protocol.
*
* @version $Id$
*/
-public class MutableHttpServletRequest extends HttpServletRequestWrapper implements MutableServletRequest
+public class MutableJakartaHttpServletRequest extends HttpServletRequestWrapper implements MutableJakartaServletRequest
{
/**
* Parameters used instead of those from the wrapped request. This way exiting request parameters can be overwritten
* and also new parameters can be added.
*/
- private final Map params = new HashMap();
+ private final Map params = new HashMap<>();
/**
* Wraps the specified request and copies its parameters to {@link #params} where they can be overwritten later.
*
* @param request The request to be wrapped.
*/
- @SuppressWarnings("unchecked")
- public MutableHttpServletRequest(HttpServletRequest request)
+ public MutableJakartaHttpServletRequest(HttpServletRequest request)
{
super(request);
diff --git a/xwiki-platform-core/xwiki-platform-zipexplorer/pom.xml b/xwiki-platform-core/xwiki-platform-zipexplorer/pom.xml
index df17ca609899..943f6ca9aca2 100644
--- a/xwiki-platform-core/xwiki-platform-zipexplorer/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-zipexplorer/pom.xml
@@ -40,9 +40,10 @@
${project.version}
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
+
org.xwiki.platform
@@ -51,11 +52,6 @@
pom
test
-
diff --git a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/pom.xml b/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/pom.xml
index 66aa806b63a7..22ac3eb71242 100644
--- a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/pom.xml
+++ b/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/pom.xml
@@ -32,22 +32,6 @@
pom
XWiki Platform - Distribution - Debian - Tomcat
- xwiki-platform-distribution-debian-tomcat8-common
- xwiki-platform-distribution-debian-tomcat8-mariadb
- xwiki-platform-distribution-debian-tomcat8-mysql
- xwiki-platform-distribution-debian-tomcat8-pgsql
- xwiki-platform-distribution-debian-tomcat9-common
- xwiki-platform-distribution-debian-tomcat9-mariadb
- xwiki-platform-distribution-debian-tomcat9-mysql
- xwiki-platform-distribution-debian-tomcat9-pgsql
+ xwiki-platform-distribution-debian-tomcat10
-
-
- ${project.groupId}
- xwiki-platform-distribution-debian-common
- ${project.version}
- runtime
- deb
-
-
diff --git a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat8-mysql/pom.xml b/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat10/pom.xml
similarity index 68%
rename from xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat8-mysql/pom.xml
rename to xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat10/pom.xml
index 5299b2ff84c1..a631a7ccb31e 100644
--- a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat8-mysql/pom.xml
+++ b/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat10/pom.xml
@@ -27,11 +27,17 @@
xwiki-platform-distribution-debian-tomcat
16.10.0-SNAPSHOT
- xwiki-platform-distribution-debian-tomcat8-mysql
- XWiki Platform - Distribution - Debian - Tomcat 8 - MySQL
- deb
- XWiki Tomcat8/MySQL based package
+ xwiki-platform-distribution-debian-tomcat10
+ XWiki Platform - Distribution - Debian - Tomcat ${debian.tomcat.version}
+ pom
+ XWiki Platform - Distribution - Debian - Tomcat ${debian.tomcat.version}
- xwiki-tomcat8-mysql
+ 10
+
+ xwiki-platform-distribution-debian-tomcat10-common
+ xwiki-platform-distribution-debian-tomcat10-mariadb
+ xwiki-platform-distribution-debian-tomcat10-mysql
+ xwiki-platform-distribution-debian-tomcat10-pgsql
+
diff --git a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat9-common/pom.xml b/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat10/xwiki-platform-distribution-debian-tomcat10-common/pom.xml
similarity index 71%
rename from xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat9-common/pom.xml
rename to xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat10/xwiki-platform-distribution-debian-tomcat10-common/pom.xml
index 415f2eb899e1..746a066e43e9 100644
--- a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat9-common/pom.xml
+++ b/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat10/xwiki-platform-distribution-debian-tomcat10-common/pom.xml
@@ -24,15 +24,15 @@
4.0.0
org.xwiki.platform
- xwiki-platform-distribution-debian-tomcat
+ xwiki-platform-distribution-debian-tomcat10
16.10.0-SNAPSHOT
- xwiki-platform-distribution-debian-tomcat9-common
- XWiki Platform - Distribution - Debian - Tomcat 9 - Common
+ xwiki-platform-distribution-debian-tomcat10-common
+ XWiki Platform - Distribution - Debian - Tomcat ${debian.tomcat.version} - Common
deb
- XWiki Tomcat 9 common package
+ XWiki Tomcat ${debian.tomcat.version} common package
- xwiki-tomcat9-common
+ xwiki-tomcat${debian.tomcat.version}-common
@@ -52,16 +52,25 @@
true
-
+
link
true
/etc/tomcat9/Catalina/localhost/xwiki.xml
- /etc/xwiki/xwiki-tomcat9.xml
+ /etc/xwiki/xwiki-tomcat${debian.tomcat.version}.xml
+
+
+ ${project.groupId}
+ xwiki-platform-distribution-debian-common
+ ${project.version}
+ runtime
+ deb
+
+
diff --git a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat8-common/src/deb/control/control b/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat10/xwiki-platform-distribution-debian-tomcat10-common/src/deb/control/control
similarity index 79%
rename from xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat8-common/src/deb/control/control
rename to xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat10/xwiki-platform-distribution-debian-tomcat10-common/src/deb/control/control
index e4f1fbd8d9d2..37b78d7f00f8 100644
--- a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat8-common/src/deb/control/control
+++ b/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat10/xwiki-platform-distribution-debian-tomcat10-common/src/deb/control/control
@@ -1,9 +1,9 @@
-Package: xwiki-tomcat8-common
+Package: [[debian.package]]
Version: [[version]]
Section: java
Priority: optional
Architecture: all
-Depends: xwiki-common (= [[version]]), tomcat8
+Depends: xwiki-common (= [[version]]), tomcat[[debian.tomcat.version]]
Provides: xwiki-tomcat-common
Replaces: xwiki-tomcat-common, xwiki-enterprise-tomcat-common
Conflicts: xwiki-tomcat-common, xwiki-enterprise-tomcat-common
diff --git a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat9-common/src/deb/control/postinst b/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat10/xwiki-platform-distribution-debian-tomcat10-common/src/deb/control/postinst
similarity index 78%
rename from xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat9-common/src/deb/control/postinst
rename to xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat10/xwiki-platform-distribution-debian-tomcat10-common/src/deb/control/postinst
index 5a2db532abfc..72b39ed0dfad 100644
--- a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat9-common/src/deb/control/postinst
+++ b/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat10/xwiki-platform-distribution-debian-tomcat10-common/src/deb/control/postinst
@@ -16,5 +16,5 @@ fi
# Restart Tomcat
#########################
-# Need to reload systemd for the injected tomcat9 service configuration to be taken into account
+# Need to reload systemd for the injected tomcat service configuration to be taken into account
systemctl daemon-reload
diff --git a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat9-common/src/deb/control/postrm b/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat10/xwiki-platform-distribution-debian-tomcat10-common/src/deb/control/postrm
similarity index 66%
rename from xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat9-common/src/deb/control/postrm
rename to xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat10/xwiki-platform-distribution-debian-tomcat10-common/src/deb/control/postrm
index 2615af2a35de..3b26ac348d17 100644
--- a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat9-common/src/deb/control/postrm
+++ b/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat10/xwiki-platform-distribution-debian-tomcat10-common/src/deb/control/postrm
@@ -12,9 +12,9 @@ fi
# Restart Tomcat
#########################
-invoke-rc.d --quiet tomcat9 restart || {
+invoke-rc.d --quiet tomcat[[debian.tomcat.version]] restart || {
RESULT=$?
- # Ignore if tomcat9 init script does not exist (yet)
+ # Ignore if tomcat[[debian.tomcat.version]] init script does not exist (yet)
if [ $RESULT != 100 ]; then
exit $RESULT
fi
diff --git a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat10/xwiki-platform-distribution-debian-tomcat10-common/src/deb/resources/etc/systemd/system/tomcat10.service.d/xwiki-tomcat10-systemd.conf b/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat10/xwiki-platform-distribution-debian-tomcat10-common/src/deb/resources/etc/systemd/system/tomcat10.service.d/xwiki-tomcat10-systemd.conf
new file mode 100644
index 000000000000..e11a4140d959
--- /dev/null
+++ b/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat10/xwiki-platform-distribution-debian-tomcat10-common/src/deb/resources/etc/systemd/system/tomcat10.service.d/xwiki-tomcat10-systemd.conf
@@ -0,0 +1,3 @@
+[Service]
+# Need to allow Tomcat to read and write in XWiki permanent directory
+ReadWritePaths=/var/lib/xwiki/data
diff --git a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat9-common/src/deb/resources/etc/xwiki/xwiki-tomcat9.xml b/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat10/xwiki-platform-distribution-debian-tomcat10-common/src/deb/resources/etc/xwiki/xwiki-tomcat10.xml
similarity index 100%
rename from xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat9-common/src/deb/resources/etc/xwiki/xwiki-tomcat9.xml
rename to xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat10/xwiki-platform-distribution-debian-tomcat10-common/src/deb/resources/etc/xwiki/xwiki-tomcat10.xml
diff --git a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat9-mariadb/pom.xml b/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat10/xwiki-platform-distribution-debian-tomcat10-mariadb/pom.xml
similarity index 76%
rename from xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat9-mariadb/pom.xml
rename to xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat10/xwiki-platform-distribution-debian-tomcat10-mariadb/pom.xml
index d86857794406..0fc1de52f4b2 100644
--- a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat9-mariadb/pom.xml
+++ b/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat10/xwiki-platform-distribution-debian-tomcat10-mariadb/pom.xml
@@ -24,14 +24,14 @@
4.0.0
org.xwiki.platform
- xwiki-platform-distribution-debian-tomcat
+ xwiki-platform-distribution-debian-tomcat10
16.10.0-SNAPSHOT
- xwiki-platform-distribution-debian-tomcat9-mariadb
- XWiki Platform - Distribution - Debian - Tomcat 9 - MariaDB
+ xwiki-platform-distribution-debian-tomcat10-mariadb
+ XWiki Platform - Distribution - Debian - Tomcat ${debian.tomcat.version} - MariaDB
deb
- XWiki Tomcat9/MariaDB based package
+ XWiki Tomcat${debian.tomcat.version}/MariaDB based package
- xwiki-tomcat9-mariadb
+ xwiki-tomcat${debian.tomcat.version}-mariadb
diff --git a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat9-mariadb/src/deb/control/control b/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat10/xwiki-platform-distribution-debian-tomcat10-mariadb/src/deb/control/control
similarity index 85%
rename from xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat9-mariadb/src/deb/control/control
rename to xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat10/xwiki-platform-distribution-debian-tomcat10-mariadb/src/deb/control/control
index 33aa7cf88454..3554bd2b4983 100644
--- a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat9-mariadb/src/deb/control/control
+++ b/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat10/xwiki-platform-distribution-debian-tomcat10-mariadb/src/deb/control/control
@@ -1,9 +1,9 @@
-Package: xwiki-tomcat9-mariadb
+Package: [[debian.package]]
Version: [[version]]
Section: java
Priority: optional
Architecture: all
-Depends: xwiki-mariadb-common (= [[version]]), xwiki-tomcat9-common (= [[version]])
+Depends: xwiki-mariadb-common (= [[version]]), xwiki-tomcat[[debian.tomcat.version]]-common (= [[version]])
Provides: xwiki-tomcat-database
Replaces: xwiki-tomcat-database, xwiki-enterprise-tomcat7-mysql, xwiki-enterprise-tomcat8-mysql, xwiki-enterprise-tomcat7-pgsql, xwiki-enterprise-tomcat8-pgsql, xwiki-tomcat9-pgsql, xwiki-tomcat8-mysql, xwiki-tomcat8-mariadb, xwiki-tomcat8-pgsql, xwiki-tomcat7-mysql, xwiki-tomcat7-pgsql
Conflicts: xwiki-tomcat-database, xwiki-enterprise-tomcat7-mysql, xwiki-enterprise-tomcat8-mysql, xwiki-enterprise-tomcat7-pgsql, xwiki-enterprise-tomcat8-pgsql, xwiki-tomcat9-pgsql, xwiki-tomcat8-mysql, xwiki-tomcat8-mariadb, xwiki-tomcat8-pgsql, xwiki-tomcat7-mysql, xwiki-tomcat7-pgsql
diff --git a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat10/xwiki-platform-distribution-debian-tomcat10-mariadb/src/deb/control/postinst b/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat10/xwiki-platform-distribution-debian-tomcat10-mariadb/src/deb/control/postinst
new file mode 100644
index 000000000000..43e2a785eef2
--- /dev/null
+++ b/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat10/xwiki-platform-distribution-debian-tomcat10-mariadb/src/deb/control/postinst
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+set -e
+#set -x
+
+#########################
+# Restart Tomcat
+#########################
+
+# Restart tomcat service (only if it's active)
+if ( systemctl -q is-active tomcat[[debian.tomcat.version]].service || systemctl -q is-enabled tomcat[[debian.tomcat.version]].service )
+then
+ deb-systemd-invoke restart tomcat[[debian.tomcat.version]].service
+fi
diff --git a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat8-mariadb/src/deb/control/postrm b/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat10/xwiki-platform-distribution-debian-tomcat10-mariadb/src/deb/control/postrm
similarity index 100%
rename from xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat8-mariadb/src/deb/control/postrm
rename to xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat10/xwiki-platform-distribution-debian-tomcat10-mariadb/src/deb/control/postrm
diff --git a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat8-mariadb/pom.xml b/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat10/xwiki-platform-distribution-debian-tomcat10-mysql/pom.xml
similarity index 76%
rename from xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat8-mariadb/pom.xml
rename to xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat10/xwiki-platform-distribution-debian-tomcat10-mysql/pom.xml
index 63a771ffa752..75c6a2459eec 100644
--- a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat8-mariadb/pom.xml
+++ b/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat10/xwiki-platform-distribution-debian-tomcat10-mysql/pom.xml
@@ -24,14 +24,14 @@
4.0.0
org.xwiki.platform
- xwiki-platform-distribution-debian-tomcat
+ xwiki-platform-distribution-debian-tomcat10
16.10.0-SNAPSHOT
- xwiki-platform-distribution-debian-tomcat8-mariadb
- XWiki Platform - Distribution - Debian - Tomcat 8 - MariaDB
+ xwiki-platform-distribution-debian-tomcat10-mysql
+ XWiki Platform - Distribution - Debian - Tomcat ${debian.tomcat.version} - MySQL
deb
- XWiki Tomcat8/MariaDB based package
+ XWiki Tomcat${debian.tomcat.version}/MySQL based package
- xwiki-tomcat8-mariadb
+ xwiki-tomcat${debian.tomcat.version}-mysql
diff --git a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat9-mysql/src/deb/control/control b/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat10/xwiki-platform-distribution-debian-tomcat10-mysql/src/deb/control/control
similarity index 85%
rename from xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat9-mysql/src/deb/control/control
rename to xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat10/xwiki-platform-distribution-debian-tomcat10-mysql/src/deb/control/control
index 539b01d7ffcf..8acf25821cdc 100644
--- a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat9-mysql/src/deb/control/control
+++ b/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat10/xwiki-platform-distribution-debian-tomcat10-mysql/src/deb/control/control
@@ -1,9 +1,9 @@
-Package: xwiki-tomcat9-mysql
+Package: [[debian.package]]
Version: [[version]]
Section: java
Priority: optional
Architecture: all
-Depends: xwiki-mysql-common (= [[version]]), xwiki-tomcat9-common (= [[version]])
+Depends: xwiki-mysql-common (= [[version]]), xwiki-tomcat[[debian.tomcat.version]]-common (= [[version]])
Provides: xwiki-tomcat-database
Replaces: xwiki-tomcat-database, xwiki-enterprise-tomcat7-mysql, xwiki-enterprise-tomcat8-mysql, xwiki-enterprise-tomcat7-pgsql, xwiki-enterprise-tomcat8-pgsql, xwiki-tomcat9-pgsql, xwiki-tomcat8-mysql, xwiki-tomcat8-pgsql, xwiki-tomcat7-mysql, xwiki-tomcat7-pgsql
Conflicts: xwiki-tomcat-database, xwiki-enterprise-tomcat7-mysql, xwiki-enterprise-tomcat8-mysql, xwiki-enterprise-tomcat7-pgsql, xwiki-enterprise-tomcat8-pgsql, xwiki-tomcat9-pgsql, xwiki-tomcat8-mysql, xwiki-tomcat8-pgsql, xwiki-tomcat7-mysql, xwiki-tomcat7-pgsql
diff --git a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat10/xwiki-platform-distribution-debian-tomcat10-mysql/src/deb/control/postinst b/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat10/xwiki-platform-distribution-debian-tomcat10-mysql/src/deb/control/postinst
new file mode 100644
index 000000000000..43e2a785eef2
--- /dev/null
+++ b/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat10/xwiki-platform-distribution-debian-tomcat10-mysql/src/deb/control/postinst
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+set -e
+#set -x
+
+#########################
+# Restart Tomcat
+#########################
+
+# Restart tomcat service (only if it's active)
+if ( systemctl -q is-active tomcat[[debian.tomcat.version]].service || systemctl -q is-enabled tomcat[[debian.tomcat.version]].service )
+then
+ deb-systemd-invoke restart tomcat[[debian.tomcat.version]].service
+fi
diff --git a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat8-mysql/src/deb/control/postrm b/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat10/xwiki-platform-distribution-debian-tomcat10-mysql/src/deb/control/postrm
similarity index 100%
rename from xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat8-mysql/src/deb/control/postrm
rename to xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat10/xwiki-platform-distribution-debian-tomcat10-mysql/src/deb/control/postrm
diff --git a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat9-pgsql/pom.xml b/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat10/xwiki-platform-distribution-debian-tomcat10-pgsql/pom.xml
similarity index 85%
rename from xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat9-pgsql/pom.xml
rename to xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat10/xwiki-platform-distribution-debian-tomcat10-pgsql/pom.xml
index 665ae6d509d6..a72849703236 100644
--- a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat9-pgsql/pom.xml
+++ b/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat10/xwiki-platform-distribution-debian-tomcat10-pgsql/pom.xml
@@ -24,11 +24,11 @@
4.0.0
org.xwiki.platform
- xwiki-platform-distribution-debian-tomcat
+ xwiki-platform-distribution-debian-tomcat10
16.10.0-SNAPSHOT
- xwiki-platform-distribution-debian-tomcat9-pgsql
- XWiki Platform - Distribution - Debian - Tomcat 9 - Postgres SQL
+ xwiki-platform-distribution-debian-tomcat10-pgsql
+ XWiki Platform - Distribution - Debian - Tomcat ${debian.tomcat.version} - Postgres SQL
deb
XWiki Tomcat9/PostgreSQL
diff --git a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat9-pgsql/src/deb/control/control b/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat10/xwiki-platform-distribution-debian-tomcat10-pgsql/src/deb/control/control
similarity index 85%
rename from xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat9-pgsql/src/deb/control/control
rename to xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat10/xwiki-platform-distribution-debian-tomcat10-pgsql/src/deb/control/control
index 7986fd98bd0f..671908c6087e 100644
--- a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat9-pgsql/src/deb/control/control
+++ b/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat10/xwiki-platform-distribution-debian-tomcat10-pgsql/src/deb/control/control
@@ -1,9 +1,9 @@
-Package: xwiki-tomcat9-pgsql
+Package: [[debian.package]]
Version: [[version]]
Section: java
Priority: optional
Architecture: all
-Depends: xwiki-pgsql-common (= [[version]]), xwiki-tomcat9-common (= [[version]])
+Depends: xwiki-pgsql-common (= [[version]]), xwiki-tomcat[[debian.tomcat.version]]-common (= [[version]])
Provides: xwiki-tomcat-database
Replaces: xwiki-tomcat-database, xwiki-enterprise-tomcat7-mysql, xwiki-enterprise-tomcat8-mysql, xwiki-enterprise-tomcat7-pgsql, xwiki-enterprise-tomcat8-pgsql, xwiki-tomcat8-mysql, xwiki-tomcat8-mysql, xwiki-tomcat8-pgsql, xwiki-tomcat7-mysql, xwiki-tomcat7-pgsql
Conflicts: xwiki-tomcat-database, xwiki-enterprise-tomcat7-mysql, xwiki-enterprise-tomcat8-mysql, xwiki-enterprise-tomcat7-pgsql, xwiki-enterprise-tomcat8-pgsql, xwiki-tomcat8-mysql, xwiki-tomcat8-mysql, xwiki-tomcat8-pgsql, xwiki-tomcat7-mysql, xwiki-tomcat7-pgsql
diff --git a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat10/xwiki-platform-distribution-debian-tomcat10-pgsql/src/deb/control/postinst b/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat10/xwiki-platform-distribution-debian-tomcat10-pgsql/src/deb/control/postinst
new file mode 100644
index 000000000000..43e2a785eef2
--- /dev/null
+++ b/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat10/xwiki-platform-distribution-debian-tomcat10-pgsql/src/deb/control/postinst
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+set -e
+#set -x
+
+#########################
+# Restart Tomcat
+#########################
+
+# Restart tomcat service (only if it's active)
+if ( systemctl -q is-active tomcat[[debian.tomcat.version]].service || systemctl -q is-enabled tomcat[[debian.tomcat.version]].service )
+then
+ deb-systemd-invoke restart tomcat[[debian.tomcat.version]].service
+fi
diff --git a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat8-pgsql/src/deb/control/postrm b/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat10/xwiki-platform-distribution-debian-tomcat10-pgsql/src/deb/control/postrm
similarity index 100%
rename from xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat8-pgsql/src/deb/control/postrm
rename to xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat10/xwiki-platform-distribution-debian-tomcat10-pgsql/src/deb/control/postrm
diff --git a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat8-common/pom.xml b/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat8-common/pom.xml
deleted file mode 100644
index 4a9f8133d13d..000000000000
--- a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat8-common/pom.xml
+++ /dev/null
@@ -1,67 +0,0 @@
-
-
-
-
-
- 4.0.0
-
- org.xwiki.platform
- xwiki-platform-distribution-debian-tomcat
- 16.10.0-SNAPSHOT
-
- xwiki-platform-distribution-debian-tomcat8-common
- XWiki Platform - Distribution - Debian - Tomcat 8 - Common
- deb
- XWiki Tomcat 8 common package
-
- xwiki-tomcat8-common
-
-
-
-
-
- jdeb
- org.vafer
-
-
-
- ${project.basedir}/src/deb/resources/
- directory
-
- perm
-
-
- true
-
-
-
-
- link
- true
- /etc/tomcat8/Catalina/localhost/xwiki.xml
- /etc/xwiki/xwiki-tomcat8.xml
-
-
-
-
-
-
-
diff --git a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat8-common/src/deb/control/postinst b/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat8-common/src/deb/control/postinst
deleted file mode 100644
index 9f4d77078336..000000000000
--- a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat8-common/src/deb/control/postinst
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/bin/sh
-
-set -e
-#set -x
-
-#########################
-# Rights
-#########################
-
-## Make sure Tomcat is able to write in the data folder
-if [ ! 'tomcat8' = `stat -c '%U' /var/lib/xwiki/data` ]; then
- chown -R tomcat8:tomcat8 /var/lib/xwiki/data
-fi
diff --git a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat8-common/src/deb/control/postrm b/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat8-common/src/deb/control/postrm
deleted file mode 100644
index ce87c981a77a..000000000000
--- a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat8-common/src/deb/control/postrm
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/bin/sh
-
-set -e
-#set -x
-
-if [ "$1" = "purge" ] && [ -f /usr/share/debconf/confmodule ]; then
- . /usr/share/debconf/confmodule
- db_purge
-fi
-
-#########################
-# Restart Tomcat
-#########################
-
-invoke-rc.d --quiet tomcat8 restart || {
- RESULT=$?
- # Ignore if tomcat7 init script does not exist (yet)
- if [ $RESULT != 100 ]; then
- exit $RESULT
- fi
-}
diff --git a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat8-common/src/deb/resources/etc/xwiki/xwiki-tomcat8.xml b/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat8-common/src/deb/resources/etc/xwiki/xwiki-tomcat8.xml
deleted file mode 100644
index bab911413e4c..000000000000
--- a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat8-common/src/deb/resources/etc/xwiki/xwiki-tomcat8.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat8-mariadb/src/deb/control/control b/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat8-mariadb/src/deb/control/control
deleted file mode 100644
index 839de8749b96..000000000000
--- a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat8-mariadb/src/deb/control/control
+++ /dev/null
@@ -1,14 +0,0 @@
-Package: xwiki-tomcat8-mariadb
-Version: [[version]]
-Section: java
-Priority: optional
-Architecture: all
-Depends: xwiki-mariadb-common (= [[version]]), xwiki-tomcat8-common (= [[version]])
-Provides: xwiki-tomcat-database
-Replaces: xwiki-tomcat-database, xwiki-enterprise-tomcat7-mysql, xwiki-enterprise-tomcat8-mysql, xwiki-tomcat8-mysql, xwiki-enterprise-tomcat7-pgsql, xwiki-enterprise-tomcat8-pgsql, xwiki-tomcat8-pgsql, xwiki-tomcat7-mysql, xwiki-tomcat7-pgsql
-Conflicts: xwiki-tomcat-database, xwiki-enterprise-tomcat7-mysql, xwiki-enterprise-tomcat8-mysql, xwiki-tomcat8-pgsql, xwiki-enterprise-tomcat7-pgsql, xwiki-enterprise-tomcat8-pgsql, xwiki-tomcat8-pgsql, xwiki-tomcat7-mysql, xwiki-tomcat7-pgsql
-Maintainer: [[debian.maintainer]]
-License: [[debian.license]]
-Description: [[debian.description]]
-Bugs: [[debian.bugs]]
-Homepage: [[debian.homepage]]
diff --git a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat8-mariadb/src/deb/control/postinst b/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat8-mariadb/src/deb/control/postinst
deleted file mode 100644
index 0c452738112c..000000000000
--- a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat8-mariadb/src/deb/control/postinst
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/bin/sh
-
-set -e
-#set -x
-
-#########################
-# Restart Tomcat
-#########################
-
-invoke-rc.d --quiet tomcat8 restart || {
- RESULT=$?
- # Ignore if tomcat7 init script does not exist (yet)
- if [ $RESULT != 100 ]; then
- exit $RESULT
- fi
-}
diff --git a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat8-mysql/src/deb/control/control b/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat8-mysql/src/deb/control/control
deleted file mode 100644
index b6e0d28b161a..000000000000
--- a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat8-mysql/src/deb/control/control
+++ /dev/null
@@ -1,14 +0,0 @@
-Package: xwiki-tomcat8-mysql
-Version: [[version]]
-Section: java
-Priority: optional
-Architecture: all
-Depends: xwiki-mysql-common (= [[version]]), xwiki-tomcat8-common (= [[version]])
-Provides: xwiki-tomcat-database
-Replaces: xwiki-tomcat-database, xwiki-enterprise-tomcat7-mysql, xwiki-enterprise-tomcat8-mysql, xwiki-enterprise-tomcat7-pgsql, xwiki-enterprise-tomcat8-pgsql, xwiki-tomcat8-pgsql, xwiki-tomcat7-mysql, xwiki-tomcat7-pgsql
-Conflicts: xwiki-tomcat-database, xwiki-enterprise-tomcat7-mysql, xwiki-enterprise-tomcat8-mysql, xwiki-enterprise-tomcat7-pgsql, xwiki-enterprise-tomcat8-pgsql, xwiki-tomcat8-pgsql, xwiki-tomcat7-mysql, xwiki-tomcat7-pgsql
-Maintainer: [[debian.maintainer]]
-License: [[debian.license]]
-Description: [[debian.description]]
-Bugs: [[debian.bugs]]
-Homepage: [[debian.homepage]]
diff --git a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat8-mysql/src/deb/control/postinst b/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat8-mysql/src/deb/control/postinst
deleted file mode 100644
index 0c452738112c..000000000000
--- a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat8-mysql/src/deb/control/postinst
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/bin/sh
-
-set -e
-#set -x
-
-#########################
-# Restart Tomcat
-#########################
-
-invoke-rc.d --quiet tomcat8 restart || {
- RESULT=$?
- # Ignore if tomcat7 init script does not exist (yet)
- if [ $RESULT != 100 ]; then
- exit $RESULT
- fi
-}
diff --git a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat8-pgsql/pom.xml b/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat8-pgsql/pom.xml
deleted file mode 100644
index 1938b3a1435f..000000000000
--- a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat8-pgsql/pom.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-
-
-
-
-
- 4.0.0
-
- org.xwiki.platform
- xwiki-platform-distribution-debian-tomcat
- 16.10.0-SNAPSHOT
-
- xwiki-platform-distribution-debian-tomcat8-pgsql
- XWiki Platform - Distribution - Debian - Tomcat 8 - Postgres SQL
- deb
- XWiki Tomcat8/PostgreSQL
-
- xwiki-tomcat8-pgsql
-
-
diff --git a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat8-pgsql/src/deb/control/control b/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat8-pgsql/src/deb/control/control
deleted file mode 100644
index a618005ddba8..000000000000
--- a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat8-pgsql/src/deb/control/control
+++ /dev/null
@@ -1,14 +0,0 @@
-Package: xwiki-tomcat8-pgsql
-Version: [[version]]
-Section: java
-Priority: optional
-Architecture: all
-Depends: xwiki-pgsql-common (= [[version]]), xwiki-tomcat8-common (= [[version]])
-Provides: xwiki-tomcat-database
-Replaces: xwiki-tomcat-database, xwiki-enterprise-tomcat7-mysql, xwiki-enterprise-tomcat8-mysql, xwiki-enterprise-tomcat7-pgsql, xwiki-enterprise-tomcat8-pgsql, xwiki-tomcat8-mysql, xwiki-tomcat7-mysql, xwiki-tomcat7-pgsql
-Conflicts: xwiki-tomcat-database, xwiki-enterprise-tomcat7-mysql, xwiki-enterprise-tomcat8-mysql, xwiki-enterprise-tomcat7-pgsql, xwiki-enterprise-tomcat8-pgsql, xwiki-tomcat8-mysql, xwiki-tomcat7-mysql, xwiki-tomcat7-pgsql
-Maintainer: [[debian.maintainer]]
-License: [[debian.license]]
-Description: [[debian.description]]
-Bugs: [[debian.bugs]]
-Homepage: [[debian.homepage]]
diff --git a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat8-pgsql/src/deb/control/postinst b/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat8-pgsql/src/deb/control/postinst
deleted file mode 100644
index 0c452738112c..000000000000
--- a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat8-pgsql/src/deb/control/postinst
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/bin/sh
-
-set -e
-#set -x
-
-#########################
-# Restart Tomcat
-#########################
-
-invoke-rc.d --quiet tomcat8 restart || {
- RESULT=$?
- # Ignore if tomcat7 init script does not exist (yet)
- if [ $RESULT != 100 ]; then
- exit $RESULT
- fi
-}
diff --git a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat9-common/src/deb/control/control b/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat9-common/src/deb/control/control
deleted file mode 100644
index 7b0fbda8db4d..000000000000
--- a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat9-common/src/deb/control/control
+++ /dev/null
@@ -1,14 +0,0 @@
-Package: xwiki-tomcat9-common
-Version: [[version]]
-Section: java
-Priority: optional
-Architecture: all
-Depends: xwiki-common (= [[version]]), tomcat9
-Provides: xwiki-tomcat-common
-Replaces: xwiki-tomcat-common, xwiki-enterprise-tomcat-common
-Conflicts: xwiki-tomcat-common, xwiki-enterprise-tomcat-common
-Maintainer: [[debian.maintainer]]
-License: [[debian.license]]
-Description: [[debian.description]]
-Bugs: [[debian.bugs]]
-Homepage: [[debian.homepage]]
diff --git a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat9-common/src/deb/resources/etc/systemd/system/tomcat9.service.d/xwiki-tomcat9-systemd.conf b/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat9-common/src/deb/resources/etc/systemd/system/tomcat9.service.d/xwiki-tomcat9-systemd.conf
deleted file mode 100644
index b1471b853434..000000000000
--- a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat9-common/src/deb/resources/etc/systemd/system/tomcat9.service.d/xwiki-tomcat9-systemd.conf
+++ /dev/null
@@ -1,3 +0,0 @@
-[Service]
-# Need to allow Tomcat9 to read and write in XWiki permanent directory
-ReadWritePaths=/var/lib/xwiki/data
diff --git a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat9-mariadb/src/deb/control/postinst b/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat9-mariadb/src/deb/control/postinst
deleted file mode 100644
index ae2aa3a9564b..000000000000
--- a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat9-mariadb/src/deb/control/postinst
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/sh
-
-set -e
-#set -x
-
-#########################
-# Restart Tomcat
-#########################
-
-# Restart tomcat9 service (only if it's active)
-if ( systemctl -q is-active tomcat9.service || systemctl -q is-enabled tomcat9.service )
-then
- deb-systemd-invoke restart tomcat9.service
-fi
diff --git a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat9-mariadb/src/deb/control/postrm b/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat9-mariadb/src/deb/control/postrm
deleted file mode 100644
index 9c9437f85356..000000000000
--- a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat9-mariadb/src/deb/control/postrm
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/bin/sh
-
-set -e
-#set -x
-
-if [ "$1" = "purge" ] && [ -e /usr/share/debconf/confmodule ]; then
- . /usr/share/debconf/confmodule
- db_purge
-fi
diff --git a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat9-mysql/pom.xml b/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat9-mysql/pom.xml
deleted file mode 100644
index dd12d10a4b36..000000000000
--- a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat9-mysql/pom.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-
-
-
-
-
- 4.0.0
-
- org.xwiki.platform
- xwiki-platform-distribution-debian-tomcat
- 16.10.0-SNAPSHOT
-
- xwiki-platform-distribution-debian-tomcat9-mysql
- XWiki Platform - Distribution - Debian - Tomcat 9 - MySQL
- deb
- XWiki Tomcat9/MySQL based package
-
- xwiki-tomcat9-mysql
-
-
diff --git a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat9-mysql/src/deb/control/postinst b/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat9-mysql/src/deb/control/postinst
deleted file mode 100644
index ae2aa3a9564b..000000000000
--- a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat9-mysql/src/deb/control/postinst
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/sh
-
-set -e
-#set -x
-
-#########################
-# Restart Tomcat
-#########################
-
-# Restart tomcat9 service (only if it's active)
-if ( systemctl -q is-active tomcat9.service || systemctl -q is-enabled tomcat9.service )
-then
- deb-systemd-invoke restart tomcat9.service
-fi
diff --git a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat9-mysql/src/deb/control/postrm b/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat9-mysql/src/deb/control/postrm
deleted file mode 100644
index 9c9437f85356..000000000000
--- a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat9-mysql/src/deb/control/postrm
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/bin/sh
-
-set -e
-#set -x
-
-if [ "$1" = "purge" ] && [ -e /usr/share/debconf/confmodule ]; then
- . /usr/share/debconf/confmodule
- db_purge
-fi
diff --git a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat9-pgsql/src/deb/control/postinst b/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat9-pgsql/src/deb/control/postinst
deleted file mode 100644
index ae2aa3a9564b..000000000000
--- a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat9-pgsql/src/deb/control/postinst
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/sh
-
-set -e
-#set -x
-
-#########################
-# Restart Tomcat
-#########################
-
-# Restart tomcat9 service (only if it's active)
-if ( systemctl -q is-active tomcat9.service || systemctl -q is-enabled tomcat9.service )
-then
- deb-systemd-invoke restart tomcat9.service
-fi
diff --git a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat9-pgsql/src/deb/control/postrm b/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat9-pgsql/src/deb/control/postrm
deleted file mode 100644
index 9c9437f85356..000000000000
--- a/xwiki-platform-distribution/xwiki-platform-distribution-debian/xwiki-platform-distribution-debian-tomcat/xwiki-platform-distribution-debian-tomcat9-pgsql/src/deb/control/postrm
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/bin/sh
-
-set -e
-#set -x
-
-if [ "$1" = "purge" ] && [ -e /usr/share/debconf/confmodule ]; then
- . /usr/share/debconf/confmodule
- db_purge
-fi
diff --git a/xwiki-platform-distribution/xwiki-platform-distribution-flavor/xwiki-platform-distribution-flavor-data/pom.xml b/xwiki-platform-distribution/xwiki-platform-distribution-flavor/xwiki-platform-distribution-flavor-data/pom.xml
index d5547c844164..94b90b7194f0 100644
--- a/xwiki-platform-distribution/xwiki-platform-distribution-flavor/xwiki-platform-distribution-flavor-data/pom.xml
+++ b/xwiki-platform-distribution/xwiki-platform-distribution-flavor/xwiki-platform-distribution-flavor-data/pom.xml
@@ -209,18 +209,6 @@
xwiki-platform-notifications-preferences-default
${project.version}
-
-
- javax.servlet
- javax.servlet-api
- ${servlet.version}
-
-
- org.mortbay.jasper
- apache-el
- ${apachache-el.version}
-
org.xwiki.platform
diff --git a/xwiki-platform-distribution/xwiki-platform-distribution-flavor/xwiki-platform-distribution-flavor-test/xwiki-platform-distribution-flavor-test-security/pom.xml b/xwiki-platform-distribution/xwiki-platform-distribution-flavor/xwiki-platform-distribution-flavor-test/xwiki-platform-distribution-flavor-test-security/pom.xml
index 700e7fed3c84..1c4941d1db4e 100644
--- a/xwiki-platform-distribution/xwiki-platform-distribution-flavor/xwiki-platform-distribution-flavor-test/xwiki-platform-distribution-flavor-test-security/pom.xml
+++ b/xwiki-platform-distribution/xwiki-platform-distribution-flavor/xwiki-platform-distribution-flavor-test/xwiki-platform-distribution-flavor-test-security/pom.xml
@@ -62,8 +62,8 @@
test
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
test
diff --git a/xwiki-platform-distribution/xwiki-platform-distribution-war/pom.xml b/xwiki-platform-distribution/xwiki-platform-distribution-war/pom.xml
index 2b3813b62b96..cf2f0a05911a 100644
--- a/xwiki-platform-distribution/xwiki-platform-distribution-war/pom.xml
+++ b/xwiki-platform-distribution/xwiki-platform-distribution-war/pom.xml
@@ -158,7 +158,7 @@
junit:*
org.junit.*:*
org.mockito:*
- javax.servlet:servlet-api:*:*:compile
+ jakarta.servlet:jakarta.servlet-api:*:*:compile
jakarta.mail:jakarta.mail-api
diff --git a/xwiki-platform-tools/xwiki-platform-tool-configuration-resources/src/main/resources/xwiki.properties.vm b/xwiki-platform-tools/xwiki-platform-tool-configuration-resources/src/main/resources/xwiki.properties.vm
index 3a9c609979b9..9242b05c7e61 100644
--- a/xwiki-platform-tools/xwiki-platform-tool-configuration-resources/src/main/resources/xwiki.properties.vm
+++ b/xwiki-platform-tools/xwiki-platform-tool-configuration-resources/src/main/resources/xwiki.properties.vm
@@ -1602,4 +1602,14 @@ edit.defaultEditor.org.xwiki.rendering.block.XDOM#wysiwyg=$xwikiPropertiesDefaul
#-# Default is 10 seconds.
# diff.xml.dataURI.httpTimeout = 10
+#-------------------------------------------------------------------------------------
+# Container
+#-------------------------------------------------------------------------------------
+
+#-# [Since 42.0.0]
+#-# "true" if the relative redirect URLs should be resolved by XWiki instead of the application server.
+#-#
+#-# Default is "true".
+# container.request.resolveRelativeRedirect=true
+
$!xwikiPropertiesAdditionalProperties
diff --git a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/README.md b/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/README.md
index 49c732b8b242..179497b65a8f 100644
--- a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/README.md
+++ b/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/README.md
@@ -3,38 +3,14 @@ XWiki Jetty Configuration
These instructions are useful when upgrading the Jetty version used.
-We brought the following changes from the default Jetty files obtained from the Jetty zip file (in `jetty-home`):
+We brought the following changes from the default Jetty files obtained from the `org.eclipse.jetty:jetty-home` package:
-1. Addition of XWiki license headers to all files
1. Addition of `modules/xwiki.mod`, to group all modules we depend on.
1. Addition of `start.d/xwiki.ini` to configure the following properties:
- 1. Disable WAR scanning/hot deployment (since we use static deployment, and it speeds up
- Jetty) by changing the default values for:
- ```
- jetty.deploy.scanInterval=0
- jetty.deploy.extractWars=false
- ```
+ 1. Disable WAR scanning/hot deployment (since we use static deployment, and it speeds up Jetty).
1. Configure Jetty to use RFC3986 for URLs + allow for ambiguous elements in the URLs as XWiki currently needs
them (see the doc in start.d/xwiki.ini).
- ```
- jetty.httpConfig.uriCompliance=RFC3986,AMBIGUOUS_PATH_ENCODING,AMBIGUOUS_EMPTY_SEGMENT,AMBIGUOUS_PATH_SEPARATOR
- ```
1. Addition of `etc/jetty-xwiki.xml` to print a message in the console when XWiki is started.
-1. Remove support for JSP (since XWiki doesn't use JSPs) by:
- 1. Removing the following from `etc/webdefault-ee8.xml`:
- ```
-
- ...
-
- ```
- Also remove the `` just below it.
- Under `` alors remove the `index.jsp ` line.
- 1. Keep only the `apache-el-` lib in `modules/ee8-apache-jsp.mod` (i.e. remove the JSP lib references).
- We need the EL lib for Hibernate Validator (see XWIKI-19314)
-1. Remove alpn (we don't need TLS/SSL for a demo packaging) and http2 support by:
- 1. Remove `lib/jetty-alpn-client-${jetty.version}.jar` from `modules/client.mod`
- 1. Remove references to the `alpn` and `http2` modules from `modules/https.mod`
-1. Addition of `modules/xwiki-logging.mod` to configure logging for XWiki (provides the Jetty `logging` module name)
1. Modification of `etc/console-capture.xml` to send logs to both the console and files. Namely, we wrap:
```
@@ -54,6 +30,6 @@ We brought the following changes from the default Jetty files obtained from the
- ```
-1. Note that we don't include all `etc/*.xml` files nor all `modules/*.mod` files since we don't use these extra
- features.
+ ```
+ This also means adding commons-io to Jetty.
+1. In the pom.xml, we exclude various files we know we don't need in this context, to reduce the size of the resulting zip file
\ No newline at end of file
diff --git a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/pom.xml b/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/pom.xml
index 1d5df33c023b..19abed2ab9c3 100644
--- a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/pom.xml
+++ b/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/pom.xml
@@ -32,114 +32,92 @@
pom
Packages a Jetty installation
-
- true
-
${jetty.server.version}
- ${jetty.server.slf4j.version}
+
+
+ org.eclipse.jetty
+ jetty-home
+ ${jetty.server.version}
+ zip
+
+
+
+ *
+ *
+
+
+
org.xwiki.platform
xwiki-platform-tool-jetty-listener
${project.version}
true
-
commons-io
commons-io
true
-
- org.eclipse.jetty
- jetty-server
- ${jetty.version}
- true
-
-
- org.eclipse.jetty
- jetty-xml
- ${jetty.version}
- true
-
-
- org.eclipse.jetty
- jetty-deploy
- ${jetty.version}
- true
-
-
- org.eclipse.jetty
- jetty-start
- ${jetty.version}
- shaded
- true
-
-
- org.eclipse.jetty
- jetty-jmx
- ${jetty.version}
- true
-
-
- org.eclipse.jetty.ee8
- jetty-ee8-annotations
- ${jetty.version}
- true
-
-
- org.eclipse.jetty
- jetty-plus
- ${jetty.version}
- true
-
-
- org.eclipse.jetty
- jetty-jndi
- ${jetty.version}
- true
-
-
- org.eclipse.jetty
- jetty-slf4j-impl
- ${jetty.version}
- true
-
-
- org.eclipse.jetty
- jetty-client
- ${jetty.version}
- true
-
-
-
- org.eclipse.jetty.ee8.websocket
- jetty-ee8-websocket-javax-server
- ${jetty.version}
- true
-
-
- org.eclipse.jetty.ee8.websocket
- jetty-ee8-websocket-javax-client
- ${jetty.version}
- true
-
-
-
- org.mortbay.jasper
- apache-el
- true
- compile
-
+
+
+ org.apache.maven.plugins
+ maven-dependency-plugin
+
+
+ unpack
+ prepare-package
+
+ unpack
+
+
+
+
+ org.eclipse.jetty
+ jetty-home
+ ${jetty.server.version}
+ zip
+
+
+ **/*demo*,
+ **/*demo*/,
+
+ **/*ee8*,
+ **/*ee8*/,
+ **/*ee9*,
+ **/*ee9*/,
+
+ **/*http2*,
+ **/*http2*/,
+
+ **/*http3*,
+ **/*http3*/,
+
+ **/*cdi*,
+ **/*cdi*/,
+
+ **/*jstl*,
+ **/*jstl*/
+
+
+
+ ${project.build.directory}
+
+
+
+
+
+
org.apache.maven.plugins
maven-assembly-plugin
@@ -149,7 +127,7 @@
false
- ${basedir}/src/main/assembly/distribution.xml
+ src/main/assembly/distribution.xml
diff --git a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/assembly/distribution.xml b/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/assembly/distribution.xml
index c2c32a2b56cc..38e666b775ea 100644
--- a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/assembly/distribution.xml
+++ b/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/assembly/distribution.xml
@@ -26,89 +26,24 @@
zip
false
-
-
-
- start.jar
- /jetty
-
- org.eclipse.jetty:jetty-start:jar:shaded
-
-
- false
-
-
- /jetty/lib
+
+
+
+
+ ${basedir}/src/main/resources
+ /
- org.eclipse.jetty:jetty-start:jar:shaded
-
- org.xwiki.platform:xwiki-platform-tool-jetty-listener
- commons-io:commons-io
-
- org.ow2.asm:*
- jakarta.annotation:jakarta.annotation-api
-
- org.slf4j:slf4j-api
- org.eclipse.jetty:jetty-slf4j-impl
-
- org.eclipse.jetty.ee8.websocket:*
- *:jetty-javax-websocket-api
-
- org.mortbay.jasper:apache-el
+ **/*.sh
-
- false
-
-
- /jetty/lib/ext
-
- org.xwiki.platform:xwiki-platform-tool-jetty-listener
- commons-io:commons-io
-
-
- false
-
-
- /jetty/lib/ee8-annotations
-
- org.ow2.asm:*
- jakarta.annotation:jakarta.annotation-api
-
-
- false
-
-
- /jetty/lib/ee8-websocket
-
- org.eclipse.jetty.ee8.websocket:*
- *:jetty-javax-websocket-api
-
-
- false
-
-
-
- /jetty/lib/logging
-
- org.slf4j:slf4j-api
- org.eclipse.jetty:jetty-slf4j-impl
-
-
- false
-
-
-
-
- /jetty/lib/ee8-apache-jsp
-
- org.mortbay.jasper:apache-el
-
-
- false
-
-
-
+
+
+
+
+ ${project.build.directory}/jetty-home-${jetty.server.version}
+ /jetty/
+ 644
+
+
${basedir}/src/main/resources
@@ -119,18 +54,25 @@
true
755
-
-
- ${basedir}/src/main/resources
- /
-
- **/*.sh
-
-
+
${basedir}/src/main/resources/logs
/logs
+
+
+
+ /jetty/lib/ext
+
+
+ org.xwiki.platform:xwiki-platform-tool-jetty-listener
+
+ commons-io:commons-io
+
+
+ false
+
+
diff --git a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/etc/jetty-bytebufferpool.xml b/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/etc/jetty-bytebufferpool.xml
deleted file mode 100644
index dbde985be754..000000000000
--- a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/etc/jetty-bytebufferpool.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/etc/jetty-deploy.xml b/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/etc/jetty-deploy.xml
deleted file mode 100644
index 4a9d32146b28..000000000000
--- a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/etc/jetty-deploy.xml
+++ /dev/null
@@ -1,52 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/etc/jetty-ee-webapp.xml b/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/etc/jetty-ee-webapp.xml
deleted file mode 100644
index 3b94f5cffb91..000000000000
--- a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/etc/jetty-ee-webapp.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/etc/jetty-ee8-deploy.xml b/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/etc/jetty-ee8-deploy.xml
deleted file mode 100644
index 1b3f910a1548..000000000000
--- a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/etc/jetty-ee8-deploy.xml
+++ /dev/null
@@ -1,86 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
- org.eclipse.jetty.deploy.DeploymentManager
-
- [
- ]
- contextHandlerClass
-
-
-
- [
- ]
-
-
- ee8
-
-
-
-
-
-
-
-
-
-
-
-
- jetty.deploy.defaultsDescriptorPath
- jetty.deploy.defaultsDescriptor
-
- /etc/webdefault-ee8.xml
-
-
-
-
-
-
-
-
-
-
- .*/jetty-servlet-api-[^/]*\.jar$|.*jakarta.servlet.jsp.jstl-[^/]*\.jar|.*jsp.jstl-[^/]*\.jar
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/etc/jetty-ee8-webapp.xml b/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/etc/jetty-ee8-webapp.xml
deleted file mode 100644
index 0bd5e05b400d..000000000000
--- a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/etc/jetty-ee8-webapp.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/etc/jetty-http-forwarded.xml b/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/etc/jetty-http-forwarded.xml
deleted file mode 100644
index cbb0632d1294..000000000000
--- a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/etc/jetty-http-forwarded.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/etc/jetty-http.xml b/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/etc/jetty-http.xml
deleted file mode 100644
index 1cc65d7ef341..000000000000
--- a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/etc/jetty-http.xml
+++ /dev/null
@@ -1,71 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/etc/jetty-https.xml b/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/etc/jetty-https.xml
deleted file mode 100644
index 13f9cd9698d9..000000000000
--- a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/etc/jetty-https.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- http/1.1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/etc/jetty-jmx.xml b/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/etc/jetty-jmx.xml
deleted file mode 100644
index 290b15494332..000000000000
--- a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/etc/jetty-jmx.xml
+++ /dev/null
@@ -1,52 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/etc/jetty-requestlog.xml b/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/etc/jetty-requestlog.xml
deleted file mode 100644
index d3417016fb34..000000000000
--- a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/etc/jetty-requestlog.xml
+++ /dev/null
@@ -1,69 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- /yyyy_mm_dd.request.log
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/etc/jetty-ssl-context.xml b/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/etc/jetty-ssl-context.xml
deleted file mode 100644
index 23e527475faf..000000000000
--- a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/etc/jetty-ssl-context.xml
+++ /dev/null
@@ -1,82 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/etc/jetty-ssl.xml b/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/etc/jetty-ssl.xml
deleted file mode 100644
index ffc314cc87b8..000000000000
--- a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/etc/jetty-ssl.xml
+++ /dev/null
@@ -1,84 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/etc/jetty-threadpool.xml b/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/etc/jetty-threadpool.xml
deleted file mode 100644
index b79642525278..000000000000
--- a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/etc/jetty-threadpool.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/etc/jetty.xml b/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/etc/jetty.xml
deleted file mode 100644
index c8cfd3c9c498..000000000000
--- a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/etc/jetty.xml
+++ /dev/null
@@ -1,119 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/etc/sessions/id-manager.xml b/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/etc/sessions/id-manager.xml
deleted file mode 100644
index a4841e55da73..000000000000
--- a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/etc/sessions/id-manager.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- node
-
-
- 0
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- true
-
-
diff --git a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/etc/webdefault-ee8.xml b/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/etc/webdefault-ee8.xml
deleted file mode 100644
index 214b9f6a3805..000000000000
--- a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/etc/webdefault-ee8.xml
+++ /dev/null
@@ -1,414 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Default web.xml file.
- This file is applied to a Web application before its own WEB_INF/web.xml file
-
-
-
-
-
-
-
- org.eclipse.jetty.ee8.servlet.listener.IntrospectorCleaner
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- default
- org.eclipse.jetty.ee8.servlet.DefaultServlet
-
- acceptRanges
- true
-
-
- dirAllowed
- true
-
-
- welcomeServlets
- false
-
-
- redirectWelcome
- false
-
-
- maxCacheSize
- 256000000
-
-
- maxCachedFileSize
- 200000000
-
-
- maxCachedFiles
- 2048
-
-
- etags
- false
-
-
- useFileMappedBuffer
- true
-
- 0
-
-
-
- default
- /
-
-
-
-
-
-
-
- 30
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- index.html
- index.htm
-
-
-
-
-
-
-
- ar
- ISO-8859-6
-
-
- be
- ISO-8859-5
-
-
- bg
- ISO-8859-5
-
-
- ca
- ISO-8859-1
-
-
- cs
- ISO-8859-2
-
-
- da
- ISO-8859-1
-
-
- de
- ISO-8859-1
-
-
- el
- ISO-8859-7
-
-
- en
- ISO-8859-1
-
-
- es
- ISO-8859-1
-
-
- et
- ISO-8859-1
-
-
- fi
- ISO-8859-1
-
-
- fr
- ISO-8859-1
-
-
- hr
- ISO-8859-2
-
-
- hu
- ISO-8859-2
-
-
- is
- ISO-8859-1
-
-
- it
- ISO-8859-1
-
-
- iw
- ISO-8859-8
-
-
- ja
- Shift_JIS
-
-
- ko
- EUC-KR
-
-
- lt
- ISO-8859-2
-
-
- lv
- ISO-8859-2
-
-
- mk
- ISO-8859-5
-
-
- nl
- ISO-8859-1
-
-
- no
- ISO-8859-1
-
-
- pl
- ISO-8859-2
-
-
- pt
- ISO-8859-1
-
-
- ro
- ISO-8859-2
-
-
- ru
- ISO-8859-5
-
-
- sh
- ISO-8859-5
-
-
- sk
- ISO-8859-2
-
-
- sl
- ISO-8859-2
-
-
- sq
- ISO-8859-2
-
-
- sr
- ISO-8859-5
-
-
- sv
- ISO-8859-1
-
-
- tr
- ISO-8859-9
-
-
- uk
- ISO-8859-5
-
-
- zh
- GB2312
-
-
- zh_TW
- Big5
-
-
-
-
-
-
-
-
- Disable TRACE
- /
- TRACE
-
-
-
-
-
- Enable everything but TRACE
- /
- TRACE
-
-
-
-
-
diff --git a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/etc/jetty-xwiki.xml b/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/etc/xwiki.xml
similarity index 100%
rename from xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/etc/jetty-xwiki.xml
rename to xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/etc/xwiki.xml
diff --git a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/bytebufferpool.mod b/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/bytebufferpool.mod
deleted file mode 100644
index 10c542541d88..000000000000
--- a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/bytebufferpool.mod
+++ /dev/null
@@ -1,58 +0,0 @@
-# ---------------------------------------------------------------------------
-# See the NOTICE file distributed with this work for additional
-# information regarding copyright ownership.
-#
-# This is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation; either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# This software is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this software; if not, write to the Free
-# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-# ---------------------------------------------------------------------------
-
-# DO NOT EDIT - See: https://jetty.org/docs/index.html
-
-[description]
-Configures the ByteBufferPool used by ServerConnectors.
-The bucket sizes increase linearly.
-Use module "bytebufferpool-quadratic" for a pool that holds more coarse sized buffers.
-
-[depends]
-logging
-
-[xml]
-etc/jetty-bytebufferpool.xml
-
-[ini-template]
-## Minimum capacity of a single ByteBuffer.
-#jetty.byteBufferPool.minCapacity=0
-
-## Maximum capacity of a single ByteBuffer.
-## Requests for ByteBuffers larger than this value results
-## in the ByteBuffer being allocated but not pooled.
-#jetty.byteBufferPool.maxCapacity=65536
-
-## Bucket capacity factor.
-## ByteBuffers are allocated out of buckets that have
-## a capacity that is multiple of this factor.
-#jetty.byteBufferPool.factor=4096
-
-## Maximum size for each bucket (-1 for unbounded).
-#jetty.byteBufferPool.maxBucketSize=-1
-
-## Maximum heap memory held idle by the pool (0 for heuristic, -1 for unlimited).
-#jetty.byteBufferPool.maxHeapMemory=0
-
-## Maximum direct memory held idle by the pool (0 for heuristic, -1 for unlimited).
-#jetty.byteBufferPool.maxDirectMemory=0
-
-## Whether statistics are enabled.
-#jetty.byteBufferPool.statisticsEnabled=false
diff --git a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/client.mod b/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/client.mod
deleted file mode 100644
index 900043c9e9c9..000000000000
--- a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/client.mod
+++ /dev/null
@@ -1,27 +0,0 @@
-# ---------------------------------------------------------------------------
-# See the NOTICE file distributed with this work for additional
-# information regarding copyright ownership.
-#
-# This is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation; either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# This software is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this software; if not, write to the Free
-# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-# ---------------------------------------------------------------------------
-
-# DO NOT EDIT - See: https://jetty.org/docs/index.html
-
-[description]
-Adds the Jetty HTTP client to the server classpath.
-
-[lib]
-lib/jetty-client-${jetty.version}.jar
diff --git a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/console-capture.mod b/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/console-capture.mod
deleted file mode 100644
index fb78cc48564f..000000000000
--- a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/console-capture.mod
+++ /dev/null
@@ -1,51 +0,0 @@
-# ---------------------------------------------------------------------------
-# See the NOTICE file distributed with this work for additional
-# information regarding copyright ownership.
-#
-# This is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation; either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# This software is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this software; if not, write to the Free
-# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-# ---------------------------------------------------------------------------
-
-# DO NOT EDIT - See: https://jetty.org/docs/index.html
-
-[description]
-Redirects the JVM console stderr and stdout to a rolling log file.
-
-[tags]
-logging
-
-[depends]
-logging
-
-[xml]
-etc/console-capture.xml
-
-[files]
-logs/
-
-[ini-template]
-# tag::documentation[]
-## Logging directory (relative to $JETTY_BASE).
-# jetty.console-capture.dir=./logs
-
-## Whether to append to existing file.
-# jetty.console-capture.append=true
-
-## How many days to retain old log files.
-# jetty.console-capture.retainDays=90
-
-## Timezone ID of the log timestamps, as specified by java.time.ZoneId.
-# jetty.console-capture.timezone=GMT
-# end::documentation[]
diff --git a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/deploy.mod b/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/deploy.mod
deleted file mode 100644
index 716e9f0629da..000000000000
--- a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/deploy.mod
+++ /dev/null
@@ -1,37 +0,0 @@
-# ---------------------------------------------------------------------------
-# See the NOTICE file distributed with this work for additional
-# information regarding copyright ownership.
-#
-# This is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation; either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# This software is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this software; if not, write to the Free
-# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-# ---------------------------------------------------------------------------
-
-# DO NOT EDIT - See: https://jetty.org/docs/index.html
-
-[description]
-This module enables web application deployment from the `$JETTY_BASE/webapps` directory.
-
-[depend]
-server
-
-[lib]
-lib/jetty-deploy-${jetty.version}.jar
-
-[files]
-webapps/
-
-[xml]
-etc/jetty-deploy.xml
-
diff --git a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/ee-webapp.mod b/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/ee-webapp.mod
deleted file mode 100644
index 0a664334541f..000000000000
--- a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/ee-webapp.mod
+++ /dev/null
@@ -1,51 +0,0 @@
-# ---------------------------------------------------------------------------
-# See the NOTICE file distributed with this work for additional
-# information regarding copyright ownership.
-#
-# This is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation; either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# This software is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this software; if not, write to the Free
-# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-# ---------------------------------------------------------------------------
-
-# DO NOT EDIT - See: https://jetty.org/docs/index.html
-
-[description]
-# tag::description[]
-This module provide common configuration of Java Servlet web applications over all environments.
-# end::description[]
-
-[xml]
-etc/jetty-ee-webapp.xml
-
-[lib]
-lib/jetty-ee-${jetty.version}.jar
-
-[ini-template]
-# tag::ini-template[]
-## Add to the server wide default jars and packages protected or hidden from webapps.
-## Protected (aka System) classes cannot be overridden by a webapp.
-## Hidden (aka Server) classes cannot be seen by a webapp
-## Lists of patterns are comma separated and may be either:
-## + a qualified classname e.g. 'com.acme.Foo'
-## + a package name e.g. 'net.example.'
-## + a jar file e.g. '${jetty.base.uri}/lib/dependency.jar'
-## + a directory of jars,resource or classes e.g. '${jetty.base.uri}/resources'
-## + A pattern preceded with a '-' is an exclusion, all other patterns are inclusions
-##
-## The +=, operator appends to a CSV list with a comma as needed.
-##
-#jetty.server.addProtectedClasses+=,org.example.
-#jetty.server.addHiddenClasses+=,org.example.
-# end::ini-template[]
-
diff --git a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/ee8-annotations.mod b/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/ee8-annotations.mod
deleted file mode 100644
index 868802984fa8..000000000000
--- a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/ee8-annotations.mod
+++ /dev/null
@@ -1,47 +0,0 @@
-# ---------------------------------------------------------------------------
-# See the NOTICE file distributed with this work for additional
-# information regarding copyright ownership.
-#
-# This is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation; either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# This software is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this software; if not, write to the Free
-# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-# ---------------------------------------------------------------------------
-
-# DO NOT EDIT - See: https://jetty.org/docs/index.html
-
-[description]
-Enables Annotation scanning for deployed web applications.
-
-[environment]
-ee8
-
-[depend]
-plus
-ee8-plus
-
-[ini]
-ee8.asm.version?=9.7.1
-ee8.jakarta.annotation.api.version?=1.3.5
-
-[lib]
-lib/jetty-ee8-annotations-${jetty.version}.jar
-lib/ee8-annotations/asm-${ee8.asm.version}.jar
-lib/ee8-annotations/asm-analysis-${ee8.asm.version}.jar
-lib/ee8-annotations/asm-commons-${ee8.asm.version}.jar
-lib/ee8-annotations/asm-tree-${ee8.asm.version}.jar
-lib/ee8-annotations/jakarta.annotation-api-${ee8.jakarta.annotation.api.version}.jar
-
-[jpms]
-add-modules:org.objectweb.asm
-
diff --git a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/ee8-apache-jsp.mod b/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/ee8-apache-jsp.mod
deleted file mode 100644
index a9bca961861a..000000000000
--- a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/ee8-apache-jsp.mod
+++ /dev/null
@@ -1,37 +0,0 @@
-# ---------------------------------------------------------------------------
-# See the NOTICE file distributed with this work for additional
-# information regarding copyright ownership.
-#
-# This is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation; either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# This software is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this software; if not, write to the Free
-# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-# ---------------------------------------------------------------------------
-
-# DO NOT EDIT - See: https://jetty.org/docs/index.html
-
-[description]
-Enables use of the apache implementation of JSP.
-
-[environment]
-ee8
-
-[depend]
-ee8-servlet
-ee8-annotations
-
-[ini]
-ee8.jsp.impl.version?=9.0.90
-
-[lib]
-lib/ee8-apache-jsp/apache-el-${ee8.jsp.impl.version}.jar
diff --git a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/ee8-deploy.mod b/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/ee8-deploy.mod
deleted file mode 100644
index 371d5789183a..000000000000
--- a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/ee8-deploy.mod
+++ /dev/null
@@ -1,69 +0,0 @@
-# ---------------------------------------------------------------------------
-# See the NOTICE file distributed with this work for additional
-# information regarding copyright ownership.
-#
-# This is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation; either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# This software is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this software; if not, write to the Free
-# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-# ---------------------------------------------------------------------------
-
-# DO NOT EDIT - See: https://jetty.org/docs/index.html
-
-[description]
-# tag::description[]
-This module enables webapp deployment from the `$JETTY_BASE/webapps` directory.
-# end::description[]
-
-[environment]
-ee8
-
-[depend]
-deploy
-ee8-webapp
-
-[xml]
-etc/jetty-ee8-deploy.xml
-
-[ini-template]
-# tag::ini-template[]
-## Monitored directory name (relative to $jetty.base)
-# jetty.deploy.monitoredDir=webapps
-
-## Defaults Descriptor for all deployed webapps
-# jetty.deploy.defaultsDescriptorPath=${jetty.base}/etc/webdefault-ee8.xml
-
-## Monitored directory scan period (seconds)
-# jetty.deploy.scanInterval=0
-
-## Whether to extract *.war files
-# jetty.deploy.extractWars=true
-
-## Whether to give the parent classloader priority
-# jetty.deploy.parentLoaderPriority=true
-
-## Comma separated list of configuration classes to set.
-# jetty.deploy.configurationClasses=
-
-## Pattern to select jars from the container classloader to be scanned (or null to scan no jars)
-# jetty.deploy.containerScanJarPattern=.*/jetty-servlet-api-[^/]*\.jar$|.*/javax.servlet.jsp.jstl-.*\.jar$
-
-## Pattern to select jars from the container classloader to be scanned (or null to scan all jars).
-# jetty.deploy.webInfScanJarPattern=
-
-## Pattern to exclude discovered ServletContainerInitializers
-# jetty.deploy.servletContainerInitializerExclusionPattern=
-
-## Order of discovered ServletContainerInitializers
-# jetty.deploy.servletContainerInitializerOrder=
-# end::ini-template[]
diff --git a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/ee8-jndi.mod b/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/ee8-jndi.mod
deleted file mode 100644
index 9135ddf9f42e..000000000000
--- a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/ee8-jndi.mod
+++ /dev/null
@@ -1,33 +0,0 @@
-# ---------------------------------------------------------------------------
-# See the NOTICE file distributed with this work for additional
-# information regarding copyright ownership.
-#
-# This is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation; either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# This software is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this software; if not, write to the Free
-# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-# ---------------------------------------------------------------------------
-
-# DO NOT EDIT - See: https://jetty.org/docs/index.html
-
-[description]
-Adds the Jetty EE8 JNDI reference factories
-
-[environment]
-ee8
-
-[depend]
-jndi
-
-[lib]
-lib/jetty-ee8-jndi-${jetty.version}.jar
diff --git a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/ee8-plus.mod b/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/ee8-plus.mod
deleted file mode 100644
index 9cc1f0d8fb9e..000000000000
--- a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/ee8-plus.mod
+++ /dev/null
@@ -1,38 +0,0 @@
-# ---------------------------------------------------------------------------
-# See the NOTICE file distributed with this work for additional
-# information regarding copyright ownership.
-#
-# This is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation; either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# This software is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this software; if not, write to the Free
-# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-# ---------------------------------------------------------------------------
-
-# DO NOT EDIT - See: https://jetty.org/docs/index.html
-
-[description]
-Enables Servlet 3.1 resource injection.
-
-[environment]
-ee8
-
-[depend]
-server
-jndi
-plus
-ee8-security
-ee8-webapp
-
-[lib]
-lib/jetty-ee8-plus-${jetty.version}.jar
-lib/jakarta.transaction-api-1.3.3.jar
diff --git a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/ee8-security.mod b/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/ee8-security.mod
deleted file mode 100644
index b334fae5a064..000000000000
--- a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/ee8-security.mod
+++ /dev/null
@@ -1,35 +0,0 @@
-# ---------------------------------------------------------------------------
-# See the NOTICE file distributed with this work for additional
-# information regarding copyright ownership.
-#
-# This is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation; either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# This software is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this software; if not, write to the Free
-# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-# ---------------------------------------------------------------------------
-
-# DO NOT EDIT - See: https://jetty.org/docs/index.html
-
-[description]
-Adds servlet standard security handling to the classpath.
-
-[environment]
-ee8
-
-[depend]
-server
-security
-ee8-servlet
-
-[lib]
-lib/jetty-ee8-security-${jetty.version}.jar
diff --git a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/ee8-servlet.mod b/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/ee8-servlet.mod
deleted file mode 100644
index 28eaecb54d28..000000000000
--- a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/ee8-servlet.mod
+++ /dev/null
@@ -1,36 +0,0 @@
-# ---------------------------------------------------------------------------
-# See the NOTICE file distributed with this work for additional
-# information regarding copyright ownership.
-#
-# This is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation; either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# This software is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this software; if not, write to the Free
-# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-# ---------------------------------------------------------------------------
-
-# DO NOT EDIT - See: https://jetty.org/docs/index.html
-
-[description]
-Enables standard Servlet handling.
-
-[environment]
-ee8
-
-[depend]
-server
-sessions
-
-[lib]
-lib/jetty-servlet-api-4.0.6.jar
-lib/jetty-ee8-nested-${jetty.version}.jar
-lib/jetty-ee8-servlet-${jetty.version}.jar
diff --git a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/ee8-webapp.mod b/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/ee8-webapp.mod
deleted file mode 100644
index 5645f4d3822f..000000000000
--- a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/ee8-webapp.mod
+++ /dev/null
@@ -1,61 +0,0 @@
-# ---------------------------------------------------------------------------
-# See the NOTICE file distributed with this work for additional
-# information regarding copyright ownership.
-#
-# This is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation; either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# This software is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this software; if not, write to the Free
-# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-# ---------------------------------------------------------------------------
-
-# DO NOT EDIT - See: https://jetty.org/docs/index.html
-
-[description]
-Adds support for servlet specification web applications to the server classpath.
-Without this, only Jetty-specific handlers may be deployed.
-
-[environment]
-ee8
-
-[depend]
-ee-webapp
-ee8-servlet
-ee8-security
-
-[xml]
-etc/jetty-ee8-webapp.xml
-
-[lib]
-lib/jetty-ee8-webapp-${jetty.version}.jar
-
-[ini-template]
-## Add to the environment wide default jars and packages protected or hidden from webapps.
-## System (aka Protected) classes cannot be overridden by a webapp.
-## Server (aka Hidden) classes cannot be seen by a webapp
-## Lists of patterns are comma separated and may be either:
-## + a qualified classname e.g. 'com.acme.Foo'
-## + a package name e.g. 'net.example.'
-## + a jar file e.g. '${jetty.base.uri}/lib/dependency.jar'
-## + a directory of jars,resource or classes e.g. '${jetty.base.uri}/resources'
-## + A pattern preceded with a '-' is an exclusion, all other patterns are inclusions
-##
-## The +=, operator appends to a CSV list with a comma as needed.
-##
-#jetty.webapp.addProtectedClasses+=,org.example.
-#jetty.webapp.addHiddenClasses+=,org.example.
-
-[ini]
-contextHandlerClass=org.eclipse.jetty.ee8.webapp.WebAppContext
-
-[jpms]
-add-modules:java.instrument
diff --git a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/ee8-websocket-javax.mod b/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/ee8-websocket-javax.mod
deleted file mode 100644
index 8150285456d2..000000000000
--- a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/ee8-websocket-javax.mod
+++ /dev/null
@@ -1,44 +0,0 @@
-# ---------------------------------------------------------------------------
-# See the NOTICE file distributed with this work for additional
-# information regarding copyright ownership.
-#
-# This is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation; either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# This software is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this software; if not, write to the Free
-# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-# ---------------------------------------------------------------------------
-
-# DO NOT EDIT - See: https://jetty.org/docs/index.html
-
-[description]
-Enable javax.websocket APIs for deployed web applications.
-
-[environment]
-ee8
-
-[tags]
-websocket
-
-[depend]
-client
-ee8-annotations
-
-[lib]
-lib/jetty-websocket-core-common-${jetty.version}.jar
-lib/jetty-websocket-core-client-${jetty.version}.jar
-lib/jetty-websocket-core-server-${jetty.version}.jar
-lib/ee8-websocket/jetty-ee8-websocket-servlet-${jetty.version}.jar
-lib/ee8-websocket/jetty-javax-websocket-api-1.1.2.jar
-lib/ee8-websocket/jetty-ee8-websocket-javax-client-${jetty.version}.jar
-lib/ee8-websocket/jetty-ee8-websocket-javax-common-${jetty.version}.jar
-lib/ee8-websocket/jetty-ee8-websocket-javax-server-${jetty.version}.jar
\ No newline at end of file
diff --git a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/ee8-websocket-jetty.mod b/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/ee8-websocket-jetty.mod
deleted file mode 100644
index 73ac3941e0c7..000000000000
--- a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/ee8-websocket-jetty.mod
+++ /dev/null
@@ -1,42 +0,0 @@
-# ---------------------------------------------------------------------------
-# See the NOTICE file distributed with this work for additional
-# information regarding copyright ownership.
-#
-# This is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation; either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# This software is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this software; if not, write to the Free
-# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-# ---------------------------------------------------------------------------
-
-# DO NOT EDIT - See: https://jetty.org/docs/index.html
-
-[description]
-Enable the Jetty WebSocket API support for deployed web applications.
-
-[environment]
-ee8
-
-[tags]
-websocket
-
-[depend]
-ee8-annotations
-
-[lib]
-lib/jetty-websocket-core-common-${jetty.version}.jar
-lib/jetty-websocket-core-server-${jetty.version}.jar
-lib/ee8-websocket/jetty-ee8-websocket-servlet-${jetty.version}.jar
-lib/ee8-websocket/jetty-ee8-websocket-jetty-api-${jetty.version}.jar
-lib/ee8-websocket/jetty-ee8-websocket-jetty-common-${jetty.version}.jar
-lib/ee8-websocket/jetty-ee8-websocket-jetty-server-${jetty.version}.jar
-
diff --git a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/ext.mod b/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/ext.mod
deleted file mode 100644
index 17a98d590e5f..000000000000
--- a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/ext.mod
+++ /dev/null
@@ -1,35 +0,0 @@
-# ---------------------------------------------------------------------------
-# See the NOTICE file distributed with this work for additional
-# information regarding copyright ownership.
-#
-# This is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation; either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# This software is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this software; if not, write to the Free
-# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-# ---------------------------------------------------------------------------
-
-# DO NOT EDIT - See: https://jetty.org/docs/index.html
-
-[description]
-Adds the jar file from $JETTY_HOME/lib/ext and $JETTY_BASE/lib/ext to the server classpath.
-
-[tags]
-classpath
-
-[lib]
-lib/ext/**.jar
-
-[files]
-lib/
-lib/ext/
-
diff --git a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/http-forwarded.mod b/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/http-forwarded.mod
deleted file mode 100644
index 63eb39e7d8f2..000000000000
--- a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/http-forwarded.mod
+++ /dev/null
@@ -1,78 +0,0 @@
-# ---------------------------------------------------------------------------
-# See the NOTICE file distributed with this work for additional
-# information regarding copyright ownership.
-#
-# This is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation; either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# This software is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this software; if not, write to the Free
-# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-# ---------------------------------------------------------------------------
-
-# DO NOT EDIT - See: https://jetty.org/docs/index.html
-
-[description]
-Enables processing of the "Forwarded" HTTP header (and its predecessors "X-Forwarded-*" HTTP headers).
-The "Forwarded" HTTP header is added by intermediaries to provide information about the clients.
-
-[tags]
-connector
-
-[depend]
-http
-
-[xml]
-etc/jetty-http-forwarded.xml
-
-[ini-template]
-# tag::documentation[]
-### ForwardedRequestCustomizer Configuration
-
-## Whether to process only the RFC7239 "Forwarded" header.
-## "X-Forwarded-*" headers are not processed.
-# jetty.httpConfig.forwardedOnly=false
-
-## Whether the address obtained from "Forwarded: by=" or
-## "X-Forwarded-Server" is used in the request authority.
-# jetty.httpConfig.forwardedProxyAsAuthority=false
-
-## Whether the "X-Forwarded-Port" header is used in the request authority,
-## or else it is the remote client port.
-# jetty.httpConfig.forwardedPortAsAuthority=true
-
-## The name of the RFC 7239 HTTP header.
-# jetty.httpConfig.forwardedHeader=Forwarded
-
-## The name of the obsolete forwarded host HTTP header.
-# jetty.httpConfig.forwardedHostHeader=X-Forwarded-Host
-
-## The name of the obsolete forwarded server HTTP header.
-# jetty.httpConfig.forwardedServerHeader=X-Forwarded-Server
-
-## The name of the obsolete forwarded scheme HTTP header.
-# jetty.httpConfig.forwardedProtoHeader=X-Forwarded-Proto
-
-## The name of the obsolete forwarded for HTTP header.
-# jetty.httpConfig.forwardedForHeader=X-Forwarded-For
-
-## The name of the obsolete forwarded port HTTP header.
-# jetty.httpConfig.forwardedPortHeader=X-Forwarded-Port
-
-## The name of the obsolete forwarded https HTTP header.
-# jetty.httpConfig.forwardedHttpsHeader=X-Proxied-Https
-
-## The name of the obsolete forwarded SSL session ID HTTP header.
-# jetty.httpConfig.forwardedSslSessionIdHeader=Proxy-ssl-id
-
-## The name of the obsolete forwarded SSL cipher HTTP header.
-# jetty.httpConfig.forwardedCipherSuiteHeader=Proxy-auth-cert
-# end::documentation[]
diff --git a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/http.mod b/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/http.mod
deleted file mode 100644
index b135a62ab5aa..000000000000
--- a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/http.mod
+++ /dev/null
@@ -1,78 +0,0 @@
-# ---------------------------------------------------------------------------
-# See the NOTICE file distributed with this work for additional
-# information regarding copyright ownership.
-#
-# This is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation; either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# This software is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this software; if not, write to the Free
-# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-# ---------------------------------------------------------------------------
-
-# DO NOT EDIT - See: https://jetty.org/docs/index.html
-
-[description]
-Enables a clear-text HTTP connector.
-By default clear-text HTTP/1.1 is enabled, and clear-text HTTP/2 may be added by enabling the "http2c" module.
-
-[tags]
-connector
-http
-
-[depend]
-server
-
-[xml]
-etc/jetty-http.xml
-
-[ini-template]
-# tag::documentation[]
-### Clear-Text HTTP Connector Configuration
-
-## The host/address to bind the connector to.
-# jetty.http.host=0.0.0.0
-
-## The port the connector listens on.
-# jetty.http.port=8080
-
-## The connector idle timeout, in milliseconds.
-# jetty.http.idleTimeout=30000
-
-## The number of acceptors (-1 picks a default value based on number of cores).
-# jetty.http.acceptors=1
-
-## The number of selectors (-1 picks a default value based on number of cores).
-# jetty.http.selectors=-1
-
-## The ServerSocketChannel accept queue backlog (0 picks the platform default).
-# jetty.http.acceptQueueSize=0
-
-## The thread priority delta to give to acceptor threads.
-# jetty.http.acceptorPriorityDelta=0
-
-## Whether to enable the SO_REUSEADDR socket option.
-# jetty.http.reuseAddress=true
-
-## Whether to enable the SO_REUSEPORT socket option.
-# jetty.http.reusePort=false
-
-## Whether to enable the TCP_NODELAY socket option on accepted sockets.
-# jetty.http.acceptedTcpNoDelay=true
-
-## The SO_RCVBUF socket option to set on accepted sockets.
-## A value of -1 indicates that the platform default is used.
-# jetty.http.acceptedReceiveBufferSize=-1
-
-## The SO_SNDBUF socket option to set on accepted sockets.
-## A value of -1 indicates that the platform default is used.
-# jetty.http.acceptedSendBufferSize=-1
-# end::documentation[]
diff --git a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/https.mod b/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/https.mod
deleted file mode 100644
index 6a09c385c745..000000000000
--- a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/https.mod
+++ /dev/null
@@ -1,40 +0,0 @@
-# ---------------------------------------------------------------------------
-# See the NOTICE file distributed with this work for additional
-# information regarding copyright ownership.
-#
-# This is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation; either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# This software is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this software; if not, write to the Free
-# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-# ---------------------------------------------------------------------------
-
-# DO NOT EDIT - See: https://jetty.org/docs/index.html
-
-[description]
-Adds HTTPS protocol support to the TLS(SSL) Connector.
-
-[tags]
-connector
-https
-http
-ssl
-
-[depend]
-ssl
-
-[after]
-http-forwarded
-
-[xml]
-etc/jetty-https.xml
-
diff --git a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/jmx.mod b/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/jmx.mod
deleted file mode 100644
index aee601f9d41e..000000000000
--- a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/jmx.mod
+++ /dev/null
@@ -1,35 +0,0 @@
-# ---------------------------------------------------------------------------
-# See the NOTICE file distributed with this work for additional
-# information regarding copyright ownership.
-#
-# This is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation; either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# This software is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this software; if not, write to the Free
-# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-# ---------------------------------------------------------------------------
-
-# DO NOT EDIT - See: https://jetty.org/docs/index.html
-
-[description]
-# tag::description[]
-This module enables local Java Management Extension (JMX) support for Jetty components.
-# end::description[]
-
-[depend]
-server
-
-[lib]
-lib/jetty-jmx-${jetty.version}.jar
-
-[xml]
-etc/jetty-jmx.xml
diff --git a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/jndi.mod b/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/jndi.mod
deleted file mode 100644
index 8870763db9c0..000000000000
--- a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/jndi.mod
+++ /dev/null
@@ -1,31 +0,0 @@
-# ---------------------------------------------------------------------------
-# See the NOTICE file distributed with this work for additional
-# information regarding copyright ownership.
-#
-# This is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation; either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# This software is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this software; if not, write to the Free
-# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-# ---------------------------------------------------------------------------
-
-# DO NOT EDIT - See: https://jetty.org/docs/index.html
-
-[description]
-Adds the Jetty JNDI implementation to the classpath.
-
-[depend]
-plus
-server
-
-[lib]
-lib/jetty-jndi-${jetty.version}.jar
diff --git a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/jvm.mod b/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/jvm.mod
deleted file mode 100644
index 03096bf12007..000000000000
--- a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/jvm.mod
+++ /dev/null
@@ -1,47 +0,0 @@
-# ---------------------------------------------------------------------------
-# See the NOTICE file distributed with this work for additional
-# information regarding copyright ownership.
-#
-# This is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation; either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# This software is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this software; if not, write to the Free
-# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-# ---------------------------------------------------------------------------
-
-# DO NOT EDIT - See: https://jetty.org/docs/index.html
-
-[description]
-Creates an ini template for setting JVM arguments (eg -Xmx ).
-
-[ini-template]
-## JVM Configuration
-## If JVM args are include in an ini file then --exec is needed
-## to start a new JVM from start.jar with the extra args.
-##
-## If you wish to avoid an extra JVM running, place JVM args
-## on the normal command line and do not use --exec
-# --exec
-# -Xmx2000m
-# -Xmn512m
-# -XX:+UseConcMarkSweepGC
-# -XX:ParallelCMSThreads=2
-# -XX:+CMSClassUnloadingEnabled
-# -XX:+UseCMSCompactAtFullCollection
-# -XX:CMSInitiatingOccupancyFraction=80
-# -internal:gc
-# -XX:+PrintGCDateStamps
-# -XX:+PrintGCTimeStamps
-# -XX:+PrintGCDetails
-# -XX:+PrintTenuringDistribution
-# -XX:+PrintCommandLineFlags
-# -XX:+DisableExplicitGC
diff --git a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/logging/jetty/resources/jetty-logging.properties b/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/logging/jetty/resources/jetty-logging.properties
deleted file mode 100644
index 17e9bdcf9e21..000000000000
--- a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/logging/jetty/resources/jetty-logging.properties
+++ /dev/null
@@ -1,30 +0,0 @@
-# ---------------------------------------------------------------------------
-# See the NOTICE file distributed with this work for additional
-# information regarding copyright ownership.
-#
-# This is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation; either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# This software is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this software; if not, write to the Free
-# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-# ---------------------------------------------------------------------------
-
-## Set logging levels from: ALL, TRACE, DEBUG, INFO, WARN, ERROR, OFF
-org.eclipse.jetty.LEVEL=INFO
-## Configure a level for an arbitrary logger tree
-#com.example.LEVEL=INFO
-## Configure a level for specific logger
-#com.example.MyComponent.LEVEL=INFO
-## Configure JMX Context Name
-# org.eclipse.jetty.logging.jmx.context=JettyServer
-## Hide stacks traces in an arbitrary logger tree
-#com.example.STACKS=false
diff --git a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/logging/slf4j.mod b/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/logging/slf4j.mod
deleted file mode 100644
index f44b6da64ba4..000000000000
--- a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/logging/slf4j.mod
+++ /dev/null
@@ -1,39 +0,0 @@
-# ---------------------------------------------------------------------------
-# See the NOTICE file distributed with this work for additional
-# information regarding copyright ownership.
-#
-# This is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation; either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# This software is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this software; if not, write to the Free
-# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-# ---------------------------------------------------------------------------
-
-# DO NOT EDIT - See: https://jetty.org/docs/index.html
-
-[description]
-Configures logging to use SLF4J.
-A specific implementation of SLF4J is not enabled.
-If one is not selected then NOP implementation will be used.
-
-[tags]
-logging
-
-[provides]
-slf4j
-
-[lib]
-lib/logging/slf4j-api-${slf4j.version}.jar
-
-[ini]
-slf4j.version?=2.0.13
-jetty.webapp.addHiddenClasses+=,org.slf4j.
diff --git a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/plus.mod b/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/plus.mod
deleted file mode 100644
index 45c285e5618b..000000000000
--- a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/plus.mod
+++ /dev/null
@@ -1,30 +0,0 @@
-# ---------------------------------------------------------------------------
-# See the NOTICE file distributed with this work for additional
-# information regarding copyright ownership.
-#
-# This is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation; either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# This software is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this software; if not, write to the Free
-# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-# ---------------------------------------------------------------------------
-
-# DO NOT EDIT - See: https://jetty.org/docs/index.html
-
-[description]
-Adds the Jetty Plus JNDI support to the classpath.
-
-[depend]
-server
-
-[lib]
-lib/jetty-plus-${jetty.version}.jar
diff --git a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/requestlog.mod b/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/requestlog.mod
deleted file mode 100644
index ace6429c03bb..000000000000
--- a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/requestlog.mod
+++ /dev/null
@@ -1,64 +0,0 @@
-# ---------------------------------------------------------------------------
-# See the NOTICE file distributed with this work for additional
-# information regarding copyright ownership.
-#
-# This is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation; either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# This software is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this software; if not, write to the Free
-# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-# ---------------------------------------------------------------------------
-
-# DO NOT EDIT - See: https://jetty.org/docs/index.html
-
-[description]
-Logs requests using CustomRequestLog and AsyncRequestLogWriter.
-
-[tags]
-requestlog
-logging
-
-[depend]
-server
-
-[xml]
-etc/jetty-requestlog.xml
-
-[files]
-logs/
-
-[ini]
-jetty.requestlog.dir?=logs
-
-[ini-template]
-# tag::documentation[]
-## Format string
-# jetty.requestlog.formatString=%{client}a - %u %{dd/MMM/yyyy:HH:mm:ss ZZZ|GMT}t "%r" %s %O "%{Referer}i" "%{User-Agent}i"
-
-## Logging directory (relative to $jetty.base)
-# jetty.requestlog.dir=logs
-
-## File path
-# jetty.requestlog.filePath=${jetty.requestlog.dir}/yyyy_mm_dd.request.log
-
-## Date format for rollovered files (uses SimpleDateFormat syntax)
-# jetty.requestlog.filenameDateFormat=yyyy_MM_dd
-
-## How many days to retain old log files
-# jetty.requestlog.retainDays=90
-
-## Whether to append to existing file
-# jetty.requestlog.append=false
-
-## Timezone of the log file rollover
-# jetty.requestlog.timezone=GMT
-# end::documentation[]
diff --git a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/resources.mod b/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/resources.mod
deleted file mode 100644
index cf2e9a24ea44..000000000000
--- a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/resources.mod
+++ /dev/null
@@ -1,36 +0,0 @@
-# ---------------------------------------------------------------------------
-# See the NOTICE file distributed with this work for additional
-# information regarding copyright ownership.
-#
-# This is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation; either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# This software is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this software; if not, write to the Free
-# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-# ---------------------------------------------------------------------------
-
-# DO NOT EDIT - See: https://jetty.org/docs/index.html
-
-[description]
-# tag::description[]
-This module adds the `$JETTY_BASE/resources` directory to the server's classpath.
-# end::description[]
-
-[tags]
-classpath
-
-[lib]
-resources/
-
-[files]
-resources/
-
diff --git a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/security.mod b/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/security.mod
deleted file mode 100644
index 7a0646e13b8c..000000000000
--- a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/security.mod
+++ /dev/null
@@ -1,30 +0,0 @@
-# ---------------------------------------------------------------------------
-# See the NOTICE file distributed with this work for additional
-# information regarding copyright ownership.
-#
-# This is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation; either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# This software is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this software; if not, write to the Free
-# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-# ---------------------------------------------------------------------------
-
-# DO NOT EDIT - See: https://jetty.org/docs/index.html
-
-[description]
-Adds core security handling to the classpath.
-
-[depend]
-server
-
-[lib]
-lib/jetty-security-${jetty.version}.jar
diff --git a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/server.mod b/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/server.mod
deleted file mode 100644
index 4be55e5f8e95..000000000000
--- a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/server.mod
+++ /dev/null
@@ -1,147 +0,0 @@
-# ---------------------------------------------------------------------------
-# See the NOTICE file distributed with this work for additional
-# information regarding copyright ownership.
-#
-# This is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation; either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# This software is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this software; if not, write to the Free
-# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-# ---------------------------------------------------------------------------
-
-# DO NOT EDIT - See: https://jetty.org/docs/index.html
-
-[description]
-Enables and configures the Jetty server.
-This module does not enable any network protocol support.
-To enable a specific network protocol such as HTTP/1.1, you must enable the correspondent Jetty module.
-
-[after]
-jvm
-ext
-resources
-
-[depend]
-threadpool
-bytebufferpool
-logging
-
-[lib]
-lib/jetty-http-${jetty.version}.jar
-lib/jetty-server-${jetty.version}.jar
-lib/jetty-xml-${jetty.version}.jar
-lib/jetty-util-${jetty.version}.jar
-lib/jetty-io-${jetty.version}.jar
-
-[xml]
-etc/jetty.xml
-
-[ini-template]
-# tag::documentation-http-config[]
-### Common HTTP configuration
-## Scheme to use to build URIs for secure redirects
-# jetty.httpConfig.secureScheme=https
-
-## Port to use to build URIs for secure redirects
-# jetty.httpConfig.securePort=8443
-
-## Response content buffer size (in bytes)
-# jetty.httpConfig.outputBufferSize=32768
-
-## Max response content write length that is buffered (in bytes)
-# jetty.httpConfig.outputAggregationSize=8192
-
-## If HTTP/1.x persistent connections should be enabled
-# jetty.httpConfig.persistentConnectionsEnabled=true
-
-## Max request headers size (in bytes)
-# jetty.httpConfig.requestHeaderSize=8192
-
-## Max response headers size (in bytes)
-# jetty.httpConfig.responseHeaderSize=8192
-
-## Whether to send the Server: header
-# jetty.httpConfig.sendServerVersion=true
-
-## Whether to send the Date: header
-# jetty.httpConfig.sendDateHeader=false
-
-## Max per-connection header cache size (in nodes)
-# jetty.httpConfig.headerCacheSize=1024
-
-## Whether, for requests with content, delay dispatch until some content has arrived
-# jetty.httpConfig.delayDispatchUntilContent=true
-
-## Maximum number of error dispatches to prevent looping
-# jetty.httpConfig.maxErrorDispatches=10
-
-## Relative Redirect Locations allowed
-# jetty.httpConfig.relativeRedirectAllowed=true
-
-## Whether to use direct ByteBuffers for reading or writing
-# jetty.httpConfig.useInputDirectByteBuffers=true
-# jetty.httpConfig.useOutputDirectByteBuffers=true
-# end::documentation-http-config[]
-
-# tag::documentation-server-compliance[]
-## HTTP Compliance: RFC7230, RFC7230_LEGACY, RFC2616, RFC2616_LEGACY, LEGACY
-# jetty.httpConfig.compliance=RFC7230
-
-## URI Compliance: DEFAULT, LEGACY, RFC3986, RFC3986_UNAMBIGUOUS, UNSAFE
-# jetty.httpConfig.uriCompliance=DEFAULT
-
-## Cookie compliance mode for parsing request Cookie headers: RFC6265_STRICT, RFC6265, RFC6265_LEGACY, RFC2965, RFC2965_LEGACY
-# jetty.httpConfig.requestCookieCompliance=RFC6265
-
-## Cookie compliance mode for generating response Set-Cookie: RFC2965, RFC6265
-# jetty.httpConfig.responseCookieCompliance=RFC6265
-# end::documentation-server-compliance[]
-
-# tag::documentation-server-config[]
-### Server configuration
-## Whether ctrl+c on the console gracefully stops the Jetty server
-# jetty.server.stopAtShutdown=true
-
-## Timeout in ms to apply when stopping the server gracefully
-# jetty.server.stopTimeout=5000
-
-## Dump the state of the Jetty server, components, and webapps after startup
-# jetty.server.dumpAfterStart=false
-
-## The temporary directory used by the Jetty server and as a root for its contexts
-# jetty.server.tempDirectory=
-
-## Dump the state of the Jetty server, components, and webapps before shutdown
-# jetty.server.dumpBeforeStop=false
-# end::documentation-server-config[]
-
-# tag::documentation-scheduler-config[]
-### Server Scheduler Configuration
-## The scheduler thread name, defaults to "Scheduler-{hashCode()}" if blank.
-# jetty.scheduler.name=
-
-## Whether the server scheduler threads are daemon.
-# jetty.scheduler.daemon=false
-
-## The number of server scheduler threads.
-# jetty.scheduler.threads=1
-# end::documentation-scheduler-config[]
-
-## Whether the handlers of the ContextHandlerCollection can be updated once the server is started
-## If set to false, then -deploy module jetty.deploy.scanInterval should also be set to 0.
-# jetty.server.contexts.dynamic=true
-
-## Should the DefaultHandler serve the jetty favicon.ico from the root.
-# jetty.server.default.serveFavIcon=true
-
-## Should the DefaultHandler show a list of known contexts in a root 404 response.
-# jetty.server.default.showContexts=true
diff --git a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/sessions.mod b/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/sessions.mod
deleted file mode 100644
index a4cebd14eb42..000000000000
--- a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/sessions.mod
+++ /dev/null
@@ -1,47 +0,0 @@
-# ---------------------------------------------------------------------------
-# See the NOTICE file distributed with this work for additional
-# information regarding copyright ownership.
-#
-# This is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation; either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# This software is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this software; if not, write to the Free
-# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-# ---------------------------------------------------------------------------
-
-# DO NOT EDIT - See: https://jetty.org/docs/index.html
-
-[description]
-Enables session management.
-By enabling this module, it allows session management to be configured via the ini templates
-created or by enabling other session-cache or session-store modules.
-Without this module enabled,
-the server may still use sessions, but their management cannot be configured.
-
-[tags]
-session
-
-[depends]
-server
-
-[lib]
-lib/jetty-session-${jetty.version}.jar
-
-[xml]
-etc/sessions/id-manager.xml
-
-[ini-template]
-## The name to uniquely identify this server instance
-#jetty.sessionIdManager.workerName=node1
-
-## Period between runs of the session scavenger (in seconds)
-#jetty.sessionScavengeInterval.seconds=600
diff --git a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/ssl.mod b/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/ssl.mod
deleted file mode 100644
index 9b9595fea47b..000000000000
--- a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/ssl.mod
+++ /dev/null
@@ -1,158 +0,0 @@
-# ---------------------------------------------------------------------------
-# See the NOTICE file distributed with this work for additional
-# information regarding copyright ownership.
-#
-# This is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation; either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# This software is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this software; if not, write to the Free
-# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-# ---------------------------------------------------------------------------
-
-# DO NOT EDIT - See: https://jetty.org/docs/index.html
-
-[description]
-Enables a TLS (SSL) connector to support secure protocols.
-Secure HTTP/1.1 is provided by enabling the "https" module and secure HTTP/2 is provided by enabling the "http2" module.
-
-[tags]
-connector
-ssl
-internal
-
-[depend]
-server
-
-[xml]
-etc/jetty-ssl.xml
-etc/jetty-ssl-context.xml
-
-[ini-template]
-# tag::documentation-connector[]
-### TLS (SSL) Connector Configuration
-
-## The host/address to bind the connector to.
-# jetty.ssl.host=0.0.0.0
-
-## The port the connector listens on.
-# jetty.ssl.port=8443
-
-## The connector idle timeout, in milliseconds.
-# jetty.ssl.idleTimeout=30000
-
-## The number of acceptors (-1 picks a default value based on number of cores).
-# jetty.ssl.acceptors=1
-
-## The number of selectors (-1 picks a default value based on number of cores).
-# jetty.ssl.selectors=-1
-
-## The ServerSocketChannel accept queue backlog (0 picks the platform default).
-# jetty.ssl.acceptQueueSize=0
-
-## The thread priority delta to give to acceptor threads.
-# jetty.ssl.acceptorPriorityDelta=0
-
-## Whether to enable the SO_REUSEADDR socket option.
-# jetty.ssl.reuseAddress=true
-
-## Whether to enable the SO_REUSEPORT socket option.
-# jetty.ssl.reusePort=false
-
-## Whether to enable the TCP_NODELAY socket option on accepted sockets.
-# jetty.ssl.acceptedTcpNoDelay=true
-
-## The SO_RCVBUF socket option to set on accepted sockets.
-## A value of -1 indicates that the platform default is used.
-# jetty.ssl.acceptedReceiveBufferSize=-1
-
-## The SO_SNDBUF socket option to set on accepted sockets.
-## A value of -1 indicates that the platform default is used.
-# jetty.ssl.acceptedSendBufferSize=-1
-
-## Whether client SNI data is required for all secure connections.
-## When SNI is required, clients that do not send SNI data are rejected with an HTTP 400 response.
-# jetty.ssl.sniRequired=false
-
-## Whether client SNI data is checked to match CN and SAN in server certificates.
-## When SNI is checked, if the match fails the connection is rejected with an HTTP 400 response.
-# jetty.ssl.sniHostCheck=true
-
-## The max age, in seconds, for the Strict-Transport-Security response header.
-# jetty.ssl.stsMaxAgeSeconds=31536000
-
-## Whether to include the subdomain property in any Strict-Transport-Security header.
-# jetty.ssl.stsIncludeSubdomains=true
-# end::documentation-connector[]
-
-# tag::documentation-ssl-context[]
-### SslContextFactory Configuration
-## Note that OBF passwords are not secure, just protected from casual observation.
-
-## Whether client SNI data is required for all secure connections.
-## When SNI is required, clients that do not send SNI data are rejected with a TLS handshake error.
-# jetty.sslContext.sniRequired=false
-
-## The Endpoint Identification Algorithm.
-## Same as javax.net.ssl.SSLParameters#setEndpointIdentificationAlgorithm(String).
-# jetty.sslContext.endpointIdentificationAlgorithm=
-
-## The JSSE Provider.
-# jetty.sslContext.provider=
-
-## The KeyStore file path, either an absolute path or a relative path to $JETTY_BASE.
-# jetty.sslContext.keyStorePath=etc/keystore.p12
-
-## The TrustStore file path, either an absolute path or a relative path to $JETTY_BASE.
-# jetty.sslContext.trustStorePath=etc/keystore.p12
-
-## The KeyStore password.
-# jetty.sslContext.keyStorePassword=
-
-## The Keystore type.
-# jetty.sslContext.keyStoreType=PKCS12
-
-## The KeyStore provider.
-# jetty.sslContext.keyStoreProvider=
-
-## The KeyManager password.
-# jetty.sslContext.keyManagerPassword=
-
-## The TrustStore password.
-# jetty.sslContext.trustStorePassword=
-
-## The TrustStore type.
-# jetty.sslContext.trustStoreType=PKCS12
-
-## The TrustStore provider.
-# jetty.sslContext.trustStoreProvider=
-
-## Whether client certificate authentication is required.
-# jetty.sslContext.needClientAuth=false
-
-## Whether client certificate authentication is desired, but not required.
-# jetty.sslContext.wantClientAuth=false
-
-## Whether cipher order is significant.
-# jetty.sslContext.useCipherSuitesOrder=true
-
-## The SSLSession cache size.
-# jetty.sslContext.sslSessionCacheSize=-1
-
-## The SSLSession cache timeout (in seconds).
-# jetty.sslContext.sslSessionTimeout=-1
-
-## Whether TLS renegotiation is allowed.
-# jetty.sslContext.renegotiationAllowed=true
-
-## The max number of TLS renegotiations per connection.
-# jetty.sslContext.renegotiationLimit=5
-# end::documentation-ssl-context[]
diff --git a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/threadpool.mod b/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/threadpool.mod
deleted file mode 100644
index 681e970f7e6b..000000000000
--- a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/threadpool.mod
+++ /dev/null
@@ -1,61 +0,0 @@
-# ---------------------------------------------------------------------------
-# See the NOTICE file distributed with this work for additional
-# information regarding copyright ownership.
-#
-# This is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation; either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# This software is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this software; if not, write to the Free
-# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-# ---------------------------------------------------------------------------
-
-# DO NOT EDIT - See: https://jetty.org/docs/index.html
-
-[description]
-Enables and configures the Server ThreadPool.
-
-[depends]
-logging
-
-[provides]
-threadpool|default
-
-[xml]
-etc/jetty-threadpool.xml
-
-[ini-template]
-# tag::documentation[]
-## Thread name prefix.
-#jetty.threadPool.namePrefix=qtp
-
-## Minimum number of pooled threads.
-#jetty.threadPool.minThreads=10
-
-## Maximum number of pooled threads.
-#jetty.threadPool.maxThreads=200
-
-## Number of reserved threads (-1 for heuristic).
-#jetty.threadPool.reservedThreads=-1
-
-## Whether to use virtual threads, if the runtime supports them.
-## Deprecated, use Jetty module 'threadpool-virtual' instead.
-#jetty.threadPool.useVirtualThreads=false
-
-## Thread idle timeout (in milliseconds).
-#jetty.threadPool.idleTimeout=60000
-
-## The max number of idle threads that are evicted in one idleTimeout period.
-#jetty.threadPool.maxEvictCount=1
-
-## Whether to output a detailed dump.
-#jetty.threadPool.detailedDump=false
-# end::documentation[]
diff --git a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/xwiki-logging.mod b/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/xwiki-logging.mod
deleted file mode 100644
index 23b00e438f35..000000000000
--- a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/xwiki-logging.mod
+++ /dev/null
@@ -1,43 +0,0 @@
-# ---------------------------------------------------------------------------
-# See the NOTICE file distributed with this work for additional
-# information regarding copyright ownership.
-#
-# This is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation; either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# This software is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this software; if not, write to the Free
-# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-# ---------------------------------------------------------------------------
-
-[description]
-Base configuration for the jetty logging mechanism.
-Provides a ${jetty.base}/resources/jetty-logging.properties.
-
-[tags]
-logging
-
-[depend]
-logging/slf4j
-resources
-
-[provides]
-logging|default
-
-[files]
-basehome:modules/logging/jetty
-
-[lib]
-lib/logging/jetty-slf4j-impl-${jetty.version}.jar
-
-[ini]
-jetty.webapp.addHiddenClasses+=,org.eclipse.jetty.logging.
-jetty.webapp.addHiddenClasses+=,${jetty.home.uri}/lib/logging/
diff --git a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/xwiki.mod b/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/xwiki.mod
index df6f98b11487..feef54c548df 100644
--- a/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/xwiki.mod
+++ b/xwiki-platform-tools/xwiki-platform-tool-jetty/xwiki-platform-tool-jetty-resources/src/main/resources/jetty/modules/xwiki.mod
@@ -23,18 +23,13 @@
[depend]
ext
-resources
-server
-logging
+console-capture
+ee10-apache-jsp
+ee10-deploy
+ee10-websocket-jakarta
http
http-forwarded
-ee8-annotations
-ee8-deploy
-requestlog
-ee8-websocket-javax
-ee8-websocket-jetty
-ee8-apache-jsp
-console-capture
+work
[xml]
-etc/jetty-xwiki.xml
+etc/xwiki.xml
diff --git a/xwiki-platform-tools/xwiki-platform-tool-packager-plugin/pom.xml b/xwiki-platform-tools/xwiki-platform-tool-packager-plugin/pom.xml
index 81d850e0dfbd..fbb6e7c8715c 100644
--- a/xwiki-platform-tools/xwiki-platform-tool-packager-plugin/pom.xml
+++ b/xwiki-platform-tools/xwiki-platform-tool-packager-plugin/pom.xml
@@ -148,8 +148,8 @@
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
runtime
diff --git a/xwiki-platform-tools/xwiki-platform-tool-provision-plugin/pom.xml b/xwiki-platform-tools/xwiki-platform-tool-provision-plugin/pom.xml
index 5cde4bf9c137..3b2a031e852a 100644
--- a/xwiki-platform-tools/xwiki-platform-tool-provision-plugin/pom.xml
+++ b/xwiki-platform-tools/xwiki-platform-tool-provision-plugin/pom.xml
@@ -85,8 +85,8 @@
commons-httpclient
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
compile
diff --git a/xwiki-platform-tools/xwiki-platform-tool-rootwebapp/pom.xml b/xwiki-platform-tools/xwiki-platform-tool-rootwebapp/pom.xml
index deb53ee38e80..97f7a75b7ed5 100644
--- a/xwiki-platform-tools/xwiki-platform-tool-rootwebapp/pom.xml
+++ b/xwiki-platform-tools/xwiki-platform-tool-rootwebapp/pom.xml
@@ -36,8 +36,8 @@
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
diff --git a/xwiki-platform-tools/xwiki-platform-tool-rootwebapp/src/main/java/com/xpn/xwiki/XWikiRootServlet.java b/xwiki-platform-tools/xwiki-platform-tool-rootwebapp/src/main/java/com/xpn/xwiki/XWikiRootServlet.java
index 520be6492701..a8f5dc303995 100644
--- a/xwiki-platform-tools/xwiki-platform-tool-rootwebapp/src/main/java/com/xpn/xwiki/XWikiRootServlet.java
+++ b/xwiki-platform-tools/xwiki-platform-tool-rootwebapp/src/main/java/com/xpn/xwiki/XWikiRootServlet.java
@@ -21,10 +21,10 @@
import java.io.IOException;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServlet;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
/**
* The root servlet for XWiki. The purpose of this servlet is to respond to WebDAV requests correctly and to redirect
diff --git a/xwiki-platform-tools/xwiki-platform-tool-standards-validator/pom.xml b/xwiki-platform-tools/xwiki-platform-tool-standards-validator/pom.xml
index 6a7a9e97e084..24426dabd787 100644
--- a/xwiki-platform-tools/xwiki-platform-tool-standards-validator/pom.xml
+++ b/xwiki-platform-tools/xwiki-platform-tool-standards-validator/pom.xml
@@ -76,8 +76,8 @@
jetty-server
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
diff --git a/xwiki-platform-tools/xwiki-platform-tool-xmldoc-update-plugin/pom.xml b/xwiki-platform-tools/xwiki-platform-tool-xmldoc-update-plugin/pom.xml
index a607691f15a1..a306f0eaa83c 100644
--- a/xwiki-platform-tools/xwiki-platform-tool-xmldoc-update-plugin/pom.xml
+++ b/xwiki-platform-tools/xwiki-platform-tool-xmldoc-update-plugin/pom.xml
@@ -53,8 +53,8 @@
${commons.version}
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
compile
@@ -106,6 +106,7 @@
log4j-over-slf4j
runtime
+
org.xwiki.platform