mirror of
https://github.com/jenkinsci/jenkins.git
synced 2024-10-23 08:45:06 +08:00
[JENKINS-73278] Migrate core from EE 8 to EE 9 (#9672)
Co-authored-by: Kevin Guerroudj <91883215+Kevin-CB@users.noreply.github.com> Co-authored-by: Daniel Beck <1831569+daniel-beck@users.noreply.github.com>
This commit is contained in:
parent
4e9b6d8a3d
commit
7006cded64
11
.github/renovate.json
vendored
11
.github/renovate.json
vendored
@ -91,17 +91,6 @@
|
||||
"org.jfree:jfreechart"
|
||||
]
|
||||
},
|
||||
{
|
||||
"description": "Starting with 6.x, Spring requires Java 17 at a minimum.",
|
||||
"matchManagers": [
|
||||
"maven"
|
||||
],
|
||||
"allowedVersions": "<6.0.0",
|
||||
"matchPackageNames": [
|
||||
"org.springframework:spring-framework-bom",
|
||||
"org.springframework.security:spring-security-bom"
|
||||
]
|
||||
},
|
||||
{
|
||||
"description": "Starting with 7.x, Guice switches from javax.* to jakarta.* bindings. See https://github.com/google/guice/wiki/Guice700",
|
||||
"matchManagers": [
|
||||
|
@ -29,12 +29,9 @@
|
||||
<file url="file://$PROJECT_DIR$/war/src/main/java" charset="UTF-8" />
|
||||
<file url="file://$PROJECT_DIR$/war/src/main/resources" charset="UTF-8" />
|
||||
<file url="file://$PROJECT_DIR$/war/src/test/java" charset="UTF-8" />
|
||||
<file url="file://$PROJECT_DIR$/websocket/jetty10/src/filter/resources" charset="UTF-8" />
|
||||
<file url="file://$PROJECT_DIR$/websocket/jetty10/src/main/java" charset="UTF-8" />
|
||||
<file url="file://$PROJECT_DIR$/websocket/jetty10/src/main/resources" charset="UTF-8" />
|
||||
<file url="file://$PROJECT_DIR$/websocket/jetty12-ee8/src/filter/resources" charset="UTF-8" />
|
||||
<file url="file://$PROJECT_DIR$/websocket/jetty12-ee8/src/main/java" charset="UTF-8" />
|
||||
<file url="file://$PROJECT_DIR$/websocket/jetty12-ee8/src/main/resources" charset="UTF-8" />
|
||||
<file url="file://$PROJECT_DIR$/websocket/jetty12-ee9/src/filter/resources" charset="UTF-8" />
|
||||
<file url="file://$PROJECT_DIR$/websocket/jetty12-ee9/src/main/java" charset="UTF-8" />
|
||||
<file url="file://$PROJECT_DIR$/websocket/jetty12-ee9/src/main/resources" charset="UTF-8" />
|
||||
<file url="file://$PROJECT_DIR$/websocket/spi/src/filter/resources" charset="UTF-8" />
|
||||
<file url="file://$PROJECT_DIR$/websocket/spi/src/main/java" charset="UTF-8" />
|
||||
<file url="file://$PROJECT_DIR$/websocket/spi/src/main/resources" charset="UTF-8" />
|
||||
|
14
bom/pom.xml
14
bom/pom.xml
@ -39,7 +39,7 @@ THE SOFTWARE.
|
||||
|
||||
<properties>
|
||||
<commons-fileupload2.version>2.0.0-M2</commons-fileupload2.version>
|
||||
<stapler.version>1896.v8170998149d0</stapler.version>
|
||||
<stapler.version>1903.v994a_db_314d58</stapler.version>
|
||||
<groovy.version>2.4.21</groovy.version>
|
||||
</properties>
|
||||
|
||||
@ -62,15 +62,15 @@ THE SOFTWARE.
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-framework-bom</artifactId>
|
||||
<version>5.3.39</version>
|
||||
<version>6.1.12</version>
|
||||
<type>pom</type>
|
||||
<scope>import</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<!-- https://docs.spring.io/spring-security/site/docs/5.5.4/reference/html5/#getting-maven-no-boot -->
|
||||
<!-- https://docs.spring.io/spring-security/reference/6.3/getting-spring-security.html#getting-maven-no-boot -->
|
||||
<groupId>org.springframework.security</groupId>
|
||||
<artifactId>spring-security-bom</artifactId>
|
||||
<version>5.8.14</version>
|
||||
<version>6.3.3</version>
|
||||
<type>pom</type>
|
||||
<scope>import</scope>
|
||||
</dependency>
|
||||
@ -154,12 +154,12 @@ THE SOFTWARE.
|
||||
<dependency>
|
||||
<groupId>jakarta.servlet</groupId>
|
||||
<artifactId>jakarta.servlet-api</artifactId>
|
||||
<version>4.0.4</version>
|
||||
<version>5.0.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>jakarta.servlet.jsp.jstl</groupId>
|
||||
<artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
|
||||
<version>1.2.7</version>
|
||||
<version>2.0.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>jaxen</groupId>
|
||||
@ -295,7 +295,7 @@ THE SOFTWARE.
|
||||
<dependency>
|
||||
<groupId>org.jvnet.hudson</groupId>
|
||||
<artifactId>commons-jelly-tags-define</artifactId>
|
||||
<version>1.1-jenkins-20240510</version>
|
||||
<version>1.1-jenkins-20240903</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.jvnet.localizer</groupId>
|
||||
|
20
core/pom.xml
20
core/pom.xml
@ -217,6 +217,20 @@ THE SOFTWARE.
|
||||
<!-- needed by Jelly -->
|
||||
<groupId>jakarta.servlet.jsp.jstl</groupId>
|
||||
<artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>jakarta.el</groupId>
|
||||
<artifactId>jakarta.el-api</artifactId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<groupId>jakarta.servlet</groupId>
|
||||
<artifactId>jakarta.servlet-api</artifactId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<groupId>jakarta.xml.bind</groupId>
|
||||
<artifactId>jakarta.xml.bind-api</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>jaxen</groupId>
|
||||
@ -288,7 +302,7 @@ THE SOFTWARE.
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.commons</groupId>
|
||||
<artifactId>commons-fileupload2-javax</artifactId>
|
||||
<artifactId>commons-fileupload2-jakarta-servlet5</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.codehaus.groovy</groupId>
|
||||
@ -427,6 +441,10 @@ THE SOFTWARE.
|
||||
<groupId>org.springframework.security</groupId>
|
||||
<artifactId>spring-security-web</artifactId>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>io.micrometer</groupId>
|
||||
<artifactId>micrometer-observation</artifactId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-jcl</artifactId>
|
||||
|
@ -145,7 +145,7 @@ public class DescriptorExtensionList<T extends Describable<T>, D extends Descrip
|
||||
if (config.isNullObject())
|
||||
return null; // none was selected
|
||||
int idx = config.getInt("value");
|
||||
return get(idx).newInstance(Stapler.getCurrentRequest(), config);
|
||||
return get(idx).newInstance(Stapler.getCurrentRequest2(), config);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -12,7 +12,7 @@ import org.apache.commons.jelly.expression.ExpressionFactory;
|
||||
import org.apache.commons.jelly.expression.ExpressionSupport;
|
||||
import org.apache.commons.jexl.JexlContext;
|
||||
import org.kohsuke.stapler.Stapler;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.springframework.security.access.AccessDeniedException;
|
||||
|
||||
/**
|
||||
@ -78,7 +78,7 @@ final class ExpressionFactory2 implements ExpressionFactory {
|
||||
// let the security exception pass through
|
||||
throw e;
|
||||
} catch (Exception e) {
|
||||
StaplerRequest currentRequest = Stapler.getCurrentRequest();
|
||||
StaplerRequest2 currentRequest = Stapler.getCurrentRequest2();
|
||||
LOGGER.log(Level.WARNING, "Caught exception evaluating: " + expression + " in " + (currentRequest != null ? currentRequest.getOriginalRequestURI() : "?") + ". Reason: " + e, e);
|
||||
return null;
|
||||
} finally {
|
||||
|
@ -3510,7 +3510,7 @@ public final class FilePath implements SerializableOnlyOverRemoting {
|
||||
}
|
||||
|
||||
private static void checkPermissionForValidate() {
|
||||
AccessControlled subject = Stapler.getCurrentRequest().findAncestorObject(AbstractProject.class);
|
||||
AccessControlled subject = Stapler.getCurrentRequest2().findAncestorObject(AbstractProject.class);
|
||||
if (subject == null)
|
||||
Jenkins.get().checkPermission(Jenkins.MANAGE);
|
||||
else
|
||||
|
@ -95,6 +95,14 @@ import hudson.util.jna.GNUCLibrary;
|
||||
import hudson.views.MyViewsTabBar;
|
||||
import hudson.views.ViewsTabBar;
|
||||
import hudson.widgets.RenderOnDemandClosure;
|
||||
import io.jenkins.servlet.ServletExceptionWrapper;
|
||||
import io.jenkins.servlet.http.CookieWrapper;
|
||||
import io.jenkins.servlet.http.HttpServletRequestWrapper;
|
||||
import io.jenkins.servlet.http.HttpServletResponseWrapper;
|
||||
import jakarta.servlet.ServletException;
|
||||
import jakarta.servlet.http.Cookie;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.PrintStream;
|
||||
@ -148,10 +156,6 @@ import java.util.logging.Logger;
|
||||
import java.util.logging.SimpleFormatter;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.stream.Collectors;
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.Cookie;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import jenkins.console.ConsoleUrlProvider;
|
||||
import jenkins.model.GlobalConfiguration;
|
||||
import jenkins.model.GlobalConfigurationCategory;
|
||||
@ -176,7 +180,9 @@ import org.kohsuke.stapler.Ancestor;
|
||||
import org.kohsuke.stapler.RawHtmlArgument;
|
||||
import org.kohsuke.stapler.Stapler;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.kohsuke.stapler.StaplerResponse;
|
||||
import org.kohsuke.stapler.StaplerResponse2;
|
||||
import org.springframework.security.access.AccessDeniedException;
|
||||
|
||||
/**
|
||||
@ -276,8 +282,8 @@ public class Functions {
|
||||
}
|
||||
|
||||
public static void initPageVariables(JellyContext context) {
|
||||
StaplerRequest currentRequest = Stapler.getCurrentRequest();
|
||||
currentRequest.getWebApp().getDispatchValidator().allowDispatch(currentRequest, Stapler.getCurrentResponse());
|
||||
StaplerRequest2 currentRequest = Stapler.getCurrentRequest2();
|
||||
currentRequest.getWebApp().getDispatchValidator().allowDispatch(currentRequest, Stapler.getCurrentResponse2());
|
||||
String rootURL = currentRequest.getContextPath();
|
||||
|
||||
Functions h = new Functions();
|
||||
@ -372,7 +378,10 @@ public class Functions {
|
||||
return buf.toString();
|
||||
}
|
||||
|
||||
public static RunUrl decompose(StaplerRequest req) {
|
||||
/**
|
||||
* @since TODO
|
||||
*/
|
||||
public static RunUrl decompose(StaplerRequest2 req) {
|
||||
List<Ancestor> ancestors = req.getAncestors();
|
||||
|
||||
// find the first and last Run instances
|
||||
@ -405,12 +414,20 @@ public class Functions {
|
||||
return new RunUrl((Run) f.getObject(), head, base, rest);
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #decompose(StaplerRequest2)}
|
||||
*/
|
||||
@Deprecated
|
||||
public static RunUrl decompose(StaplerRequest req) {
|
||||
return decompose(StaplerRequest.toStaplerRequest2(req));
|
||||
}
|
||||
|
||||
/**
|
||||
* If we know the user's screen resolution, return it. Otherwise null.
|
||||
* @since 1.213
|
||||
*/
|
||||
public static Area getScreenResolution() {
|
||||
Cookie res = Functions.getCookie(Stapler.getCurrentRequest(), "screenResolution");
|
||||
Cookie res = Functions.getCookie(Stapler.getCurrentRequest2(), "screenResolution");
|
||||
if (res != null)
|
||||
return Area.parse(res.getValue());
|
||||
return null;
|
||||
@ -592,6 +609,9 @@ public class Functions {
|
||||
return list;
|
||||
}
|
||||
|
||||
/**
|
||||
* @since TODO
|
||||
*/
|
||||
public static Cookie getCookie(HttpServletRequest req, String name) {
|
||||
Cookie[] cookies = req.getCookies();
|
||||
if (cookies != null) {
|
||||
@ -604,12 +624,31 @@ public class Functions {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #getCookie(HttpServletRequest, String)}
|
||||
*/
|
||||
@Deprecated
|
||||
public static javax.servlet.http.Cookie getCookie(javax.servlet.http.HttpServletRequest req, String name) {
|
||||
return CookieWrapper.fromJakartaServletHttpCookie(getCookie(HttpServletRequestWrapper.toJakartaHttpServletRequest(req), name));
|
||||
}
|
||||
|
||||
/**
|
||||
* @since TODO
|
||||
*/
|
||||
public static String getCookie(HttpServletRequest req, String name, String defaultValue) {
|
||||
Cookie c = getCookie(req, name);
|
||||
if (c == null || c.getValue() == null) return defaultValue;
|
||||
return c.getValue();
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #getCookie(HttpServletRequest, String, String)}
|
||||
*/
|
||||
@Deprecated
|
||||
public static String getCookie(javax.servlet.http.HttpServletRequest req, String name, String defaultValue) {
|
||||
return getCookie(HttpServletRequestWrapper.toJakartaHttpServletRequest(req), name, defaultValue);
|
||||
}
|
||||
|
||||
private static final Pattern ICON_SIZE = Pattern.compile("\\d+x\\d+");
|
||||
|
||||
@Restricted(NoExternalUse.class)
|
||||
@ -713,8 +752,10 @@ public class Functions {
|
||||
* Finds the given object in the ancestor list and returns its URL.
|
||||
* This is used to determine the "current" URL assigned to the given object,
|
||||
* so that one can compute relative URLs from it.
|
||||
*
|
||||
* @since TODO
|
||||
*/
|
||||
public static String getNearestAncestorUrl(StaplerRequest req, Object it) {
|
||||
public static String getNearestAncestorUrl(StaplerRequest2 req, Object it) {
|
||||
List list = req.getAncestors();
|
||||
for (int i = list.size() - 1; i >= 0; i--) {
|
||||
Ancestor anc = (Ancestor) list.get(i);
|
||||
@ -724,11 +765,19 @@ public class Functions {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #getNearestAncestorUrl(StaplerRequest2, Object)}
|
||||
*/
|
||||
@Deprecated
|
||||
public static String getNearestAncestorUrl(StaplerRequest req, Object it) {
|
||||
return getNearestAncestorUrl(StaplerRequest.toStaplerRequest2(req), it);
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds the inner-most {@link SearchableModelObject} in scope.
|
||||
*/
|
||||
public static String getSearchURL() {
|
||||
List list = Stapler.getCurrentRequest().getAncestors();
|
||||
List list = Stapler.getCurrentRequest2().getAncestors();
|
||||
for (int i = list.size() - 1; i >= 0; i--) {
|
||||
Ancestor anc = (Ancestor) list.get(i);
|
||||
if (anc.getObject() instanceof SearchableModelObject)
|
||||
@ -888,7 +937,7 @@ public class Functions {
|
||||
if (object instanceof AccessControlled)
|
||||
checkPermission((AccessControlled) object, permission);
|
||||
else {
|
||||
List<Ancestor> ancs = Stapler.getCurrentRequest().getAncestors();
|
||||
List<Ancestor> ancs = Stapler.getCurrentRequest2().getAncestors();
|
||||
for (Ancestor anc : Iterators.reverse(ancs)) {
|
||||
Object o = anc.getObject();
|
||||
if (o instanceof AccessControlled) {
|
||||
@ -920,7 +969,7 @@ public class Functions {
|
||||
if (object instanceof AccessControlled)
|
||||
return ((AccessControlled) object).hasPermission(permission);
|
||||
else {
|
||||
List<Ancestor> ancs = Stapler.getCurrentRequest().getAncestors();
|
||||
List<Ancestor> ancs = Stapler.getCurrentRequest2().getAncestors();
|
||||
for (Ancestor anc : Iterators.reverse(ancs)) {
|
||||
Object o = anc.getObject();
|
||||
if (o instanceof AccessControlled) {
|
||||
@ -931,10 +980,13 @@ public class Functions {
|
||||
}
|
||||
}
|
||||
|
||||
public static void adminCheck(StaplerRequest req, StaplerResponse rsp, Object required, Permission permission) throws IOException, ServletException {
|
||||
/**
|
||||
* @since TODO
|
||||
*/
|
||||
public static void adminCheck(StaplerRequest2 req, StaplerResponse2 rsp, Object required, Permission permission) throws IOException, ServletException {
|
||||
// this is legacy --- all views should be eventually converted to
|
||||
// the permission based model.
|
||||
if (required != null && !Hudson.adminCheck(req, rsp)) {
|
||||
if (required != null && !Hudson.adminCheck(StaplerRequest.fromStaplerRequest2(req), StaplerResponse.fromStaplerResponse2(rsp))) {
|
||||
// check failed. commit the FORBIDDEN response, then abort.
|
||||
rsp.setStatus(HttpServletResponse.SC_FORBIDDEN);
|
||||
rsp.getOutputStream().close();
|
||||
@ -946,10 +998,24 @@ public class Functions {
|
||||
checkPermission(permission);
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #adminCheck(StaplerRequest2, StaplerResponse2, Object, Permission)}
|
||||
*/
|
||||
@Deprecated
|
||||
public static void adminCheck(StaplerRequest req, StaplerResponse rsp, Object required, Permission permission) throws IOException, javax.servlet.ServletException {
|
||||
try {
|
||||
adminCheck(StaplerRequest.toStaplerRequest2(req), StaplerResponse.toStaplerResponse2(rsp), required, permission);
|
||||
} catch (ServletException e) {
|
||||
throw ServletExceptionWrapper.fromJakartaServletException(e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Infers the hudson installation URL from the given request.
|
||||
*
|
||||
* @since TODO
|
||||
*/
|
||||
public static String inferHudsonURL(StaplerRequest req) {
|
||||
public static String inferHudsonURL(StaplerRequest2 req) {
|
||||
String rootUrl = Jenkins.get().getRootUrl();
|
||||
if (rootUrl != null)
|
||||
// prefer the one explicitly configured, to work with load-balancer, frontend, etc.
|
||||
@ -963,6 +1029,14 @@ public class Functions {
|
||||
return buf.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #inferHudsonURL(StaplerRequest2)}
|
||||
*/
|
||||
@Deprecated
|
||||
public static String inferHudsonURL(StaplerRequest req) {
|
||||
return inferHudsonURL(StaplerRequest.toStaplerRequest2(req));
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the link to be displayed in the footer of the UI.
|
||||
*/
|
||||
@ -1226,7 +1300,7 @@ public class Functions {
|
||||
if (object instanceof AccessControlled)
|
||||
return hasAnyPermission((AccessControlled) object, permissions);
|
||||
else {
|
||||
AccessControlled ac = Stapler.getCurrentRequest().findAncestorObject(AccessControlled.class);
|
||||
AccessControlled ac = Stapler.getCurrentRequest2().findAncestorObject(AccessControlled.class);
|
||||
if (ac != null) {
|
||||
return hasAnyPermission(ac, permissions);
|
||||
}
|
||||
@ -1264,7 +1338,7 @@ public class Functions {
|
||||
if (object instanceof AccessControlled)
|
||||
checkAnyPermission((AccessControlled) object, permissions);
|
||||
else {
|
||||
List<Ancestor> ancs = Stapler.getCurrentRequest().getAncestors();
|
||||
List<Ancestor> ancs = Stapler.getCurrentRequest2().getAncestors();
|
||||
for (Ancestor anc : Iterators.reverse(ancs)) {
|
||||
Object o = anc.getObject();
|
||||
if (o instanceof AccessControlled) {
|
||||
@ -1335,7 +1409,7 @@ public class Functions {
|
||||
Map<Object, String> ancestors = new HashMap<>();
|
||||
View view = null;
|
||||
|
||||
StaplerRequest request = Stapler.getCurrentRequest();
|
||||
StaplerRequest2 request = Stapler.getCurrentRequest2();
|
||||
for (Ancestor a : request.getAncestors()) {
|
||||
ancestors.put(a.getObject(), a.getRelativePath());
|
||||
if (a.getObject() instanceof View)
|
||||
@ -1681,7 +1755,7 @@ public class Functions {
|
||||
if (it instanceof Descriptor)
|
||||
clazz = ((Descriptor) it).clazz;
|
||||
|
||||
String buf = Stapler.getCurrentRequest().getContextPath() + Jenkins.VIEW_RESOURCE_PATH + '/' +
|
||||
String buf = Stapler.getCurrentRequest2().getContextPath() + Jenkins.VIEW_RESOURCE_PATH + '/' +
|
||||
clazz.getName().replace('.', '/').replace('$', '/') +
|
||||
'/' + path;
|
||||
return buf;
|
||||
@ -1689,7 +1763,7 @@ public class Functions {
|
||||
|
||||
public static boolean hasView(Object it, String path) throws IOException {
|
||||
if (it == null) return false;
|
||||
return Stapler.getCurrentRequest().getView(it, path) != null;
|
||||
return Stapler.getCurrentRequest2().getView(it, path) != null;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1900,10 +1974,10 @@ public class Functions {
|
||||
return null;
|
||||
}
|
||||
if (urlName.startsWith("/"))
|
||||
return joinPath(Stapler.getCurrentRequest().getContextPath(), urlName);
|
||||
return joinPath(Stapler.getCurrentRequest2().getContextPath(), urlName);
|
||||
else
|
||||
// relative URL name
|
||||
return joinPath(Stapler.getCurrentRequest().getContextPath() + '/' + itUrl, urlName);
|
||||
return joinPath(Stapler.getCurrentRequest2().getContextPath() + '/' + itUrl, urlName);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1966,7 +2040,7 @@ public class Functions {
|
||||
} catch (MalformedURLException e) {
|
||||
// fall back to HTTP request
|
||||
}
|
||||
return Stapler.getCurrentRequest().getServerName();
|
||||
return Stapler.getCurrentRequest2().getServerName();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -2004,7 +2078,7 @@ public class Functions {
|
||||
* Used in {@code task.jelly} to decide if the page should be highlighted.
|
||||
*/
|
||||
public boolean hyperlinkMatchesCurrentPage(String href) {
|
||||
String url = Stapler.getCurrentRequest().getRequestURL().toString();
|
||||
String url = Stapler.getCurrentRequest2().getRequestURL().toString();
|
||||
if (href == null || href.length() <= 1) return ".".equals(href) && url.endsWith("/");
|
||||
url = URLDecoder.decode(url, StandardCharsets.UTF_8);
|
||||
href = URLDecoder.decode(href, StandardCharsets.UTF_8);
|
||||
@ -2063,12 +2137,23 @@ public class Functions {
|
||||
return CrumbIssuer.all();
|
||||
}
|
||||
|
||||
public static String getCrumb(StaplerRequest req) {
|
||||
/**
|
||||
* @since TODO
|
||||
*/
|
||||
public static String getCrumb(StaplerRequest2 req) {
|
||||
Jenkins h = Jenkins.getInstanceOrNull();
|
||||
CrumbIssuer issuer = h != null ? h.getCrumbIssuer() : null;
|
||||
return issuer != null ? issuer.getCrumb(req) : "";
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #getCrumb(StaplerRequest2)}
|
||||
*/
|
||||
@Deprecated
|
||||
public static String getCrumb(StaplerRequest req) {
|
||||
return getCrumb(req != null ? StaplerRequest.toStaplerRequest2(req) : null);
|
||||
}
|
||||
|
||||
public static String getCrumbRequestField() {
|
||||
Jenkins h = Jenkins.getInstanceOrNull();
|
||||
CrumbIssuer issuer = h != null ? h.getCrumbIssuer() : null;
|
||||
@ -2081,7 +2166,7 @@ public class Functions {
|
||||
|
||||
public static Locale getCurrentLocale() {
|
||||
Locale locale = null;
|
||||
StaplerRequest req = Stapler.getCurrentRequest();
|
||||
StaplerRequest2 req = Stapler.getCurrentRequest2();
|
||||
if (req != null)
|
||||
locale = req.getLocale();
|
||||
if (locale == null)
|
||||
@ -2094,7 +2179,7 @@ public class Functions {
|
||||
* from {@link ConsoleAnnotatorFactory}s and {@link ConsoleAnnotationDescriptor}s.
|
||||
*/
|
||||
public static String generateConsoleAnnotationScriptAndStylesheet() {
|
||||
String cp = Stapler.getCurrentRequest().getContextPath() + Jenkins.RESOURCE_PATH;
|
||||
String cp = Stapler.getCurrentRequest2().getContextPath() + Jenkins.RESOURCE_PATH;
|
||||
StringBuilder buf = new StringBuilder();
|
||||
for (ConsoleAnnotatorFactory f : ConsoleAnnotatorFactory.all()) {
|
||||
String path = cp + "/extensionList/" + ConsoleAnnotatorFactory.class.getName() + "/" + f.getClass().getName();
|
||||
@ -2147,7 +2232,7 @@ public class Functions {
|
||||
}
|
||||
|
||||
/* Mask from Extended Read */
|
||||
StaplerRequest req = Stapler.getCurrentRequest();
|
||||
StaplerRequest2 req = Stapler.getCurrentRequest2();
|
||||
if (o instanceof Secret || Secret.BLANK_NONSECRET_PASSWORD_FIELDS_WITHOUT_ITEM_CONFIGURE) {
|
||||
if (req != null) {
|
||||
Item item = req.findAncestorObject(Item.class);
|
||||
@ -2243,15 +2328,17 @@ public class Functions {
|
||||
|
||||
@Deprecated
|
||||
public static String createRenderOnDemandProxy(JellyContext context, String attributesToCapture) {
|
||||
return Stapler.getCurrentRequest().createJavaScriptProxy(new RenderOnDemandClosure(context, attributesToCapture));
|
||||
return Stapler.getCurrentRequest2().createJavaScriptProxy(new RenderOnDemandClosure(context, attributesToCapture));
|
||||
}
|
||||
|
||||
/**
|
||||
* Called from renderOnDemand.jelly to generate the parameters for the proxy object generation.
|
||||
*
|
||||
* @since TODO
|
||||
*/
|
||||
@Restricted(NoExternalUse.class)
|
||||
public static StaplerRequest.RenderOnDemandParameters createRenderOnDemandProxyParameters(JellyContext context, String attributesToCapture) {
|
||||
return Stapler.getCurrentRequest().createJavaScriptProxyParameters(new RenderOnDemandClosure(context, attributesToCapture));
|
||||
public static StaplerRequest2.RenderOnDemandParameters createRenderOnDemandProxyParameters(JellyContext context, String attributesToCapture) {
|
||||
return Stapler.getCurrentRequest2().createJavaScriptProxyParameters(new RenderOnDemandClosure(context, attributesToCapture));
|
||||
}
|
||||
|
||||
public static String getCurrentDescriptorByNameUrl() {
|
||||
@ -2260,18 +2347,18 @@ public class Functions {
|
||||
|
||||
public static String setCurrentDescriptorByNameUrl(String value) {
|
||||
String o = getCurrentDescriptorByNameUrl();
|
||||
Stapler.getCurrentRequest().setAttribute("currentDescriptorByNameUrl", value);
|
||||
Stapler.getCurrentRequest2().setAttribute("currentDescriptorByNameUrl", value);
|
||||
|
||||
return o;
|
||||
}
|
||||
|
||||
public static void restoreCurrentDescriptorByNameUrl(String old) {
|
||||
Stapler.getCurrentRequest().setAttribute("currentDescriptorByNameUrl", old);
|
||||
Stapler.getCurrentRequest2().setAttribute("currentDescriptorByNameUrl", old);
|
||||
}
|
||||
|
||||
public static List<String> getRequestHeaders(String name) {
|
||||
List<String> r = new ArrayList<>();
|
||||
Enumeration e = Stapler.getCurrentRequest().getHeaders(name);
|
||||
Enumeration e = Stapler.getCurrentRequest2().getHeaders(name);
|
||||
while (e.hasMoreElements()) {
|
||||
r.add(e.nextElement().toString());
|
||||
}
|
||||
@ -2366,6 +2453,7 @@ public class Functions {
|
||||
* Advertises the minimum set of HTTP headers that assist programmatic
|
||||
* discovery of Jenkins.
|
||||
*/
|
||||
@SuppressFBWarnings(value = "UC_USELESS_VOID_METHOD", justification = "TODO needs triage")
|
||||
public static void advertiseHeaders(HttpServletResponse rsp) {
|
||||
Jenkins j = Jenkins.getInstanceOrNull();
|
||||
if (j != null) {
|
||||
@ -2375,6 +2463,14 @@ public class Functions {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #advertiseHeaders(HttpServletResponse)}
|
||||
*/
|
||||
@Deprecated
|
||||
public static void advertiseHeaders(javax.servlet.http.HttpServletResponse rsp) {
|
||||
advertiseHeaders(HttpServletResponseWrapper.toJakartaHttpServletResponse(rsp));
|
||||
}
|
||||
|
||||
@Restricted(NoExternalUse.class) // for actions.jelly and ContextMenu.add
|
||||
public static boolean isContextMenuVisible(Action a) {
|
||||
if (a instanceof ModelObjectWithContextMenu.ContextMenuVisibility) {
|
||||
@ -2449,7 +2545,7 @@ public class Functions {
|
||||
return iconGuess;
|
||||
}
|
||||
|
||||
StaplerRequest currentRequest = Stapler.getCurrentRequest();
|
||||
StaplerRequest2 currentRequest = Stapler.getCurrentRequest2();
|
||||
String rootURL = currentRequest.getContextPath();
|
||||
Icon iconMetadata = tryGetIcon(iconGuess);
|
||||
|
||||
|
@ -26,11 +26,12 @@ package hudson;
|
||||
|
||||
import edu.umd.cs.findbugs.annotations.CheckForNull;
|
||||
import edu.umd.cs.findbugs.annotations.NonNull;
|
||||
import io.jenkins.servlet.ServletContextWrapper;
|
||||
import jakarta.servlet.ServletContext;
|
||||
import java.io.File;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.logging.Logger;
|
||||
import javax.servlet.ServletContext;
|
||||
import jenkins.model.Jenkins;
|
||||
import jenkins.util.SystemProperties;
|
||||
|
||||
@ -49,12 +50,20 @@ public class LocalPluginManager extends PluginManager {
|
||||
super(context, new File(rootDir, "plugins"));
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #LocalPluginManager(ServletContext, File)}
|
||||
*/
|
||||
@Deprecated
|
||||
public LocalPluginManager(@CheckForNull javax.servlet.ServletContext context, @NonNull File rootDir) {
|
||||
this(context != null ? ServletContextWrapper.toJakartaServletContext(context) : null, rootDir);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new LocalPluginManager
|
||||
* @param jenkins Jenkins instance that will use the plugin manager.
|
||||
*/
|
||||
public LocalPluginManager(@NonNull Jenkins jenkins) {
|
||||
this(jenkins.servletContext, jenkins.getRootDir());
|
||||
this(jenkins.getServletContext(), jenkins.getRootDir());
|
||||
}
|
||||
|
||||
/**
|
||||
@ -62,7 +71,7 @@ public class LocalPluginManager extends PluginManager {
|
||||
* @param rootDir Jenkins home directory.
|
||||
*/
|
||||
public LocalPluginManager(@NonNull File rootDir) {
|
||||
this(null, rootDir);
|
||||
this((ServletContext) null, rootDir);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -33,25 +33,29 @@ import hudson.model.Descriptor.FormException;
|
||||
import hudson.model.Saveable;
|
||||
import hudson.model.listeners.ItemListener;
|
||||
import hudson.model.listeners.SaveableListener;
|
||||
import io.jenkins.servlet.ServletExceptionWrapper;
|
||||
import jakarta.servlet.ServletContext;
|
||||
import jakarta.servlet.ServletException;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.net.URL;
|
||||
import java.util.Locale;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.logging.Logger;
|
||||
import javax.servlet.ServletContext;
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import jenkins.model.GlobalConfiguration;
|
||||
import jenkins.model.Jenkins;
|
||||
import jenkins.model.Loadable;
|
||||
import jenkins.security.stapler.StaplerNotDispatchable;
|
||||
import jenkins.util.SystemProperties;
|
||||
import net.sf.json.JSONObject;
|
||||
import org.kohsuke.accmod.Restricted;
|
||||
import org.kohsuke.accmod.restrictions.NoExternalUse;
|
||||
import org.kohsuke.stapler.StaplerProxy;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.kohsuke.stapler.StaplerResponse;
|
||||
import org.kohsuke.stapler.StaplerResponse2;
|
||||
|
||||
/**
|
||||
* Base class of Hudson plugin.
|
||||
@ -92,11 +96,11 @@ public abstract class Plugin implements Loadable, Saveable, StaplerProxy {
|
||||
/**
|
||||
* You do not need to create custom subtypes:
|
||||
* <ul>
|
||||
* <li>{@code config.jelly}, {@link #configure(StaplerRequest, JSONObject)}, {@link #load}, and {@link #save}
|
||||
* <li>{@code config.jelly}, {@link #configure(StaplerRequest2, JSONObject)}, {@link #load}, and {@link #save}
|
||||
* can be replaced by {@link GlobalConfiguration}
|
||||
* <li>{@link #start} and {@link #postInitialize} can be replaced by {@link Initializer} (or {@link ItemListener#onLoaded})
|
||||
* <li>{@link #stop} can be replaced by {@link Terminator}
|
||||
* <li>{@link #setServletContext} can be replaced by {@link Jenkins#servletContext}
|
||||
* <li>{@link #setServletContext} can be replaced by {@link Jenkins#getServletContext}
|
||||
* </ul>
|
||||
* Note that every plugin gets a {@link DummyImpl} by default,
|
||||
* which will still route the URL space, serve {@link #getWrapper}, and so on.
|
||||
@ -189,10 +193,10 @@ public abstract class Plugin implements Loadable, Saveable, StaplerProxy {
|
||||
|
||||
/**
|
||||
* @since 1.233
|
||||
* @deprecated as of 1.305 override {@link #configure(StaplerRequest,JSONObject)} instead
|
||||
* @deprecated as of 1.305 override {@link #configure(StaplerRequest2,JSONObject)} instead
|
||||
*/
|
||||
@Deprecated
|
||||
public void configure(JSONObject formData) throws IOException, ServletException, FormException {
|
||||
public void configure(JSONObject formData) throws IOException, javax.servlet.ServletException, FormException {
|
||||
}
|
||||
|
||||
/**
|
||||
@ -220,16 +224,60 @@ public abstract class Plugin implements Loadable, Saveable, StaplerProxy {
|
||||
* <p>
|
||||
* If you are using this method, you'll likely be interested in
|
||||
* using {@link #save()} and {@link #load()}.
|
||||
* @since TODO
|
||||
*/
|
||||
public void configure(StaplerRequest2 req, JSONObject formData) throws IOException, ServletException, FormException {
|
||||
try {
|
||||
if (Util.isOverridden(Plugin.class, getClass(), "configure", StaplerRequest.class, JSONObject.class)) {
|
||||
configure(StaplerRequest.fromStaplerRequest2(req), formData);
|
||||
} else {
|
||||
configure(formData);
|
||||
}
|
||||
} catch (javax.servlet.ServletException e) {
|
||||
throw ServletExceptionWrapper.toJakartaServletException(e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #configure(StaplerRequest2, JSONObject)}
|
||||
* @since 1.305
|
||||
*/
|
||||
public void configure(StaplerRequest req, JSONObject formData) throws IOException, ServletException, FormException {
|
||||
@Deprecated
|
||||
public void configure(StaplerRequest req, JSONObject formData) throws IOException, javax.servlet.ServletException, FormException {
|
||||
configure(formData);
|
||||
}
|
||||
|
||||
/**
|
||||
* This method serves static resources in the plugin under {@code hudson/plugin/SHORTNAME}.
|
||||
*
|
||||
* @since TODO
|
||||
*/
|
||||
public void doDynamic(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException {
|
||||
public void doDynamic(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException {
|
||||
if (Util.isOverridden(Plugin.class, getClass(), "doDynamic", StaplerRequest.class, StaplerResponse.class)) {
|
||||
try {
|
||||
doDynamic(StaplerRequest.fromStaplerRequest2(req), StaplerResponse.fromStaplerResponse2(rsp));
|
||||
} catch (javax.servlet.ServletException e) {
|
||||
throw ServletExceptionWrapper.toJakartaServletException(e);
|
||||
}
|
||||
} else {
|
||||
doDynamicImpl(req, rsp);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #doDynamic(StaplerRequest2, StaplerResponse2)}
|
||||
*/
|
||||
@Deprecated
|
||||
@StaplerNotDispatchable
|
||||
public void doDynamic(StaplerRequest req, StaplerResponse rsp) throws IOException, javax.servlet.ServletException {
|
||||
try {
|
||||
doDynamicImpl(StaplerRequest.toStaplerRequest2(req), StaplerResponse.toStaplerResponse2(rsp));
|
||||
} catch (ServletException e) {
|
||||
throw ServletExceptionWrapper.fromJakartaServletException(e);
|
||||
}
|
||||
}
|
||||
|
||||
private void doDynamicImpl(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException {
|
||||
String path = req.getRestOfPath();
|
||||
|
||||
String pathUC = path.toUpperCase(Locale.ENGLISH);
|
||||
|
@ -66,6 +66,10 @@ import hudson.util.Retrier;
|
||||
import hudson.util.Service;
|
||||
import hudson.util.VersionNumber;
|
||||
import hudson.util.XStream2;
|
||||
import io.jenkins.servlet.ServletContextWrapper;
|
||||
import io.jenkins.servlet.ServletExceptionWrapper;
|
||||
import jakarta.servlet.ServletContext;
|
||||
import jakarta.servlet.ServletException;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.File;
|
||||
import java.io.FilenameFilter;
|
||||
@ -118,8 +122,6 @@ import java.util.jar.Manifest;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import java.util.stream.Collectors;
|
||||
import javax.servlet.ServletContext;
|
||||
import javax.servlet.ServletException;
|
||||
import javax.xml.XMLConstants;
|
||||
import javax.xml.parsers.ParserConfigurationException;
|
||||
import javax.xml.parsers.SAXParserFactory;
|
||||
@ -134,6 +136,7 @@ import jenkins.install.InstallUtil;
|
||||
import jenkins.model.Jenkins;
|
||||
import jenkins.plugins.DetachedPluginsUtil;
|
||||
import jenkins.security.CustomClassFilter;
|
||||
import jenkins.security.stapler.StaplerNotDispatchable;
|
||||
import jenkins.util.SystemProperties;
|
||||
import jenkins.util.io.OnMaster;
|
||||
import jenkins.util.xml.RestrictiveEntityResolver;
|
||||
@ -143,8 +146,8 @@ import org.apache.commons.fileupload2.core.DiskFileItem;
|
||||
import org.apache.commons.fileupload2.core.DiskFileItemFactory;
|
||||
import org.apache.commons.fileupload2.core.FileItem;
|
||||
import org.apache.commons.fileupload2.core.FileUploadException;
|
||||
import org.apache.commons.fileupload2.javax.JavaxServletDiskFileUpload;
|
||||
import org.apache.commons.fileupload2.javax.JavaxServletFileUpload;
|
||||
import org.apache.commons.fileupload2.jakarta.servlet5.JakartaServletDiskFileUpload;
|
||||
import org.apache.commons.fileupload2.jakarta.servlet5.JakartaServletFileUpload;
|
||||
import org.apache.commons.io.FileUtils;
|
||||
import org.apache.commons.io.FilenameUtils;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
@ -165,7 +168,8 @@ import org.kohsuke.stapler.StaplerFallback;
|
||||
import org.kohsuke.stapler.StaplerOverridable;
|
||||
import org.kohsuke.stapler.StaplerProxy;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerResponse;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.kohsuke.stapler.StaplerResponse2;
|
||||
import org.kohsuke.stapler.export.Exported;
|
||||
import org.kohsuke.stapler.export.ExportedBean;
|
||||
import org.kohsuke.stapler.interceptor.RequirePOST;
|
||||
@ -237,11 +241,22 @@ public abstract class PluginManager extends AbstractModelObject implements OnMas
|
||||
return klass.getConstructor(Jenkins.class).newInstance(jenkins);
|
||||
}
|
||||
},
|
||||
SC_FILE2 {
|
||||
@Override
|
||||
@NonNull PluginManager doCreate(@NonNull Class<? extends PluginManager> klass,
|
||||
@NonNull Jenkins jenkins) throws ReflectiveOperationException {
|
||||
return klass.getConstructor(ServletContext.class, File.class).newInstance(jenkins.getServletContext(), jenkins.getRootDir());
|
||||
}
|
||||
},
|
||||
/**
|
||||
* @deprecated use {@link #SC_FILE2}
|
||||
*/
|
||||
@Deprecated
|
||||
SC_FILE {
|
||||
@Override
|
||||
@NonNull PluginManager doCreate(@NonNull Class<? extends PluginManager> klass,
|
||||
@NonNull Jenkins jenkins) throws ReflectiveOperationException {
|
||||
return klass.getConstructor(ServletContext.class, File.class).newInstance(jenkins.servletContext, jenkins.getRootDir());
|
||||
return klass.getConstructor(javax.servlet.ServletContext.class, File.class).newInstance(jenkins.servletContext, jenkins.getRootDir());
|
||||
}
|
||||
},
|
||||
FILE {
|
||||
@ -363,6 +378,9 @@ public abstract class PluginManager extends AbstractModelObject implements OnMas
|
||||
*/
|
||||
private final PluginStrategy strategy;
|
||||
|
||||
/**
|
||||
* @since TODO
|
||||
*/
|
||||
protected PluginManager(ServletContext context, File rootDir) {
|
||||
this.context = context;
|
||||
|
||||
@ -378,6 +396,14 @@ public abstract class PluginManager extends AbstractModelObject implements OnMas
|
||||
strategy = createPluginStrategy();
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #PluginManager(ServletContext, File)}
|
||||
*/
|
||||
@Deprecated
|
||||
protected PluginManager(javax.servlet.ServletContext context, File rootDir) {
|
||||
this(context != null ? ServletContextWrapper.toJakartaServletContext(context) : null, rootDir);
|
||||
}
|
||||
|
||||
public Api getApi() {
|
||||
Jenkins.get().checkPermission(Jenkins.SYSTEM_READ);
|
||||
return new Api(this);
|
||||
@ -655,7 +681,7 @@ public abstract class PluginManager extends AbstractModelObject implements OnMas
|
||||
protected @NonNull Set<String> loadPluginsFromWar(@NonNull String fromPath, @CheckForNull FilenameFilter filter) {
|
||||
Set<String> names = new HashSet<>();
|
||||
|
||||
ServletContext context = Jenkins.get().servletContext;
|
||||
ServletContext context = Jenkins.get().getServletContext();
|
||||
Set<String> plugins = Util.fixNull(context.getResourcePaths(fromPath));
|
||||
Set<URL> copiedPlugins = new HashSet<>();
|
||||
Set<URL> dependencies = new HashSet<>();
|
||||
@ -723,7 +749,7 @@ public abstract class PluginManager extends AbstractModelObject implements OnMas
|
||||
String dependencySpec = manifest.getMainAttributes().getValue("Plugin-Dependencies");
|
||||
if (dependencySpec != null) {
|
||||
String[] dependencyTokens = dependencySpec.split(",");
|
||||
ServletContext context = Jenkins.get().servletContext;
|
||||
ServletContext context = Jenkins.get().getServletContext();
|
||||
|
||||
for (String dependencyToken : dependencyTokens) {
|
||||
if (dependencyToken.endsWith(";resolution:=optional")) {
|
||||
@ -1597,7 +1623,7 @@ public abstract class PluginManager extends AbstractModelObject implements OnMas
|
||||
}
|
||||
|
||||
@RequirePOST
|
||||
public HttpResponse doUpdateSources(StaplerRequest req) throws IOException {
|
||||
public HttpResponse doUpdateSources(StaplerRequest2 req) throws IOException {
|
||||
Jenkins.get().checkPermission(Jenkins.ADMINISTER);
|
||||
|
||||
if (req.hasParameter("remove")) {
|
||||
@ -1632,7 +1658,7 @@ public abstract class PluginManager extends AbstractModelObject implements OnMas
|
||||
* Performs the installation of the plugins.
|
||||
*/
|
||||
@RequirePOST
|
||||
public void doInstall(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException {
|
||||
public void doInstall(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException {
|
||||
Jenkins.get().checkPermission(Jenkins.ADMINISTER);
|
||||
Set<String> plugins = new LinkedHashSet<>();
|
||||
|
||||
@ -1656,12 +1682,12 @@ public abstract class PluginManager extends AbstractModelObject implements OnMas
|
||||
* @param req The request object.
|
||||
* @return A JSON response that includes a "correlationId" in the "data" element.
|
||||
* That "correlationId" can then be used in calls to
|
||||
* {@link UpdateCenter#doInstallStatus(org.kohsuke.stapler.StaplerRequest)}.
|
||||
* {@link UpdateCenter#doInstallStatus(org.kohsuke.stapler.StaplerRequest2)}.
|
||||
* @throws IOException Error reading JSON payload fro request.
|
||||
*/
|
||||
@RequirePOST
|
||||
@Restricted(DoNotUse.class) // WebOnly
|
||||
public HttpResponse doInstallPlugins(StaplerRequest req) throws IOException {
|
||||
public HttpResponse doInstallPlugins(StaplerRequest2 req) throws IOException {
|
||||
Jenkins.get().checkPermission(Jenkins.ADMINISTER);
|
||||
String payload = IOUtils.toString(req.getInputStream(), req.getCharacterEncoding());
|
||||
JSONObject request = JSONObject.fromObject(payload);
|
||||
@ -1815,7 +1841,7 @@ public abstract class PluginManager extends AbstractModelObject implements OnMas
|
||||
}
|
||||
|
||||
@POST
|
||||
public HttpResponse doProxyConfigure(StaplerRequest req) throws IOException, ServletException {
|
||||
public HttpResponse doProxyConfigure(StaplerRequest2 req) throws IOException, ServletException {
|
||||
Jenkins jenkins = Jenkins.get();
|
||||
jenkins.checkPermission(Jenkins.ADMINISTER);
|
||||
|
||||
@ -1880,14 +1906,39 @@ public abstract class PluginManager extends AbstractModelObject implements OnMas
|
||||
* Uploads a plugin.
|
||||
*/
|
||||
@RequirePOST
|
||||
public HttpResponse doUploadPlugin(StaplerRequest req) throws IOException, ServletException {
|
||||
public HttpResponse doUploadPlugin(StaplerRequest2 req) throws IOException, ServletException {
|
||||
if (Util.isOverridden(PluginManager.class, getClass(), "doUploadPlugin", StaplerRequest.class)) {
|
||||
try {
|
||||
return doUploadPlugin(StaplerRequest.fromStaplerRequest2(req));
|
||||
} catch (javax.servlet.ServletException e) {
|
||||
throw ServletExceptionWrapper.toJakartaServletException(e);
|
||||
}
|
||||
} else {
|
||||
return doUploadPluginImpl(req);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #doUploadPlugin(StaplerRequest2)}
|
||||
*/
|
||||
@Deprecated
|
||||
@StaplerNotDispatchable
|
||||
public HttpResponse doUploadPlugin(StaplerRequest req) throws IOException, javax.servlet.ServletException {
|
||||
try {
|
||||
return doUploadPluginImpl(StaplerRequest.toStaplerRequest2(req));
|
||||
} catch (ServletException e) {
|
||||
throw ServletExceptionWrapper.fromJakartaServletException(e);
|
||||
}
|
||||
}
|
||||
|
||||
private HttpResponse doUploadPluginImpl(StaplerRequest2 req) throws IOException, ServletException {
|
||||
try {
|
||||
Jenkins.get().checkPermission(Jenkins.ADMINISTER);
|
||||
|
||||
String fileName = "";
|
||||
PluginCopier copier;
|
||||
File tmpDir = Files.createTempDirectory("uploadDir").toFile();
|
||||
JavaxServletFileUpload<DiskFileItem, DiskFileItemFactory> upload = new JavaxServletDiskFileUpload(DiskFileItemFactory.builder().setFile(tmpDir).get());
|
||||
JakartaServletFileUpload<DiskFileItem, DiskFileItemFactory> upload = new JakartaServletDiskFileUpload(DiskFileItemFactory.builder().setFile(tmpDir).get());
|
||||
List<DiskFileItem> items = upload.parseRequest(req);
|
||||
String string = items.get(1).getString();
|
||||
if (string != null && !string.isBlank()) {
|
||||
@ -1965,7 +2016,7 @@ public abstract class PluginManager extends AbstractModelObject implements OnMas
|
||||
}
|
||||
|
||||
@Restricted(NoExternalUse.class)
|
||||
@RequirePOST public FormValidation doCheckPluginUrl(StaplerRequest request, @QueryParameter String value) throws IOException {
|
||||
@RequirePOST public FormValidation doCheckPluginUrl(StaplerRequest2 request, @QueryParameter String value) throws IOException {
|
||||
if (value != null && !value.isBlank()) {
|
||||
try {
|
||||
URL url = new URL(value);
|
||||
@ -1984,7 +2035,7 @@ public abstract class PluginManager extends AbstractModelObject implements OnMas
|
||||
}
|
||||
|
||||
@Restricted(NoExternalUse.class)
|
||||
@RequirePOST public FormValidation doCheckUpdateSiteUrl(StaplerRequest request, @QueryParameter String value) throws InterruptedException {
|
||||
@RequirePOST public FormValidation doCheckUpdateSiteUrl(StaplerRequest2 request, @QueryParameter String value) throws InterruptedException {
|
||||
Jenkins.get().checkPermission(Jenkins.ADMINISTER);
|
||||
return checkUpdateSiteURL(value);
|
||||
}
|
||||
@ -2217,7 +2268,7 @@ public abstract class PluginManager extends AbstractModelObject implements OnMas
|
||||
}
|
||||
|
||||
/**
|
||||
* Like {@link #doInstallNecessaryPlugins(StaplerRequest)} but only checks if everything is installed
|
||||
* Like {@link #doInstallNecessaryPlugins(StaplerRequest2)} but only checks if everything is installed
|
||||
* or if some plugins need updates or installation.
|
||||
*
|
||||
* This method runs without side-effect. I'm still requiring the ADMINISTER permission since
|
||||
@ -2227,7 +2278,7 @@ public abstract class PluginManager extends AbstractModelObject implements OnMas
|
||||
* @since 1.483
|
||||
*/
|
||||
@RequirePOST
|
||||
public JSONArray doPrevalidateConfig(StaplerRequest req) throws IOException {
|
||||
public JSONArray doPrevalidateConfig(StaplerRequest2 req) throws IOException {
|
||||
Jenkins.get().checkPermission(Jenkins.ADMINISTER);
|
||||
|
||||
JSONArray response = new JSONArray();
|
||||
@ -2252,7 +2303,7 @@ public abstract class PluginManager extends AbstractModelObject implements OnMas
|
||||
* @since 1.483
|
||||
*/
|
||||
@RequirePOST
|
||||
public HttpResponse doInstallNecessaryPlugins(StaplerRequest req) throws IOException {
|
||||
public HttpResponse doInstallNecessaryPlugins(StaplerRequest2 req) throws IOException {
|
||||
prevalidateConfig(req.getInputStream());
|
||||
return HttpResponses.redirectViaContextPath("pluginManager/updates/");
|
||||
}
|
||||
|
@ -80,8 +80,8 @@ import org.kohsuke.accmod.restrictions.DoNotUse;
|
||||
import org.kohsuke.accmod.restrictions.NoExternalUse;
|
||||
import org.kohsuke.stapler.HttpResponse;
|
||||
import org.kohsuke.stapler.HttpResponses;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerResponse;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.kohsuke.stapler.StaplerResponse2;
|
||||
import org.kohsuke.stapler.export.Exported;
|
||||
import org.kohsuke.stapler.export.ExportedBean;
|
||||
import org.kohsuke.stapler.interceptor.RequirePOST;
|
||||
@ -1212,7 +1212,7 @@ public class PluginWrapper implements Comparable<PluginWrapper>, ModelObject {
|
||||
/**
|
||||
* Depending on whether the user said "dismiss" or "correct", send him to the right place.
|
||||
*/
|
||||
public void doAct(StaplerRequest req, StaplerResponse rsp) throws IOException {
|
||||
public void doAct(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException {
|
||||
if (req.hasParameter("correct")) {
|
||||
rsp.sendRedirect(req.getContextPath() + "/pluginManager");
|
||||
|
||||
|
@ -32,7 +32,7 @@ import jenkins.model.Jenkins;
|
||||
import net.sf.json.JSONObject;
|
||||
import org.kohsuke.accmod.Restricted;
|
||||
import org.kohsuke.accmod.restrictions.NoExternalUse;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
|
||||
@Extension @Restricted(NoExternalUse.class)
|
||||
public class ProxyConfigurationManager extends GlobalConfiguration {
|
||||
@ -48,7 +48,7 @@ public class ProxyConfigurationManager extends GlobalConfiguration {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean configure(StaplerRequest req, JSONObject json) throws FormException {
|
||||
public boolean configure(StaplerRequest2 req, JSONObject json) throws FormException {
|
||||
ProxyConfiguration pc = req.bindJSON(ProxyConfiguration.class, json);
|
||||
try {
|
||||
saveProxyConfiguration(pc);
|
||||
|
@ -24,15 +24,15 @@
|
||||
|
||||
package hudson;
|
||||
|
||||
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 java.io.IOException;
|
||||
import java.util.Enumeration;
|
||||
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 org.kohsuke.stapler.CompatibleFilter;
|
||||
|
||||
/**
|
||||
* This filter allows you to modify headers set by the container or other servlets
|
||||
@ -77,7 +77,7 @@ import javax.servlet.http.HttpServletResponse;
|
||||
*
|
||||
* @author Mike Wille
|
||||
*/
|
||||
public class ResponseHeaderFilter implements Filter {
|
||||
public class ResponseHeaderFilter implements CompatibleFilter {
|
||||
private FilterConfig config;
|
||||
|
||||
@Override
|
||||
|
@ -125,6 +125,7 @@ import org.apache.tools.ant.types.FileSet;
|
||||
import org.kohsuke.accmod.Restricted;
|
||||
import org.kohsuke.accmod.restrictions.NoExternalUse;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
|
||||
/**
|
||||
* Various utility methods that don't have more proper home.
|
||||
@ -1850,9 +1851,11 @@ public class Util {
|
||||
/**
|
||||
* Find the specific ancestor, or throw an exception.
|
||||
* Useful for an ancestor we know is inside the URL to ease readability
|
||||
*
|
||||
* @since TODO
|
||||
*/
|
||||
@Restricted(NoExternalUse.class)
|
||||
public static @NonNull <T> T getNearestAncestorOfTypeOrThrow(@NonNull StaplerRequest request, @NonNull Class<T> clazz) {
|
||||
public static @NonNull <T> T getNearestAncestorOfTypeOrThrow(@NonNull StaplerRequest2 request, @NonNull Class<T> clazz) {
|
||||
T t = request.findAncestorObject(clazz);
|
||||
if (t == null) {
|
||||
throw new IllegalArgumentException("No ancestor of type " + clazz.getName() + " in the request");
|
||||
@ -1860,6 +1863,15 @@ public class Util {
|
||||
return t;
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #getNearestAncestorOfTypeOrThrow(StaplerRequest2, Class)}
|
||||
*/
|
||||
@Deprecated
|
||||
@Restricted(NoExternalUse.class)
|
||||
public static @NonNull <T> T getNearestAncestorOfTypeOrThrow(@NonNull StaplerRequest request, @NonNull Class<T> clazz) {
|
||||
return getNearestAncestorOfTypeOrThrow(StaplerRequest.toStaplerRequest2(request), clazz);
|
||||
}
|
||||
|
||||
@Restricted(NoExternalUse.class)
|
||||
public static void printRedirect(String contextPath, String redirectUrl, String message, PrintWriter out) {
|
||||
out.printf(
|
||||
|
@ -45,6 +45,12 @@ import hudson.util.InsufficientPermissionDetected;
|
||||
import hudson.util.NoHomeDir;
|
||||
import hudson.util.NoTempDir;
|
||||
import hudson.util.RingBufferLogHandler;
|
||||
import io.jenkins.servlet.ServletContextEventWrapper;
|
||||
import jakarta.servlet.ServletContext;
|
||||
import jakarta.servlet.ServletContextEvent;
|
||||
import jakarta.servlet.ServletContextListener;
|
||||
import jakarta.servlet.ServletResponse;
|
||||
import jakarta.servlet.SessionTrackingMode;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
@ -65,11 +71,6 @@ import java.util.logging.Handler;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.LogRecord;
|
||||
import java.util.logging.Logger;
|
||||
import javax.servlet.ServletContext;
|
||||
import javax.servlet.ServletContextEvent;
|
||||
import javax.servlet.ServletContextListener;
|
||||
import javax.servlet.ServletResponse;
|
||||
import javax.servlet.SessionTrackingMode;
|
||||
import jenkins.model.Jenkins;
|
||||
import jenkins.util.JenkinsJVM;
|
||||
import jenkins.util.SystemProperties;
|
||||
@ -320,10 +321,21 @@ public class WebAppMain implements ServletContextListener {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @since TODO
|
||||
*/
|
||||
public static void installExpressionFactory(ServletContextEvent event) {
|
||||
JellyFacet.setExpressionFactory(event, new ExpressionFactory2());
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #installExpressionFactory(ServletContextEvent)}
|
||||
*/
|
||||
@Deprecated
|
||||
public static void installExpressionFactory(javax.servlet.ServletContextEvent event) {
|
||||
installExpressionFactory(ServletContextEventWrapper.toJakartaServletContextEvent(event));
|
||||
}
|
||||
|
||||
/**
|
||||
* Installs log handler to monitor all Hudson logs.
|
||||
*/
|
||||
|
@ -26,6 +26,8 @@ package hudson.cli;
|
||||
|
||||
import hudson.Extension;
|
||||
import hudson.model.UnprotectedRootAction;
|
||||
import jakarta.servlet.ServletException;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.DataInputStream;
|
||||
import java.io.IOException;
|
||||
@ -45,8 +47,6 @@ import java.util.Map;
|
||||
import java.util.UUID;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import jenkins.model.Jenkins;
|
||||
import jenkins.util.FullDuplexHttpService;
|
||||
import jenkins.util.SystemProperties;
|
||||
@ -59,8 +59,8 @@ import org.kohsuke.stapler.HttpResponse;
|
||||
import org.kohsuke.stapler.HttpResponses;
|
||||
import org.kohsuke.stapler.Stapler;
|
||||
import org.kohsuke.stapler.StaplerProxy;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerResponse;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.kohsuke.stapler.StaplerResponse2;
|
||||
import org.springframework.security.core.Authentication;
|
||||
|
||||
/**
|
||||
@ -97,7 +97,7 @@ public class CLIAction implements UnprotectedRootAction, StaplerProxy {
|
||||
return "cli";
|
||||
}
|
||||
|
||||
public void doCommand(StaplerRequest req, StaplerResponse rsp) throws ServletException, IOException {
|
||||
public void doCommand(StaplerRequest2 req, StaplerResponse2 rsp) throws ServletException, IOException {
|
||||
final Jenkins jenkins = Jenkins.get();
|
||||
jenkins.checkPermission(Jenkins.READ);
|
||||
|
||||
@ -121,7 +121,7 @@ public class CLIAction implements UnprotectedRootAction, StaplerProxy {
|
||||
/**
|
||||
* WebSocket endpoint.
|
||||
*/
|
||||
public HttpResponse doWs(StaplerRequest req) {
|
||||
public HttpResponse doWs(StaplerRequest2 req) {
|
||||
if (!WebSockets.isSupported()) {
|
||||
return HttpResponses.notFound();
|
||||
}
|
||||
@ -216,7 +216,7 @@ public class CLIAction implements UnprotectedRootAction, StaplerProxy {
|
||||
|
||||
@Override
|
||||
public Object getTarget() {
|
||||
StaplerRequest req = Stapler.getCurrentRequest();
|
||||
StaplerRequest2 req = Stapler.getCurrentRequest2();
|
||||
if (req.getRestOfPath().isEmpty() && "POST".equals(req.getMethod())) {
|
||||
// CLI connection request
|
||||
if ("false".equals(req.getParameter("remoting"))) {
|
||||
@ -349,7 +349,7 @@ public class CLIAction implements UnprotectedRootAction, StaplerProxy {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected FullDuplexHttpService createService(StaplerRequest req, UUID uuid) throws IOException {
|
||||
protected FullDuplexHttpService createService(StaplerRequest2 req, UUID uuid) throws IOException {
|
||||
return new FullDuplexHttpService(uuid) {
|
||||
@Override
|
||||
protected void run(InputStream upload, OutputStream download) throws IOException, InterruptedException {
|
||||
|
@ -26,11 +26,11 @@ package hudson.cli;
|
||||
|
||||
import hudson.Extension;
|
||||
import hudson.security.csrf.CrumbExclusion;
|
||||
import jakarta.servlet.FilterChain;
|
||||
import jakarta.servlet.ServletException;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
import javax.servlet.FilterChain;
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import org.kohsuke.accmod.Restricted;
|
||||
import org.kohsuke.accmod.restrictions.DoNotUse;
|
||||
|
||||
|
@ -50,7 +50,7 @@ public class ReloadConfigurationCommand extends CLICommand {
|
||||
// Or perhaps simpler to inline the thread body of doReload?
|
||||
j.doReload();
|
||||
Object app;
|
||||
while ((app = WebApp.get(j.servletContext).getApp()) instanceof HudsonIsLoading) {
|
||||
while ((app = WebApp.get(j.getServletContext()).getApp()) instanceof HudsonIsLoading) {
|
||||
Thread.sleep(100);
|
||||
}
|
||||
if (app instanceof Jenkins) {
|
||||
|
@ -26,8 +26,8 @@ package hudson.cli;
|
||||
|
||||
import hudson.Extension;
|
||||
import hudson.model.Node;
|
||||
import jakarta.servlet.ServletException;
|
||||
import java.io.IOException;
|
||||
import javax.servlet.ServletException;
|
||||
import org.kohsuke.args4j.Argument;
|
||||
|
||||
/**
|
||||
|
@ -30,6 +30,7 @@ import static java.lang.Math.abs;
|
||||
|
||||
import edu.umd.cs.findbugs.annotations.CheckReturnValue;
|
||||
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
|
||||
import hudson.Util;
|
||||
import hudson.remoting.ObjectInputStreamEx;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
@ -50,10 +51,13 @@ import javax.crypto.CipherInputStream;
|
||||
import javax.crypto.CipherOutputStream;
|
||||
import jenkins.model.Jenkins;
|
||||
import jenkins.security.CryptoConfidentialKey;
|
||||
import jenkins.security.stapler.StaplerNotDispatchable;
|
||||
import org.jenkinsci.remoting.util.AnonymousClassWarnings;
|
||||
import org.kohsuke.stapler.Stapler;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.kohsuke.stapler.StaplerResponse;
|
||||
import org.kohsuke.stapler.StaplerResponse2;
|
||||
import org.kohsuke.stapler.framework.io.ByteBuffer;
|
||||
import org.kohsuke.stapler.framework.io.LargeText;
|
||||
|
||||
@ -90,14 +94,44 @@ public class AnnotatedLargeText<T> extends LargeText {
|
||||
this.context = context;
|
||||
}
|
||||
|
||||
/**
|
||||
* @since TODO
|
||||
*/
|
||||
public void doProgressiveHtml(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException {
|
||||
if (Util.isOverridden(AnnotatedLargeText.class, getClass(), "doProgressiveHtml", StaplerRequest.class, StaplerResponse.class)) {
|
||||
doProgressiveHtml(StaplerRequest.fromStaplerRequest2(req), StaplerResponse.fromStaplerResponse2(rsp));
|
||||
} else {
|
||||
doProgressiveHtmlImpl(req, rsp);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #doProgressiveHtml(StaplerRequest2, StaplerResponse2)}
|
||||
*/
|
||||
@Deprecated
|
||||
@StaplerNotDispatchable
|
||||
public void doProgressiveHtml(StaplerRequest req, StaplerResponse rsp) throws IOException {
|
||||
doProgressiveHtmlImpl(StaplerRequest.toStaplerRequest2(req), StaplerResponse.toStaplerResponse2(rsp));
|
||||
}
|
||||
|
||||
private void doProgressiveHtmlImpl(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException {
|
||||
req.setAttribute("html", true);
|
||||
doProgressText(req, rsp);
|
||||
}
|
||||
|
||||
/**
|
||||
* Aliasing what I think was a wrong name in {@link LargeText}
|
||||
*
|
||||
* @since TODO
|
||||
*/
|
||||
public void doProgressiveText(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException {
|
||||
doProgressText(req, rsp);
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #doProgressiveText(StaplerRequest2, StaplerResponse2)}
|
||||
*/
|
||||
@Deprecated
|
||||
public void doProgressiveText(StaplerRequest req, StaplerResponse rsp) throws IOException {
|
||||
doProgressText(req, rsp);
|
||||
}
|
||||
@ -107,16 +141,35 @@ public class AnnotatedLargeText<T> extends LargeText {
|
||||
* and use this request attribute to differentiate.
|
||||
*/
|
||||
private boolean isHtml() {
|
||||
StaplerRequest req = Stapler.getCurrentRequest();
|
||||
StaplerRequest2 req = Stapler.getCurrentRequest2();
|
||||
return req != null && req.getAttribute("html") != null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @since TODO
|
||||
*/
|
||||
@Override
|
||||
protected void setContentType(StaplerResponse2 rsp) {
|
||||
if (Util.isOverridden(AnnotatedLargeText.class, getClass(), "setContentType", StaplerResponse.class)) {
|
||||
setContentType(StaplerResponse.fromStaplerResponse2(rsp));
|
||||
} else {
|
||||
setContentTypeImpl(rsp);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #setContentType(StaplerResponse2)}
|
||||
*/
|
||||
@Deprecated
|
||||
protected void setContentType(StaplerResponse rsp) {
|
||||
setContentTypeImpl(StaplerResponse.toStaplerResponse2(rsp));
|
||||
}
|
||||
|
||||
private void setContentTypeImpl(StaplerResponse2 rsp) {
|
||||
rsp.setContentType(isHtml() ? "text/html;charset=UTF-8" : "text/plain;charset=UTF-8");
|
||||
}
|
||||
|
||||
private ConsoleAnnotator<T> createAnnotator(StaplerRequest req) throws IOException {
|
||||
private ConsoleAnnotator<T> createAnnotator(StaplerRequest2 req) throws IOException {
|
||||
try {
|
||||
String base64 = req != null ? req.getHeader("X-ConsoleAnnotator") : null;
|
||||
if (base64 != null) {
|
||||
@ -176,7 +229,7 @@ public class AnnotatedLargeText<T> extends LargeText {
|
||||
@CheckReturnValue
|
||||
public long writeHtmlTo(long start, Writer w) throws IOException {
|
||||
ConsoleAnnotationOutputStream<T> caw = new ConsoleAnnotationOutputStream<>(
|
||||
w, createAnnotator(Stapler.getCurrentRequest()), context, charset);
|
||||
w, createAnnotator(Stapler.getCurrentRequest2()), context, charset);
|
||||
long r = super.writeLogTo(start, caw);
|
||||
|
||||
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||
@ -185,7 +238,7 @@ public class AnnotatedLargeText<T> extends LargeText {
|
||||
oos.writeLong(System.currentTimeMillis()); // send timestamp to prevent a replay attack
|
||||
oos.writeObject(caw.getConsoleAnnotator());
|
||||
oos.close();
|
||||
StaplerResponse rsp = Stapler.getCurrentResponse();
|
||||
StaplerResponse2 rsp = Stapler.getCurrentResponse2();
|
||||
if (rsp != null)
|
||||
rsp.setHeader("X-ConsoleAnnotator", Base64.getEncoder().encodeToString(baos.toByteArray()));
|
||||
return r;
|
||||
|
@ -28,13 +28,13 @@ import edu.umd.cs.findbugs.annotations.NonNull;
|
||||
import hudson.DescriptorExtensionList;
|
||||
import hudson.ExtensionPoint;
|
||||
import hudson.model.Descriptor;
|
||||
import jakarta.servlet.ServletException;
|
||||
import java.io.IOException;
|
||||
import java.net.URL;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import javax.servlet.ServletException;
|
||||
import jenkins.model.Jenkins;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerResponse;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.kohsuke.stapler.StaplerResponse2;
|
||||
import org.kohsuke.stapler.WebMethod;
|
||||
|
||||
/**
|
||||
@ -81,12 +81,12 @@ public abstract class ConsoleAnnotationDescriptor extends Descriptor<ConsoleNote
|
||||
}
|
||||
|
||||
@WebMethod(name = "script.js")
|
||||
public void doScriptJs(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException {
|
||||
public void doScriptJs(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException {
|
||||
rsp.serveFile(req, hasResource("/script.js"), TimeUnit.DAYS.toMillis(1));
|
||||
}
|
||||
|
||||
@WebMethod(name = "style.css")
|
||||
public void doStyleCss(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException {
|
||||
public void doStyleCss(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException {
|
||||
rsp.serveFile(req, hasResource("/style.css"), TimeUnit.DAYS.toMillis(1));
|
||||
}
|
||||
|
||||
|
@ -28,15 +28,15 @@ import hudson.Extension;
|
||||
import hudson.ExtensionList;
|
||||
import hudson.ExtensionPoint;
|
||||
import hudson.model.Run;
|
||||
import jakarta.servlet.ServletException;
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.ParameterizedType;
|
||||
import java.lang.reflect.Type;
|
||||
import java.net.URL;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import javax.servlet.ServletException;
|
||||
import org.jvnet.tiger_types.Types;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerResponse;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.kohsuke.stapler.StaplerResponse2;
|
||||
import org.kohsuke.stapler.WebMethod;
|
||||
|
||||
/**
|
||||
@ -113,12 +113,12 @@ public abstract class ConsoleAnnotatorFactory<T> implements ExtensionPoint {
|
||||
* Serves the JavaScript file associated with this console annotator factory.
|
||||
*/
|
||||
@WebMethod(name = "script.js")
|
||||
public void doScriptJs(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException {
|
||||
public void doScriptJs(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException {
|
||||
rsp.serveFile(req, getResource("/script.js"), TimeUnit.DAYS.toMillis(1));
|
||||
}
|
||||
|
||||
@WebMethod(name = "style.css")
|
||||
public void doStyleCss(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException {
|
||||
public void doStyleCss(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException {
|
||||
rsp.serveFile(req, getResource("/style.css"), TimeUnit.DAYS.toMillis(1));
|
||||
}
|
||||
|
||||
|
@ -37,7 +37,7 @@ import org.jenkinsci.Symbol;
|
||||
import org.kohsuke.accmod.Restricted;
|
||||
import org.kohsuke.accmod.restrictions.NoExternalUse;
|
||||
import org.kohsuke.stapler.Stapler;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
|
||||
/**
|
||||
* Turns a text into a hyperlink by specifying the URL separately.
|
||||
@ -62,7 +62,7 @@ public class HyperlinkNote extends ConsoleNote {
|
||||
public ConsoleAnnotator annotate(Object context, MarkupText text, int charPos) {
|
||||
String url = this.url;
|
||||
if (url.startsWith("/")) {
|
||||
StaplerRequest req = Stapler.getCurrentRequest();
|
||||
StaplerRequest2 req = Stapler.getCurrentRequest2();
|
||||
if (req != null) {
|
||||
// if we are serving HTTP request, we want to use app relative URL
|
||||
url = req.getContextPath() + url;
|
||||
|
@ -65,8 +65,8 @@ import org.kohsuke.accmod.restrictions.NoExternalUse;
|
||||
import org.kohsuke.stapler.HttpRedirect;
|
||||
import org.kohsuke.stapler.HttpResponse;
|
||||
import org.kohsuke.stapler.HttpResponses;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerResponse;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.kohsuke.stapler.StaplerResponse2;
|
||||
import org.kohsuke.stapler.interceptor.RequirePOST;
|
||||
|
||||
/**
|
||||
@ -310,7 +310,7 @@ public class OldDataMonitor extends AdministrativeMonitor {
|
||||
* Depending on whether the user said "yes" or "no", send him to the right place.
|
||||
*/
|
||||
@RequirePOST
|
||||
public HttpResponse doAct(StaplerRequest req, StaplerResponse rsp) throws IOException {
|
||||
public HttpResponse doAct(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException {
|
||||
if (req.hasParameter("no")) {
|
||||
disable(true);
|
||||
return HttpResponses.redirectViaContextPath("/manage");
|
||||
@ -324,7 +324,7 @@ public class OldDataMonitor extends AdministrativeMonitor {
|
||||
* Remove those items from the data map.
|
||||
*/
|
||||
@RequirePOST
|
||||
public HttpResponse doUpgrade(StaplerRequest req, StaplerResponse rsp) {
|
||||
public HttpResponse doUpgrade(StaplerRequest2 req, StaplerResponse2 rsp) {
|
||||
final String thruVerParam = req.getParameter("thruVer");
|
||||
final VersionNumber thruVer = thruVerParam.equals("all") ? null : new VersionNumber(thruVerParam);
|
||||
|
||||
@ -341,7 +341,7 @@ public class OldDataMonitor extends AdministrativeMonitor {
|
||||
* Remove those items from the data map.
|
||||
*/
|
||||
@RequirePOST
|
||||
public HttpResponse doDiscard(StaplerRequest req, StaplerResponse rsp) {
|
||||
public HttpResponse doDiscard(StaplerRequest2 req, StaplerResponse2 rsp) {
|
||||
saveAndRemoveEntries(entry -> entry.getValue().max == null);
|
||||
|
||||
return HttpResponses.forwardToPreviousPage();
|
||||
@ -377,7 +377,7 @@ public class OldDataMonitor extends AdministrativeMonitor {
|
||||
data.keySet().removeAll(removed);
|
||||
}
|
||||
|
||||
public HttpResponse doIndex(StaplerResponse rsp) throws IOException {
|
||||
public HttpResponse doIndex(StaplerResponse2 rsp) throws IOException {
|
||||
return new HttpRedirect("manage");
|
||||
}
|
||||
|
||||
|
@ -41,7 +41,7 @@ import org.kohsuke.stapler.HttpRedirect;
|
||||
import org.kohsuke.stapler.HttpResponse;
|
||||
import org.kohsuke.stapler.HttpResponses;
|
||||
import org.kohsuke.stapler.QueryParameter;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.kohsuke.stapler.interceptor.RequirePOST;
|
||||
|
||||
/**
|
||||
@ -68,7 +68,7 @@ public class ReverseProxySetupMonitor extends AdministrativeMonitor {
|
||||
|
||||
@Restricted(DoNotUse.class) // WebOnly
|
||||
@RestrictedSince("2.235")
|
||||
public HttpResponse doTest(StaplerRequest request, @QueryParameter boolean testWithContext) {
|
||||
public HttpResponse doTest(StaplerRequest2 request, @QueryParameter boolean testWithContext) {
|
||||
String referer = request.getReferer();
|
||||
Jenkins j = Jenkins.get();
|
||||
String redirect;
|
||||
|
@ -30,8 +30,8 @@ import hudson.security.Permission;
|
||||
import java.io.IOException;
|
||||
import jenkins.model.Jenkins;
|
||||
import org.jenkinsci.Symbol;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerResponse;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.kohsuke.stapler.StaplerResponse2;
|
||||
import org.kohsuke.stapler.interceptor.RequirePOST;
|
||||
|
||||
/**
|
||||
@ -64,7 +64,7 @@ public class TooManyJobsButNoView extends AdministrativeMonitor {
|
||||
* Depending on whether the user said "yes" or "no", send him to the right place.
|
||||
*/
|
||||
@RequirePOST
|
||||
public void doAct(StaplerRequest req, StaplerResponse rsp) throws IOException {
|
||||
public void doAct(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException {
|
||||
Jenkins.get().checkPermission(Jenkins.ADMINISTER);
|
||||
if (req.hasParameter("no")) {
|
||||
disable(true);
|
||||
|
@ -39,6 +39,6 @@ import jenkins.util.groovy.GroovyHookScript;
|
||||
public class GroovyInitScript {
|
||||
@Initializer(after = JOB_CONFIG_ADAPTED)
|
||||
public static void init(Jenkins j) {
|
||||
new GroovyHookScript("init", j.servletContext, j.getRootDir(), j.getPluginManager().uberClassLoader).run();
|
||||
new GroovyHookScript("init", j.getServletContext(), j.getRootDir(), j.getPluginManager().uberClassLoader).run();
|
||||
}
|
||||
}
|
||||
|
@ -2,22 +2,22 @@ package hudson.init.impl;
|
||||
|
||||
import edu.umd.cs.findbugs.annotations.CheckForNull;
|
||||
import hudson.init.Initializer;
|
||||
import jakarta.servlet.ServletException;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import java.io.EOFException;
|
||||
import java.io.IOException;
|
||||
import java.util.UUID;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import jenkins.model.Jenkins;
|
||||
import org.kohsuke.MetaInfServices;
|
||||
import org.kohsuke.accmod.Restricted;
|
||||
import org.kohsuke.accmod.restrictions.NoExternalUse;
|
||||
import org.kohsuke.stapler.HttpResponses;
|
||||
import org.kohsuke.stapler.Stapler;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerResponse;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.kohsuke.stapler.StaplerResponse2;
|
||||
import org.kohsuke.stapler.UncaughtExceptionFilter;
|
||||
import org.kohsuke.stapler.WebApp;
|
||||
|
||||
@ -30,7 +30,7 @@ public class InstallUncaughtExceptionHandler {
|
||||
|
||||
@Initializer
|
||||
public static void init(final Jenkins j) throws IOException {
|
||||
UncaughtExceptionFilter.setUncaughtExceptionHandler(j.servletContext, (e, context, req, rsp) -> handleException(j, e, req, rsp, 500));
|
||||
UncaughtExceptionFilter.setUncaughtExceptionHandler(j.getServletContext(), (e, context, req, rsp) -> handleException(j, e, req, rsp, 500));
|
||||
try {
|
||||
Thread.setDefaultUncaughtExceptionHandler(new DefaultUncaughtExceptionHandler());
|
||||
LOGGER.log(Level.FINE, "Successfully installed a global UncaughtExceptionHandler.");
|
||||
@ -53,10 +53,10 @@ public class InstallUncaughtExceptionHandler {
|
||||
String id = UUID.randomUUID().toString();
|
||||
LOGGER.log(isEOFException(e) ? Level.FINE : Level.WARNING, "Caught unhandled exception with ID " + id, e);
|
||||
req.setAttribute("jenkins.exception.id", id);
|
||||
req.setAttribute("javax.servlet.error.exception", e);
|
||||
req.setAttribute("jakarta.servlet.error.exception", e);
|
||||
rsp.setStatus(code);
|
||||
try {
|
||||
WebApp.get(j.servletContext).getSomeStapler().invoke(req, rsp, j, "/oops");
|
||||
WebApp.get(j.getServletContext()).getSomeStapler().invoke(req, rsp, j, "/oops");
|
||||
} catch (ServletException | IOException x) {
|
||||
if (!Stapler.isSocketException(x)) {
|
||||
throw x;
|
||||
@ -75,7 +75,7 @@ public class InstallUncaughtExceptionHandler {
|
||||
}
|
||||
return new HttpResponses.HttpResponseException(cause) {
|
||||
@Override
|
||||
public void generateResponse(StaplerRequest req, StaplerResponse rsp, Object node) throws IOException, ServletException {
|
||||
public void generateResponse(StaplerRequest2 req, StaplerResponse2 rsp, Object node) throws IOException, ServletException {
|
||||
handleException(Jenkins.get(), cause, req, rsp, code);
|
||||
}
|
||||
};
|
||||
|
@ -35,6 +35,7 @@ import hudson.model.ManagementLink;
|
||||
import hudson.model.TaskListener;
|
||||
import hudson.util.StreamTaskListener;
|
||||
import hudson.util.jna.DotNet;
|
||||
import jakarta.servlet.ServletException;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
@ -43,7 +44,6 @@ import java.nio.charset.Charset;
|
||||
import java.nio.file.Files;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import javax.servlet.ServletException;
|
||||
import jenkins.model.Jenkins;
|
||||
import jenkins.util.SystemProperties;
|
||||
import org.apache.commons.io.FileUtils;
|
||||
@ -52,8 +52,8 @@ import org.apache.tools.ant.Project;
|
||||
import org.apache.tools.ant.taskdefs.Move;
|
||||
import org.apache.tools.ant.types.FileSet;
|
||||
import org.kohsuke.stapler.QueryParameter;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerResponse;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.kohsuke.stapler.StaplerResponse2;
|
||||
import org.kohsuke.stapler.interceptor.RequirePOST;
|
||||
|
||||
/**
|
||||
@ -116,7 +116,7 @@ public class WindowsInstallerLink extends ManagementLink {
|
||||
* Performs installation.
|
||||
*/
|
||||
@RequirePOST
|
||||
public void doDoInstall(StaplerRequest req, StaplerResponse rsp, @QueryParameter("dir") String _dir) throws IOException, ServletException {
|
||||
public void doDoInstall(StaplerRequest2 req, StaplerResponse2 rsp, @QueryParameter("dir") String _dir) throws IOException, ServletException {
|
||||
Jenkins.get().checkPermission(Jenkins.ADMINISTER);
|
||||
|
||||
if (installationDir != null) {
|
||||
@ -168,7 +168,7 @@ public class WindowsInstallerLink extends ManagementLink {
|
||||
/**
|
||||
* Copies a single resource into the target folder, by the given name, and handle errors gracefully.
|
||||
*/
|
||||
private void copy(StaplerRequest req, StaplerResponse rsp, File dir, URL src, String name) throws ServletException, IOException {
|
||||
private void copy(StaplerRequest2 req, StaplerResponse2 rsp, File dir, URL src, String name) throws ServletException, IOException {
|
||||
try {
|
||||
FileUtils.copyURLToFile(src, new File(dir, name));
|
||||
} catch (IOException e) {
|
||||
@ -179,7 +179,7 @@ public class WindowsInstallerLink extends ManagementLink {
|
||||
}
|
||||
|
||||
@RequirePOST
|
||||
public void doRestart(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException {
|
||||
public void doRestart(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException {
|
||||
Jenkins.get().checkPermission(Jenkins.ADMINISTER);
|
||||
|
||||
if (installationDir == null) {
|
||||
@ -250,11 +250,11 @@ public class WindowsInstallerLink extends ManagementLink {
|
||||
/**
|
||||
* Displays the error in a page.
|
||||
*/
|
||||
protected final void sendError(Exception e, StaplerRequest req, StaplerResponse rsp) throws ServletException, IOException {
|
||||
protected final void sendError(Exception e, StaplerRequest2 req, StaplerResponse2 rsp) throws ServletException, IOException {
|
||||
sendError(e.getMessage(), req, rsp);
|
||||
}
|
||||
|
||||
protected final void sendError(String message, StaplerRequest req, StaplerResponse rsp) throws ServletException, IOException {
|
||||
protected final void sendError(String message, StaplerRequest2 req, StaplerResponse2 rsp) throws ServletException, IOException {
|
||||
req.setAttribute("message", message);
|
||||
req.setAttribute("pre", true);
|
||||
rsp.forward(Jenkins.get(), "error", req);
|
||||
|
@ -48,6 +48,7 @@ import hudson.util.FormValidation;
|
||||
import hudson.util.HttpResponses;
|
||||
import hudson.util.RingBufferLogHandler;
|
||||
import hudson.util.XStream2;
|
||||
import jakarta.servlet.ServletException;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.Serializable;
|
||||
@ -71,7 +72,6 @@ import java.util.logging.Level;
|
||||
import java.util.logging.LogManager;
|
||||
import java.util.logging.LogRecord;
|
||||
import java.util.logging.Logger;
|
||||
import javax.servlet.ServletException;
|
||||
import jenkins.model.Jenkins;
|
||||
import jenkins.model.Loadable;
|
||||
import jenkins.security.MasterToSlaveCallable;
|
||||
@ -82,8 +82,8 @@ import org.kohsuke.accmod.restrictions.NoExternalUse;
|
||||
import org.kohsuke.stapler.DataBoundConstructor;
|
||||
import org.kohsuke.stapler.HttpResponse;
|
||||
import org.kohsuke.stapler.QueryParameter;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerResponse;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.kohsuke.stapler.StaplerResponse2;
|
||||
import org.kohsuke.stapler.interceptor.RequirePOST;
|
||||
import org.kohsuke.stapler.verb.POST;
|
||||
|
||||
@ -439,7 +439,7 @@ public class LogRecorder extends AbstractModelObject implements Loadable, Saveab
|
||||
* Accepts submission from the configuration page.
|
||||
*/
|
||||
@POST
|
||||
public synchronized void doConfigSubmit(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException {
|
||||
public synchronized void doConfigSubmit(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException {
|
||||
Jenkins.get().checkPermission(Jenkins.ADMINISTER);
|
||||
|
||||
JSONObject src = req.getSubmittedForm();
|
||||
@ -536,7 +536,7 @@ public class LogRecorder extends AbstractModelObject implements Loadable, Saveab
|
||||
* Deletes this recorder, then go back to the parent.
|
||||
*/
|
||||
@RequirePOST
|
||||
public synchronized void doDoDelete(StaplerResponse rsp) throws IOException, ServletException {
|
||||
public synchronized void doDoDelete(StaplerResponse2 rsp) throws IOException, ServletException {
|
||||
delete();
|
||||
rsp.sendRedirect2("..");
|
||||
}
|
||||
@ -562,7 +562,7 @@ public class LogRecorder extends AbstractModelObject implements Loadable, Saveab
|
||||
/**
|
||||
* RSS feed for log entries.
|
||||
*/
|
||||
public void doRss(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException {
|
||||
public void doRss(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException {
|
||||
LogRecorderManager.doRss(req, rsp, getLogRecords());
|
||||
}
|
||||
|
||||
|
@ -38,6 +38,7 @@ import hudson.model.Failure;
|
||||
import hudson.model.RSS;
|
||||
import hudson.util.CopyOnWriteMap;
|
||||
import hudson.util.FormValidation;
|
||||
import jakarta.servlet.ServletException;
|
||||
import java.io.File;
|
||||
import java.io.FileFilter;
|
||||
import java.io.IOException;
|
||||
@ -53,7 +54,6 @@ import java.util.logging.Level;
|
||||
import java.util.logging.LogManager;
|
||||
import java.util.logging.LogRecord;
|
||||
import java.util.logging.Logger;
|
||||
import javax.servlet.ServletException;
|
||||
import jenkins.model.Jenkins;
|
||||
import jenkins.model.JenkinsLocationConfiguration;
|
||||
import jenkins.model.ModelObjectWithChildren;
|
||||
@ -68,8 +68,8 @@ import org.kohsuke.stapler.HttpRedirect;
|
||||
import org.kohsuke.stapler.HttpResponse;
|
||||
import org.kohsuke.stapler.QueryParameter;
|
||||
import org.kohsuke.stapler.StaplerProxy;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerResponse;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.kohsuke.stapler.StaplerResponse2;
|
||||
import org.kohsuke.stapler.interceptor.RequirePOST;
|
||||
|
||||
/**
|
||||
@ -188,7 +188,7 @@ public class LogRecorderManager extends AbstractModelObject implements ModelObje
|
||||
}
|
||||
|
||||
@Override
|
||||
public ContextMenu doChildrenContextMenu(StaplerRequest request, StaplerResponse response) throws Exception {
|
||||
public ContextMenu doChildrenContextMenu(StaplerRequest2 request, StaplerResponse2 response) throws Exception {
|
||||
ContextMenu menu = new ContextMenu();
|
||||
menu.add("all", "All Jenkins Logs");
|
||||
for (LogRecorder lr : recorders) {
|
||||
@ -225,14 +225,14 @@ public class LogRecorderManager extends AbstractModelObject implements ModelObje
|
||||
/**
|
||||
* RSS feed for log entries.
|
||||
*/
|
||||
public void doRss(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException {
|
||||
public void doRss(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException {
|
||||
doRss(req, rsp, Jenkins.logRecords);
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders the given log recorders as RSS.
|
||||
*/
|
||||
/*package*/ static void doRss(StaplerRequest req, StaplerResponse rsp, List<LogRecord> logs) throws IOException, ServletException {
|
||||
/*package*/ static void doRss(StaplerRequest2 req, StaplerResponse2 rsp, List<LogRecord> logs) throws IOException, ServletException {
|
||||
// filter log records based on the log level
|
||||
String entryType = "all";
|
||||
String level = req.getParameter("level");
|
||||
|
@ -28,6 +28,7 @@ import edu.umd.cs.findbugs.annotations.CheckForNull;
|
||||
import edu.umd.cs.findbugs.annotations.NonNull;
|
||||
import hudson.ExtensionPoint;
|
||||
import hudson.model.AbstractDescribableImpl;
|
||||
import jakarta.servlet.ServletException;
|
||||
import java.io.IOException;
|
||||
import java.io.PrintWriter;
|
||||
import java.io.StringWriter;
|
||||
@ -44,7 +45,8 @@ import org.kohsuke.accmod.Restricted;
|
||||
import org.kohsuke.accmod.restrictions.NoExternalUse;
|
||||
import org.kohsuke.stapler.HttpResponse;
|
||||
import org.kohsuke.stapler.QueryParameter;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.kohsuke.stapler.StaplerResponse2;
|
||||
import org.kohsuke.stapler.WebMethod;
|
||||
import org.kohsuke.stapler.verb.GET;
|
||||
import org.kohsuke.stapler.verb.POST;
|
||||
@ -138,7 +140,7 @@ public abstract class MarkupFormatter extends AbstractDescribableImpl<MarkupForm
|
||||
@GET
|
||||
@WebMethod(name = "previewDescription")
|
||||
@Restricted(NoExternalUse.class)
|
||||
public HttpResponse previewsNowNeedPostForSecurity2153(@QueryParameter String text, StaplerRequest req) throws IOException {
|
||||
public HttpResponse previewsNowNeedPostForSecurity2153(@QueryParameter String text, StaplerRequest2 req) throws IOException {
|
||||
LOGGER.log(Level.FINE, "Received a GET request at " + req.getRequestURL());
|
||||
if (PREVIEWS_ALLOW_GET) {
|
||||
return doPreviewDescription(text);
|
||||
@ -155,15 +157,18 @@ public abstract class MarkupFormatter extends AbstractDescribableImpl<MarkupForm
|
||||
*/
|
||||
private static HttpResponse html(int status, @NonNull String html, @NonNull Map<String, String> headers) {
|
||||
// TODO Move to Stapler's HttpResponses, (also add a corresponding 'text' method)
|
||||
return (req, rsp, node) -> {
|
||||
rsp.setContentType("text/html;charset=UTF-8");
|
||||
rsp.setStatus(status);
|
||||
for (Map.Entry<String, String> header : headers.entrySet()) {
|
||||
rsp.setHeader(header.getKey(), header.getValue());
|
||||
return new HttpResponse() {
|
||||
@Override
|
||||
public void generateResponse(StaplerRequest2 req, StaplerResponse2 rsp, Object node) throws IOException, ServletException {
|
||||
rsp.setContentType("text/html;charset=UTF-8");
|
||||
rsp.setStatus(status);
|
||||
for (Map.Entry<String, String> header : headers.entrySet()) {
|
||||
rsp.setHeader(header.getKey(), header.getValue());
|
||||
}
|
||||
PrintWriter pw = rsp.getWriter();
|
||||
pw.print(html);
|
||||
pw.flush();
|
||||
}
|
||||
PrintWriter pw = rsp.getWriter();
|
||||
pw.print(html);
|
||||
pw.flush();
|
||||
};
|
||||
}
|
||||
}
|
||||
|
@ -62,6 +62,8 @@ import hudson.util.AdaptedIterator;
|
||||
import hudson.util.HttpResponses;
|
||||
import hudson.util.Iterators;
|
||||
import hudson.util.VariableResolver;
|
||||
import io.jenkins.servlet.ServletExceptionWrapper;
|
||||
import jakarta.servlet.ServletException;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InterruptedIOException;
|
||||
@ -81,7 +83,6 @@ import java.util.SortedSet;
|
||||
import java.util.TreeSet;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import javax.servlet.ServletException;
|
||||
import jenkins.model.Jenkins;
|
||||
import jenkins.model.lazy.BuildReference;
|
||||
import jenkins.model.lazy.LazyBuildMixIn;
|
||||
@ -275,7 +276,7 @@ public abstract class AbstractBuild<P extends AbstractProject<P, R>, R extends A
|
||||
*/
|
||||
@Deprecated(since = "2.364")
|
||||
public String getUpUrl() {
|
||||
return Functions.getNearestAncestorUrl(Stapler.getCurrentRequest(), getParent()) + '/';
|
||||
return Functions.getNearestAncestorUrl(Stapler.getCurrentRequest2(), getParent()) + '/';
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1391,8 +1392,12 @@ public abstract class AbstractBuild<P extends AbstractProject<P, R>, R extends A
|
||||
*/
|
||||
@Deprecated
|
||||
@RequirePOST // #doStop() should be preferred, but better to be safe
|
||||
public void doStop(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException {
|
||||
doStop().generateResponse(req, rsp, this);
|
||||
public void doStop(StaplerRequest req, StaplerResponse rsp) throws IOException, javax.servlet.ServletException {
|
||||
try {
|
||||
doStop().generateResponse(StaplerRequest.toStaplerRequest2(req), StaplerResponse.toStaplerResponse2(rsp), this);
|
||||
} catch (ServletException e) {
|
||||
throw ServletExceptionWrapper.fromJakartaServletException(e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -25,7 +25,7 @@
|
||||
|
||||
package hudson.model;
|
||||
|
||||
import static javax.servlet.http.HttpServletResponse.SC_BAD_REQUEST;
|
||||
import static jakarta.servlet.http.HttpServletResponse.SC_BAD_REQUEST;
|
||||
|
||||
import com.infradna.tool.bridge_method_injector.WithBridgeMethods;
|
||||
import edu.umd.cs.findbugs.annotations.NonNull;
|
||||
@ -47,6 +47,8 @@ import hudson.util.AtomicFileWriter;
|
||||
import hudson.util.FormValidation;
|
||||
import hudson.util.IOUtils;
|
||||
import hudson.util.Secret;
|
||||
import io.jenkins.servlet.ServletExceptionWrapper;
|
||||
import jakarta.servlet.ServletException;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
@ -59,7 +61,6 @@ import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
import javax.servlet.ServletException;
|
||||
import javax.xml.transform.Source;
|
||||
import javax.xml.transform.TransformerException;
|
||||
import javax.xml.transform.sax.SAXSource;
|
||||
@ -70,6 +71,7 @@ import jenkins.model.Jenkins;
|
||||
import jenkins.model.Loadable;
|
||||
import jenkins.model.queue.ItemDeletion;
|
||||
import jenkins.security.NotReallyRoleSensitiveCallable;
|
||||
import jenkins.security.stapler.StaplerNotDispatchable;
|
||||
import jenkins.util.SystemProperties;
|
||||
import jenkins.util.xml.XMLUtils;
|
||||
import org.apache.tools.ant.Project;
|
||||
@ -87,7 +89,9 @@ import org.kohsuke.stapler.QueryParameter;
|
||||
import org.kohsuke.stapler.Stapler;
|
||||
import org.kohsuke.stapler.StaplerProxy;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.kohsuke.stapler.StaplerResponse;
|
||||
import org.kohsuke.stapler.StaplerResponse2;
|
||||
import org.kohsuke.stapler.WebMethod;
|
||||
import org.kohsuke.stapler.export.Exported;
|
||||
import org.kohsuke.stapler.export.ExportedBean;
|
||||
@ -530,7 +534,7 @@ public abstract class AbstractItem extends Actionable implements Loadable, Item,
|
||||
@Override
|
||||
public final String getUrl() {
|
||||
// try to stick to the current view if possible
|
||||
StaplerRequest req = Stapler.getCurrentRequest();
|
||||
StaplerRequest2 req = Stapler.getCurrentRequest2();
|
||||
String shortUrl = getShortUrl();
|
||||
String uri = req == null ? null : req.getRequestURI();
|
||||
if (req != null) {
|
||||
@ -644,9 +648,36 @@ public abstract class AbstractItem extends Actionable implements Loadable, Item,
|
||||
|
||||
/**
|
||||
* Accepts the new description.
|
||||
*
|
||||
* @since TODO
|
||||
*/
|
||||
@RequirePOST
|
||||
public synchronized void doSubmitDescription(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException {
|
||||
public synchronized void doSubmitDescription(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException {
|
||||
if (Util.isOverridden(AbstractItem.class, getClass(), "doSubmitDescription", StaplerRequest.class, StaplerResponse.class)) {
|
||||
try {
|
||||
doSubmitDescription(StaplerRequest.fromStaplerRequest2(req), StaplerResponse.fromStaplerResponse2(rsp));
|
||||
} catch (javax.servlet.ServletException e) {
|
||||
throw ServletExceptionWrapper.toJakartaServletException(e);
|
||||
}
|
||||
} else {
|
||||
doSubmitDescriptionImpl(req, rsp);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #doSubmitDescription(StaplerRequest2, StaplerResponse2)}
|
||||
*/
|
||||
@Deprecated
|
||||
@StaplerNotDispatchable
|
||||
public synchronized void doSubmitDescription(StaplerRequest req, StaplerResponse rsp) throws IOException, javax.servlet.ServletException {
|
||||
try {
|
||||
doSubmitDescriptionImpl(StaplerRequest.toStaplerRequest2(req), StaplerResponse.toStaplerResponse2(rsp));
|
||||
} catch (ServletException e) {
|
||||
throw ServletExceptionWrapper.fromJakartaServletException(e);
|
||||
}
|
||||
}
|
||||
|
||||
private void doSubmitDescriptionImpl(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException {
|
||||
checkPermission(CONFIGURE);
|
||||
|
||||
setDescription(req.getParameter("description"));
|
||||
@ -658,9 +689,32 @@ public abstract class AbstractItem extends Actionable implements Loadable, Item,
|
||||
* Note on the funny name: for reasons of historical compatibility, this URL is {@code /doDelete}
|
||||
* since it predates {@code <l:confirmationLink>}. {@code /delete} goes to a Jelly page
|
||||
* which should now be unused by core but is left in case plugins are still using it.
|
||||
*
|
||||
* @since TODO
|
||||
*/
|
||||
@RequirePOST
|
||||
public void doDoDelete(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException, InterruptedException {
|
||||
public void doDoDelete(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException, InterruptedException {
|
||||
if (Util.isOverridden(AbstractItem.class, getClass(), "doDoDelete", StaplerRequest.class, StaplerResponse.class)) {
|
||||
try {
|
||||
doDoDelete(StaplerRequest.fromStaplerRequest2(req), StaplerResponse.fromStaplerResponse2(rsp));
|
||||
} catch (javax.servlet.ServletException e) {
|
||||
throw ServletExceptionWrapper.toJakartaServletException(e);
|
||||
}
|
||||
} else {
|
||||
doDoDeleteImpl(req, rsp);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #doDoDelete(StaplerRequest2, StaplerResponse2)}
|
||||
*/
|
||||
@Deprecated
|
||||
@StaplerNotDispatchable
|
||||
public void doDoDelete(StaplerRequest req, StaplerResponse rsp) throws IOException, javax.servlet.ServletException, InterruptedException {
|
||||
doDoDeleteImpl(StaplerRequest.toStaplerRequest2(req), StaplerResponse.toStaplerResponse2(rsp));
|
||||
}
|
||||
|
||||
private void doDoDeleteImpl(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, InterruptedException {
|
||||
delete();
|
||||
if (req == null || rsp == null) { // CLI
|
||||
return;
|
||||
@ -681,8 +735,28 @@ public abstract class AbstractItem extends Actionable implements Loadable, Item,
|
||||
rsp.sendRedirect2(req.getContextPath() + '/' + url);
|
||||
}
|
||||
|
||||
/**
|
||||
* @since TODO
|
||||
*/
|
||||
@Override
|
||||
public void delete(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException {
|
||||
public void delete(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException {
|
||||
deleteImpl(rsp);
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #delete(StaplerRequest2, StaplerResponse2)}
|
||||
*/
|
||||
@Deprecated
|
||||
@Override
|
||||
public void delete(StaplerRequest req, StaplerResponse rsp) throws IOException, javax.servlet.ServletException {
|
||||
try {
|
||||
deleteImpl(StaplerResponse.toStaplerResponse2(rsp));
|
||||
} catch (ServletException e) {
|
||||
throw ServletExceptionWrapper.fromJakartaServletException(e);
|
||||
}
|
||||
}
|
||||
|
||||
private void deleteImpl(StaplerResponse2 rsp) throws IOException, ServletException {
|
||||
try {
|
||||
delete();
|
||||
rsp.setStatus(204);
|
||||
@ -755,10 +829,31 @@ public abstract class AbstractItem extends Actionable implements Loadable, Item,
|
||||
|
||||
/**
|
||||
* Accepts {@code config.xml} submission, as well as serve it.
|
||||
*
|
||||
* @since TODO
|
||||
*/
|
||||
@WebMethod(name = "config.xml")
|
||||
public void doConfigDotXml(StaplerRequest2 req, StaplerResponse2 rsp)
|
||||
throws IOException {
|
||||
if (Util.isOverridden(AbstractItem.class, getClass(), "doConfigDotXml", StaplerRequest.class, StaplerResponse.class)) {
|
||||
doConfigDotXml(StaplerRequest.fromStaplerRequest2(req), StaplerResponse.fromStaplerResponse2(rsp));
|
||||
} else {
|
||||
doConfigDotXmlImpl(req, rsp);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #doConfigDotXml(StaplerRequest2, StaplerResponse2)}
|
||||
*/
|
||||
@Deprecated
|
||||
@StaplerNotDispatchable
|
||||
public void doConfigDotXml(StaplerRequest req, StaplerResponse rsp)
|
||||
throws IOException {
|
||||
doConfigDotXmlImpl(StaplerRequest.toStaplerRequest2(req), StaplerResponse.toStaplerResponse2(rsp));
|
||||
}
|
||||
|
||||
private void doConfigDotXmlImpl(StaplerRequest2 req, StaplerResponse2 rsp)
|
||||
throws IOException {
|
||||
if (req.getMethod().equals("GET")) {
|
||||
// read
|
||||
rsp.setContentType("application/xml");
|
||||
|
@ -29,11 +29,14 @@ import hudson.search.SearchFactory;
|
||||
import hudson.search.SearchIndex;
|
||||
import hudson.search.SearchIndexBuilder;
|
||||
import hudson.search.SearchableModelObject;
|
||||
import io.jenkins.servlet.ServletExceptionWrapper;
|
||||
import jakarta.servlet.ServletException;
|
||||
import java.io.IOException;
|
||||
import javax.servlet.ServletException;
|
||||
import org.kohsuke.stapler.Stapler;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.kohsuke.stapler.StaplerResponse;
|
||||
import org.kohsuke.stapler.StaplerResponse2;
|
||||
import org.kohsuke.stapler.interceptor.RequirePOST;
|
||||
|
||||
/**
|
||||
@ -45,33 +48,69 @@ public abstract class AbstractModelObject implements SearchableModelObject {
|
||||
/**
|
||||
* Displays the error in a page.
|
||||
*/
|
||||
protected final void sendError(Exception e, StaplerRequest req, StaplerResponse rsp) throws ServletException, IOException {
|
||||
protected final void sendError(Exception e, StaplerRequest2 req, StaplerResponse2 rsp) throws ServletException, IOException {
|
||||
req.setAttribute("exception", e);
|
||||
sendError(e.getMessage(), req, rsp);
|
||||
}
|
||||
|
||||
protected final void sendError(Exception e) throws ServletException, IOException {
|
||||
sendError(e, Stapler.getCurrentRequest(), Stapler.getCurrentResponse());
|
||||
/**
|
||||
* @deprecated use {@link #sendError(Exception, StaplerRequest2, StaplerResponse2)}
|
||||
*/
|
||||
@Deprecated
|
||||
protected final void sendError(Exception e, StaplerRequest req, StaplerResponse rsp) throws javax.servlet.ServletException, IOException {
|
||||
try {
|
||||
sendError(e, StaplerRequest.toStaplerRequest2(req), StaplerResponse.toStaplerResponse2(rsp));
|
||||
} catch (ServletException ex) {
|
||||
throw ServletExceptionWrapper.fromJakartaServletException(ex);
|
||||
}
|
||||
}
|
||||
|
||||
protected final void sendError(String message, StaplerRequest req, StaplerResponse rsp) throws ServletException, IOException {
|
||||
protected final void sendError(Exception e) throws ServletException, IOException {
|
||||
sendError(e, Stapler.getCurrentRequest2(), Stapler.getCurrentResponse2());
|
||||
}
|
||||
|
||||
protected final void sendError(String message, StaplerRequest2 req, StaplerResponse2 rsp) throws ServletException, IOException {
|
||||
req.setAttribute("message", message);
|
||||
rsp.forward(this, "error", req);
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #sendError(String, StaplerRequest2, StaplerResponse2)}
|
||||
*/
|
||||
@Deprecated
|
||||
protected final void sendError(String message, StaplerRequest req, StaplerResponse rsp) throws javax.servlet.ServletException, IOException {
|
||||
try {
|
||||
sendError(message, StaplerRequest.toStaplerRequest2(req), StaplerResponse.toStaplerResponse2(rsp));
|
||||
} catch (ServletException e) {
|
||||
throw ServletExceptionWrapper.fromJakartaServletException(e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param pre
|
||||
* If true, the message is put in a PRE tag.
|
||||
*/
|
||||
protected final void sendError(String message, StaplerRequest req, StaplerResponse rsp, boolean pre) throws ServletException, IOException {
|
||||
protected final void sendError(String message, StaplerRequest2 req, StaplerResponse2 rsp, boolean pre) throws ServletException, IOException {
|
||||
req.setAttribute("message", message);
|
||||
if (pre)
|
||||
req.setAttribute("pre", true);
|
||||
rsp.forward(this, "error", req);
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #sendError(String, StaplerRequest2, StaplerResponse2, boolean)}
|
||||
*/
|
||||
@Deprecated
|
||||
protected final void sendError(String message, StaplerRequest req, StaplerResponse rsp, boolean pre) throws javax.servlet.ServletException, IOException {
|
||||
try {
|
||||
sendError(message, StaplerRequest.toStaplerRequest2(req), StaplerResponse.toStaplerResponse2(rsp), pre);
|
||||
} catch (ServletException e) {
|
||||
throw ServletExceptionWrapper.fromJakartaServletException(e);
|
||||
}
|
||||
}
|
||||
|
||||
protected final void sendError(String message) throws ServletException, IOException {
|
||||
sendError(message, Stapler.getCurrentRequest(), Stapler.getCurrentResponse());
|
||||
sendError(message, Stapler.getCurrentRequest2(), Stapler.getCurrentResponse2());
|
||||
}
|
||||
|
||||
/**
|
||||
@ -82,7 +121,7 @@ public abstract class AbstractModelObject implements SearchableModelObject {
|
||||
*/
|
||||
@Deprecated
|
||||
protected final void requirePOST() throws ServletException {
|
||||
StaplerRequest req = Stapler.getCurrentRequest();
|
||||
StaplerRequest2 req = Stapler.getCurrentRequest2();
|
||||
if (req == null) return; // invoked outside the context of servlet
|
||||
String method = req.getMethod();
|
||||
if (!method.equalsIgnoreCase("POST"))
|
||||
|
@ -77,6 +77,8 @@ import hudson.util.AlternativeUiTextProvider;
|
||||
import hudson.util.AlternativeUiTextProvider.Message;
|
||||
import hudson.util.DescribableList;
|
||||
import hudson.util.FormValidation;
|
||||
import io.jenkins.servlet.ServletExceptionWrapper;
|
||||
import jakarta.servlet.ServletException;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
@ -96,7 +98,6 @@ import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import javax.servlet.ServletException;
|
||||
import jenkins.model.BlockedBecauseOfBuildInProgress;
|
||||
import jenkins.model.Jenkins;
|
||||
import jenkins.model.ParameterizedJobMixIn;
|
||||
@ -120,7 +121,9 @@ import org.kohsuke.stapler.HttpRedirect;
|
||||
import org.kohsuke.stapler.HttpResponse;
|
||||
import org.kohsuke.stapler.QueryParameter;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.kohsuke.stapler.StaplerResponse;
|
||||
import org.kohsuke.stapler.StaplerResponse2;
|
||||
import org.kohsuke.stapler.export.Exported;
|
||||
import org.kohsuke.stapler.interceptor.RequirePOST;
|
||||
import org.kohsuke.stapler.verb.POST;
|
||||
@ -769,7 +772,7 @@ public abstract class AbstractProject<P extends AbstractProject<P, R>, R extends
|
||||
|
||||
@Override
|
||||
@POST
|
||||
public void doConfigSubmit(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException, FormException {
|
||||
public void doConfigSubmit(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException, FormException {
|
||||
super.doConfigSubmit(req, rsp);
|
||||
|
||||
updateTransientActions();
|
||||
@ -1726,10 +1729,14 @@ public abstract class AbstractProject<P extends AbstractProject<P, R>, R extends
|
||||
//
|
||||
//
|
||||
|
||||
/** @deprecated use {@link #doBuild(StaplerRequest, StaplerResponse, TimeDuration)} */
|
||||
/** @deprecated use {@link #doBuild(StaplerRequest2, StaplerResponse2, TimeDuration)} */
|
||||
@Deprecated
|
||||
public void doBuild(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException {
|
||||
doBuild(req, rsp, TimeDuration.fromString(req.getParameter("delay")));
|
||||
public void doBuild(StaplerRequest req, StaplerResponse rsp) throws IOException, javax.servlet.ServletException {
|
||||
try {
|
||||
doBuild(StaplerRequest.toStaplerRequest2(req), StaplerResponse.toStaplerResponse2(rsp), TimeDuration.fromString(req.getParameter("delay")));
|
||||
} catch (ServletException e) {
|
||||
throw ServletExceptionWrapper.fromJakartaServletException(e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1739,7 +1746,7 @@ public abstract class AbstractProject<P extends AbstractProject<P, R>, R extends
|
||||
* Inject {@link TimeDuration}.
|
||||
*/
|
||||
@Deprecated
|
||||
public int getDelay(StaplerRequest req) throws ServletException {
|
||||
public int getDelay(StaplerRequest req) throws javax.servlet.ServletException {
|
||||
String delay = req.getParameter("delay");
|
||||
if (delay == null) return getQuietPeriod();
|
||||
|
||||
@ -1749,26 +1756,59 @@ public abstract class AbstractProject<P extends AbstractProject<P, R>, R extends
|
||||
if (delay.endsWith("secs")) delay = delay.substring(0, delay.length() - 4);
|
||||
return Integer.parseInt(delay);
|
||||
} catch (NumberFormatException e) {
|
||||
throw new ServletException("Invalid delay parameter value: " + delay, e);
|
||||
throw new javax.servlet.ServletException("Invalid delay parameter value: " + delay, e);
|
||||
}
|
||||
}
|
||||
|
||||
/** @deprecated use {@link #doBuildWithParameters(StaplerRequest, StaplerResponse, TimeDuration)} */
|
||||
/** @deprecated use {@link #doBuildWithParameters(StaplerRequest2, StaplerResponse2, TimeDuration)} */
|
||||
@Deprecated
|
||||
public void doBuildWithParameters(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException {
|
||||
doBuildWithParameters(req, rsp, TimeDuration.fromString(req.getParameter("delay")));
|
||||
public void doBuildWithParameters(StaplerRequest req, StaplerResponse rsp) throws IOException, javax.servlet.ServletException {
|
||||
try {
|
||||
doBuildWithParameters(StaplerRequest.toStaplerRequest2(req), StaplerResponse.toStaplerResponse2(rsp), TimeDuration.fromString(req.getParameter("delay")));
|
||||
} catch (ServletException e) {
|
||||
throw ServletExceptionWrapper.fromJakartaServletException(e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override // in case schedulePolling was overridden
|
||||
public void doPolling(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException {
|
||||
public void doPolling(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException {
|
||||
BuildAuthorizationToken.checkPermission((Job) this, authToken, req, rsp);
|
||||
schedulePolling();
|
||||
rsp.sendRedirect(".");
|
||||
}
|
||||
|
||||
/**
|
||||
* @since TODO
|
||||
*/
|
||||
@Override
|
||||
protected void submit(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException, FormException {
|
||||
protected void submit(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException, FormException {
|
||||
if (Util.isOverridden(AbstractProject.class, getClass(), "submit", StaplerRequest.class, StaplerResponse.class)) {
|
||||
try {
|
||||
submit(StaplerRequest.fromStaplerRequest2(req), StaplerResponse.fromStaplerResponse2(rsp));
|
||||
} catch (javax.servlet.ServletException e) {
|
||||
throw ServletExceptionWrapper.toJakartaServletException(e);
|
||||
}
|
||||
} else {
|
||||
super.submit(req, rsp);
|
||||
submitImpl(req, rsp);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #submit(StaplerRequest2, StaplerResponse2)}
|
||||
*/
|
||||
@Deprecated
|
||||
@Override
|
||||
protected void submit(StaplerRequest req, StaplerResponse rsp) throws IOException, javax.servlet.ServletException, FormException {
|
||||
super.submit(req, rsp);
|
||||
try {
|
||||
submitImpl(StaplerRequest.toStaplerRequest2(req), StaplerResponse.toStaplerResponse2(rsp));
|
||||
} catch (ServletException e) {
|
||||
throw ServletExceptionWrapper.fromJakartaServletException(e);
|
||||
}
|
||||
}
|
||||
|
||||
private void submitImpl(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException, FormException {
|
||||
JSONObject json = req.getSubmittedForm();
|
||||
|
||||
makeDisabled(!json.optBoolean("enable"));
|
||||
@ -1835,14 +1875,18 @@ public abstract class AbstractProject<P extends AbstractProject<P, R>, R extends
|
||||
|
||||
/**
|
||||
* @deprecated
|
||||
* As of 1.261. Use {@link #buildDescribable(StaplerRequest, List)} instead.
|
||||
* As of 1.261. Use {@link #buildDescribable(StaplerRequest2, List)} instead.
|
||||
*/
|
||||
@Deprecated
|
||||
protected final <T extends Describable<T>> List<T> buildDescribable(StaplerRequest req, List<? extends Descriptor<T>> descriptors, String prefix) throws FormException, ServletException {
|
||||
return buildDescribable(req, descriptors);
|
||||
protected final <T extends Describable<T>> List<T> buildDescribable(StaplerRequest req, List<? extends Descriptor<T>> descriptors, String prefix) throws FormException, javax.servlet.ServletException {
|
||||
try {
|
||||
return buildDescribable(StaplerRequest.toStaplerRequest2(req), descriptors);
|
||||
} catch (ServletException e) {
|
||||
throw ServletExceptionWrapper.fromJakartaServletException(e);
|
||||
}
|
||||
}
|
||||
|
||||
protected final <T extends Describable<T>> List<T> buildDescribable(StaplerRequest req, List<? extends Descriptor<T>> descriptors)
|
||||
protected final <T extends Describable<T>> List<T> buildDescribable(StaplerRequest2 req, List<? extends Descriptor<T>> descriptors)
|
||||
throws FormException, ServletException {
|
||||
|
||||
JSONObject data = req.getSubmittedForm();
|
||||
@ -1860,7 +1904,7 @@ public abstract class AbstractProject<P extends AbstractProject<P, R>, R extends
|
||||
/**
|
||||
* Serves the workspace files.
|
||||
*/
|
||||
public DirectoryBrowserSupport doWs(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException, InterruptedException {
|
||||
public DirectoryBrowserSupport doWs(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException, InterruptedException {
|
||||
checkPermission(Item.WORKSPACE);
|
||||
FilePath ws = getSomeWorkspace();
|
||||
if (ws == null || !ws.exists()) {
|
||||
@ -1887,7 +1931,7 @@ public abstract class AbstractProject<P extends AbstractProject<P, R>, R extends
|
||||
* Wipes out the workspace.
|
||||
*/
|
||||
@RequirePOST
|
||||
public HttpResponse doDoWipeOutWorkspace() throws IOException, ServletException, InterruptedException {
|
||||
public HttpResponse doDoWipeOutWorkspace() throws IOException, InterruptedException {
|
||||
checkPermission(Functions.isWipeOutPermissionEnabled() ? WIPEOUT : BUILD);
|
||||
R b = getSomeBuildWithWorkspace();
|
||||
FilePath ws = b != null ? b.getWorkspace() : null;
|
||||
|
@ -37,8 +37,11 @@ import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import jenkins.model.ModelObjectWithContextMenu;
|
||||
import jenkins.model.TransientActionFactory;
|
||||
import jenkins.security.stapler.StaplerNotDispatchable;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.kohsuke.stapler.StaplerResponse;
|
||||
import org.kohsuke.stapler.StaplerResponse2;
|
||||
import org.kohsuke.stapler.export.Exported;
|
||||
import org.kohsuke.stapler.export.ExportedBean;
|
||||
|
||||
@ -338,7 +341,26 @@ public abstract class Actionable extends AbstractModelObject implements ModelObj
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @since TODO
|
||||
*/
|
||||
public Object getDynamic(String token, StaplerRequest2 req, StaplerResponse2 rsp) {
|
||||
if (Util.isOverridden(Actionable.class, getClass(), "getDynamic", String.class, StaplerRequest.class, StaplerResponse.class)) {
|
||||
return getDynamic(token, StaplerRequest.fromStaplerRequest2(req), StaplerResponse.fromStaplerResponse2(rsp));
|
||||
} else {
|
||||
return getDynamicImpl(token, req, rsp);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #getDynamic(String, StaplerRequest2, StaplerResponse2)}
|
||||
*/
|
||||
@Deprecated
|
||||
public Object getDynamic(String token, StaplerRequest req, StaplerResponse rsp) {
|
||||
return getDynamicImpl(token, StaplerRequest.toStaplerRequest2(req), StaplerResponse.toStaplerResponse2(rsp));
|
||||
}
|
||||
|
||||
private Object getDynamicImpl(String token, StaplerRequest2 req, StaplerResponse2 rsp) {
|
||||
for (Action a : getAllActions()) {
|
||||
if (a == null)
|
||||
continue; // be defensive
|
||||
@ -351,7 +373,29 @@ public abstract class Actionable extends AbstractModelObject implements ModelObj
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override public ContextMenu doContextMenu(StaplerRequest request, StaplerResponse response) throws Exception {
|
||||
/**
|
||||
* @since TODO
|
||||
*/
|
||||
@Override
|
||||
public ContextMenu doContextMenu(StaplerRequest2 request, StaplerResponse2 response) throws Exception {
|
||||
if (Util.isOverridden(Actionable.class, getClass(), "doContextMenu", StaplerRequest.class, StaplerResponse.class)) {
|
||||
return doContextMenu(StaplerRequest.fromStaplerRequest2(request), StaplerResponse.fromStaplerResponse2(response));
|
||||
} else {
|
||||
return doContextMenuImpl(request, response);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #doContextMenu(StaplerRequest2, StaplerResponse2)}
|
||||
*/
|
||||
@Deprecated
|
||||
@StaplerNotDispatchable
|
||||
@Override
|
||||
public ContextMenu doContextMenu(StaplerRequest request, StaplerResponse response) throws Exception {
|
||||
return doContextMenuImpl(StaplerRequest.toStaplerRequest2(request), StaplerResponse.toStaplerResponse2(response));
|
||||
}
|
||||
|
||||
private ContextMenu doContextMenuImpl(StaplerRequest2 request, StaplerResponse2 response) throws Exception {
|
||||
return new ContextMenu().from(this, request, response);
|
||||
}
|
||||
|
||||
|
@ -37,8 +37,8 @@ import jenkins.model.Jenkins;
|
||||
import org.kohsuke.accmod.Restricted;
|
||||
import org.kohsuke.accmod.restrictions.NoExternalUse;
|
||||
import org.kohsuke.stapler.StaplerProxy;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerResponse;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.kohsuke.stapler.StaplerResponse2;
|
||||
import org.kohsuke.stapler.interceptor.RequirePOST;
|
||||
|
||||
/**
|
||||
@ -175,7 +175,7 @@ public abstract class AdministrativeMonitor extends AbstractModelObject implemen
|
||||
* URL binding to disable this monitor.
|
||||
*/
|
||||
@RequirePOST
|
||||
public void doDisable(StaplerRequest req, StaplerResponse rsp) throws IOException {
|
||||
public void doDisable(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException {
|
||||
Jenkins.get().checkPermission(Jenkins.ADMINISTER);
|
||||
disable(true);
|
||||
rsp.sendRedirect2(req.getContextPath() + "/manage");
|
||||
@ -188,7 +188,7 @@ public abstract class AdministrativeMonitor extends AbstractModelObject implemen
|
||||
* Changing this permission check to return {@link Jenkins#SYSTEM_READ} will make the active
|
||||
* administrative monitor appear on {@code manage.jelly} and on the globally visible
|
||||
* {@link jenkins.management.AdministrativeMonitorsDecorator} to users without Administer permission.
|
||||
* {@link #doDisable(StaplerRequest, StaplerResponse)} will still always require Administer permission.
|
||||
* {@link #doDisable(StaplerRequest2, StaplerResponse2)} will still always require Administer permission.
|
||||
* </p>
|
||||
* <p>
|
||||
* This method only allows for a single permission to be returned. If more complex permission checks are required,
|
||||
|
@ -26,7 +26,10 @@ package hudson.model;
|
||||
|
||||
import edu.umd.cs.findbugs.annotations.NonNull;
|
||||
import hudson.Extension;
|
||||
import hudson.Util;
|
||||
import hudson.model.Descriptor.FormException;
|
||||
import io.jenkins.servlet.ServletExceptionWrapper;
|
||||
import jakarta.servlet.ServletException;
|
||||
import java.io.IOException;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
@ -34,12 +37,12 @@ import java.util.Locale;
|
||||
import java.util.Objects;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import javax.servlet.ServletException;
|
||||
import jenkins.util.SystemProperties;
|
||||
import org.jenkinsci.Symbol;
|
||||
import org.kohsuke.stapler.DataBoundConstructor;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerResponse;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.kohsuke.stapler.StaplerResponse2;
|
||||
import org.kohsuke.stapler.interceptor.RequirePOST;
|
||||
|
||||
/**
|
||||
@ -91,7 +94,7 @@ public class AllView extends View {
|
||||
|
||||
@RequirePOST
|
||||
@Override
|
||||
public Item doCreateItem(StaplerRequest req, StaplerResponse rsp)
|
||||
public Item doCreateItem(StaplerRequest2 req, StaplerResponse2 rsp)
|
||||
throws IOException, ServletException {
|
||||
ItemGroup<? extends TopLevelItem> ig = getOwner().getItemGroup();
|
||||
if (ig instanceof ModifiableItemGroup)
|
||||
@ -110,7 +113,24 @@ public class AllView extends View {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void submit(StaplerRequest req) throws IOException, ServletException, FormException {
|
||||
protected void submit(StaplerRequest2 req) throws IOException, ServletException, FormException {
|
||||
if (Util.isOverridden(AllView.class, getClass(), "submit", StaplerRequest.class)) {
|
||||
try {
|
||||
submit(StaplerRequest.fromStaplerRequest2(req));
|
||||
} catch (javax.servlet.ServletException e) {
|
||||
throw ServletExceptionWrapper.toJakartaServletException(e);
|
||||
}
|
||||
} else {
|
||||
// noop
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #submit(StaplerRequest2)}
|
||||
*/
|
||||
@Deprecated
|
||||
@Override
|
||||
protected void submit(StaplerRequest req) throws IOException, javax.servlet.ServletException, FormException {
|
||||
// noop
|
||||
}
|
||||
|
||||
|
@ -25,6 +25,10 @@
|
||||
package hudson.model;
|
||||
|
||||
import hudson.ExtensionList;
|
||||
import hudson.Util;
|
||||
import io.jenkins.servlet.ServletExceptionWrapper;
|
||||
import jakarta.servlet.ServletException;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
import java.io.StringReader;
|
||||
@ -34,11 +38,10 @@ import java.nio.charset.StandardCharsets;
|
||||
import java.util.List;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.xml.transform.stream.StreamResult;
|
||||
import jenkins.model.Jenkins;
|
||||
import jenkins.security.SecureRequester;
|
||||
import jenkins.security.stapler.StaplerNotDispatchable;
|
||||
import jenkins.util.xml.FilteredFunctionContext;
|
||||
import org.dom4j.CharacterData;
|
||||
import org.dom4j.Document;
|
||||
@ -52,7 +55,9 @@ import org.kohsuke.accmod.Restricted;
|
||||
import org.kohsuke.accmod.restrictions.NoExternalUse;
|
||||
import org.kohsuke.stapler.QueryParameter;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.kohsuke.stapler.StaplerResponse;
|
||||
import org.kohsuke.stapler.StaplerResponse2;
|
||||
import org.kohsuke.stapler.export.Exported;
|
||||
import org.kohsuke.stapler.export.Flavor;
|
||||
import org.kohsuke.stapler.export.Model;
|
||||
@ -96,7 +101,7 @@ public class Api extends AbstractModelObject {
|
||||
/**
|
||||
* Exposes the bean as XML.
|
||||
*/
|
||||
public void doXml(StaplerRequest req, StaplerResponse rsp,
|
||||
public void doXml(StaplerRequest2 req, StaplerResponse2 rsp,
|
||||
@QueryParameter String xpath,
|
||||
@QueryParameter String wrapper,
|
||||
@QueryParameter String tree,
|
||||
@ -212,7 +217,7 @@ public class Api extends AbstractModelObject {
|
||||
/**
|
||||
* Generate schema.
|
||||
*/
|
||||
public void doSchema(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException {
|
||||
public void doSchema(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException {
|
||||
setHeaders(rsp);
|
||||
rsp.setContentType("application/xml");
|
||||
StreamResult r = new StreamResult(rsp.getOutputStream());
|
||||
@ -223,7 +228,32 @@ public class Api extends AbstractModelObject {
|
||||
/**
|
||||
* Exposes the bean as JSON.
|
||||
*/
|
||||
public void doJson(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException {
|
||||
public void doJson(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException {
|
||||
if (Util.isOverridden(Api.class, getClass(), "doJson", StaplerRequest.class, StaplerResponse.class)) {
|
||||
try {
|
||||
doJson(StaplerRequest.fromStaplerRequest2(req), StaplerResponse.fromStaplerResponse2(rsp));
|
||||
} catch (javax.servlet.ServletException e) {
|
||||
throw ServletExceptionWrapper.toJakartaServletException(e);
|
||||
}
|
||||
} else {
|
||||
doJsonImpl(req, rsp);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #doJson(StaplerRequest2, StaplerResponse2)}
|
||||
*/
|
||||
@Deprecated
|
||||
@StaplerNotDispatchable
|
||||
public void doJson(StaplerRequest req, StaplerResponse rsp) throws IOException, javax.servlet.ServletException {
|
||||
try {
|
||||
doJsonImpl(StaplerRequest.toStaplerRequest2(req), StaplerResponse.toStaplerResponse2(rsp));
|
||||
} catch (ServletException e) {
|
||||
throw ServletExceptionWrapper.fromJakartaServletException(e);
|
||||
}
|
||||
}
|
||||
|
||||
private void doJsonImpl(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException {
|
||||
if (req.getParameter("jsonp") == null || permit(req)) {
|
||||
setHeaders(rsp);
|
||||
rsp.serveExposedBean(req, bean, req.getParameter("jsonp") == null ? Flavor.JSON : Flavor.JSONP);
|
||||
@ -235,12 +265,37 @@ public class Api extends AbstractModelObject {
|
||||
/**
|
||||
* Exposes the bean as Python literal.
|
||||
*/
|
||||
public void doPython(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException {
|
||||
public void doPython(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException {
|
||||
if (Util.isOverridden(Api.class, getClass(), "doPython", StaplerRequest.class, StaplerResponse.class)) {
|
||||
try {
|
||||
doPython(StaplerRequest.fromStaplerRequest2(req), StaplerResponse.fromStaplerResponse2(rsp));
|
||||
} catch (javax.servlet.ServletException e) {
|
||||
throw ServletExceptionWrapper.toJakartaServletException(e);
|
||||
}
|
||||
} else {
|
||||
doPythonImpl(req, rsp);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #doPython(StaplerRequest2, StaplerResponse2)}
|
||||
*/
|
||||
@Deprecated
|
||||
@StaplerNotDispatchable
|
||||
public void doPython(StaplerRequest req, StaplerResponse rsp) throws IOException, javax.servlet.ServletException {
|
||||
try {
|
||||
doPythonImpl(StaplerRequest.toStaplerRequest2(req), StaplerResponse.toStaplerResponse2(rsp));
|
||||
} catch (ServletException e) {
|
||||
throw ServletExceptionWrapper.fromJakartaServletException(e);
|
||||
}
|
||||
}
|
||||
|
||||
private void doPythonImpl(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException {
|
||||
setHeaders(rsp);
|
||||
rsp.serveExposedBean(req, bean, Flavor.PYTHON);
|
||||
}
|
||||
|
||||
private boolean permit(StaplerRequest req) {
|
||||
private boolean permit(StaplerRequest2 req) {
|
||||
for (SecureRequester r : ExtensionList.lookup(SecureRequester.class)) {
|
||||
if (r.permit(req, bean)) {
|
||||
return true;
|
||||
@ -250,7 +305,7 @@ public class Api extends AbstractModelObject {
|
||||
}
|
||||
|
||||
@Restricted(NoExternalUse.class)
|
||||
protected void setHeaders(StaplerResponse rsp) {
|
||||
protected void setHeaders(StaplerResponse2 rsp) {
|
||||
rsp.setHeader("X-Jenkins", Jenkins.VERSION);
|
||||
rsp.setHeader("X-Jenkins-Session", Jenkins.SESSION_HASH);
|
||||
// to be really defensive against dumb browsers not taking into consideration the content-type being set
|
||||
|
@ -28,16 +28,16 @@ import edu.umd.cs.findbugs.annotations.CheckForNull;
|
||||
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
|
||||
import hudson.search.Search;
|
||||
import hudson.search.UserSearchProperty;
|
||||
import jakarta.servlet.ServletException;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import javax.servlet.ServletException;
|
||||
import jenkins.model.Jenkins;
|
||||
import org.kohsuke.stapler.HttpResponse;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerResponse;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.kohsuke.stapler.StaplerResponse2;
|
||||
import org.kohsuke.stapler.export.Flavor;
|
||||
|
||||
/**
|
||||
@ -69,7 +69,7 @@ public class AutoCompletionCandidates implements HttpResponse {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void generateResponse(StaplerRequest req, StaplerResponse rsp, Object o) throws IOException, ServletException {
|
||||
public void generateResponse(StaplerRequest2 req, StaplerResponse2 rsp, Object o) throws IOException, ServletException {
|
||||
Search.Result r = new Search.Result();
|
||||
for (String value : values) {
|
||||
r.suggestions.add(new hudson.search.Search.Item(value));
|
||||
|
@ -113,7 +113,7 @@ public enum BallColor implements StatusIcon {
|
||||
|
||||
@Override
|
||||
public String getImageOf(String size) {
|
||||
return Stapler.getCurrentRequest().getContextPath() + Jenkins.RESOURCE_PATH + "/images/" + size + '/' + image;
|
||||
return Stapler.getCurrentRequest2().getContextPath() + Jenkins.RESOURCE_PATH + "/images/" + size + '/' + image;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -33,7 +33,7 @@ import net.sf.json.JSONObject;
|
||||
import org.jenkinsci.Symbol;
|
||||
import org.kohsuke.stapler.DataBoundConstructor;
|
||||
import org.kohsuke.stapler.DataBoundSetter;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
|
||||
/**
|
||||
* {@link ParameterDefinition} that is either 'true' or 'false'.
|
||||
@ -79,7 +79,7 @@ public class BooleanParameterDefinition extends SimpleParameterDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public ParameterValue createValue(StaplerRequest req, JSONObject jo) {
|
||||
public ParameterValue createValue(StaplerRequest2 req, JSONObject jo) {
|
||||
BooleanParameterValue value = req.bindJSON(BooleanParameterValue.class, jo);
|
||||
value.setDescription(getDescription());
|
||||
return value;
|
||||
|
@ -27,11 +27,13 @@ package hudson.model;
|
||||
import com.thoughtworks.xstream.converters.basic.AbstractSingleValueConverter;
|
||||
import hudson.Util;
|
||||
import hudson.security.ACL;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import org.kohsuke.stapler.HttpResponses;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.kohsuke.stapler.StaplerResponse;
|
||||
import org.kohsuke.stapler.StaplerResponse2;
|
||||
import org.springframework.security.access.AccessDeniedException;
|
||||
|
||||
/**
|
||||
@ -51,7 +53,10 @@ public final class BuildAuthorizationToken {
|
||||
this.token = token;
|
||||
}
|
||||
|
||||
public static BuildAuthorizationToken create(StaplerRequest req) {
|
||||
/**
|
||||
* @since TODO
|
||||
*/
|
||||
public static BuildAuthorizationToken create(StaplerRequest2 req) {
|
||||
if (req.getParameter("pseudoRemoteTrigger") != null) {
|
||||
String token = Util.fixEmpty(req.getParameter("authToken"));
|
||||
if (token != null)
|
||||
@ -61,11 +66,22 @@ public final class BuildAuthorizationToken {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Deprecated public static void checkPermission(AbstractProject<?, ?> project, BuildAuthorizationToken token, StaplerRequest req, StaplerResponse rsp) throws IOException {
|
||||
checkPermission((Job<?, ?>) project, token, req, rsp);
|
||||
/**
|
||||
* @deprecated use {@link #create(StaplerRequest2)}
|
||||
*/
|
||||
@Deprecated
|
||||
public static BuildAuthorizationToken create(StaplerRequest req) {
|
||||
return create(StaplerRequest.toStaplerRequest2(req));
|
||||
}
|
||||
|
||||
public static void checkPermission(Job<?, ?> project, BuildAuthorizationToken token, StaplerRequest req, StaplerResponse rsp) throws IOException {
|
||||
@Deprecated public static void checkPermission(AbstractProject<?, ?> project, BuildAuthorizationToken token, StaplerRequest req, StaplerResponse rsp) throws IOException {
|
||||
checkPermission((Job<?, ?>) project, token, StaplerRequest.toStaplerRequest2(req), StaplerResponse.toStaplerResponse2(rsp));
|
||||
}
|
||||
|
||||
/**
|
||||
* @since TODO
|
||||
*/
|
||||
public static void checkPermission(Job<?, ?> project, BuildAuthorizationToken token, StaplerRequest2 req, StaplerResponse2 rsp) throws IOException {
|
||||
if (token != null && token.token != null) {
|
||||
//check the provided token
|
||||
String providedToken = req.getParameter("token");
|
||||
@ -86,6 +102,14 @@ public final class BuildAuthorizationToken {
|
||||
throw HttpResponses.forwardToView(project, "requirePOST.jelly");
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #checkPermission(Job, BuildAuthorizationToken, StaplerRequest2, StaplerResponse2)}
|
||||
*/
|
||||
@Deprecated
|
||||
public static void checkPermission(Job<?, ?> project, BuildAuthorizationToken token, StaplerRequest req, StaplerResponse rsp) throws IOException {
|
||||
checkPermission(project, token, StaplerRequest.toStaplerRequest2(req), StaplerResponse.toStaplerResponse2(rsp));
|
||||
}
|
||||
|
||||
public String getToken() {
|
||||
return token;
|
||||
}
|
||||
|
@ -25,12 +25,15 @@
|
||||
package hudson.model;
|
||||
|
||||
import hudson.util.RunList;
|
||||
import jakarta.servlet.ServletException;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import net.sf.json.JSONArray;
|
||||
import net.sf.json.JSONObject;
|
||||
import org.kohsuke.stapler.HttpResponse;
|
||||
import org.kohsuke.stapler.QueryParameter;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.kohsuke.stapler.StaplerResponse2;
|
||||
|
||||
/**
|
||||
* UI widget for showing the SIMILE timeline control.
|
||||
@ -60,12 +63,15 @@ public class BuildTimelineWidget {
|
||||
return builds.getLastBuild();
|
||||
}
|
||||
|
||||
public HttpResponse doData(StaplerRequest req, @QueryParameter long min, @QueryParameter long max) {
|
||||
return (req1, rsp, node) -> {
|
||||
JSONObject o = new JSONObject();
|
||||
o.put("events", JSONArray.fromObject(new ArrayList<>()));
|
||||
rsp.setContentType("text/javascript;charset=UTF-8");
|
||||
o.write(rsp.getWriter());
|
||||
public HttpResponse doData(StaplerRequest2 req, @QueryParameter long min, @QueryParameter long max) {
|
||||
return new HttpResponse() {
|
||||
@Override
|
||||
public void generateResponse(StaplerRequest2 req, StaplerResponse2 rsp, Object node) throws IOException, ServletException {
|
||||
JSONObject o = new JSONObject();
|
||||
o.put("events", JSONArray.fromObject(new ArrayList<>()));
|
||||
rsp.setContentType("text/javascript;charset=UTF-8");
|
||||
o.write(rsp.getWriter());
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -20,7 +20,7 @@ import org.kohsuke.accmod.restrictions.NoExternalUse;
|
||||
import org.kohsuke.stapler.DataBoundConstructor;
|
||||
import org.kohsuke.stapler.DataBoundSetter;
|
||||
import org.kohsuke.stapler.QueryParameter;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.kohsuke.stapler.export.Exported;
|
||||
|
||||
/**
|
||||
@ -152,7 +152,7 @@ public class ChoiceParameterDefinition extends SimpleParameterDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public ParameterValue createValue(StaplerRequest req, JSONObject jo) {
|
||||
public ParameterValue createValue(StaplerRequest2 req, JSONObject jo) {
|
||||
StringParameterValue value = req.bindJSON(StringParameterValue.class, jo);
|
||||
value.setDescription(getDescription());
|
||||
checkValue(value, value.getValue());
|
||||
@ -218,7 +218,7 @@ public class ChoiceParameterDefinition extends SimpleParameterDefinition {
|
||||
/*
|
||||
* We need this for JENKINS-26143 -- reflective creation cannot handle setChoices(Object). See that method for context.
|
||||
*/
|
||||
public ParameterDefinition newInstance(@Nullable StaplerRequest req, @NonNull JSONObject formData) throws FormException {
|
||||
public ParameterDefinition newInstance(@Nullable StaplerRequest2 req, @NonNull JSONObject formData) throws FormException {
|
||||
String name = formData.getString("name");
|
||||
String desc = formData.getString("description");
|
||||
String choiceText = formData.getString("choices");
|
||||
|
@ -26,7 +26,7 @@
|
||||
|
||||
package hudson.model;
|
||||
|
||||
import static javax.servlet.http.HttpServletResponse.SC_BAD_REQUEST;
|
||||
import static jakarta.servlet.http.HttpServletResponse.SC_BAD_REQUEST;
|
||||
|
||||
import edu.umd.cs.findbugs.annotations.CheckForNull;
|
||||
import edu.umd.cs.findbugs.annotations.NonNull;
|
||||
@ -73,6 +73,7 @@ import hudson.util.NamingThreadFactory;
|
||||
import hudson.util.RemotingDiagnostics;
|
||||
import hudson.util.RemotingDiagnostics.HeapDump;
|
||||
import hudson.util.RunList;
|
||||
import jakarta.servlet.ServletException;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
@ -105,7 +106,6 @@ import java.util.logging.LogRecord;
|
||||
import java.util.logging.Logger;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
import javax.servlet.ServletException;
|
||||
import jenkins.model.Jenkins;
|
||||
import jenkins.security.ImpersonatingExecutorService;
|
||||
import jenkins.security.MasterToSlaveCallable;
|
||||
@ -129,8 +129,8 @@ import org.kohsuke.stapler.HttpResponses;
|
||||
import org.kohsuke.stapler.QueryParameter;
|
||||
import org.kohsuke.stapler.Stapler;
|
||||
import org.kohsuke.stapler.StaplerProxy;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerResponse;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.kohsuke.stapler.StaplerResponse2;
|
||||
import org.kohsuke.stapler.WebMethod;
|
||||
import org.kohsuke.stapler.export.Exported;
|
||||
import org.kohsuke.stapler.export.ExportedBean;
|
||||
@ -227,7 +227,7 @@ public /*transient*/ abstract class Computer extends Actionable implements Acces
|
||||
* @since 1.607
|
||||
*/
|
||||
public void recordTermination() {
|
||||
StaplerRequest request = Stapler.getCurrentRequest();
|
||||
StaplerRequest2 request = Stapler.getCurrentRequest2();
|
||||
if (request != null) {
|
||||
terminatedBy.add(new TerminationRequest(
|
||||
String.format("Termination requested at %s by %s [id=%d] from HTTP request for %s",
|
||||
@ -416,7 +416,7 @@ public /*transient*/ abstract class Computer extends Actionable implements Acces
|
||||
/**
|
||||
* If {@link #getChannel()}==null, attempts to relaunch the agent.
|
||||
*/
|
||||
public abstract void doLaunchSlaveAgent(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException;
|
||||
public abstract void doLaunchSlaveAgent(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException;
|
||||
|
||||
/**
|
||||
* @deprecated since 2009-01-06. Use {@link #connect(boolean)}
|
||||
@ -427,7 +427,7 @@ public /*transient*/ abstract class Computer extends Actionable implements Acces
|
||||
}
|
||||
|
||||
/**
|
||||
* Do the same as {@link #doLaunchSlaveAgent(StaplerRequest, StaplerResponse)}
|
||||
* Do the same as {@link #doLaunchSlaveAgent(StaplerRequest2, StaplerResponse2)}
|
||||
* but outside the context of serving a request.
|
||||
*
|
||||
* <p>
|
||||
@ -1391,12 +1391,12 @@ public /*transient*/ abstract class Computer extends Actionable implements Acces
|
||||
//
|
||||
//
|
||||
@Restricted(DoNotUse.class)
|
||||
public void doRssAll(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException {
|
||||
public void doRssAll(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException {
|
||||
RSS.rss(req, rsp, "Jenkins:" + getDisplayName() + " (all builds)", getUrl(), getBuilds());
|
||||
}
|
||||
|
||||
@Restricted(DoNotUse.class)
|
||||
public void doRssFailed(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException {
|
||||
public void doRssFailed(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException {
|
||||
RSS.rss(req, rsp, "Jenkins:" + getDisplayName() + " (failed builds)", getUrl(), getBuilds().failureOnly());
|
||||
}
|
||||
|
||||
@ -1407,7 +1407,7 @@ public /*transient*/ abstract class Computer extends Actionable implements Acces
|
||||
* @since 2.215
|
||||
*/
|
||||
@Restricted(DoNotUse.class)
|
||||
public void doRssLatest(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException {
|
||||
public void doRssLatest(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException {
|
||||
final List<Run> lastBuilds = new ArrayList<>();
|
||||
for (AbstractProject<?, ?> p : Jenkins.get().allItems(AbstractProject.class)) {
|
||||
if (p.getLastBuild() != null) {
|
||||
@ -1452,7 +1452,7 @@ public /*transient*/ abstract class Computer extends Actionable implements Acces
|
||||
/**
|
||||
* Dumps the contents of the export table.
|
||||
*/
|
||||
public void doDumpExportTable(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException, InterruptedException {
|
||||
public void doDumpExportTable(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException, InterruptedException {
|
||||
// this is a debug probe and may expose sensitive information
|
||||
checkPermission(Jenkins.ADMINISTER);
|
||||
|
||||
@ -1488,18 +1488,18 @@ public /*transient*/ abstract class Computer extends Actionable implements Acces
|
||||
* For system diagnostics.
|
||||
* Run arbitrary Groovy script.
|
||||
*/
|
||||
public void doScript(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException {
|
||||
public void doScript(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException {
|
||||
_doScript(req, rsp, "_script.jelly");
|
||||
}
|
||||
|
||||
/**
|
||||
* Run arbitrary Groovy script and return result as plain text.
|
||||
*/
|
||||
public void doScriptText(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException {
|
||||
public void doScriptText(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException {
|
||||
_doScript(req, rsp, "_scriptText.jelly");
|
||||
}
|
||||
|
||||
protected void _doScript(StaplerRequest req, StaplerResponse rsp, String view) throws IOException, ServletException {
|
||||
protected void _doScript(StaplerRequest2 req, StaplerResponse2 rsp, String view) throws IOException, ServletException {
|
||||
Jenkins._doScript(req, rsp, req.getView(this, view), getChannel(), getACL());
|
||||
}
|
||||
|
||||
@ -1507,7 +1507,7 @@ public /*transient*/ abstract class Computer extends Actionable implements Acces
|
||||
* Accepts the update to the node configuration.
|
||||
*/
|
||||
@POST
|
||||
public void doConfigSubmit(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException, FormException {
|
||||
public void doConfigSubmit(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException, FormException {
|
||||
checkPermission(CONFIGURE);
|
||||
|
||||
String proposedName = Util.fixEmptyAndTrim(req.getSubmittedForm().getString("name"));
|
||||
@ -1547,7 +1547,7 @@ public /*transient*/ abstract class Computer extends Actionable implements Acces
|
||||
* Accepts {@code config.xml} submission, as well as serve it.
|
||||
*/
|
||||
@WebMethod(name = "config.xml")
|
||||
public void doConfigDotXml(StaplerRequest req, StaplerResponse rsp)
|
||||
public void doConfigDotXml(StaplerRequest2 req, StaplerResponse2 rsp)
|
||||
throws IOException, ServletException {
|
||||
|
||||
if (req.getMethod().equals("GET")) {
|
||||
@ -1626,7 +1626,7 @@ public /*transient*/ abstract class Computer extends Actionable implements Acces
|
||||
/**
|
||||
* Handles incremental log.
|
||||
*/
|
||||
public void doProgressiveLog(StaplerRequest req, StaplerResponse rsp) throws IOException {
|
||||
public void doProgressiveLog(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException {
|
||||
getLogText().doProgressText(req, rsp);
|
||||
}
|
||||
|
||||
|
@ -41,6 +41,7 @@ import hudson.triggers.SafeTimerTask;
|
||||
import hudson.util.DescribableList;
|
||||
import hudson.util.FormApply;
|
||||
import hudson.util.FormValidation;
|
||||
import jakarta.servlet.ServletException;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
@ -52,7 +53,6 @@ import java.util.Map;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import javax.servlet.ServletException;
|
||||
import jenkins.model.Jenkins;
|
||||
import jenkins.model.ModelObjectWithChildren;
|
||||
import jenkins.model.ModelObjectWithContextMenu.ContextMenu;
|
||||
@ -61,8 +61,8 @@ import jenkins.widgets.HasWidgets;
|
||||
import net.sf.json.JSONObject;
|
||||
import org.kohsuke.stapler.HttpResponse;
|
||||
import org.kohsuke.stapler.QueryParameter;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerResponse;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.kohsuke.stapler.StaplerResponse2;
|
||||
import org.kohsuke.stapler.export.Exported;
|
||||
import org.kohsuke.stapler.export.ExportedBean;
|
||||
import org.kohsuke.stapler.interceptor.RequirePOST;
|
||||
@ -112,7 +112,7 @@ public final class ComputerSet extends AbstractModelObject implements Describabl
|
||||
}
|
||||
|
||||
@Override
|
||||
public ContextMenu doChildrenContextMenu(StaplerRequest request, StaplerResponse response) throws Exception {
|
||||
public ContextMenu doChildrenContextMenu(StaplerRequest2 request, StaplerResponse2 response) throws Exception {
|
||||
ContextMenu m = new ContextMenu();
|
||||
for (Computer c : get_all()) {
|
||||
m.add(c);
|
||||
@ -206,12 +206,12 @@ public final class ComputerSet extends AbstractModelObject implements Describabl
|
||||
return "/computers/";
|
||||
}
|
||||
|
||||
public Computer getDynamic(String token, StaplerRequest req, StaplerResponse rsp) {
|
||||
public Computer getDynamic(String token, StaplerRequest2 req, StaplerResponse2 rsp) {
|
||||
return Jenkins.get().getComputer(token);
|
||||
}
|
||||
|
||||
@RequirePOST
|
||||
public void do_launchAll(StaplerRequest req, StaplerResponse rsp) throws IOException {
|
||||
public void do_launchAll(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException {
|
||||
Jenkins.get().checkPermission(Jenkins.ADMINISTER);
|
||||
|
||||
for (Computer c : get_all()) {
|
||||
@ -227,7 +227,7 @@ public final class ComputerSet extends AbstractModelObject implements Describabl
|
||||
* TODO: ajax on the client side to wait until the update completion might be nice.
|
||||
*/
|
||||
@RequirePOST
|
||||
public void doUpdateNow(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException {
|
||||
public void doUpdateNow(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException {
|
||||
Jenkins.get().checkPermission(Jenkins.MANAGE);
|
||||
|
||||
for (NodeMonitor nodeMonitor : NodeMonitor.getAll()) {
|
||||
@ -244,7 +244,7 @@ public final class ComputerSet extends AbstractModelObject implements Describabl
|
||||
* First check point in creating a new agent.
|
||||
*/
|
||||
@RequirePOST
|
||||
public synchronized void doCreateItem(StaplerRequest req, StaplerResponse rsp,
|
||||
public synchronized void doCreateItem(StaplerRequest2 req, StaplerResponse2 rsp,
|
||||
@QueryParameter String name, @QueryParameter String mode,
|
||||
@QueryParameter String from) throws IOException, ServletException {
|
||||
final Jenkins app = Jenkins.get();
|
||||
@ -290,7 +290,7 @@ public final class ComputerSet extends AbstractModelObject implements Describabl
|
||||
* Really creates a new agent.
|
||||
*/
|
||||
@POST
|
||||
public synchronized void doDoCreateItem(StaplerRequest req, StaplerResponse rsp,
|
||||
public synchronized void doDoCreateItem(StaplerRequest2 req, StaplerResponse2 rsp,
|
||||
@QueryParameter String name,
|
||||
@QueryParameter String type) throws IOException, ServletException, FormException {
|
||||
final Jenkins app = Jenkins.get();
|
||||
@ -348,7 +348,7 @@ public final class ComputerSet extends AbstractModelObject implements Describabl
|
||||
* Accepts submission from the configuration page.
|
||||
*/
|
||||
@POST
|
||||
public synchronized HttpResponse doConfigSubmit(StaplerRequest req) throws IOException, ServletException, FormException {
|
||||
public synchronized HttpResponse doConfigSubmit(StaplerRequest2 req) throws IOException, ServletException, FormException {
|
||||
BulkChange bc = new BulkChange(MONITORS_OWNER);
|
||||
try {
|
||||
Jenkins.get().checkPermission(Jenkins.MANAGE);
|
||||
|
@ -25,7 +25,7 @@
|
||||
package hudson.model;
|
||||
|
||||
import static hudson.util.QuotedStringTokenizer.quote;
|
||||
import static javax.servlet.http.HttpServletResponse.SC_NOT_FOUND;
|
||||
import static jakarta.servlet.http.HttpServletResponse.SC_NOT_FOUND;
|
||||
|
||||
import edu.umd.cs.findbugs.annotations.CheckForNull;
|
||||
import edu.umd.cs.findbugs.annotations.NonNull;
|
||||
@ -45,6 +45,9 @@ import hudson.util.FormValidation.CheckMethod;
|
||||
import hudson.util.ReflectionUtils;
|
||||
import hudson.util.ReflectionUtils.Parameter;
|
||||
import hudson.views.ListViewColumn;
|
||||
import io.jenkins.servlet.ServletExceptionWrapper;
|
||||
import jakarta.servlet.RequestDispatcher;
|
||||
import jakarta.servlet.ServletException;
|
||||
import java.beans.Introspector;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
@ -71,13 +74,12 @@ import java.util.Set;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import javax.servlet.RequestDispatcher;
|
||||
import javax.servlet.ServletException;
|
||||
import jenkins.model.GlobalConfiguration;
|
||||
import jenkins.model.GlobalConfigurationCategory;
|
||||
import jenkins.model.Jenkins;
|
||||
import jenkins.model.Loadable;
|
||||
import jenkins.security.RedactSecretJsonInErrorMessageSanitizer;
|
||||
import jenkins.security.stapler.StaplerNotDispatchable;
|
||||
import jenkins.util.io.OnMaster;
|
||||
import net.sf.json.JSONArray;
|
||||
import net.sf.json.JSONObject;
|
||||
@ -92,7 +94,9 @@ import org.kohsuke.stapler.HttpResponse;
|
||||
import org.kohsuke.stapler.QueryParameter;
|
||||
import org.kohsuke.stapler.Stapler;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.kohsuke.stapler.StaplerResponse;
|
||||
import org.kohsuke.stapler.StaplerResponse2;
|
||||
import org.kohsuke.stapler.WebApp;
|
||||
import org.kohsuke.stapler.jelly.JellyCompatibleFacet;
|
||||
import org.kohsuke.stapler.lang.Klass;
|
||||
@ -382,7 +386,7 @@ public abstract class Descriptor<T extends Describable<T>> implements Loadable,
|
||||
* @since 1.402
|
||||
*/
|
||||
public static String getCurrentDescriptorByNameUrl() {
|
||||
StaplerRequest req = Stapler.getCurrentRequest();
|
||||
StaplerRequest2 req = Stapler.getCurrentRequest2();
|
||||
|
||||
// this override allows RenderOnDemandClosure to preserve the proper value
|
||||
Object url = req.getAttribute("currentDescriptorByNameUrl");
|
||||
@ -576,16 +580,33 @@ public abstract class Descriptor<T extends Describable<T>> implements Loadable,
|
||||
*
|
||||
* @throws FormException
|
||||
* Signals a problem in the submitted form.
|
||||
* @since TODO
|
||||
*/
|
||||
public T newInstance(@Nullable StaplerRequest2 req, @NonNull JSONObject formData) throws FormException {
|
||||
if (Util.isOverridden(Descriptor.class, getClass(), "newInstance", StaplerRequest.class, JSONObject.class)) {
|
||||
return newInstance(req != null ? StaplerRequest.fromStaplerRequest2(req) : null, formData);
|
||||
} else {
|
||||
return newInstanceImpl(req, formData);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #newInstance(StaplerRequest2, JSONObject)}
|
||||
* @since 1.145
|
||||
*/
|
||||
@Deprecated
|
||||
public T newInstance(@Nullable StaplerRequest req, @NonNull JSONObject formData) throws FormException {
|
||||
return newInstanceImpl(req != null ? StaplerRequest.toStaplerRequest2(req) : null, formData);
|
||||
}
|
||||
|
||||
private T newInstanceImpl(@Nullable StaplerRequest2 req, @NonNull JSONObject formData) throws FormException {
|
||||
try {
|
||||
Method m = getClass().getMethod("newInstance", StaplerRequest.class);
|
||||
|
||||
if (!Modifier.isAbstract(m.getDeclaringClass().getModifiers())) {
|
||||
// this class overrides newInstance(StaplerRequest).
|
||||
// maintain the backward compatible behavior
|
||||
return verifyNewInstance(newInstance(req));
|
||||
return verifyNewInstance(newInstance(StaplerRequest.fromStaplerRequest2(req)));
|
||||
} else {
|
||||
if (req == null) {
|
||||
// yes, req is supposed to be always non-null, but see the note above
|
||||
@ -602,16 +623,25 @@ public abstract class Descriptor<T extends Describable<T>> implements Loadable,
|
||||
}
|
||||
|
||||
/**
|
||||
* Replacement for {@link StaplerRequest#bindJSON(Class, JSONObject)} which honors {@link #newInstance(StaplerRequest, JSONObject)}.
|
||||
* This is automatically used inside {@link #newInstance(StaplerRequest, JSONObject)} so a direct call would only be necessary
|
||||
* in case the top level binding might use a {@link Descriptor} which overrides {@link #newInstance(StaplerRequest, JSONObject)}.
|
||||
* @since 2.342
|
||||
* Replacement for {@link StaplerRequest2#bindJSON(Class, JSONObject)} which honors {@link #newInstance(StaplerRequest2, JSONObject)}.
|
||||
* This is automatically used inside {@link #newInstance(StaplerRequest2, JSONObject)} so a direct call would only be necessary
|
||||
* in case the top level binding might use a {@link Descriptor} which overrides {@link #newInstance(StaplerRequest2, JSONObject)}.
|
||||
* @since TODO
|
||||
*/
|
||||
public static <T> T bindJSON(StaplerRequest req, Class<T> type, JSONObject src) {
|
||||
public static <T> T bindJSON(StaplerRequest2 req, Class<T> type, JSONObject src) {
|
||||
return bindJSON(req, type, src, false);
|
||||
}
|
||||
|
||||
private static <T> T bindJSON(StaplerRequest req, Class<T> type, JSONObject src, boolean fromNewInstance) {
|
||||
/**
|
||||
* @deprecated use {@link #bindJSON(StaplerRequest2, Class, JSONObject)}
|
||||
* @since 2.342
|
||||
*/
|
||||
@Deprecated
|
||||
public static <T> T bindJSON(StaplerRequest req, Class<T> type, JSONObject src) {
|
||||
return bindJSON(StaplerRequest.toStaplerRequest2(req), type, src);
|
||||
}
|
||||
|
||||
private static <T> T bindJSON(StaplerRequest2 req, Class<T> type, JSONObject src, boolean fromNewInstance) {
|
||||
BindInterceptor oldInterceptor = req.getBindInterceptor();
|
||||
try {
|
||||
NewInstanceBindInterceptor interceptor;
|
||||
@ -631,9 +661,9 @@ public abstract class Descriptor<T extends Describable<T>> implements Loadable,
|
||||
}
|
||||
|
||||
/**
|
||||
* Ensures that calls to {@link StaplerRequest#bindJSON(Class, JSONObject)} from {@link #newInstance(StaplerRequest, JSONObject)} recurse properly.
|
||||
* Ensures that calls to {@link StaplerRequest2#bindJSON(Class, JSONObject)} from {@link #newInstance(StaplerRequest2, JSONObject)} recurse properly.
|
||||
* {@code doConfigSubmit}-like methods will wind up calling {@code newInstance} directly
|
||||
* or via {@link #newInstancesFromHeteroList(StaplerRequest, Object, Collection)},
|
||||
* or via {@link #newInstancesFromHeteroList(StaplerRequest2, Object, Collection)},
|
||||
* which consult any custom {@code newInstance} overrides for top-level {@link Describable} objects.
|
||||
* But for nested describable objects Stapler would know nothing about {@code newInstance} without this trick.
|
||||
*/
|
||||
@ -671,7 +701,7 @@ public abstract class Descriptor<T extends Describable<T>> implements Loadable,
|
||||
try {
|
||||
final Descriptor descriptor = Jenkins.get().getDescriptor(actualType);
|
||||
if (descriptor != null) {
|
||||
return descriptor.newInstance(Stapler.getCurrentRequest(), json);
|
||||
return descriptor.newInstance(Stapler.getCurrentRequest2(), json);
|
||||
} else {
|
||||
LOGGER.log(Level.WARNING, "Descriptor not found. Falling back to default instantiation "
|
||||
+ actualType.getName() + " " + json);
|
||||
@ -694,7 +724,7 @@ public abstract class Descriptor<T extends Describable<T>> implements Loadable,
|
||||
if (isApplicable(targetTypeErasure, json)) {
|
||||
LOGGER.log(Level.FINE, "switching to newInstance {0} {1}", new Object[] {targetTypeErasure.getName(), json});
|
||||
try {
|
||||
return Jenkins.get().getDescriptor(targetTypeErasure).newInstance(Stapler.getCurrentRequest(), json);
|
||||
return Jenkins.get().getDescriptor(targetTypeErasure).newInstance(Stapler.getCurrentRequest2(), json);
|
||||
} catch (Exception x) {
|
||||
LOGGER.log(Level.WARNING, "falling back to default instantiation " + targetTypeErasure.getName() + " " + json, x);
|
||||
}
|
||||
@ -776,13 +806,13 @@ public abstract class Descriptor<T extends Describable<T>> implements Loadable,
|
||||
}
|
||||
|
||||
try {
|
||||
if (Stapler.getCurrentRequest().getView(c, "help" + suffix) != null)
|
||||
if (Stapler.getCurrentRequest2().getView(c, "help" + suffix) != null)
|
||||
return page;
|
||||
} catch (IOException e) {
|
||||
throw new Error(e);
|
||||
}
|
||||
|
||||
if (getStaticHelpUrl(Stapler.getCurrentRequest(), c, suffix) != null) return page;
|
||||
if (getStaticHelpUrl(Stapler.getCurrentRequest2(), c, suffix) != null) return page;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@ -812,7 +842,7 @@ public abstract class Descriptor<T extends Describable<T>> implements Loadable,
|
||||
|
||||
/**
|
||||
* @deprecated
|
||||
* As of 1.239, use {@link #configure(StaplerRequest, JSONObject)}.
|
||||
* As of 1.239, use {@link #configure(StaplerRequest2, JSONObject)}.
|
||||
*/
|
||||
@Deprecated
|
||||
public boolean configure(StaplerRequest req) throws FormException {
|
||||
@ -829,7 +859,21 @@ public abstract class Descriptor<T extends Describable<T>> implements Loadable,
|
||||
* See <a href="https://www.jenkins.io/doc/developer/forms/structured-form-submission/">the developer documentation</a>.
|
||||
* @return false
|
||||
* to keep the client in the same config page.
|
||||
* @since TODO
|
||||
*/
|
||||
public boolean configure(StaplerRequest2 req, JSONObject json) throws FormException {
|
||||
if (Util.isOverridden(Descriptor.class, getClass(), "configure", StaplerRequest.class, JSONObject.class)) {
|
||||
return configure(StaplerRequest.fromStaplerRequest2(req), json);
|
||||
} else {
|
||||
// compatibility
|
||||
return configure(StaplerRequest.fromStaplerRequest2(req));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #configure(StaplerRequest2, JSONObject)}
|
||||
*/
|
||||
@Deprecated
|
||||
public boolean configure(StaplerRequest req, JSONObject json) throws FormException {
|
||||
// compatibility
|
||||
return configure(req);
|
||||
@ -895,7 +939,7 @@ public abstract class Descriptor<T extends Describable<T>> implements Loadable,
|
||||
|
||||
protected List<String> getPossibleViewNames(String baseName) {
|
||||
List<String> names = new ArrayList<>();
|
||||
for (Facet f : WebApp.get(Jenkins.get().servletContext).facets) {
|
||||
for (Facet f : WebApp.get(Jenkins.get().getServletContext()).facets) {
|
||||
if (f instanceof JellyCompatibleFacet jcf) {
|
||||
for (String ext : jcf.getScriptExtensions())
|
||||
names.add(baseName + ext);
|
||||
@ -957,7 +1001,32 @@ public abstract class Descriptor<T extends Describable<T>> implements Loadable,
|
||||
/**
|
||||
* Serves {@code help.html} from the resource of {@link #clazz}.
|
||||
*/
|
||||
public void doHelp(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException {
|
||||
public void doHelp(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException {
|
||||
if (Util.isOverridden(Descriptor.class, getClass(), "doHelp", StaplerRequest.class, StaplerResponse.class)) {
|
||||
try {
|
||||
doHelp(StaplerRequest.fromStaplerRequest2(req), StaplerResponse.fromStaplerResponse2(rsp));
|
||||
} catch (javax.servlet.ServletException e) {
|
||||
throw ServletExceptionWrapper.toJakartaServletException(e);
|
||||
}
|
||||
} else {
|
||||
doHelpImpl(req, rsp);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #doHelp(StaplerRequest2, StaplerResponse2)}
|
||||
*/
|
||||
@Deprecated
|
||||
@StaplerNotDispatchable
|
||||
public void doHelp(StaplerRequest req, StaplerResponse rsp) throws IOException, javax.servlet.ServletException {
|
||||
try {
|
||||
doHelpImpl(StaplerRequest.toStaplerRequest2(req), StaplerResponse.toStaplerResponse2(rsp));
|
||||
} catch (ServletException e) {
|
||||
throw ServletExceptionWrapper.fromJakartaServletException(e);
|
||||
}
|
||||
}
|
||||
|
||||
private void doHelpImpl(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException {
|
||||
String path = req.getRestOfPath();
|
||||
if (path.contains("..")) throw new ServletException("Illegal path: " + path);
|
||||
|
||||
@ -972,13 +1041,13 @@ public abstract class Descriptor<T extends Describable<T>> implements Loadable,
|
||||
}
|
||||
|
||||
for (Klass<?> c = getKlass(); c != null; c = c.getSuperClass()) {
|
||||
RequestDispatcher rd = Stapler.getCurrentRequest().getView(c, "help" + path);
|
||||
RequestDispatcher rd = Stapler.getCurrentRequest2().getView(c, "help" + path);
|
||||
if (rd != null) { // template based help page
|
||||
rd.forward(req, rsp);
|
||||
return;
|
||||
}
|
||||
|
||||
URL url = getStaticHelpUrl(Stapler.getCurrentRequest(), c, path);
|
||||
URL url = getStaticHelpUrl(Stapler.getCurrentRequest2(), c, path);
|
||||
if (url != null) {
|
||||
// TODO: generalize macro expansion and perhaps even support JEXL
|
||||
rsp.setContentType("text/html;charset=UTF-8");
|
||||
@ -992,8 +1061,11 @@ public abstract class Descriptor<T extends Describable<T>> implements Loadable,
|
||||
rsp.sendError(SC_NOT_FOUND);
|
||||
}
|
||||
|
||||
/**
|
||||
* @since TODO
|
||||
*/
|
||||
@Restricted(NoExternalUse.class)
|
||||
public static URL getStaticHelpUrl(StaplerRequest req, Klass<?> c, String suffix) {
|
||||
public static URL getStaticHelpUrl(StaplerRequest2 req, Klass<?> c, String suffix) {
|
||||
|
||||
String base = "help" + suffix;
|
||||
URL url;
|
||||
@ -1017,6 +1089,15 @@ public abstract class Descriptor<T extends Describable<T>> implements Loadable,
|
||||
return c.getResource(base + ".html");
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #getStaticHelpUrl(StaplerRequest2, Klass, String)}
|
||||
*/
|
||||
@Deprecated
|
||||
@Restricted(NoExternalUse.class)
|
||||
public static URL getStaticHelpUrl(StaplerRequest req, Klass<?> c, String suffix) {
|
||||
return getStaticHelpUrl(StaplerRequest.toStaplerRequest2(req), c, suffix);
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// static methods
|
||||
@ -1061,16 +1142,30 @@ public abstract class Descriptor<T extends Describable<T>> implements Loadable,
|
||||
* List of descriptors to create instances from.
|
||||
* @return
|
||||
* Can be empty but never null.
|
||||
* @since TODO
|
||||
*/
|
||||
public static <T extends Describable<T>>
|
||||
List<T> newInstancesFromHeteroList(StaplerRequest req, JSONObject formData, String key,
|
||||
List<T> newInstancesFromHeteroList(StaplerRequest2 req, JSONObject formData, String key,
|
||||
Collection<? extends Descriptor<T>> descriptors) throws FormException {
|
||||
|
||||
return newInstancesFromHeteroList(req, formData.get(key), descriptors);
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #newInstancesFromHeteroList(StaplerRequest2, JSONObject, String, Collection)}
|
||||
*/
|
||||
@Deprecated
|
||||
public static <T extends Describable<T>>
|
||||
List<T> newInstancesFromHeteroList(StaplerRequest req, Object formData,
|
||||
List<T> newInstancesFromHeteroList(StaplerRequest req, JSONObject formData, String key,
|
||||
Collection<? extends Descriptor<T>> descriptors) throws FormException {
|
||||
return newInstancesFromHeteroList(StaplerRequest.toStaplerRequest2(req), formData, key, descriptors);
|
||||
}
|
||||
|
||||
/**
|
||||
* @since TODO
|
||||
*/
|
||||
public static <T extends Describable<T>>
|
||||
List<T> newInstancesFromHeteroList(StaplerRequest2 req, Object formData,
|
||||
Collection<? extends Descriptor<T>> descriptors) throws FormException {
|
||||
|
||||
List<T> items = new ArrayList<>();
|
||||
@ -1086,7 +1181,7 @@ public abstract class Descriptor<T extends Describable<T>> implements Loadable,
|
||||
if (kind != null) {
|
||||
// Only applies when Descriptor.getId is overridden.
|
||||
// Note that kind is only supported here,
|
||||
// *not* inside the StaplerRequest.bindJSON which is normally called by newInstance
|
||||
// *not* inside the StaplerRequest2.bindJSON which is normally called by newInstance
|
||||
// (since Descriptor.newInstance is not itself available to Stapler).
|
||||
// If you merely override getId for some reason, but use @DataBoundConstructor on your Describable,
|
||||
// there is no problem; but you can only rely on newInstance being called at top level.
|
||||
@ -1114,6 +1209,16 @@ public abstract class Descriptor<T extends Describable<T>> implements Loadable,
|
||||
return items;
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #newInstancesFromHeteroList(StaplerRequest2, JSONObject, String, Collection)}
|
||||
*/
|
||||
@Deprecated
|
||||
public static <T extends Describable<T>>
|
||||
List<T> newInstancesFromHeteroList(StaplerRequest req, Object formData,
|
||||
Collection<? extends Descriptor<T>> descriptors) throws FormException {
|
||||
return newInstancesFromHeteroList(StaplerRequest.toStaplerRequest2(req), formData, descriptors);
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds a descriptor from a collection by its ID.
|
||||
* @param id should match {@link #getId}
|
||||
@ -1199,7 +1304,7 @@ public abstract class Descriptor<T extends Describable<T>> implements Loadable,
|
||||
}
|
||||
|
||||
@Override
|
||||
public void generateResponse(StaplerRequest req, StaplerResponse rsp, Object node) throws IOException, ServletException {
|
||||
public void generateResponse(StaplerRequest2 req, StaplerResponse2 rsp, Object node) throws IOException, ServletException {
|
||||
if (FormApply.isApply(req)) {
|
||||
FormApply.applyResponse("notificationBar.show(" + quote(getMessage()) + ",notificationBar.ERROR)")
|
||||
.generateResponse(req, rsp, node);
|
||||
|
@ -26,8 +26,8 @@ package hudson.model;
|
||||
|
||||
|
||||
import edu.umd.cs.findbugs.annotations.NonNull;
|
||||
import jakarta.servlet.ServletException;
|
||||
import java.io.IOException;
|
||||
import javax.servlet.ServletException;
|
||||
import org.kohsuke.stapler.HttpResponse;
|
||||
import org.kohsuke.stapler.QueryParameter;
|
||||
import org.kohsuke.stapler.interceptor.RequirePOST;
|
||||
|
@ -27,6 +27,9 @@ package hudson.model;
|
||||
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
|
||||
import hudson.FilePath;
|
||||
import hudson.Util;
|
||||
import io.jenkins.servlet.ServletExceptionWrapper;
|
||||
import jakarta.servlet.ServletException;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
@ -55,8 +58,6 @@ import java.util.logging.Logger;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import jenkins.model.Jenkins;
|
||||
import jenkins.security.MasterToSlaveCallable;
|
||||
import jenkins.security.ResourceDomainConfiguration;
|
||||
@ -70,7 +71,9 @@ import org.kohsuke.accmod.Restricted;
|
||||
import org.kohsuke.accmod.restrictions.NoExternalUse;
|
||||
import org.kohsuke.stapler.HttpResponse;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.kohsuke.stapler.StaplerResponse;
|
||||
import org.kohsuke.stapler.StaplerResponse2;
|
||||
|
||||
/**
|
||||
* Has convenience methods to serve file system.
|
||||
@ -157,7 +160,7 @@ public final class DirectoryBrowserSupport implements HttpResponse {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void generateResponse(StaplerRequest req, StaplerResponse rsp, Object node) throws IOException, ServletException {
|
||||
public void generateResponse(StaplerRequest2 req, StaplerResponse2 rsp, Object node) throws IOException, ServletException {
|
||||
if (!ResourceDomainConfiguration.isResourceRequest(req) && ResourceDomainConfiguration.isResourceDomainConfigured()) {
|
||||
resourceToken = ResourceDomainRootAction.get().getToken(this, req);
|
||||
}
|
||||
@ -191,11 +194,15 @@ public final class DirectoryBrowserSupport implements HttpResponse {
|
||||
* from the {@code doXYZ} method and let Stapler generate a response for you.
|
||||
*/
|
||||
@Deprecated
|
||||
public void serveFile(StaplerRequest req, StaplerResponse rsp, FilePath root, String icon, boolean serveDirIndex) throws IOException, ServletException, InterruptedException {
|
||||
serveFile(req, rsp, root.toVirtualFile(), icon, serveDirIndex);
|
||||
public void serveFile(StaplerRequest req, StaplerResponse rsp, FilePath root, String icon, boolean serveDirIndex) throws IOException, javax.servlet.ServletException, InterruptedException {
|
||||
try {
|
||||
serveFile(StaplerRequest.toStaplerRequest2(req), StaplerResponse.toStaplerResponse2(rsp), root.toVirtualFile(), icon, serveDirIndex);
|
||||
} catch (ServletException e) {
|
||||
throw ServletExceptionWrapper.fromJakartaServletException(e);
|
||||
}
|
||||
}
|
||||
|
||||
private void serveFile(StaplerRequest req, StaplerResponse rsp, VirtualFile root, String icon, boolean serveDirIndex) throws IOException, ServletException, InterruptedException {
|
||||
private void serveFile(StaplerRequest2 req, StaplerResponse2 rsp, VirtualFile root, String icon, boolean serveDirIndex) throws IOException, ServletException, InterruptedException {
|
||||
// handle form submission
|
||||
String pattern = req.getParameter("pattern");
|
||||
if (pattern == null)
|
||||
@ -492,7 +499,7 @@ public final class DirectoryBrowserSupport implements HttpResponse {
|
||||
}
|
||||
}
|
||||
|
||||
private String getPath(StaplerRequest req) {
|
||||
private String getPath(StaplerRequest2 req) {
|
||||
String path = req.getRestOfPath();
|
||||
if (path.isEmpty())
|
||||
path = "/";
|
||||
@ -521,7 +528,7 @@ public final class DirectoryBrowserSupport implements HttpResponse {
|
||||
return "../".repeat(times);
|
||||
}
|
||||
|
||||
private static void zip(StaplerResponse rsp, VirtualFile root, VirtualFile dir, String glob) throws IOException, InterruptedException {
|
||||
private static void zip(StaplerResponse2 rsp, VirtualFile root, VirtualFile dir, String glob) throws IOException, InterruptedException {
|
||||
OutputStream outputStream = rsp.getOutputStream();
|
||||
try (ZipOutputStream zos = new ZipOutputStream(outputStream)) {
|
||||
zos.setEncoding(Charset.defaultCharset().displayName()); // TODO JENKINS-20663 make this overridable via query parameter
|
||||
|
@ -59,7 +59,6 @@ import java.util.concurrent.locks.ReentrantReadWriteLock;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import java.util.stream.Collectors;
|
||||
import javax.servlet.ServletException;
|
||||
import jenkins.model.CauseOfInterruption;
|
||||
import jenkins.model.CauseOfInterruption.UserInterruption;
|
||||
import jenkins.model.InterruptedBuildAction;
|
||||
@ -852,7 +851,7 @@ public class Executor extends Thread implements ModelObject {
|
||||
*/
|
||||
@RequirePOST
|
||||
@Deprecated
|
||||
public void doStop(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException {
|
||||
public void doStop(StaplerRequest req, StaplerResponse rsp) throws IOException, javax.servlet.ServletException {
|
||||
doStop().generateResponse(req, rsp, this);
|
||||
}
|
||||
|
||||
|
@ -25,12 +25,12 @@
|
||||
package hudson.model;
|
||||
|
||||
import edu.umd.cs.findbugs.annotations.CheckForNull;
|
||||
import jakarta.servlet.ServletException;
|
||||
import java.io.IOException;
|
||||
import javax.servlet.ServletException;
|
||||
import jenkins.model.Jenkins;
|
||||
import org.kohsuke.stapler.HttpResponse;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerResponse;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.kohsuke.stapler.StaplerResponse2;
|
||||
|
||||
/**
|
||||
* Represents an error induced by user, encountered during HTTP request processing.
|
||||
@ -55,7 +55,7 @@ public class Failure extends RuntimeException implements HttpResponse {
|
||||
this.pre = pre;
|
||||
}
|
||||
|
||||
public void generateResponse(StaplerRequest req, StaplerResponse rsp, Object node, @CheckForNull Throwable throwable) throws IOException, ServletException {
|
||||
public void generateResponse(StaplerRequest2 req, StaplerResponse2 rsp, Object node, @CheckForNull Throwable throwable) throws IOException, ServletException {
|
||||
if (throwable != null) {
|
||||
req.setAttribute("exception", throwable);
|
||||
}
|
||||
@ -63,7 +63,7 @@ public class Failure extends RuntimeException implements HttpResponse {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void generateResponse(StaplerRequest req, StaplerResponse rsp, Object node) throws IOException, ServletException {
|
||||
public void generateResponse(StaplerRequest2 req, StaplerResponse2 rsp, Object node) throws IOException, ServletException {
|
||||
req.setAttribute("message", getMessage());
|
||||
if (pre)
|
||||
req.setAttribute("pre", true);
|
||||
|
@ -29,17 +29,17 @@ import edu.umd.cs.findbugs.annotations.NonNull;
|
||||
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
|
||||
import hudson.Extension;
|
||||
import hudson.cli.CLICommand;
|
||||
import jakarta.servlet.ServletException;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Files;
|
||||
import java.util.Objects;
|
||||
import javax.servlet.ServletException;
|
||||
import net.sf.json.JSONObject;
|
||||
import org.apache.commons.fileupload2.core.FileItem;
|
||||
import org.apache.commons.io.FileUtils;
|
||||
import org.jenkinsci.Symbol;
|
||||
import org.kohsuke.stapler.DataBoundConstructor;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
|
||||
/**
|
||||
* {@link ParameterDefinition} for doing file upload.
|
||||
@ -65,7 +65,7 @@ public class FileParameterDefinition extends ParameterDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public FileParameterValue createValue(StaplerRequest req, JSONObject jo) {
|
||||
public FileParameterValue createValue(StaplerRequest2 req, JSONObject jo) {
|
||||
FileParameterValue p = req.bindJSON(FileParameterValue.class, jo);
|
||||
p.setLocation(getName());
|
||||
p.setDescription(getDescription());
|
||||
@ -87,7 +87,7 @@ public class FileParameterDefinition extends ParameterDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public ParameterValue createValue(StaplerRequest req) {
|
||||
public ParameterValue createValue(StaplerRequest2 req) {
|
||||
FileItem src;
|
||||
try {
|
||||
src = req.getFileItem2(getName());
|
||||
|
@ -50,8 +50,8 @@ import org.apache.commons.io.FilenameUtils;
|
||||
import org.kohsuke.accmod.Restricted;
|
||||
import org.kohsuke.accmod.restrictions.NoExternalUse;
|
||||
import org.kohsuke.stapler.DataBoundConstructor;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerResponse;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.kohsuke.stapler.StaplerResponse2;
|
||||
|
||||
/**
|
||||
* {@link ParameterValue} for {@link FileParameterDefinition}.
|
||||
@ -235,9 +235,9 @@ public class FileParameterValue extends ParameterValue {
|
||||
}
|
||||
|
||||
/**
|
||||
* Serve this file parameter in response to a {@link StaplerRequest}.
|
||||
* Serve this file parameter in response to a {@link StaplerRequest2}.
|
||||
*/
|
||||
public DirectoryBrowserSupport doDynamic(StaplerRequest request, StaplerResponse response) {
|
||||
public DirectoryBrowserSupport doDynamic(StaplerRequest2 request, StaplerResponse2 response) {
|
||||
AbstractBuild build = (AbstractBuild) request.findAncestor(AbstractBuild.class).getObject();
|
||||
File fileParameter = getFileParameterFolderUnderBuild(build);
|
||||
return new DirectoryBrowserSupport(build, new FilePath(fileParameter), Messages.FileParameterValue_IndexTitle(), "folder.png", false);
|
||||
|
@ -38,14 +38,16 @@ import hudson.model.listeners.ItemListener;
|
||||
import hudson.slaves.ComputerListener;
|
||||
import hudson.util.CopyOnWriteList;
|
||||
import hudson.util.FormValidation;
|
||||
import io.jenkins.servlet.ServletContextWrapper;
|
||||
import io.jenkins.servlet.ServletExceptionWrapper;
|
||||
import jakarta.servlet.ServletContext;
|
||||
import jakarta.servlet.ServletException;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.text.NumberFormat;
|
||||
import java.text.ParseException;
|
||||
import java.util.List;
|
||||
import javax.servlet.ServletContext;
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import jenkins.model.Jenkins;
|
||||
import org.jvnet.hudson.reactor.ReactorException;
|
||||
import org.kohsuke.stapler.QueryParameter;
|
||||
@ -78,14 +80,36 @@ public class Hudson extends Jenkins {
|
||||
return (Hudson) Jenkins.get();
|
||||
}
|
||||
|
||||
/**
|
||||
* @since TODO
|
||||
*/
|
||||
public Hudson(File root, ServletContext context) throws IOException, InterruptedException, ReactorException {
|
||||
this(root, context, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #Hudson(File, ServletContext)}
|
||||
*/
|
||||
@Deprecated
|
||||
public Hudson(File root, javax.servlet.ServletContext context) throws IOException, InterruptedException, ReactorException {
|
||||
this(root, ServletContextWrapper.toJakartaServletContext(context));
|
||||
}
|
||||
|
||||
/**
|
||||
* @since TODO
|
||||
*/
|
||||
public Hudson(File root, ServletContext context, PluginManager pluginManager) throws IOException, InterruptedException, ReactorException {
|
||||
super(root, context, pluginManager);
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #Hudson(File, ServletContext, PluginManager)}
|
||||
*/
|
||||
@Deprecated
|
||||
public Hudson(File root, javax.servlet.ServletContext context, PluginManager pluginManager) throws IOException, InterruptedException, ReactorException {
|
||||
this(root, ServletContextWrapper.toJakartaServletContext(context), pluginManager);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets all the installed {@link ItemListener}s.
|
||||
*
|
||||
@ -173,8 +197,12 @@ public class Hudson extends Jenkins {
|
||||
*/
|
||||
@Deprecated
|
||||
@RequirePOST
|
||||
public synchronized void doQuietDown(StaplerResponse rsp) throws IOException, ServletException {
|
||||
doQuietDown().generateResponse(null, rsp, this);
|
||||
public synchronized void doQuietDown(StaplerResponse rsp) throws IOException, javax.servlet.ServletException {
|
||||
try {
|
||||
doQuietDown().generateResponse(null, StaplerResponse.toStaplerResponse2(rsp), this);
|
||||
} catch (ServletException e) {
|
||||
throw ServletExceptionWrapper.fromJakartaServletException(e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -184,7 +212,7 @@ public class Hudson extends Jenkins {
|
||||
* As on 1.267, moved to "/log/rss..."
|
||||
*/
|
||||
@Deprecated
|
||||
public void doLogRss(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException {
|
||||
public void doLogRss(StaplerRequest req, StaplerResponse rsp) throws IOException, javax.servlet.ServletException {
|
||||
String qs = req.getQueryString();
|
||||
rsp.sendRedirect2("./log/rss" + (qs == null ? "" : '?' + qs));
|
||||
}
|
||||
@ -194,7 +222,7 @@ public class Hudson extends Jenkins {
|
||||
* Define your own check method, instead of relying on this generic one.
|
||||
*/
|
||||
@Deprecated
|
||||
public void doFieldCheck(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException {
|
||||
public void doFieldCheck(StaplerRequest req, StaplerResponse rsp) throws IOException, javax.servlet.ServletException {
|
||||
doFieldCheck(
|
||||
fixEmpty(req.getParameter("value")),
|
||||
fixEmpty(req.getParameter("type")),
|
||||
|
@ -41,7 +41,7 @@ import java.util.Collection;
|
||||
import jenkins.model.Jenkins;
|
||||
import jenkins.util.SystemProperties;
|
||||
import jenkins.util.io.OnMaster;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
|
||||
/**
|
||||
* Basic configuration unit in Hudson.
|
||||
@ -183,7 +183,7 @@ public interface Item extends PersistenceRoot, SearchableModelObject, AccessCont
|
||||
|
||||
/**
|
||||
* Returns the absolute URL of this item. This relies on the current
|
||||
* {@link StaplerRequest} to figure out what the host name is,
|
||||
* {@link StaplerRequest2} to figure out what the host name is,
|
||||
* so can be used only during processing client requests.
|
||||
*
|
||||
* @return
|
||||
|
@ -32,6 +32,9 @@ import hudson.security.AccessControlled;
|
||||
import hudson.util.CopyOnWriteMap;
|
||||
import hudson.util.Function1;
|
||||
import hudson.util.Secret;
|
||||
import io.jenkins.servlet.ServletExceptionWrapper;
|
||||
import jakarta.servlet.ServletException;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
@ -42,8 +45,6 @@ import java.util.Map;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import java.util.regex.Matcher;
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.xml.transform.TransformerException;
|
||||
import javax.xml.transform.stream.StreamResult;
|
||||
import javax.xml.transform.stream.StreamSource;
|
||||
@ -51,7 +52,9 @@ import jenkins.model.Jenkins;
|
||||
import jenkins.security.NotReallyRoleSensitiveCallable;
|
||||
import jenkins.util.xml.XMLUtils;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.kohsuke.stapler.StaplerResponse;
|
||||
import org.kohsuke.stapler.StaplerResponse2;
|
||||
import org.springframework.security.access.AccessDeniedException;
|
||||
import org.xml.sax.SAXException;
|
||||
|
||||
@ -140,8 +143,10 @@ public abstract class ItemGroupMixIn {
|
||||
/**
|
||||
* Creates a {@link TopLevelItem} for example from the submission of the {@code /lib/hudson/newFromList/form} tag
|
||||
* or throws an exception if it fails.
|
||||
*
|
||||
* @since TODO
|
||||
*/
|
||||
public synchronized TopLevelItem createTopLevelItem(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException {
|
||||
public synchronized TopLevelItem createTopLevelItem(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException {
|
||||
acl.checkPermission(Item.CREATE);
|
||||
|
||||
TopLevelItem result;
|
||||
@ -206,10 +211,22 @@ public abstract class ItemGroupMixIn {
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #createTopLevelItem(StaplerRequest2, StaplerResponse2)}
|
||||
*/
|
||||
@Deprecated
|
||||
public synchronized TopLevelItem createTopLevelItem(StaplerRequest req, StaplerResponse rsp) throws IOException, javax.servlet.ServletException {
|
||||
try {
|
||||
return createTopLevelItem(StaplerRequest.toStaplerRequest2(req), StaplerResponse.toStaplerResponse2(rsp));
|
||||
} catch (ServletException e) {
|
||||
throw ServletExceptionWrapper.fromJakartaServletException(e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Computes the redirection target URL for the newly created {@link TopLevelItem}.
|
||||
*/
|
||||
protected String redirectAfterCreateItem(StaplerRequest req, TopLevelItem result) throws IOException {
|
||||
protected String redirectAfterCreateItem(StaplerRequest2 req, TopLevelItem result) throws IOException {
|
||||
return req.getContextPath() + '/' + result.getUrl() + "configure";
|
||||
}
|
||||
|
||||
|
@ -24,8 +24,8 @@
|
||||
|
||||
package hudson.model;
|
||||
|
||||
import static javax.servlet.http.HttpServletResponse.SC_BAD_REQUEST;
|
||||
import static javax.servlet.http.HttpServletResponse.SC_NO_CONTENT;
|
||||
import static jakarta.servlet.http.HttpServletResponse.SC_BAD_REQUEST;
|
||||
import static jakarta.servlet.http.HttpServletResponse.SC_NO_CONTENT;
|
||||
|
||||
import com.infradna.tool.bridge_method_injector.WithBridgeMethods;
|
||||
import edu.umd.cs.findbugs.annotations.CheckForNull;
|
||||
@ -69,6 +69,8 @@ import hudson.util.TextFile;
|
||||
import hudson.widgets.HistoryWidget;
|
||||
import hudson.widgets.HistoryWidget.Adapter;
|
||||
import hudson.widgets.Widget;
|
||||
import io.jenkins.servlet.ServletExceptionWrapper;
|
||||
import jakarta.servlet.ServletException;
|
||||
import java.awt.Color;
|
||||
import java.awt.Paint;
|
||||
import java.io.File;
|
||||
@ -85,7 +87,6 @@ import java.util.Set;
|
||||
import java.util.SortedMap;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import javax.servlet.ServletException;
|
||||
import jenkins.model.BuildDiscarder;
|
||||
import jenkins.model.BuildDiscarderProperty;
|
||||
import jenkins.model.DirectlyModifiableTopLevelItemGroup;
|
||||
@ -98,6 +99,7 @@ import jenkins.model.RunIdMigrator;
|
||||
import jenkins.model.lazy.LazyBuildMixIn;
|
||||
import jenkins.scm.RunWithSCM;
|
||||
import jenkins.security.HexStringConfidentialKey;
|
||||
import jenkins.security.stapler.StaplerNotDispatchable;
|
||||
import jenkins.triggers.SCMTriggerItem;
|
||||
import jenkins.widgets.HasWidgets;
|
||||
import net.sf.json.JSONException;
|
||||
@ -122,7 +124,9 @@ import org.kohsuke.args4j.Argument;
|
||||
import org.kohsuke.args4j.CmdLineException;
|
||||
import org.kohsuke.stapler.StaplerOverridable;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.kohsuke.stapler.StaplerResponse;
|
||||
import org.kohsuke.stapler.StaplerResponse2;
|
||||
import org.kohsuke.stapler.export.Exported;
|
||||
import org.kohsuke.stapler.interceptor.RequirePOST;
|
||||
import org.kohsuke.stapler.verb.POST;
|
||||
@ -854,9 +858,43 @@ public abstract class Job<JobT extends Job<JobT, RunT>, RunT extends Run<JobT, R
|
||||
return m.get(m.firstKey());
|
||||
}
|
||||
|
||||
/**
|
||||
* @since TODO
|
||||
*/
|
||||
@Override
|
||||
public Object getDynamic(String token, StaplerRequest2 req,
|
||||
StaplerResponse2 rsp) {
|
||||
if (Util.isOverridden(Job.class, getClass(), "getDynamic", String.class, StaplerRequest.class, StaplerResponse.class)) {
|
||||
return getDynamic(token, StaplerRequest.fromStaplerRequest2(req), StaplerResponse.fromStaplerResponse2(rsp));
|
||||
}
|
||||
try {
|
||||
// try to interpret the token as build number
|
||||
return getBuildByNumber(Integer.parseInt(token));
|
||||
} catch (NumberFormatException e) {
|
||||
// try to map that to widgets
|
||||
for (Widget w : getWidgets()) {
|
||||
if (w.getUrlName().equals(token))
|
||||
return w;
|
||||
}
|
||||
|
||||
// is this a permalink?
|
||||
for (Permalink p : getPermalinks()) {
|
||||
if (p.getId().equals(token))
|
||||
return p.resolve(this);
|
||||
}
|
||||
|
||||
return super.getDynamic(token, req, rsp);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #getDynamic(String, StaplerRequest2, StaplerResponse2)}
|
||||
*/
|
||||
@Deprecated
|
||||
@Override
|
||||
public Object getDynamic(String token, StaplerRequest req,
|
||||
StaplerResponse rsp) {
|
||||
// Intentionally not factoring this out into a common implementation method because it contains a call to super.
|
||||
try {
|
||||
// try to interpret the token as build number
|
||||
return getBuildByNumber(Integer.parseInt(token));
|
||||
@ -1092,7 +1130,7 @@ public abstract class Job<JobT extends Job<JobT, RunT>, RunT extends Run<JobT, R
|
||||
*
|
||||
* @since 2.60
|
||||
*/
|
||||
public void doRssChangelog(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException {
|
||||
public void doRssChangelog(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException {
|
||||
class FeedItem {
|
||||
ChangeLogSet.Entry e;
|
||||
int idx;
|
||||
@ -1168,8 +1206,29 @@ public abstract class Job<JobT extends Job<JobT, RunT>, RunT extends Run<JobT, R
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @since TODO
|
||||
*/
|
||||
@Override
|
||||
public ContextMenu doChildrenContextMenu(StaplerRequest2 request, StaplerResponse2 response) throws Exception {
|
||||
if (Util.isOverridden(Job.class, getClass(), "doChildrenContextMenu", StaplerRequest.class, StaplerResponse.class)) {
|
||||
return doChildrenContextMenu(StaplerRequest.fromStaplerRequest2(request), StaplerResponse.fromStaplerResponse2(response));
|
||||
} else {
|
||||
return doChildrenContextMenuImpl(request, response);
|
||||
}
|
||||
}
|
||||
|
||||
@Override public ContextMenu doChildrenContextMenu(StaplerRequest request, StaplerResponse response) throws Exception {
|
||||
/**
|
||||
* @deprecated use {@link #doChildrenContextMenu(StaplerRequest2, StaplerResponse2)}
|
||||
*/
|
||||
@Deprecated
|
||||
@StaplerNotDispatchable
|
||||
@Override
|
||||
public ContextMenu doChildrenContextMenu(StaplerRequest request, StaplerResponse response) throws Exception {
|
||||
return doChildrenContextMenuImpl(StaplerRequest.toStaplerRequest2(request), StaplerResponse.toStaplerResponse2(response));
|
||||
}
|
||||
|
||||
private ContextMenu doChildrenContextMenuImpl(StaplerRequest2 request, StaplerResponse2 response) {
|
||||
// not sure what would be really useful here. This needs more thoughts.
|
||||
// for the time being, I'm starting with permalinks
|
||||
ContextMenu menu = new ContextMenu();
|
||||
@ -1327,8 +1386,8 @@ public abstract class Job<JobT extends Job<JobT, RunT>, RunT extends Run<JobT, R
|
||||
* Accepts submission from the configuration page.
|
||||
*/
|
||||
@POST
|
||||
public synchronized void doConfigSubmit(StaplerRequest req,
|
||||
StaplerResponse rsp) throws IOException, ServletException, FormException {
|
||||
public synchronized void doConfigSubmit(StaplerRequest2 req,
|
||||
StaplerResponse2 rsp) throws IOException, ServletException, FormException {
|
||||
checkPermission(CONFIGURE);
|
||||
|
||||
description = req.getParameter("description");
|
||||
@ -1373,15 +1432,32 @@ public abstract class Job<JobT extends Job<JobT, RunT>, RunT extends Run<JobT, R
|
||||
/**
|
||||
* Derived class can override this to perform additional config submission
|
||||
* work.
|
||||
*
|
||||
* @since TODO
|
||||
*/
|
||||
protected void submit(StaplerRequest req, StaplerResponse rsp)
|
||||
protected void submit(StaplerRequest2 req, StaplerResponse2 rsp)
|
||||
throws IOException, ServletException, FormException {
|
||||
if (Util.isOverridden(Job.class, getClass(), "submit", StaplerRequest.class, StaplerResponse.class)) {
|
||||
try {
|
||||
submit(StaplerRequest.fromStaplerRequest2(req), StaplerResponse.fromStaplerResponse2(rsp));
|
||||
} catch (javax.servlet.ServletException e) {
|
||||
throw ServletExceptionWrapper.toJakartaServletException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #submit(StaplerRequest2, StaplerResponse2)}
|
||||
*/
|
||||
@Deprecated
|
||||
protected void submit(StaplerRequest req, StaplerResponse rsp)
|
||||
throws IOException, javax.servlet.ServletException, FormException {
|
||||
}
|
||||
|
||||
/**
|
||||
* Accepts and serves the job description
|
||||
*/
|
||||
public void doDescription(StaplerRequest req, StaplerResponse rsp)
|
||||
public void doDescription(StaplerRequest2 req, StaplerResponse2 rsp)
|
||||
throws IOException {
|
||||
if (req.getMethod().equals("GET")) {
|
||||
//read
|
||||
@ -1407,7 +1483,7 @@ public abstract class Job<JobT extends Job<JobT, RunT>, RunT extends Run<JobT, R
|
||||
/**
|
||||
* Returns the image that shows the current buildCommand status.
|
||||
*/
|
||||
public void doBuildStatus(StaplerRequest req, StaplerResponse rsp)
|
||||
public void doBuildStatus(StaplerRequest2 req, StaplerResponse2 rsp)
|
||||
throws IOException {
|
||||
rsp.sendRedirect2(req.getContextPath() + "/images/48x48/" + getBuildStatusUrl());
|
||||
}
|
||||
@ -1577,7 +1653,7 @@ public abstract class Job<JobT extends Job<JobT, RunT>, RunT extends Run<JobT, R
|
||||
@RequirePOST
|
||||
public/* not synchronized. see renameTo() */void doDoRename(
|
||||
StaplerRequest req, StaplerResponse rsp) throws IOException,
|
||||
ServletException {
|
||||
javax.servlet.ServletException {
|
||||
String newName = req.getParameter("newName");
|
||||
doConfirmRename(newName).generateResponse(req, rsp, null);
|
||||
}
|
||||
@ -1589,12 +1665,12 @@ public abstract class Job<JobT extends Job<JobT, RunT>, RunT extends Run<JobT, R
|
||||
}
|
||||
}
|
||||
|
||||
public void doRssAll(StaplerRequest req, StaplerResponse rsp)
|
||||
public void doRssAll(StaplerRequest2 req, StaplerResponse2 rsp)
|
||||
throws IOException, ServletException {
|
||||
RSS.rss(req, rsp, "Jenkins:" + getDisplayName() + " (all builds)", getUrl(), getBuilds().newBuilds());
|
||||
}
|
||||
|
||||
public void doRssFailed(StaplerRequest req, StaplerResponse rsp)
|
||||
public void doRssFailed(StaplerRequest2 req, StaplerResponse2 rsp)
|
||||
throws IOException, ServletException {
|
||||
RSS.rss(req, rsp, "Jenkins:" + getDisplayName() + " (failed builds)", getUrl(), getBuilds().failureOnly().newBuilds());
|
||||
}
|
||||
|
@ -27,6 +27,7 @@ package hudson.model;
|
||||
import edu.umd.cs.findbugs.annotations.NonNull;
|
||||
import hudson.ExtensionPoint;
|
||||
import hudson.Launcher;
|
||||
import hudson.Util;
|
||||
import hudson.model.Descriptor.FormException;
|
||||
import hudson.model.queue.SubTask;
|
||||
import hudson.tasks.BuildStep;
|
||||
@ -41,6 +42,7 @@ import jenkins.model.Jenkins;
|
||||
import jenkins.model.OptionalJobProperty;
|
||||
import net.sf.json.JSONObject;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.kohsuke.stapler.export.ExportedBean;
|
||||
|
||||
/**
|
||||
@ -183,8 +185,28 @@ public abstract class JobProperty<J extends Job<?, ?>> implements Reconfigurable
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
/**
|
||||
* @since TODO
|
||||
*/
|
||||
@Override
|
||||
public JobProperty<?> reconfigure(StaplerRequest2 req, JSONObject form) throws FormException {
|
||||
if (Util.isOverridden(JobProperty.class, getClass(), "reconfigure", StaplerRequest.class, JSONObject.class)) {
|
||||
return reconfigure(StaplerRequest.fromStaplerRequest2(req), form);
|
||||
} else {
|
||||
return reconfigureImpl(req, form);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #reconfigure(StaplerRequest2, JSONObject)}
|
||||
*/
|
||||
@Deprecated
|
||||
@Override
|
||||
public JobProperty<?> reconfigure(StaplerRequest req, JSONObject form) throws FormException {
|
||||
return reconfigureImpl(StaplerRequest.toStaplerRequest2(req), form);
|
||||
}
|
||||
|
||||
private JobProperty<?> reconfigureImpl(StaplerRequest2 req, JSONObject form) throws FormException {
|
||||
return form == null ? null : getDescriptor().newInstance(req, form);
|
||||
}
|
||||
|
||||
|
@ -24,6 +24,7 @@
|
||||
|
||||
package hudson.model;
|
||||
|
||||
import hudson.Util;
|
||||
import java.lang.reflect.ParameterizedType;
|
||||
import java.lang.reflect.Type;
|
||||
import java.util.ArrayList;
|
||||
@ -34,6 +35,7 @@ import jenkins.model.OptionalJobProperty;
|
||||
import net.sf.json.JSONObject;
|
||||
import org.jvnet.tiger_types.Types;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
|
||||
/**
|
||||
* {@link Descriptor} for {@link JobProperty}.
|
||||
@ -61,6 +63,23 @@ public abstract class JobPropertyDescriptor extends Descriptor<JobProperty<?>> {
|
||||
* null to avoid setting an instance of {@link JobProperty} to the target project (or just use {@link OptionalJobProperty})
|
||||
*/
|
||||
@Override
|
||||
public JobProperty<?> newInstance(StaplerRequest2 req, JSONObject formData) throws FormException {
|
||||
if (Util.isOverridden(JobPropertyDescriptor.class, getClass(), "newInstance", StaplerRequest.class, JSONObject.class)) {
|
||||
return newInstance(req != null ? StaplerRequest.fromStaplerRequest2(req) : null, formData);
|
||||
} else {
|
||||
// JobPropertyDescriptors are bit different in that we allow them even without any user-visible configuration parameter,
|
||||
// so replace the lack of form data by an empty one.
|
||||
if (formData.isNullObject()) formData = new JSONObject();
|
||||
|
||||
return super.newInstance(req, formData);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #newInstance(StaplerRequest2, JSONObject)}
|
||||
*/
|
||||
@Deprecated
|
||||
@Override
|
||||
public JobProperty<?> newInstance(StaplerRequest req, JSONObject formData) throws FormException {
|
||||
// JobPropertyDescriptors are bit different in that we allow them even without any user-visible configuration parameter,
|
||||
// so replace the lack of form data by an empty one.
|
||||
|
@ -71,8 +71,8 @@ import org.antlr.v4.runtime.CharStreams;
|
||||
import org.antlr.v4.runtime.CommonTokenStream;
|
||||
import org.kohsuke.accmod.Restricted;
|
||||
import org.kohsuke.accmod.restrictions.DoNotUse;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerResponse;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.kohsuke.stapler.StaplerResponse2;
|
||||
import org.kohsuke.stapler.export.Exported;
|
||||
import org.kohsuke.stapler.export.ExportedBean;
|
||||
|
||||
@ -548,7 +548,7 @@ public abstract class Label extends Actionable implements Comparable<Label>, Mod
|
||||
}
|
||||
|
||||
@Override
|
||||
public ContextMenu doChildrenContextMenu(StaplerRequest request, StaplerResponse response) throws Exception {
|
||||
public ContextMenu doChildrenContextMenu(StaplerRequest2 request, StaplerResponse2 response) throws Exception {
|
||||
ContextMenu menu = new ContextMenu();
|
||||
for (Node node : getNodes()) {
|
||||
menu.add(node);
|
||||
|
@ -41,6 +41,8 @@ import hudson.util.HttpResponses;
|
||||
import hudson.views.ListViewColumn;
|
||||
import hudson.views.StatusFilter;
|
||||
import hudson.views.ViewJobFilter;
|
||||
import io.jenkins.servlet.ServletExceptionWrapper;
|
||||
import jakarta.servlet.ServletException;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
@ -55,7 +57,6 @@ import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.regex.PatternSyntaxException;
|
||||
import javax.servlet.ServletException;
|
||||
import jenkins.model.Jenkins;
|
||||
import net.jcip.annotations.GuardedBy;
|
||||
import net.sf.json.JSONObject;
|
||||
@ -67,7 +68,8 @@ import org.kohsuke.stapler.DataBoundSetter;
|
||||
import org.kohsuke.stapler.HttpResponse;
|
||||
import org.kohsuke.stapler.QueryParameter;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerResponse;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.kohsuke.stapler.StaplerResponse2;
|
||||
import org.kohsuke.stapler.interceptor.RequirePOST;
|
||||
import org.kohsuke.stapler.verb.POST;
|
||||
import org.springframework.security.access.AccessDeniedException;
|
||||
@ -97,7 +99,7 @@ public class ListView extends View implements DirectlyModifiableView {
|
||||
/**
|
||||
* Whether to recurse in ItemGroups
|
||||
*/
|
||||
private boolean recurse;
|
||||
private volatile boolean recurse;
|
||||
|
||||
/**
|
||||
* Compiled include pattern from the includeRegex string.
|
||||
@ -357,7 +359,7 @@ public class ListView extends View implements DirectlyModifiableView {
|
||||
}
|
||||
}
|
||||
|
||||
private boolean needToAddToCurrentView(StaplerRequest req) throws ServletException {
|
||||
private boolean needToAddToCurrentView(StaplerRequest2 req) throws ServletException {
|
||||
String json = req.getParameter("json");
|
||||
if (json != null && !json.isEmpty()) {
|
||||
// Submitted via UI
|
||||
@ -371,7 +373,7 @@ public class ListView extends View implements DirectlyModifiableView {
|
||||
|
||||
@Override
|
||||
@POST
|
||||
public Item doCreateItem(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException {
|
||||
public Item doCreateItem(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException {
|
||||
ItemGroup<? extends TopLevelItem> ig = getOwner().getItemGroup();
|
||||
if (ig instanceof ModifiableItemGroup) {
|
||||
TopLevelItem item = ((ModifiableItemGroup<? extends TopLevelItem>) ig).doCreateItem(req, rsp);
|
||||
@ -439,7 +441,32 @@ public class ListView extends View implements DirectlyModifiableView {
|
||||
* Load view-specific properties here.
|
||||
*/
|
||||
@Override
|
||||
protected void submit(StaplerRequest req) throws ServletException, FormException, IOException {
|
||||
protected void submit(StaplerRequest2 req) throws ServletException, FormException, IOException {
|
||||
if (Util.isOverridden(View.class, getClass(), "submit", StaplerRequest.class)) {
|
||||
try {
|
||||
submit(StaplerRequest.fromStaplerRequest2(req));
|
||||
} catch (javax.servlet.ServletException e) {
|
||||
throw ServletExceptionWrapper.toJakartaServletException(e);
|
||||
}
|
||||
} else {
|
||||
submitImpl(req);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #submit(StaplerRequest2)}
|
||||
*/
|
||||
@Deprecated
|
||||
@Override
|
||||
protected void submit(StaplerRequest req) throws javax.servlet.ServletException, FormException, IOException {
|
||||
try {
|
||||
submitImpl(StaplerRequest.toStaplerRequest2(req));
|
||||
} catch (ServletException e) {
|
||||
throw ServletExceptionWrapper.fromJakartaServletException(e);
|
||||
}
|
||||
}
|
||||
|
||||
private void submitImpl(StaplerRequest2 req) throws ServletException, FormException, IOException {
|
||||
JSONObject json = req.getSubmittedForm();
|
||||
synchronized (this) {
|
||||
recurse = json.optBoolean("recurse", true);
|
||||
|
@ -36,8 +36,8 @@ import org.kohsuke.accmod.Restricted;
|
||||
import org.kohsuke.accmod.restrictions.NoExternalUse;
|
||||
import org.kohsuke.stapler.Stapler;
|
||||
import org.kohsuke.stapler.StaplerFallback;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerResponse;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.kohsuke.stapler.StaplerResponse2;
|
||||
|
||||
/**
|
||||
* Adds the "Manage Jenkins" link to the top page.
|
||||
@ -70,7 +70,7 @@ public class ManageJenkinsAction implements RootAction, StaplerFallback, ModelOb
|
||||
}
|
||||
|
||||
@Override
|
||||
public ContextMenu doContextMenu(StaplerRequest request, StaplerResponse response) throws JellyException, IOException {
|
||||
public ContextMenu doContextMenu(StaplerRequest2 request, StaplerResponse2 response) throws JellyException, IOException {
|
||||
return new ContextMenu().from(this, request, response, "index");
|
||||
}
|
||||
|
||||
@ -80,7 +80,7 @@ public class ManageJenkinsAction implements RootAction, StaplerFallback, ModelOb
|
||||
*/
|
||||
@Restricted(NoExternalUse.class)
|
||||
public void addContextMenuItem(ContextMenu menu, String url, String icon, String iconXml, String text, boolean post, boolean requiresConfirmation, Badge badge, String message) {
|
||||
if (Stapler.getCurrentRequest().findAncestorObject(this.getClass()) != null || !Util.isSafeToRedirectTo(url)) {
|
||||
if (Stapler.getCurrentRequest2().findAncestorObject(this.getClass()) != null || !Util.isSafeToRedirectTo(url)) {
|
||||
// Default behavior if the URL is absolute or scheme-relative, or the current object is an ancestor (i.e. would resolve correctly)
|
||||
menu.add(url, icon, iconXml, text, post, requiresConfirmation, badge, message);
|
||||
return;
|
||||
|
@ -24,10 +24,15 @@
|
||||
|
||||
package hudson.model;
|
||||
|
||||
import io.jenkins.servlet.ServletExceptionWrapper;
|
||||
import jakarta.servlet.ServletException;
|
||||
import java.io.IOException;
|
||||
import javax.servlet.ServletException;
|
||||
import jenkins.security.stapler.StaplerNotDispatchable;
|
||||
import org.kohsuke.stapler.ReflectionUtils;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.kohsuke.stapler.StaplerResponse;
|
||||
import org.kohsuke.stapler.StaplerResponse2;
|
||||
|
||||
/**
|
||||
* {@link ItemGroup} that is a general purpose container, which allows users and the rest of the program
|
||||
@ -45,5 +50,45 @@ public interface ModifiableItemGroup<T extends Item> extends ItemGroup<T> {
|
||||
* The request format follows that of {@code <n:form xmlns:n="/lib/form">}.
|
||||
*
|
||||
*/
|
||||
T doCreateItem(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException;
|
||||
@StaplerNotDispatchable
|
||||
default T doCreateItem(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException {
|
||||
if (ReflectionUtils.isOverridden(
|
||||
ModifiableItemGroup.class,
|
||||
getClass(),
|
||||
"doCreateItem",
|
||||
StaplerRequest.class,
|
||||
StaplerResponse.class)) {
|
||||
try {
|
||||
return doCreateItem(StaplerRequest.fromStaplerRequest2(req), StaplerResponse.fromStaplerResponse2(rsp));
|
||||
} catch (javax.servlet.ServletException e) {
|
||||
throw ServletExceptionWrapper.toJakartaServletException(e);
|
||||
}
|
||||
} else {
|
||||
throw new AbstractMethodError("The class " + getClass().getName() + " must override at least one of the "
|
||||
+ ModifiableItemGroup.class.getSimpleName() + ".doCreateItem methods");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #doCreateItem(StaplerRequest2, StaplerResponse2)}
|
||||
*/
|
||||
@Deprecated
|
||||
@StaplerNotDispatchable
|
||||
default T doCreateItem(StaplerRequest req, StaplerResponse rsp) throws IOException, javax.servlet.ServletException {
|
||||
if (ReflectionUtils.isOverridden(
|
||||
ModifiableItemGroup.class,
|
||||
getClass(),
|
||||
"doCreateItem",
|
||||
StaplerRequest2.class,
|
||||
StaplerResponse2.class)) {
|
||||
try {
|
||||
return doCreateItem(StaplerRequest.toStaplerRequest2(req), StaplerResponse.toStaplerResponse2(rsp));
|
||||
} catch (ServletException e) {
|
||||
throw ServletExceptionWrapper.fromJakartaServletException(e);
|
||||
}
|
||||
} else {
|
||||
throw new AbstractMethodError("The class " + getClass().getName() + " must override at least one of the "
|
||||
+ ModifiableItemGroup.class.getSimpleName() + ".doCreateItem methods");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -26,6 +26,7 @@ package hudson.model;
|
||||
|
||||
import hudson.util.ChartUtil;
|
||||
import hudson.util.NoOverlapCategoryAxis;
|
||||
import jakarta.servlet.ServletException;
|
||||
import java.awt.BasicStroke;
|
||||
import java.awt.Color;
|
||||
import java.awt.Font;
|
||||
@ -39,7 +40,6 @@ import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import javax.servlet.ServletException;
|
||||
import org.jfree.chart.ChartFactory;
|
||||
import org.jfree.chart.JFreeChart;
|
||||
import org.jfree.chart.axis.CategoryAxis;
|
||||
@ -53,7 +53,9 @@ import org.jfree.ui.RectangleInsets;
|
||||
import org.jvnet.localizer.Localizable;
|
||||
import org.kohsuke.stapler.HttpResponse;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.kohsuke.stapler.StaplerResponse;
|
||||
import org.kohsuke.stapler.StaplerResponse2;
|
||||
import org.kohsuke.stapler.export.Exported;
|
||||
import org.kohsuke.stapler.export.ExportedBean;
|
||||
|
||||
@ -298,8 +300,8 @@ public class MultiStageTimeSeries implements Serializable {
|
||||
* Renders this object as an image.
|
||||
*/
|
||||
@Override
|
||||
public void generateResponse(StaplerRequest req, StaplerResponse rsp, Object node) throws IOException, ServletException {
|
||||
ChartUtil.generateGraph(req, rsp, createChart(), 500, 400);
|
||||
public void generateResponse(StaplerRequest2 req, StaplerResponse2 rsp, Object node) throws IOException, ServletException {
|
||||
ChartUtil.generateGraph(StaplerRequest.fromStaplerRequest2(req), StaplerResponse.fromStaplerResponse2(rsp), createChart(), 500, 400);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -26,18 +26,21 @@ package hudson.model;
|
||||
|
||||
import edu.umd.cs.findbugs.annotations.NonNull;
|
||||
import hudson.Extension;
|
||||
import hudson.Util;
|
||||
import hudson.model.Descriptor.FormException;
|
||||
import io.jenkins.servlet.ServletExceptionWrapper;
|
||||
import jakarta.servlet.ServletException;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import javax.servlet.ServletException;
|
||||
import jenkins.model.Jenkins;
|
||||
import org.jenkinsci.Symbol;
|
||||
import org.kohsuke.stapler.DataBoundConstructor;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerResponse;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.kohsuke.stapler.StaplerResponse2;
|
||||
import org.kohsuke.stapler.interceptor.RequirePOST;
|
||||
|
||||
/**
|
||||
@ -64,7 +67,7 @@ public class MyView extends View {
|
||||
|
||||
@RequirePOST
|
||||
@Override
|
||||
public TopLevelItem doCreateItem(StaplerRequest req, StaplerResponse rsp)
|
||||
public TopLevelItem doCreateItem(StaplerRequest2 req, StaplerResponse2 rsp)
|
||||
throws IOException, ServletException {
|
||||
ItemGroup<? extends TopLevelItem> ig = getOwner().getItemGroup();
|
||||
if (ig instanceof ModifiableItemGroup) {
|
||||
@ -85,7 +88,24 @@ public class MyView extends View {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void submit(StaplerRequest req) throws IOException, ServletException, FormException {
|
||||
protected void submit(StaplerRequest2 req) throws IOException, ServletException, FormException {
|
||||
if (Util.isOverridden(MyView.class, getClass(), "submit", StaplerRequest.class)) {
|
||||
try {
|
||||
submit(StaplerRequest.fromStaplerRequest2(req));
|
||||
} catch (javax.servlet.ServletException e) {
|
||||
throw ServletExceptionWrapper.toJakartaServletException(e);
|
||||
}
|
||||
} else {
|
||||
// noop
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #submit(StaplerRequest2)}
|
||||
*/
|
||||
@Deprecated
|
||||
@Override
|
||||
protected void submit(StaplerRequest req) throws IOException, javax.servlet.ServletException, FormException {
|
||||
// noop
|
||||
}
|
||||
|
||||
|
@ -35,13 +35,13 @@ import hudson.security.ACL;
|
||||
import hudson.util.FormValidation;
|
||||
import hudson.views.MyViewsTabBar;
|
||||
import hudson.views.ViewsTabBar;
|
||||
import jakarta.servlet.ServletException;
|
||||
import java.io.IOException;
|
||||
import java.text.ParseException;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
import javax.servlet.ServletException;
|
||||
import jenkins.model.Jenkins;
|
||||
import jenkins.util.SystemProperties;
|
||||
import net.sf.json.JSONObject;
|
||||
@ -54,8 +54,8 @@ import org.kohsuke.stapler.HttpResponse;
|
||||
import org.kohsuke.stapler.QueryParameter;
|
||||
import org.kohsuke.stapler.StaplerFallback;
|
||||
import org.kohsuke.stapler.StaplerProxy;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerResponse;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.kohsuke.stapler.StaplerResponse2;
|
||||
import org.kohsuke.stapler.verb.POST;
|
||||
|
||||
/**
|
||||
@ -196,7 +196,7 @@ public class MyViewsProperty extends UserProperty implements ModifiableViewGroup
|
||||
}
|
||||
|
||||
@POST
|
||||
public synchronized void doCreateView(StaplerRequest req, StaplerResponse rsp)
|
||||
public synchronized void doCreateView(StaplerRequest2 req, StaplerResponse2 rsp)
|
||||
throws IOException, ServletException, ParseException, FormException {
|
||||
checkPermission(View.CREATE);
|
||||
addView(View.create(req, rsp, this));
|
||||
@ -276,7 +276,7 @@ public class MyViewsProperty extends UserProperty implements ModifiableViewGroup
|
||||
}
|
||||
|
||||
@Override
|
||||
public UserProperty reconfigure(StaplerRequest req, JSONObject form) throws FormException {
|
||||
public UserProperty reconfigure(StaplerRequest2 req, JSONObject form) throws FormException {
|
||||
req.bindJSON(this, form);
|
||||
return this;
|
||||
}
|
||||
|
@ -79,6 +79,7 @@ import org.kohsuke.accmod.restrictions.ProtectedExternally;
|
||||
import org.kohsuke.stapler.BindInterceptor;
|
||||
import org.kohsuke.stapler.Stapler;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.kohsuke.stapler.export.Exported;
|
||||
import org.kohsuke.stapler.export.ExportedBean;
|
||||
import org.springframework.security.core.Authentication;
|
||||
@ -560,8 +561,25 @@ public abstract class Node extends AbstractModelObject implements Reconfigurable
|
||||
return Jenkins.get().getAuthorizationStrategy().getACL(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Node reconfigure(@NonNull final StaplerRequest2 req, JSONObject form) throws FormException {
|
||||
if (Util.isOverridden(Node.class, getClass(), "reconfigure", StaplerRequest.class, JSONObject.class)) {
|
||||
return reconfigure(StaplerRequest.fromStaplerRequest2(req), form);
|
||||
} else {
|
||||
return reconfigureImpl(req, form);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #reconfigure(StaplerRequest2, JSONObject)}
|
||||
*/
|
||||
@Deprecated
|
||||
@Override
|
||||
public Node reconfigure(@NonNull final StaplerRequest req, JSONObject form) throws FormException {
|
||||
return reconfigureImpl(StaplerRequest.toStaplerRequest2(req), form);
|
||||
}
|
||||
|
||||
private Node reconfigureImpl(@NonNull final StaplerRequest2 req, JSONObject form) throws FormException {
|
||||
if (form == null) return null;
|
||||
|
||||
final JSONObject jsonForProperties = form.optJSONObject("nodeProperties");
|
||||
|
@ -6,8 +6,8 @@ import edu.umd.cs.findbugs.annotations.NonNull;
|
||||
import hudson.Extension;
|
||||
import hudson.model.userproperty.UserPropertyCategory;
|
||||
import hudson.util.PersistedList;
|
||||
import jakarta.servlet.http.HttpSession;
|
||||
import java.io.IOException;
|
||||
import javax.servlet.http.HttpSession;
|
||||
import org.jenkinsci.Symbol;
|
||||
import org.kohsuke.stapler.Stapler;
|
||||
|
||||
@ -70,13 +70,13 @@ public class PaneStatusProperties extends UserProperty implements Saveable {
|
||||
|
||||
@Override
|
||||
public boolean isCollapsed(String paneId) {
|
||||
final HttpSession session = Stapler.getCurrentRequest().getSession();
|
||||
final HttpSession session = Stapler.getCurrentRequest2().getSession();
|
||||
return session.getAttribute(format(attribute, paneId)) != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean toggleCollapsed(String paneId) {
|
||||
final HttpSession session = Stapler.getCurrentRequest().getSession();
|
||||
final HttpSession session = Stapler.getCurrentRequest2().getSession();
|
||||
final String property = format(attribute, paneId);
|
||||
final Object collapsed = session.getAttribute(property);
|
||||
if (collapsed == null) {
|
||||
|
@ -41,6 +41,7 @@ import jenkins.model.Jenkins;
|
||||
import net.sf.json.JSONObject;
|
||||
import org.kohsuke.stapler.DataBoundSetter;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.kohsuke.stapler.export.Exported;
|
||||
import org.kohsuke.stapler.export.ExportedBean;
|
||||
|
||||
@ -59,7 +60,7 @@ import org.kohsuke.stapler.export.ExportedBean;
|
||||
* <p>
|
||||
* Three classes are used to model build parameters. First is the
|
||||
* {@link ParameterDescriptor}, which tells Hudson what kind of implementations are
|
||||
* available. From {@link ParameterDescriptor#newInstance(StaplerRequest, JSONObject)},
|
||||
* available. From {@link ParameterDescriptor#newInstance(StaplerRequest2, JSONObject)},
|
||||
* Hudson creates {@link ParameterDefinition}s based on the job configuration.
|
||||
* For example, if the user defines two string parameters "database-type" and
|
||||
* "appserver-type", we'll get two {@link StringParameterDefinition} instances
|
||||
@ -69,7 +70,7 @@ import org.kohsuke.stapler.export.ExportedBean;
|
||||
* When a job is configured with {@link ParameterDefinition} (or more precisely,
|
||||
* {@link ParametersDefinitionProperty}, which in turns retains {@link ParameterDefinition}s),
|
||||
* user would have to enter the values for the defined build parameters.
|
||||
* The {@link #createValue(StaplerRequest, JSONObject)} method is used to convert this
|
||||
* The {@link #createValue(StaplerRequest2, JSONObject)} method is used to convert this
|
||||
* form submission into {@link ParameterValue} objects, which are then accessible
|
||||
* during a build.
|
||||
*
|
||||
@ -85,12 +86,12 @@ import org.kohsuke.stapler.export.ExportedBean;
|
||||
* <h3>config.jelly</h3>
|
||||
* {@link ParameterDefinition} class uses {@code config.jelly} to contribute a form
|
||||
* fragment in the job configuration screen. Values entered there are fed back to
|
||||
* {@link ParameterDescriptor#newInstance(StaplerRequest, JSONObject)} to create {@link ParameterDefinition}s.
|
||||
* {@link ParameterDescriptor#newInstance(StaplerRequest2, JSONObject)} to create {@link ParameterDefinition}s.
|
||||
*
|
||||
* <h3>index.jelly</h3>
|
||||
* The {@code index.jelly} view contributes a form fragment in the page where the user
|
||||
* enters actual values of parameters for a build. The result of this form submission
|
||||
* is then fed to {@link ParameterDefinition#createValue(StaplerRequest, JSONObject)} to
|
||||
* is then fed to {@link ParameterDefinition#createValue(StaplerRequest2, JSONObject)} to
|
||||
* create {@link ParameterValue}s.
|
||||
*
|
||||
* @see StringParameterDefinition
|
||||
@ -183,14 +184,37 @@ public abstract class ParameterDefinition implements
|
||||
* and submits it to the server.
|
||||
*/
|
||||
@CheckForNull
|
||||
public abstract ParameterValue createValue(StaplerRequest req, JSONObject jo);
|
||||
public /* abstract */ ParameterValue createValue(StaplerRequest2 req, JSONObject jo) {
|
||||
return Util.ifOverridden(
|
||||
() -> createValue(StaplerRequest.fromStaplerRequest2(req), jo),
|
||||
ParameterDefinition.class,
|
||||
getClass(),
|
||||
"createValue",
|
||||
StaplerRequest.class,
|
||||
JSONObject.class);
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #createValue(StaplerRequest2, JSONObject)}
|
||||
*/
|
||||
@CheckForNull
|
||||
@Deprecated
|
||||
public ParameterValue createValue(StaplerRequest req, JSONObject jo) {
|
||||
return Util.ifOverridden(
|
||||
() -> createValue(StaplerRequest.toStaplerRequest2(req), jo),
|
||||
ParameterDefinition.class,
|
||||
getClass(),
|
||||
"createValue",
|
||||
StaplerRequest2.class,
|
||||
JSONObject.class);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a parameter value from a GET with query string.
|
||||
* If no value is available in the request, it returns a default value if possible, or null.
|
||||
*
|
||||
* <p>
|
||||
* Unlike {@link #createValue(StaplerRequest, JSONObject)}, this method is intended to support
|
||||
* Unlike {@link #createValue(StaplerRequest2, JSONObject)}, this method is intended to support
|
||||
* the programmatic POST-ing of the build URL. This form is less expressive (as it doesn't support
|
||||
* the tree form), but it's more scriptable.
|
||||
*
|
||||
@ -202,8 +226,28 @@ public abstract class ParameterDefinition implements
|
||||
* If the parameter is deemed required but was missing in the submission.
|
||||
*/
|
||||
@CheckForNull
|
||||
public abstract ParameterValue createValue(StaplerRequest req);
|
||||
public /* abstract */ ParameterValue createValue(StaplerRequest2 req) {
|
||||
return Util.ifOverridden(
|
||||
() -> createValue(StaplerRequest.fromStaplerRequest2(req)),
|
||||
ParameterDefinition.class,
|
||||
getClass(),
|
||||
"createValue",
|
||||
StaplerRequest.class);
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #createValue(StaplerRequest2)}
|
||||
*/
|
||||
@CheckForNull
|
||||
@Deprecated
|
||||
public ParameterValue createValue(StaplerRequest req) {
|
||||
return Util.ifOverridden(
|
||||
() -> createValue(StaplerRequest.toStaplerRequest2(req)),
|
||||
ParameterDefinition.class,
|
||||
getClass(),
|
||||
"createValue",
|
||||
StaplerRequest2.class);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a parameter value from the string given in the CLI.
|
||||
|
@ -43,14 +43,14 @@ import jenkins.security.stapler.StaplerAccessibleType;
|
||||
import net.sf.json.JSONObject;
|
||||
import org.kohsuke.accmod.Restricted;
|
||||
import org.kohsuke.accmod.restrictions.DoNotUse;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.kohsuke.stapler.export.Exported;
|
||||
import org.kohsuke.stapler.export.ExportedBean;
|
||||
|
||||
/**
|
||||
* A value for a parameter in a build.
|
||||
*
|
||||
* Created by {@link ParameterDefinition#createValue(StaplerRequest, JSONObject)} for
|
||||
* Created by {@link ParameterDefinition#createValue(StaplerRequest2, JSONObject)} for
|
||||
* a particular build (although this 'owner' build object is passed in for every method
|
||||
* call as a parameter so that the parameter won't have to persist it.)
|
||||
*
|
||||
@ -240,7 +240,7 @@ public abstract class ParameterValue implements Serializable {
|
||||
* @deprecated since 2008-09-20.
|
||||
* parameter definition may change any time. So if you find yourself
|
||||
* in need of accessing the information from {@link ParameterDefinition},
|
||||
* instead copy them in {@link ParameterDefinition#createValue(StaplerRequest, JSONObject)}
|
||||
* instead copy them in {@link ParameterDefinition#createValue(StaplerRequest2, JSONObject)}
|
||||
* into {@link ParameterValue}.
|
||||
*/
|
||||
@Deprecated
|
||||
|
@ -25,8 +25,8 @@
|
||||
|
||||
package hudson.model;
|
||||
|
||||
import static javax.servlet.http.HttpServletResponse.SC_CREATED;
|
||||
import static javax.servlet.http.HttpServletResponse.SC_SEE_OTHER;
|
||||
import static jakarta.servlet.http.HttpServletResponse.SC_CREATED;
|
||||
import static jakarta.servlet.http.HttpServletResponse.SC_SEE_OTHER;
|
||||
|
||||
import edu.umd.cs.findbugs.annotations.CheckForNull;
|
||||
import edu.umd.cs.findbugs.annotations.NonNull;
|
||||
@ -35,6 +35,8 @@ import hudson.Util;
|
||||
import hudson.model.Queue.WaitingItem;
|
||||
import hudson.model.queue.ScheduleResult;
|
||||
import hudson.util.AlternativeUiTextProvider;
|
||||
import io.jenkins.servlet.ServletExceptionWrapper;
|
||||
import jakarta.servlet.ServletException;
|
||||
import java.io.IOException;
|
||||
import java.util.AbstractList;
|
||||
import java.util.ArrayList;
|
||||
@ -43,7 +45,6 @@ import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import javax.servlet.ServletException;
|
||||
import jenkins.model.Jenkins;
|
||||
import jenkins.model.OptionalJobProperty;
|
||||
import jenkins.model.ParameterizedJobMixIn;
|
||||
@ -56,7 +57,9 @@ import org.kohsuke.accmod.restrictions.NoExternalUse;
|
||||
import org.kohsuke.stapler.DataBoundConstructor;
|
||||
import org.kohsuke.stapler.QueryParameter;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.kohsuke.stapler.StaplerResponse;
|
||||
import org.kohsuke.stapler.StaplerResponse2;
|
||||
import org.kohsuke.stapler.export.Exported;
|
||||
import org.kohsuke.stapler.export.ExportedBean;
|
||||
|
||||
@ -133,19 +136,23 @@ public class ParametersDefinitionProperty extends OptionalJobProperty<Job<?, ?>>
|
||||
return (AbstractProject<?, ?>) owner;
|
||||
}
|
||||
|
||||
/** @deprecated use {@link #_doBuild(StaplerRequest, StaplerResponse, TimeDuration)} */
|
||||
/** @deprecated use {@link #_doBuild(StaplerRequest2, StaplerResponse2, TimeDuration)} */
|
||||
@Deprecated
|
||||
public void _doBuild(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException {
|
||||
_doBuild(req, rsp, TimeDuration.fromString(req.getParameter("delay")));
|
||||
public void _doBuild(StaplerRequest req, StaplerResponse rsp) throws IOException, javax.servlet.ServletException {
|
||||
try {
|
||||
_doBuild(StaplerRequest.toStaplerRequest2(req), StaplerResponse.toStaplerResponse2(rsp), TimeDuration.fromString(req.getParameter("delay")));
|
||||
} catch (ServletException e) {
|
||||
throw ServletExceptionWrapper.fromJakartaServletException(e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Interprets the form submission and schedules a build for a parameterized job.
|
||||
*
|
||||
* <p>
|
||||
* This method is supposed to be invoked from {@link ParameterizedJobMixIn#doBuild(StaplerRequest, StaplerResponse, TimeDuration)}.
|
||||
* This method is supposed to be invoked from {@link ParameterizedJobMixIn#doBuild(StaplerRequest2, StaplerResponse2, TimeDuration)}.
|
||||
*/
|
||||
public void _doBuild(StaplerRequest req, StaplerResponse rsp, @QueryParameter TimeDuration delay) throws IOException, ServletException {
|
||||
public void _doBuild(StaplerRequest2 req, StaplerResponse2 rsp, @QueryParameter TimeDuration delay) throws IOException, ServletException {
|
||||
if (delay == null)
|
||||
delay = new TimeDuration(TimeUnit.MILLISECONDS.convert(getJob().getQuietPeriod(), TimeUnit.SECONDS));
|
||||
|
||||
@ -185,13 +192,17 @@ public class ParametersDefinitionProperty extends OptionalJobProperty<Job<?, ?>>
|
||||
rsp.sendRedirect(".");
|
||||
}
|
||||
|
||||
/** @deprecated use {@link #buildWithParameters(StaplerRequest, StaplerResponse, TimeDuration)} */
|
||||
/** @deprecated use {@link #buildWithParameters(StaplerRequest2, StaplerResponse2, TimeDuration)} */
|
||||
@Deprecated
|
||||
public void buildWithParameters(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException {
|
||||
buildWithParameters(req, rsp, TimeDuration.fromString(req.getParameter("delay")));
|
||||
public void buildWithParameters(StaplerRequest req, StaplerResponse rsp) throws IOException, javax.servlet.ServletException {
|
||||
try {
|
||||
buildWithParameters(StaplerRequest.toStaplerRequest2(req), StaplerResponse.toStaplerResponse2(rsp), TimeDuration.fromString(req.getParameter("delay")));
|
||||
} catch (ServletException e) {
|
||||
throw ServletExceptionWrapper.fromJakartaServletException(e);
|
||||
}
|
||||
}
|
||||
|
||||
public void buildWithParameters(StaplerRequest req, StaplerResponse rsp, @CheckForNull TimeDuration delay) throws IOException, ServletException {
|
||||
public void buildWithParameters(StaplerRequest2 req, StaplerResponse2 rsp, @CheckForNull TimeDuration delay) throws IOException, ServletException {
|
||||
List<ParameterValue> values = new ArrayList<>();
|
||||
for (ParameterDefinition d : parameterDefinitions) {
|
||||
ParameterValue value = d.createValue(req);
|
||||
@ -232,7 +243,7 @@ public class ParametersDefinitionProperty extends OptionalJobProperty<Job<?, ?>>
|
||||
@Symbol("parameters")
|
||||
public static class DescriptorImpl extends OptionalJobPropertyDescriptor {
|
||||
@Override
|
||||
public ParametersDefinitionProperty newInstance(StaplerRequest req, JSONObject formData) throws FormException {
|
||||
public ParametersDefinitionProperty newInstance(StaplerRequest2 req, JSONObject formData) throws FormException {
|
||||
ParametersDefinitionProperty prop = (ParametersDefinitionProperty) super.newInstance(req, formData);
|
||||
if (prop != null && prop.parameterDefinitions.isEmpty()) {
|
||||
return null;
|
||||
|
@ -36,7 +36,7 @@ import org.kohsuke.accmod.Restricted;
|
||||
import org.kohsuke.accmod.restrictions.DoNotUse;
|
||||
import org.kohsuke.accmod.restrictions.NoExternalUse;
|
||||
import org.kohsuke.stapler.DataBoundConstructor;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
|
||||
/**
|
||||
* Parameter whose value is a {@link Secret} and is hidden from the UI.
|
||||
@ -80,7 +80,7 @@ public class PasswordParameterDefinition extends SimpleParameterDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public PasswordParameterValue createValue(StaplerRequest req, JSONObject jo) {
|
||||
public PasswordParameterValue createValue(StaplerRequest2 req, JSONObject jo) {
|
||||
PasswordParameterValue value = req.bindJSON(PasswordParameterValue.class, jo);
|
||||
if (value.getValue().getPlainText().equals(DEFAULT_VALUE)) {
|
||||
value = new PasswordParameterValue(getName(), getDefaultValue());
|
||||
|
@ -40,6 +40,8 @@ import hudson.tasks.Publisher;
|
||||
import hudson.triggers.SCMTrigger;
|
||||
import hudson.triggers.Trigger;
|
||||
import hudson.util.DescribableList;
|
||||
import io.jenkins.servlet.ServletExceptionWrapper;
|
||||
import jakarta.servlet.ServletException;
|
||||
import java.io.IOException;
|
||||
import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
@ -49,11 +51,12 @@ import java.util.Set;
|
||||
import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import javax.servlet.ServletException;
|
||||
import jenkins.triggers.SCMTriggerItem;
|
||||
import net.sf.json.JSONObject;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.kohsuke.stapler.StaplerResponse;
|
||||
import org.kohsuke.stapler.StaplerResponse2;
|
||||
|
||||
/**
|
||||
* Buildable software project.
|
||||
@ -223,10 +226,39 @@ public abstract class Project<P extends Project<P, B>, B extends Build<P, B>>
|
||||
// actions
|
||||
//
|
||||
//
|
||||
@Override
|
||||
protected void submit(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException, FormException {
|
||||
super.submit(req, rsp);
|
||||
|
||||
/**
|
||||
* @since TODO
|
||||
*/
|
||||
@Override
|
||||
protected void submit(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException, FormException {
|
||||
if (Util.isOverridden(Project.class, getClass(), "submit", StaplerRequest.class, StaplerResponse.class)) {
|
||||
try {
|
||||
submit(StaplerRequest.fromStaplerRequest2(req), StaplerResponse.fromStaplerResponse2(rsp));
|
||||
} catch (javax.servlet.ServletException e) {
|
||||
throw ServletExceptionWrapper.toJakartaServletException(e);
|
||||
}
|
||||
} else {
|
||||
super.submit(req, rsp);
|
||||
submitImpl(req, rsp);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #submit(StaplerRequest2, StaplerResponse2)}
|
||||
*/
|
||||
@Deprecated
|
||||
@Override
|
||||
protected void submit(StaplerRequest req, StaplerResponse rsp) throws IOException, javax.servlet.ServletException, FormException {
|
||||
super.submit(req, rsp);
|
||||
try {
|
||||
submitImpl(StaplerRequest.toStaplerRequest2(req), StaplerResponse.toStaplerResponse2(rsp));
|
||||
} catch (ServletException e) {
|
||||
throw new javax.servlet.ServletException(e);
|
||||
}
|
||||
}
|
||||
|
||||
private void submitImpl(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException, FormException {
|
||||
JSONObject json = req.getSubmittedForm();
|
||||
|
||||
getBuildWrappersList().rebuild(req, json, BuildWrappers.getFor(this));
|
||||
|
@ -29,9 +29,10 @@ import hudson.Extension;
|
||||
import hudson.Util;
|
||||
import hudson.model.Descriptor.FormException;
|
||||
import hudson.util.FormValidation;
|
||||
import io.jenkins.servlet.ServletExceptionWrapper;
|
||||
import jakarta.servlet.ServletException;
|
||||
import java.io.IOException;
|
||||
import java.util.Collection;
|
||||
import javax.servlet.ServletException;
|
||||
import jenkins.model.Jenkins;
|
||||
import org.jenkinsci.Symbol;
|
||||
import org.kohsuke.stapler.DataBoundConstructor;
|
||||
@ -39,7 +40,8 @@ import org.kohsuke.stapler.QueryParameter;
|
||||
import org.kohsuke.stapler.Stapler;
|
||||
import org.kohsuke.stapler.StaplerFallback;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerResponse;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.kohsuke.stapler.StaplerResponse2;
|
||||
import org.kohsuke.stapler.interceptor.RequirePOST;
|
||||
|
||||
/**
|
||||
@ -98,7 +100,32 @@ public class ProxyView extends View implements StaplerFallback {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void submit(StaplerRequest req) throws IOException, ServletException, FormException {
|
||||
protected void submit(StaplerRequest2 req) throws IOException, ServletException, FormException {
|
||||
if (Util.isOverridden(ProxyView.class, getClass(), "submit", StaplerRequest.class)) {
|
||||
try {
|
||||
submit(StaplerRequest.fromStaplerRequest2(req));
|
||||
} catch (javax.servlet.ServletException e) {
|
||||
throw ServletExceptionWrapper.toJakartaServletException(e);
|
||||
}
|
||||
} else {
|
||||
submitImpl(req);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #submit(StaplerRequest2)}
|
||||
*/
|
||||
@Deprecated
|
||||
@Override
|
||||
protected void submit(StaplerRequest req) throws IOException, javax.servlet.ServletException, FormException {
|
||||
try {
|
||||
submitImpl(StaplerRequest.toStaplerRequest2(req));
|
||||
} catch (ServletException e) {
|
||||
throw ServletExceptionWrapper.fromJakartaServletException(e);
|
||||
}
|
||||
}
|
||||
|
||||
private void submitImpl(StaplerRequest2 req) throws ServletException, FormException {
|
||||
String proxiedViewName = req.getSubmittedForm().getString("proxiedViewName");
|
||||
if (Jenkins.get().getView(proxiedViewName) == null) {
|
||||
throw new FormException("Not an existing global view", "proxiedViewName");
|
||||
@ -108,7 +135,7 @@ public class ProxyView extends View implements StaplerFallback {
|
||||
|
||||
@RequirePOST
|
||||
@Override
|
||||
public Item doCreateItem(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException {
|
||||
public Item doCreateItem(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException {
|
||||
return getProxiedView().doCreateItem(req, rsp);
|
||||
}
|
||||
|
||||
@ -139,7 +166,7 @@ public class ProxyView extends View implements StaplerFallback {
|
||||
@Override
|
||||
public boolean isInstantiable() {
|
||||
// doesn't make sense to add a ProxyView to the global views
|
||||
return !(Stapler.getCurrentRequest().findAncestorObject(ViewGroup.class) instanceof Jenkins);
|
||||
return !(Stapler.getCurrentRequest2().findAncestorObject(ViewGroup.class) instanceof Jenkins);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -76,6 +76,8 @@ import hudson.triggers.SafeTimerTask;
|
||||
import hudson.util.ConsistentHash;
|
||||
import hudson.util.Futures;
|
||||
import hudson.util.XStream2;
|
||||
import jakarta.servlet.ServletException;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.lang.ref.WeakReference;
|
||||
@ -107,8 +109,6 @@ import java.util.concurrent.locks.ReentrantLock;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import java.util.stream.Collectors;
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import jenkins.model.Jenkins;
|
||||
import jenkins.model.queue.AsynchronousExecution;
|
||||
import jenkins.model.queue.CompositeCauseOfBlockage;
|
||||
@ -130,7 +130,7 @@ import org.kohsuke.accmod.restrictions.NoExternalUse;
|
||||
import org.kohsuke.stapler.HttpResponse;
|
||||
import org.kohsuke.stapler.HttpResponses;
|
||||
import org.kohsuke.stapler.QueryParameter;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.kohsuke.stapler.export.Exported;
|
||||
import org.kohsuke.stapler.export.ExportedBean;
|
||||
import org.kohsuke.stapler.interceptor.RequirePOST;
|
||||
@ -2415,7 +2415,7 @@ public class Queue extends ResourceController implements Saveable {
|
||||
}
|
||||
}
|
||||
|
||||
public HttpResponse doIndex(StaplerRequest req) {
|
||||
public HttpResponse doIndex(StaplerRequest2 req) {
|
||||
return HttpResponses.text("Queue item exists. For details check, for example, " + req.getRequestURI() + "api/json?tree=cancelled,executable[url]");
|
||||
}
|
||||
|
||||
|
@ -26,13 +26,17 @@ package hudson.model;
|
||||
|
||||
import hudson.FeedAdapter;
|
||||
import hudson.util.RunList;
|
||||
import io.jenkins.servlet.ServletExceptionWrapper;
|
||||
import io.jenkins.servlet.http.HttpServletResponseWrapper;
|
||||
import jakarta.servlet.ServletException;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
import java.util.Collection;
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import jenkins.model.Jenkins;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.kohsuke.stapler.StaplerResponse;
|
||||
import org.kohsuke.stapler.StaplerResponse2;
|
||||
|
||||
/**
|
||||
* RSS related code.
|
||||
@ -52,8 +56,9 @@ public final class RSS {
|
||||
* Entries to be listed in the RSS feed.
|
||||
* @param adapter
|
||||
* Controls how to render entries to RSS.
|
||||
* @since TODO
|
||||
*/
|
||||
public static <E> void forwardToRss(String title, String url, Collection<? extends E> entries, FeedAdapter<E> adapter, StaplerRequest req, HttpServletResponse rsp) throws IOException, ServletException {
|
||||
public static <E> void forwardToRss(String title, String url, Collection<? extends E> entries, FeedAdapter<E> adapter, StaplerRequest2 req, HttpServletResponse rsp) throws IOException, ServletException {
|
||||
req.setAttribute("adapter", adapter);
|
||||
req.setAttribute("title", title);
|
||||
req.setAttribute("url", url);
|
||||
@ -72,6 +77,18 @@ public final class RSS {
|
||||
req.getView(Jenkins.get(), "/hudson/" + flavor + ".jelly").forward(req, rsp);
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #forwardToRss(String, String, Collection, FeedAdapter, StaplerRequest2, HttpServletResponse)}
|
||||
*/
|
||||
@Deprecated
|
||||
public static <E> void forwardToRss(String title, String url, Collection<? extends E> entries, FeedAdapter<E> adapter, StaplerRequest req, javax.servlet.http.HttpServletResponse rsp) throws IOException, javax.servlet.ServletException {
|
||||
try {
|
||||
forwardToRss(title, url, entries, adapter, StaplerRequest.toStaplerRequest2(req), HttpServletResponseWrapper.toJakartaHttpServletResponse(rsp));
|
||||
} catch (ServletException e) {
|
||||
throw ServletExceptionWrapper.fromJakartaServletException(e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sends the RSS feed to the client using a default feed adapter.
|
||||
*
|
||||
@ -81,10 +98,23 @@ public final class RSS {
|
||||
* URL of the model object that owns this feed. Relative to the context root.
|
||||
* @param runList
|
||||
* Entries to be listed in the RSS feed.
|
||||
* @since TODO
|
||||
*/
|
||||
public static void rss(StaplerRequest2 req, StaplerResponse2 rsp, String title, String url, RunList runList) throws IOException, ServletException {
|
||||
rss(req, rsp, title, url, runList, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #rss(StaplerRequest2, StaplerResponse2, String, String, RunList)}
|
||||
* @since 2.215
|
||||
*/
|
||||
public static void rss(StaplerRequest req, StaplerResponse rsp, String title, String url, RunList runList) throws IOException, ServletException {
|
||||
rss(req, rsp, title, url, runList, null);
|
||||
@Deprecated
|
||||
public static void rss(StaplerRequest req, StaplerResponse rsp, String title, String url, RunList runList) throws IOException, javax.servlet.ServletException {
|
||||
try {
|
||||
rss(StaplerRequest.toStaplerRequest2(req), StaplerResponse.toStaplerResponse2(rsp), title, url, runList, null);
|
||||
} catch (ServletException e) {
|
||||
throw ServletExceptionWrapper.fromJakartaServletException(e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -98,10 +128,23 @@ public final class RSS {
|
||||
* Entries to be listed in the RSS feed.
|
||||
* @param feedAdapter
|
||||
* Controls how to render entries to RSS.
|
||||
* @since 2.215
|
||||
* @since TODO
|
||||
*/
|
||||
public static void rss(StaplerRequest req, StaplerResponse rsp, String title, String url, RunList runList, FeedAdapter<Run> feedAdapter) throws IOException, ServletException {
|
||||
public static void rss(StaplerRequest2 req, StaplerResponse2 rsp, String title, String url, RunList runList, FeedAdapter<Run> feedAdapter) throws IOException, ServletException {
|
||||
final FeedAdapter<Run> feedAdapter_ = feedAdapter == null ? Run.FEED_ADAPTER : feedAdapter;
|
||||
forwardToRss(title, url, runList, feedAdapter_, req, rsp);
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #rss(StaplerRequest2, StaplerResponse2, String, String, RunList, FeedAdapter)}
|
||||
* @since 2.215
|
||||
*/
|
||||
@Deprecated
|
||||
public static void rss(StaplerRequest req, StaplerResponse rsp, String title, String url, RunList runList, FeedAdapter<Run> feedAdapter) throws IOException, javax.servlet.ServletException {
|
||||
try {
|
||||
rss(StaplerRequest.toStaplerRequest2(req), StaplerResponse.toStaplerResponse2(rsp), title, url, runList, feedAdapter);
|
||||
} catch (ServletException e) {
|
||||
throw ServletExceptionWrapper.fromJakartaServletException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -26,10 +26,13 @@ package hudson.model;
|
||||
|
||||
import edu.umd.cs.findbugs.annotations.CheckForNull;
|
||||
import edu.umd.cs.findbugs.annotations.NonNull;
|
||||
import hudson.Util;
|
||||
import hudson.model.Descriptor.FormException;
|
||||
import hudson.slaves.NodeProperty;
|
||||
import jenkins.security.stapler.StaplerNotDispatchable;
|
||||
import net.sf.json.JSONObject;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
|
||||
/**
|
||||
* Marks modern {@link Describable}s that allow the current instances to pass information down to the next
|
||||
@ -44,7 +47,7 @@ import org.kohsuke.stapler.StaplerRequest;
|
||||
* <strong>Invisible Property:</strong>
|
||||
* This mechanism can be used to create an entirely invisible {@link Describable}, which is handy
|
||||
* for {@link NodeProperty}, {@link JobProperty}, etc. To do so, define an empty config.jelly to prevent it from
|
||||
* showing up in the config UI, then implement {@link #reconfigure(StaplerRequest, JSONObject)}
|
||||
* showing up in the config UI, then implement {@link #reconfigure(StaplerRequest2, JSONObject)}
|
||||
* and simply return {@code this}.
|
||||
*
|
||||
* <p>
|
||||
@ -78,5 +81,29 @@ public interface ReconfigurableDescribable<T extends ReconfigurableDescribable<T
|
||||
* @return
|
||||
* The new instance. To not to create an instance of a describable, return null.
|
||||
*/
|
||||
@CheckForNull T reconfigure(@NonNull StaplerRequest req, @CheckForNull JSONObject form) throws FormException;
|
||||
@CheckForNull
|
||||
@StaplerNotDispatchable
|
||||
default T reconfigure(@NonNull StaplerRequest2 req, @CheckForNull JSONObject form) throws FormException {
|
||||
if (Util.isOverridden(ReconfigurableDescribable.class, getClass(), "reconfigure", StaplerRequest.class, JSONObject.class)) {
|
||||
return reconfigure(StaplerRequest.fromStaplerRequest2(req), form);
|
||||
} else {
|
||||
throw new AbstractMethodError("The class " + getClass().getName() + " must override at least one of the "
|
||||
+ ReconfigurableDescribable.class.getSimpleName() + ".reconfigure methods");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #reconfigure(StaplerRequest2, JSONObject)}
|
||||
*/
|
||||
@CheckForNull
|
||||
@Deprecated
|
||||
@StaplerNotDispatchable
|
||||
default T reconfigure(@NonNull StaplerRequest req, @CheckForNull JSONObject form) throws FormException {
|
||||
if (Util.isOverridden(ReconfigurableDescribable.class, getClass(), "reconfigure", StaplerRequest2.class, JSONObject.class)) {
|
||||
return reconfigure(StaplerRequest.toStaplerRequest2(req), form);
|
||||
} else {
|
||||
throw new AbstractMethodError("The class " + getClass().getName() + " must override at least one of the "
|
||||
+ ReconfigurableDescribable.class.getSimpleName() + ".reconfigure methods");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -68,6 +68,9 @@ import hudson.util.FormApply;
|
||||
import hudson.util.LogTaskListener;
|
||||
import hudson.util.ProcessTree;
|
||||
import hudson.util.XStream2;
|
||||
import io.jenkins.servlet.ServletExceptionWrapper;
|
||||
import jakarta.servlet.ServletException;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import java.io.BufferedInputStream;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.File;
|
||||
@ -106,8 +109,6 @@ import java.util.Set;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import java.util.zip.GZIPInputStream;
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import jenkins.model.ArtifactManager;
|
||||
import jenkins.model.ArtifactManagerConfiguration;
|
||||
import jenkins.model.ArtifactManagerFactory;
|
||||
@ -119,6 +120,7 @@ import jenkins.model.StandardArtifactManager;
|
||||
import jenkins.model.lazy.BuildReference;
|
||||
import jenkins.model.lazy.LazyBuildMixIn;
|
||||
import jenkins.security.MasterToSlaveCallable;
|
||||
import jenkins.security.stapler.StaplerNotDispatchable;
|
||||
import jenkins.util.SystemProperties;
|
||||
import jenkins.util.VirtualFile;
|
||||
import jenkins.util.io.OnMaster;
|
||||
@ -132,7 +134,9 @@ import org.kohsuke.stapler.QueryParameter;
|
||||
import org.kohsuke.stapler.Stapler;
|
||||
import org.kohsuke.stapler.StaplerProxy;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.kohsuke.stapler.StaplerResponse;
|
||||
import org.kohsuke.stapler.StaplerResponse2;
|
||||
import org.kohsuke.stapler.export.Exported;
|
||||
import org.kohsuke.stapler.export.ExportedBean;
|
||||
import org.kohsuke.stapler.interceptor.RequirePOST;
|
||||
@ -1043,7 +1047,7 @@ public abstract class Run<JobT extends Job<JobT, RunT>, RunT extends Run<JobT, R
|
||||
// RUN may be accessed using permalinks, as "/lastSuccessful" or other, so try to retrieve this base URL
|
||||
// looking for "this" in the current request ancestors
|
||||
// @see also {@link AbstractItem#getUrl}
|
||||
StaplerRequest req = Stapler.getCurrentRequest();
|
||||
StaplerRequest2 req = Stapler.getCurrentRequest2();
|
||||
if (req != null) {
|
||||
String seed = Functions.getNearestAncestorUrl(req, this);
|
||||
if (seed != null) {
|
||||
@ -2157,7 +2161,7 @@ public abstract class Run<JobT extends Job<JobT, RunT>, RunT extends Run<JobT, R
|
||||
return new String(byteArray, getCharset());
|
||||
}
|
||||
|
||||
public void doBuildStatus(StaplerRequest req, StaplerResponse rsp) throws IOException {
|
||||
public void doBuildStatus(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException {
|
||||
rsp.sendRedirect2(req.getContextPath() + "/images/48x48/" + getBuildStatusUrl());
|
||||
}
|
||||
|
||||
@ -2260,7 +2264,7 @@ public abstract class Run<JobT extends Job<JobT, RunT>, RunT extends Run<JobT, R
|
||||
/**
|
||||
* Returns the build number in the body.
|
||||
*/
|
||||
public void doBuildNumber(StaplerResponse rsp) throws IOException {
|
||||
public void doBuildNumber(StaplerResponse2 rsp) throws IOException {
|
||||
rsp.setContentType("text/plain");
|
||||
rsp.setCharacterEncoding("US-ASCII");
|
||||
rsp.setStatus(HttpServletResponse.SC_OK);
|
||||
@ -2270,7 +2274,7 @@ public abstract class Run<JobT extends Job<JobT, RunT>, RunT extends Run<JobT, R
|
||||
/**
|
||||
* Returns the build time stamp in the body.
|
||||
*/
|
||||
public void doBuildTimestamp(StaplerRequest req, StaplerResponse rsp, @QueryParameter String format) throws IOException {
|
||||
public void doBuildTimestamp(StaplerRequest2 req, StaplerResponse2 rsp, @QueryParameter String format) throws IOException {
|
||||
rsp.setContentType("text/plain");
|
||||
rsp.setCharacterEncoding("US-ASCII");
|
||||
rsp.setStatus(HttpServletResponse.SC_OK);
|
||||
@ -2282,8 +2286,27 @@ public abstract class Run<JobT extends Job<JobT, RunT>, RunT extends Run<JobT, R
|
||||
|
||||
/**
|
||||
* Sends out the raw console output.
|
||||
*
|
||||
* @since TODO
|
||||
*/
|
||||
public void doConsoleText(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException {
|
||||
if (Util.isOverridden(Run.class, getClass(), "doConsoleText", StaplerRequest.class, StaplerResponse.class)) {
|
||||
doConsoleText(StaplerRequest.fromStaplerRequest2(req), StaplerResponse.fromStaplerResponse2(rsp));
|
||||
} else {
|
||||
doConsoleTextImpl(req, rsp);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #doConsoleText(StaplerRequest2, StaplerResponse2)}
|
||||
*/
|
||||
@Deprecated
|
||||
@StaplerNotDispatchable
|
||||
public void doConsoleText(StaplerRequest req, StaplerResponse rsp) throws IOException {
|
||||
doConsoleTextImpl(StaplerRequest.toStaplerRequest2(req), StaplerResponse.toStaplerResponse2(rsp));
|
||||
}
|
||||
|
||||
private void doConsoleTextImpl(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException {
|
||||
rsp.setContentType("text/plain;charset=UTF-8");
|
||||
try (InputStream input = getLogInputStream();
|
||||
OutputStream os = rsp.getOutputStream();
|
||||
@ -2299,7 +2322,7 @@ public abstract class Run<JobT extends Job<JobT, RunT>, RunT extends Run<JobT, R
|
||||
*/
|
||||
@Deprecated
|
||||
public void doProgressiveLog(StaplerRequest req, StaplerResponse rsp) throws IOException {
|
||||
getLogText().doProgressText(req, rsp);
|
||||
getLogText().doProgressText(StaplerRequest.toStaplerRequest2(req), StaplerResponse.toStaplerResponse2(rsp));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -2320,7 +2343,7 @@ public abstract class Run<JobT extends Job<JobT, RunT>, RunT extends Run<JobT, R
|
||||
}
|
||||
|
||||
@RequirePOST
|
||||
public void doToggleLogKeep(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException {
|
||||
public void doToggleLogKeep(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException {
|
||||
keepLog(!keepLog);
|
||||
rsp.forwardToPreviousPage(req);
|
||||
}
|
||||
@ -2341,9 +2364,37 @@ public abstract class Run<JobT extends Job<JobT, RunT>, RunT extends Run<JobT, R
|
||||
|
||||
/**
|
||||
* Deletes the build when the button is pressed.
|
||||
*
|
||||
* @since TODO
|
||||
*/
|
||||
@RequirePOST
|
||||
public void doDoDelete(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException {
|
||||
public void doDoDelete(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException {
|
||||
if (Util.isOverridden(Run.class, getClass(), "doDoDelete", StaplerRequest.class, StaplerResponse.class)) {
|
||||
try {
|
||||
doDoDelete(StaplerRequest.fromStaplerRequest2(req), StaplerResponse.fromStaplerResponse2(rsp));
|
||||
} catch (javax.servlet.ServletException e) {
|
||||
throw ServletExceptionWrapper.toJakartaServletException(e);
|
||||
}
|
||||
return;
|
||||
} else {
|
||||
doDoDeleteImpl(req, rsp);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #doDoDelete(StaplerRequest2, StaplerResponse2)}
|
||||
*/
|
||||
@Deprecated
|
||||
@StaplerNotDispatchable
|
||||
public void doDoDelete(StaplerRequest req, StaplerResponse rsp) throws IOException, javax.servlet.ServletException {
|
||||
try {
|
||||
doDoDeleteImpl(StaplerRequest.toStaplerRequest2(req), StaplerResponse.toStaplerResponse2(rsp));
|
||||
} catch (ServletException e) {
|
||||
throw ServletExceptionWrapper.fromJakartaServletException(e);
|
||||
}
|
||||
}
|
||||
|
||||
private void doDoDeleteImpl(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException {
|
||||
checkPermission(DELETE);
|
||||
|
||||
// We should not simply delete the build if it has been explicitly
|
||||
@ -2376,7 +2427,7 @@ public abstract class Run<JobT extends Job<JobT, RunT>, RunT extends Run<JobT, R
|
||||
* Accepts the new description.
|
||||
*/
|
||||
@RequirePOST
|
||||
public synchronized void doSubmitDescription(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException {
|
||||
public synchronized void doSubmitDescription(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException {
|
||||
setDescription(req.getParameter("description"));
|
||||
rsp.sendRedirect("."); // go to the top page
|
||||
}
|
||||
@ -2507,7 +2558,7 @@ public abstract class Run<JobT extends Job<JobT, RunT>, RunT extends Run<JobT, R
|
||||
}
|
||||
|
||||
@POST
|
||||
public @NonNull HttpResponse doConfigSubmit(StaplerRequest req) throws IOException, ServletException, FormException {
|
||||
public @NonNull HttpResponse doConfigSubmit(StaplerRequest2 req) throws IOException, ServletException, FormException {
|
||||
checkPermission(UPDATE);
|
||||
try (BulkChange bc = new BulkChange(this)) {
|
||||
JSONObject json = req.getSubmittedForm();
|
||||
@ -2625,9 +2676,27 @@ public abstract class Run<JobT extends Job<JobT, RunT>, RunT extends Run<JobT, R
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getDynamic(String token, StaplerRequest2 req, StaplerResponse2 rsp) {
|
||||
if (Util.isOverridden(Run.class, getClass(), "getDynamic", String.class, StaplerRequest.class, StaplerResponse.class)) {
|
||||
return getDynamic(token, StaplerRequest.fromStaplerRequest2(req), StaplerResponse.fromStaplerResponse2(rsp));
|
||||
} else {
|
||||
Object returnedResult = super.getDynamic(token, req, rsp);
|
||||
return getDynamicImpl(token, returnedResult);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #getDynamic(String, StaplerRequest2, StaplerResponse2)}
|
||||
*/
|
||||
@Deprecated
|
||||
@Override
|
||||
public Object getDynamic(String token, StaplerRequest req, StaplerResponse rsp) {
|
||||
Object returnedResult = super.getDynamic(token, req, rsp);
|
||||
return getDynamicImpl(token, returnedResult);
|
||||
}
|
||||
|
||||
private Object getDynamicImpl(String token, Object returnedResult) {
|
||||
if (returnedResult == null) {
|
||||
//check transient actions too
|
||||
for (Action action : getTransientActions()) {
|
||||
@ -2669,7 +2738,7 @@ public abstract class Run<JobT extends Job<JobT, RunT>, RunT extends Run<JobT, R
|
||||
|
||||
|
||||
public static class RedirectUp {
|
||||
public void doDynamic(StaplerRequest req, StaplerResponse rsp) throws IOException {
|
||||
public void doDynamic(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException {
|
||||
// Compromise to handle both browsers (auto-redirect) and programmatic access
|
||||
// (want accurate 404 response).. send 404 with javascript to redirect browsers.
|
||||
rsp.setStatus(HttpServletResponse.SC_NOT_FOUND);
|
||||
|
@ -38,7 +38,7 @@ import org.jenkinsci.Symbol;
|
||||
import org.kohsuke.stapler.DataBoundConstructor;
|
||||
import org.kohsuke.stapler.QueryParameter;
|
||||
import org.kohsuke.stapler.Stapler;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.kohsuke.stapler.export.Exported;
|
||||
|
||||
public class RunParameterDefinition extends SimpleParameterDefinition {
|
||||
@ -155,7 +155,7 @@ public class RunParameterDefinition extends SimpleParameterDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public ParameterDefinition newInstance(StaplerRequest req, JSONObject formData) throws FormException {
|
||||
public ParameterDefinition newInstance(StaplerRequest2 req, JSONObject formData) throws FormException {
|
||||
return req.bindJSON(RunParameterDefinition.class, formData);
|
||||
}
|
||||
|
||||
@ -202,7 +202,7 @@ public class RunParameterDefinition extends SimpleParameterDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public ParameterValue createValue(StaplerRequest req, JSONObject jo) {
|
||||
public ParameterValue createValue(StaplerRequest2 req, JSONObject jo) {
|
||||
RunParameterValue value = req.bindJSON(RunParameterValue.class, jo);
|
||||
value.setDescription(getDescription());
|
||||
return value;
|
||||
|
@ -5,7 +5,7 @@ import edu.umd.cs.findbugs.annotations.NonNull;
|
||||
import hudson.cli.CLICommand;
|
||||
import java.io.IOException;
|
||||
import org.kohsuke.stapler.DataBoundConstructor;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
|
||||
/**
|
||||
* Convenient base class for {@link ParameterDefinition} whose value can be represented in a context-independent single string token.
|
||||
@ -31,7 +31,7 @@ public abstract class SimpleParameterDefinition extends ParameterDefinition {
|
||||
public abstract ParameterValue createValue(String value);
|
||||
|
||||
@Override
|
||||
public final ParameterValue createValue(StaplerRequest req) {
|
||||
public final ParameterValue createValue(StaplerRequest2 req) {
|
||||
String[] value = req.getParameterValues(getName());
|
||||
if (value == null) {
|
||||
return getDefaultParameterValue();
|
||||
|
@ -51,6 +51,7 @@ import hudson.slaves.SlaveComputer;
|
||||
import hudson.util.ClockDifference;
|
||||
import hudson.util.DescribableList;
|
||||
import hudson.util.FormValidation;
|
||||
import jakarta.servlet.ServletException;
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.IOException;
|
||||
@ -69,7 +70,6 @@ import java.util.jar.JarFile;
|
||||
import java.util.jar.Manifest;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import javax.servlet.ServletException;
|
||||
import jenkins.model.Jenkins;
|
||||
import jenkins.security.MasterToSlaveCallable;
|
||||
import jenkins.slaves.WorkspaceLocator;
|
||||
@ -80,8 +80,8 @@ import org.kohsuke.accmod.restrictions.NoExternalUse;
|
||||
import org.kohsuke.stapler.DataBoundSetter;
|
||||
import org.kohsuke.stapler.HttpResponse;
|
||||
import org.kohsuke.stapler.QueryParameter;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerResponse;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.kohsuke.stapler.StaplerResponse2;
|
||||
|
||||
/**
|
||||
* Information about a Hudson agent node.
|
||||
@ -418,7 +418,7 @@ public abstract class Slave extends Node implements Serializable {
|
||||
this.fileName = fileName;
|
||||
}
|
||||
|
||||
public void doIndex(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException {
|
||||
public void doIndex(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException {
|
||||
URLConnection con = connect();
|
||||
// since we end up redirecting users to jnlpJars/foo.jar/, set the content disposition
|
||||
// so that browsers can download them in the right file name.
|
||||
@ -430,7 +430,7 @@ public abstract class Slave extends Node implements Serializable {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void generateResponse(StaplerRequest req, StaplerResponse rsp, Object node) throws IOException, ServletException {
|
||||
public void generateResponse(StaplerRequest2 req, StaplerResponse2 rsp, Object node) throws IOException, ServletException {
|
||||
doIndex(req, rsp);
|
||||
}
|
||||
|
||||
@ -465,7 +465,7 @@ public abstract class Slave extends Node implements Serializable {
|
||||
}
|
||||
}
|
||||
|
||||
URL res = Jenkins.get().servletContext.getResource("/WEB-INF/" + name);
|
||||
URL res = Jenkins.get().getServletContext().getResource("/WEB-INF/" + name);
|
||||
if (res == null) {
|
||||
throw new FileNotFoundException(name); // giving up
|
||||
} else {
|
||||
@ -622,7 +622,7 @@ public abstract class Slave extends Node implements Serializable {
|
||||
/**
|
||||
* Performs syntactical check on the remote FS for agents.
|
||||
*/
|
||||
public FormValidation doCheckRemoteFS(@QueryParameter String value) throws IOException, ServletException {
|
||||
public FormValidation doCheckRemoteFS(@QueryParameter String value) throws IOException {
|
||||
if (Util.fixEmptyAndTrim(value) == null)
|
||||
return FormValidation.error(Messages.Slave_Remote_Director_Mandatory());
|
||||
|
||||
|
@ -29,9 +29,9 @@ public final class StockStatusIcon extends AbstractStatusIcon {
|
||||
@Override
|
||||
public String getImageOf(String size) {
|
||||
if (image.endsWith(".svg")) {
|
||||
return Stapler.getCurrentRequest().getContextPath() + Jenkins.RESOURCE_PATH + "/images/svgs/" + image;
|
||||
return Stapler.getCurrentRequest2().getContextPath() + Jenkins.RESOURCE_PATH + "/images/svgs/" + image;
|
||||
} else {
|
||||
return Stapler.getCurrentRequest().getContextPath() + Jenkins.RESOURCE_PATH +
|
||||
return Stapler.getCurrentRequest2().getContextPath() + Jenkins.RESOURCE_PATH +
|
||||
"/images/" + size + "/" + image;
|
||||
}
|
||||
}
|
||||
|
@ -36,7 +36,7 @@ import org.kohsuke.accmod.Restricted;
|
||||
import org.kohsuke.accmod.restrictions.DoNotUse;
|
||||
import org.kohsuke.stapler.DataBoundConstructor;
|
||||
import org.kohsuke.stapler.DataBoundSetter;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
|
||||
/**
|
||||
* Parameter whose value is a string value.
|
||||
@ -147,7 +147,7 @@ public class StringParameterDefinition extends SimpleParameterDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public ParameterValue createValue(StaplerRequest req, JSONObject jo) {
|
||||
public ParameterValue createValue(StaplerRequest2 req, JSONObject jo) {
|
||||
StringParameterValue value = req.bindJSON(StringParameterValue.class, jo);
|
||||
if (isTrim()) {
|
||||
value.doTrim();
|
||||
|
@ -27,12 +27,12 @@ package hudson.model;
|
||||
import hudson.console.AnnotatedLargeText;
|
||||
import hudson.security.ACL;
|
||||
import hudson.security.Permission;
|
||||
import jakarta.servlet.ServletException;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
import java.lang.ref.WeakReference;
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerResponse;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.kohsuke.stapler.StaplerResponse2;
|
||||
import org.kohsuke.stapler.framework.io.LargeText;
|
||||
import org.kohsuke.stapler.interceptor.RequirePOST;
|
||||
|
||||
@ -113,7 +113,7 @@ public abstract class TaskAction extends AbstractModelObject implements Action {
|
||||
/**
|
||||
* Handles incremental log output.
|
||||
*/
|
||||
public void doProgressiveLog(StaplerRequest req, StaplerResponse rsp) throws IOException {
|
||||
public void doProgressiveLog(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException {
|
||||
AnnotatedLargeText text = obtainLog();
|
||||
if (text != null) {
|
||||
text.doProgressText(req, rsp);
|
||||
@ -125,7 +125,7 @@ public abstract class TaskAction extends AbstractModelObject implements Action {
|
||||
/**
|
||||
* Handles incremental log output.
|
||||
*/
|
||||
public void doProgressiveHtml(StaplerRequest req, StaplerResponse rsp) throws IOException {
|
||||
public void doProgressiveHtml(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException {
|
||||
AnnotatedLargeText text = obtainLog();
|
||||
if (text != null) {
|
||||
text.doProgressiveHtml(req, rsp);
|
||||
@ -138,7 +138,7 @@ public abstract class TaskAction extends AbstractModelObject implements Action {
|
||||
* Clears the error status.
|
||||
*/
|
||||
@RequirePOST
|
||||
public synchronized void doClearError(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException {
|
||||
public synchronized void doClearError(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException {
|
||||
getACL().checkPermission(getPermission());
|
||||
|
||||
if (workerThread != null && !workerThread.isRunning())
|
||||
|
@ -32,7 +32,7 @@ import java.util.Objects;
|
||||
import net.sf.json.JSONObject;
|
||||
import org.jenkinsci.Symbol;
|
||||
import org.kohsuke.stapler.DataBoundConstructor;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
|
||||
/**
|
||||
* {@link StringParameterDefinition} that uses textarea, instead of text box.
|
||||
@ -68,7 +68,7 @@ public class TextParameterDefinition extends StringParameterDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public ParameterValue createValue(StaplerRequest req, JSONObject jo) {
|
||||
public ParameterValue createValue(StaplerRequest2 req, JSONObject jo) {
|
||||
TextParameterValue value = req.bindJSON(TextParameterValue.class, jo);
|
||||
value.setDescription(getDescription());
|
||||
return value;
|
||||
|
@ -164,7 +164,7 @@ public abstract class TopLevelItemDescriptor extends Descriptor<TopLevelItem> im
|
||||
DefaultScriptInvoker dsi = new DefaultScriptInvoker();
|
||||
StringWriter sw = new StringWriter();
|
||||
XMLOutput xml = dsi.createXMLOutput(sw, true);
|
||||
dsi.invokeScript(Stapler.getCurrentRequest(), Stapler.getCurrentResponse(), s, this, xml);
|
||||
dsi.invokeScript(Stapler.getCurrentRequest2(), Stapler.getCurrentResponse2(), s, this, xml);
|
||||
return sw.toString();
|
||||
} catch (Exception e) {
|
||||
LOGGER.log(Level.WARNING, null, e);
|
||||
|
@ -58,6 +58,7 @@ import hudson.util.NamingThreadFactory;
|
||||
import hudson.util.PersistedList;
|
||||
import hudson.util.VersionNumber;
|
||||
import hudson.util.XStream2;
|
||||
import jakarta.servlet.ServletException;
|
||||
import java.io.BufferedInputStream;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
@ -107,7 +108,6 @@ import java.util.jar.JarFile;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import javax.net.ssl.SSLHandshakeException;
|
||||
import javax.servlet.ServletException;
|
||||
import jenkins.MissingDependencyException;
|
||||
import jenkins.RestartRequiredException;
|
||||
import jenkins.install.InstallUtil;
|
||||
@ -115,6 +115,7 @@ import jenkins.management.Badge;
|
||||
import jenkins.model.Jenkins;
|
||||
import jenkins.model.Loadable;
|
||||
import jenkins.security.stapler.StaplerDispatchable;
|
||||
import jenkins.security.stapler.StaplerNotDispatchable;
|
||||
import jenkins.util.SystemProperties;
|
||||
import jenkins.util.Timer;
|
||||
import jenkins.util.io.OnMaster;
|
||||
@ -129,7 +130,8 @@ import org.kohsuke.accmod.restrictions.NoExternalUse;
|
||||
import org.kohsuke.stapler.HttpResponse;
|
||||
import org.kohsuke.stapler.StaplerProxy;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerResponse;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.kohsuke.stapler.StaplerResponse2;
|
||||
import org.kohsuke.stapler.export.Exported;
|
||||
import org.kohsuke.stapler.export.ExportedBean;
|
||||
import org.kohsuke.stapler.interceptor.RequirePOST;
|
||||
@ -439,7 +441,25 @@ public class UpdateCenter extends AbstractModelObject implements Loadable, Savea
|
||||
* @return The current connection status.
|
||||
*/
|
||||
@Restricted(DoNotUse.class)
|
||||
public HttpResponse doConnectionStatus(StaplerRequest2 request) {
|
||||
if (Util.isOverridden(UpdateCenter.class, getClass(), "doConnectionStatus", StaplerRequest.class)) {
|
||||
return doConnectionStatus(StaplerRequest.fromStaplerRequest2(request));
|
||||
} else {
|
||||
return doConnectionStatusImpl(request);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #doConnectionStatus(StaplerRequest2)}
|
||||
*/
|
||||
@Deprecated
|
||||
@StaplerNotDispatchable
|
||||
@Restricted(DoNotUse.class)
|
||||
public HttpResponse doConnectionStatus(StaplerRequest request) {
|
||||
return doConnectionStatusImpl(StaplerRequest.toStaplerRequest2(request));
|
||||
}
|
||||
|
||||
private HttpResponse doConnectionStatusImpl(StaplerRequest2 request) {
|
||||
Jenkins.get().checkPermission(Jenkins.SYSTEM_READ);
|
||||
try {
|
||||
String siteId = request.getParameter("siteId");
|
||||
@ -536,12 +556,12 @@ public class UpdateCenter extends AbstractModelObject implements Loadable, Savea
|
||||
* <p>
|
||||
* Supports a "correlationId" request parameter if you only want to get the
|
||||
* install status of a set of plugins requested for install through
|
||||
* {@link PluginManager#doInstallPlugins(org.kohsuke.stapler.StaplerRequest)}.
|
||||
* {@link PluginManager#doInstallPlugins(org.kohsuke.stapler.StaplerRequest2)}.
|
||||
*
|
||||
* @return The current installation status of a plugin set.
|
||||
*/
|
||||
@Restricted(DoNotUse.class)
|
||||
public HttpResponse doInstallStatus(StaplerRequest request) {
|
||||
public HttpResponse doInstallStatus(StaplerRequest2 request) {
|
||||
try {
|
||||
String correlationId = request.getParameter("correlationId");
|
||||
Map<String, Object> response = new HashMap<>();
|
||||
@ -754,7 +774,7 @@ public class UpdateCenter extends AbstractModelObject implements Loadable, Savea
|
||||
* Schedules a Jenkins upgrade.
|
||||
*/
|
||||
@RequirePOST
|
||||
public void doUpgrade(StaplerResponse rsp) throws IOException, ServletException {
|
||||
public void doUpgrade(StaplerResponse2 rsp) throws IOException, ServletException {
|
||||
Jenkins.get().checkPermission(Jenkins.ADMINISTER);
|
||||
HudsonUpgradeJob job = new HudsonUpgradeJob(getCoreSource(), Jenkins.getAuthentication2());
|
||||
if (!Lifecycle.get().canRewriteHudsonWar()) {
|
||||
@ -786,7 +806,7 @@ public class UpdateCenter extends AbstractModelObject implements Loadable, Savea
|
||||
* Schedules a Jenkins restart.
|
||||
*/
|
||||
@RequirePOST
|
||||
public void doSafeRestart(StaplerRequest request, StaplerResponse response) throws IOException, ServletException {
|
||||
public void doSafeRestart(StaplerRequest2 request, StaplerResponse2 response) throws IOException, ServletException {
|
||||
Jenkins.get().checkPermission(Jenkins.ADMINISTER);
|
||||
synchronized (jobs) {
|
||||
if (!isRestartScheduled()) {
|
||||
@ -801,7 +821,7 @@ public class UpdateCenter extends AbstractModelObject implements Loadable, Savea
|
||||
* Cancel all scheduled jenkins restarts
|
||||
*/
|
||||
@RequirePOST
|
||||
public void doCancelRestart(StaplerResponse response) throws IOException, ServletException {
|
||||
public void doCancelRestart(StaplerResponse2 response) throws IOException, ServletException {
|
||||
Jenkins.get().checkPermission(Jenkins.ADMINISTER);
|
||||
synchronized (jobs) {
|
||||
for (UpdateCenterJob job : jobs) {
|
||||
@ -860,7 +880,7 @@ public class UpdateCenter extends AbstractModelObject implements Loadable, Savea
|
||||
* Performs hudson downgrade.
|
||||
*/
|
||||
@RequirePOST
|
||||
public void doDowngrade(StaplerResponse rsp) throws IOException, ServletException {
|
||||
public void doDowngrade(StaplerResponse2 rsp) throws IOException, ServletException {
|
||||
Jenkins.get().checkPermission(Jenkins.ADMINISTER);
|
||||
if (!isDowngradable()) {
|
||||
sendError("Jenkins downgrade is not possible, probably backup does not exist");
|
||||
@ -877,7 +897,7 @@ public class UpdateCenter extends AbstractModelObject implements Loadable, Savea
|
||||
* Performs hudson downgrade.
|
||||
*/
|
||||
@RequirePOST
|
||||
public void doRestart(StaplerResponse rsp) throws IOException, ServletException {
|
||||
public void doRestart(StaplerResponse2 rsp) throws IOException, ServletException {
|
||||
Jenkins.get().checkPermission(Jenkins.ADMINISTER);
|
||||
HudsonDowngradeJob job = new HudsonDowngradeJob(getCoreSource(), Jenkins.getAuthentication2());
|
||||
LOGGER.info("Scheduling the core downgrade");
|
||||
@ -2392,7 +2412,7 @@ public class UpdateCenter extends AbstractModelObject implements Loadable, Savea
|
||||
* Could make PluginManager#getDetachedLocation public and consume it here, but this method is
|
||||
* best-effort anyway.
|
||||
*/
|
||||
src = Jenkins.get().servletContext.getResource(String.format("/WEB-INF/detached-plugins/%s.hpi", plugin.name));
|
||||
src = Jenkins.get().getServletContext().getResource(String.format("/WEB-INF/detached-plugins/%s.hpi", plugin.name));
|
||||
} catch (MalformedURLException e) {
|
||||
return null;
|
||||
}
|
||||
|
@ -67,7 +67,7 @@ import jenkins.model.Jenkins;
|
||||
import jenkins.security.FIPS140;
|
||||
import jenkins.util.SystemProperties;
|
||||
import net.sf.json.JSONObject;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
|
||||
/**
|
||||
* @author Kohsuke Kawaguchi
|
||||
@ -138,7 +138,7 @@ public class UsageStatistics extends PageDecorator implements PersistentDescript
|
||||
JSONObject o = new JSONObject();
|
||||
o.put("stat", 1);
|
||||
o.put("install", j.getLegacyInstanceId());
|
||||
o.put("servletContainer", j.servletContext.getServerInfo());
|
||||
o.put("servletContainer", j.getServletContext().getServerInfo());
|
||||
o.put("version", Jenkins.VERSION);
|
||||
|
||||
List<JSONObject> nodes = new ArrayList<>();
|
||||
@ -212,7 +212,7 @@ public class UsageStatistics extends PageDecorator implements PersistentDescript
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean configure(StaplerRequest req, JSONObject json) throws FormException {
|
||||
public boolean configure(StaplerRequest2 req, JSONObject json) throws FormException {
|
||||
try {
|
||||
// for backward compatibility reasons, this configuration is stored in Jenkins
|
||||
if (DISABLED) {
|
||||
|
@ -47,6 +47,8 @@ import hudson.security.UserMayOrMayNotExistException2;
|
||||
import hudson.util.FormValidation;
|
||||
import hudson.util.RunList;
|
||||
import hudson.util.XStream2;
|
||||
import jakarta.servlet.ServletException;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
@ -64,8 +66,6 @@ import java.util.concurrent.ExecutionException;
|
||||
import java.util.function.Predicate;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import jenkins.model.IdStrategy;
|
||||
import jenkins.model.Jenkins;
|
||||
import jenkins.model.Loadable;
|
||||
@ -79,8 +79,8 @@ import org.jenkinsci.Symbol;
|
||||
import org.kohsuke.accmod.Restricted;
|
||||
import org.kohsuke.accmod.restrictions.NoExternalUse;
|
||||
import org.kohsuke.stapler.StaplerProxy;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerResponse;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.kohsuke.stapler.StaplerResponse2;
|
||||
import org.kohsuke.stapler.export.Exported;
|
||||
import org.kohsuke.stapler.export.ExportedBean;
|
||||
import org.kohsuke.stapler.interceptor.RequirePOST;
|
||||
@ -485,7 +485,7 @@ public class User extends AbstractModelObject implements AccessControlled, Descr
|
||||
* Accepts the new description.
|
||||
*/
|
||||
@RequirePOST
|
||||
public void doSubmitDescription(StaplerRequest req, StaplerResponse rsp) throws IOException {
|
||||
public void doSubmitDescription(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException {
|
||||
checkPermission(Jenkins.ADMINISTER);
|
||||
|
||||
description = req.getParameter("description");
|
||||
@ -882,7 +882,7 @@ public class User extends AbstractModelObject implements AccessControlled, Descr
|
||||
* Deletes this user from Hudson.
|
||||
*/
|
||||
@RequirePOST
|
||||
public void doDoDelete(StaplerRequest req, StaplerResponse rsp) throws IOException {
|
||||
public void doDoDelete(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException {
|
||||
checkPermission(Jenkins.ADMINISTER);
|
||||
if (idStrategy().equals(id, Jenkins.getAuthentication2().getName())) {
|
||||
rsp.sendError(HttpServletResponse.SC_BAD_REQUEST, "Cannot delete self");
|
||||
@ -894,15 +894,15 @@ public class User extends AbstractModelObject implements AccessControlled, Descr
|
||||
rsp.sendRedirect2("../..");
|
||||
}
|
||||
|
||||
public void doRssAll(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException {
|
||||
public void doRssAll(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException {
|
||||
RSS.rss(req, rsp, "Jenkins:" + getDisplayName() + " (all builds)", getUrl(), getBuilds().newBuilds());
|
||||
}
|
||||
|
||||
public void doRssFailed(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException {
|
||||
public void doRssFailed(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException {
|
||||
RSS.rss(req, rsp, "Jenkins:" + getDisplayName() + " (failed builds)", getUrl(), getBuilds().regressionOnly());
|
||||
}
|
||||
|
||||
public void doRssLatest(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException {
|
||||
public void doRssLatest(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException {
|
||||
final List<Run> lastBuilds = new ArrayList<>();
|
||||
for (Job<?, ?> p : Jenkins.get().allItems(Job.class)) {
|
||||
for (Run<?, ?> b = p.getLastBuild(); b != null; b = b.getPreviousBuild()) {
|
||||
@ -1010,7 +1010,7 @@ public class User extends AbstractModelObject implements AccessControlled, Descr
|
||||
}
|
||||
|
||||
@Override
|
||||
public ContextMenu doContextMenu(StaplerRequest request, StaplerResponse response) throws Exception {
|
||||
public ContextMenu doContextMenu(StaplerRequest2 request, StaplerResponse2 response) throws Exception {
|
||||
return new ContextMenu().from(this, request, response);
|
||||
}
|
||||
|
||||
|
@ -27,6 +27,7 @@ package hudson.model;
|
||||
import edu.umd.cs.findbugs.annotations.NonNull;
|
||||
import hudson.DescriptorExtensionList;
|
||||
import hudson.ExtensionPoint;
|
||||
import hudson.Util;
|
||||
import hudson.model.Descriptor.FormException;
|
||||
import hudson.model.userproperty.UserPropertyCategory;
|
||||
import java.util.ArrayList;
|
||||
@ -34,6 +35,7 @@ import java.util.List;
|
||||
import jenkins.model.Jenkins;
|
||||
import net.sf.json.JSONObject;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.kohsuke.stapler.export.ExportedBean;
|
||||
|
||||
/**
|
||||
@ -101,8 +103,22 @@ public abstract class UserProperty implements ReconfigurableDescribable<UserProp
|
||||
return onlyForTheCategory;
|
||||
}
|
||||
|
||||
@Override
|
||||
public UserProperty reconfigure(StaplerRequest2 req, JSONObject form) throws FormException {
|
||||
if (Util.isOverridden(UserProperty.class, getClass(), "reconfigure", StaplerRequest.class, JSONObject.class)) {
|
||||
return reconfigure(StaplerRequest.fromStaplerRequest2(req), form);
|
||||
} else {
|
||||
return reconfigureImpl(req, form);
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
@Override
|
||||
public UserProperty reconfigure(StaplerRequest req, JSONObject form) throws FormException {
|
||||
return reconfigureImpl(StaplerRequest.toStaplerRequest2(req), form);
|
||||
}
|
||||
|
||||
private UserProperty reconfigureImpl(StaplerRequest2 req, JSONObject form) throws FormException {
|
||||
return form == null ? null : getDescriptor().newInstance(req, form);
|
||||
}
|
||||
}
|
||||
|
@ -25,7 +25,7 @@
|
||||
|
||||
package hudson.model;
|
||||
|
||||
import static javax.servlet.http.HttpServletResponse.SC_BAD_REQUEST;
|
||||
import static jakarta.servlet.http.HttpServletResponse.SC_BAD_REQUEST;
|
||||
|
||||
import com.thoughtworks.xstream.converters.ConversionException;
|
||||
import com.thoughtworks.xstream.io.StreamException;
|
||||
@ -57,6 +57,9 @@ import hudson.util.FormValidation;
|
||||
import hudson.util.RunList;
|
||||
import hudson.util.XStream2;
|
||||
import hudson.views.ListViewColumn;
|
||||
import io.jenkins.servlet.ServletExceptionWrapper;
|
||||
import jakarta.servlet.ServletException;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import java.io.BufferedInputStream;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.IOException;
|
||||
@ -80,8 +83,6 @@ import java.util.Objects;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import java.util.stream.Collectors;
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.xml.transform.Source;
|
||||
import javax.xml.transform.TransformerException;
|
||||
import javax.xml.transform.sax.SAXSource;
|
||||
@ -93,6 +94,7 @@ import jenkins.model.ModelObjectWithContextMenu;
|
||||
import jenkins.model.item_category.Categories;
|
||||
import jenkins.model.item_category.Category;
|
||||
import jenkins.model.item_category.ItemCategory;
|
||||
import jenkins.security.stapler.StaplerNotDispatchable;
|
||||
import jenkins.util.xml.XMLUtils;
|
||||
import jenkins.widgets.HasWidgets;
|
||||
import net.sf.json.JSONObject;
|
||||
@ -108,7 +110,9 @@ import org.kohsuke.stapler.HttpResponses;
|
||||
import org.kohsuke.stapler.QueryParameter;
|
||||
import org.kohsuke.stapler.Stapler;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.kohsuke.stapler.StaplerResponse;
|
||||
import org.kohsuke.stapler.StaplerResponse2;
|
||||
import org.kohsuke.stapler.WebMethod;
|
||||
import org.kohsuke.stapler.export.Exported;
|
||||
import org.kohsuke.stapler.export.ExportedBean;
|
||||
@ -673,7 +677,28 @@ public abstract class View extends AbstractModelObject implements AccessControll
|
||||
* Accepts the new description.
|
||||
*/
|
||||
@RequirePOST
|
||||
public synchronized void doSubmitDescription(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException {
|
||||
public synchronized void doSubmitDescription(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException {
|
||||
if (Util.isOverridden(View.class, getClass(), "doSubmitDescription", StaplerRequest.class, StaplerResponse.class)) {
|
||||
try {
|
||||
doSubmitDescription(StaplerRequest.fromStaplerRequest2(req), StaplerResponse.fromStaplerResponse2(rsp));
|
||||
} catch (javax.servlet.ServletException e) {
|
||||
throw ServletExceptionWrapper.toJakartaServletException(e);
|
||||
}
|
||||
} else {
|
||||
doSubmitDescriptionImpl(req, rsp);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #doSubmitDescription(StaplerRequest2, StaplerResponse2)}
|
||||
*/
|
||||
@Deprecated
|
||||
@StaplerNotDispatchable
|
||||
public synchronized void doSubmitDescription(StaplerRequest req, StaplerResponse rsp) throws IOException, javax.servlet.ServletException {
|
||||
doSubmitDescriptionImpl(StaplerRequest.toStaplerRequest2(req), StaplerResponse.toStaplerResponse2(rsp));
|
||||
}
|
||||
|
||||
private void doSubmitDescriptionImpl(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException {
|
||||
checkPermission(CONFIGURE);
|
||||
|
||||
description = req.getParameter("description");
|
||||
@ -684,10 +709,10 @@ public abstract class View extends AbstractModelObject implements AccessControll
|
||||
/**
|
||||
* Accepts submission from the configuration page.
|
||||
*
|
||||
* Subtypes should override the {@link #submit(StaplerRequest)} method.
|
||||
* Subtypes should override the {@link #submit(StaplerRequest2)} method.
|
||||
*/
|
||||
@POST
|
||||
public final synchronized void doConfigSubmit(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException, FormException {
|
||||
public final synchronized void doConfigSubmit(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException, FormException {
|
||||
checkPermission(CONFIGURE);
|
||||
|
||||
submit(req);
|
||||
@ -710,13 +735,42 @@ public abstract class View extends AbstractModelObject implements AccessControll
|
||||
*
|
||||
* Load view-specific properties here.
|
||||
*/
|
||||
protected abstract void submit(StaplerRequest req) throws IOException, ServletException, FormException;
|
||||
protected /* abstract */ void submit(StaplerRequest2 req) throws IOException, ServletException, FormException {
|
||||
if (Util.isOverridden(View.class, getClass(), "submit", StaplerRequest.class)) {
|
||||
try {
|
||||
submit(StaplerRequest.fromStaplerRequest2(req));
|
||||
} catch (javax.servlet.ServletException e) {
|
||||
throw ServletExceptionWrapper.toJakartaServletException(e);
|
||||
}
|
||||
} else {
|
||||
throw new AbstractMethodError("The class " + getClass().getName() + " must override at least one of the "
|
||||
+ View.class.getSimpleName() + ".submit methods");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #submit(StaplerRequest2)}
|
||||
*/
|
||||
@Deprecated
|
||||
protected void submit(StaplerRequest req) throws IOException, javax.servlet.ServletException, FormException {
|
||||
if (Util.isOverridden(View.class, getClass(), "submit", StaplerRequest2.class)) {
|
||||
try {
|
||||
submit(StaplerRequest.toStaplerRequest2(req));
|
||||
} catch (ServletException e) {
|
||||
throw ServletExceptionWrapper.fromJakartaServletException(e);
|
||||
}
|
||||
} else {
|
||||
throw new AbstractMethodError("The class " + getClass().getName() + " must override at least one of the "
|
||||
+ View.class.getSimpleName() + ".submit methods");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Deletes this view.
|
||||
*/
|
||||
@RequirePOST
|
||||
public synchronized void doDoDelete(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException {
|
||||
public synchronized void doDoDelete(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException {
|
||||
checkPermission(DELETE);
|
||||
|
||||
owner.deleteView(this);
|
||||
@ -729,13 +783,44 @@ public abstract class View extends AbstractModelObject implements AccessControll
|
||||
* Creates a new {@link Item} in this collection.
|
||||
*
|
||||
* <p>
|
||||
* This method should call {@link ModifiableItemGroup#doCreateItem(StaplerRequest, StaplerResponse)}
|
||||
* This method should call {@link ModifiableItemGroup#doCreateItem(StaplerRequest2, StaplerResponse2)}
|
||||
* and then add the newly created item to this view.
|
||||
*
|
||||
* @return
|
||||
* null if fails.
|
||||
* @since TODO
|
||||
*/
|
||||
public abstract Item doCreateItem(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException;
|
||||
@RequirePOST
|
||||
public /* abstract */ Item doCreateItem(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException {
|
||||
if (Util.isOverridden(View.class, getClass(), "doCreateItem", StaplerRequest.class, StaplerResponse.class)) {
|
||||
try {
|
||||
return doCreateItem(StaplerRequest.fromStaplerRequest2(req), StaplerResponse.fromStaplerResponse2(rsp));
|
||||
} catch (javax.servlet.ServletException e) {
|
||||
throw ServletExceptionWrapper.toJakartaServletException(e);
|
||||
}
|
||||
} else {
|
||||
throw new AbstractMethodError("The class " + getClass().getName() + " must override at least one of the "
|
||||
+ View.class.getSimpleName() + ".doCreateItem methods");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #doCreateItem(StaplerRequest2, StaplerResponse2)}
|
||||
*/
|
||||
@Deprecated
|
||||
@StaplerNotDispatchable
|
||||
public Item doCreateItem(StaplerRequest req, StaplerResponse rsp) throws IOException, javax.servlet.ServletException {
|
||||
if (Util.isOverridden(View.class, getClass(), "doCreateItem", StaplerRequest2.class, StaplerResponse2.class)) {
|
||||
try {
|
||||
return doCreateItem(StaplerRequest.toStaplerRequest2(req), StaplerResponse.toStaplerResponse2(rsp));
|
||||
} catch (ServletException e) {
|
||||
throw ServletExceptionWrapper.fromJakartaServletException(e);
|
||||
}
|
||||
} else {
|
||||
throw new AbstractMethodError("The class " + getClass().getName() + " must override at least one of the "
|
||||
+ View.class.getSimpleName() + ".doCreateItem methods");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Makes sure that the given name is good as a job name.
|
||||
@ -774,7 +859,7 @@ public abstract class View extends AbstractModelObject implements AccessControll
|
||||
* @return A {@link Categories} entity that is shown as JSON file.
|
||||
*/
|
||||
@Restricted(DoNotUse.class)
|
||||
public Categories doItemCategories(StaplerRequest req, StaplerResponse rsp, @QueryParameter String iconStyle) throws IOException, ServletException {
|
||||
public Categories doItemCategories(StaplerRequest2 req, StaplerResponse2 rsp, @QueryParameter String iconStyle) throws IOException, ServletException {
|
||||
getOwner().checkPermission(Item.CREATE);
|
||||
|
||||
rsp.addHeader("Cache-Control", "no-cache, no-store, must-revalidate");
|
||||
@ -833,11 +918,11 @@ public abstract class View extends AbstractModelObject implements AccessControll
|
||||
return categories;
|
||||
}
|
||||
|
||||
public void doRssAll(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException {
|
||||
public void doRssAll(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException {
|
||||
RSS.rss(req, rsp, "Jenkins:" + getDisplayName() + " (all builds)", getUrl(), getBuilds().newBuilds());
|
||||
}
|
||||
|
||||
public void doRssFailed(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException {
|
||||
public void doRssFailed(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException {
|
||||
RSS.rss(req, rsp, "Jenkins:" + getDisplayName() + " (failed builds)", getUrl(), getBuilds().failureOnly().newBuilds());
|
||||
}
|
||||
|
||||
@ -851,7 +936,7 @@ public abstract class View extends AbstractModelObject implements AccessControll
|
||||
return new BuildTimelineWidget(getBuilds());
|
||||
}
|
||||
|
||||
public void doRssLatest(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException {
|
||||
public void doRssLatest(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException {
|
||||
List<Run> lastBuilds = new ArrayList<>();
|
||||
for (TopLevelItem item : getItems()) {
|
||||
if (item instanceof Job job) {
|
||||
@ -866,13 +951,13 @@ public abstract class View extends AbstractModelObject implements AccessControll
|
||||
* Accepts {@code config.xml} submission, as well as serve it.
|
||||
*/
|
||||
@WebMethod(name = "config.xml")
|
||||
public HttpResponse doConfigDotXml(StaplerRequest req) throws IOException {
|
||||
public HttpResponse doConfigDotXml(StaplerRequest2 req) throws IOException {
|
||||
if (req.getMethod().equals("GET")) {
|
||||
// read
|
||||
checkPermission(READ);
|
||||
return new HttpResponse() {
|
||||
@Override
|
||||
public void generateResponse(StaplerRequest req, StaplerResponse rsp, Object node) throws IOException, ServletException {
|
||||
public void generateResponse(StaplerRequest2 req, StaplerResponse2 rsp, Object node) throws IOException, ServletException {
|
||||
rsp.setContentType("application/xml");
|
||||
View.this.writeXml(rsp.getOutputStream());
|
||||
}
|
||||
@ -940,7 +1025,7 @@ public abstract class View extends AbstractModelObject implements AccessControll
|
||||
}
|
||||
|
||||
@Override
|
||||
public ModelObjectWithContextMenu.ContextMenu doChildrenContextMenu(StaplerRequest request, StaplerResponse response) throws Exception {
|
||||
public ModelObjectWithContextMenu.ContextMenu doChildrenContextMenu(StaplerRequest2 request, StaplerResponse2 response) throws Exception {
|
||||
ModelObjectWithContextMenu.ContextMenu m = new ModelObjectWithContextMenu.ContextMenu();
|
||||
for (TopLevelItem i : getItems())
|
||||
m.add(Functions.getRelativeLinkTo(i), Functions.getRelativeDisplayNameFrom(i, getOwner().getItemGroup()));
|
||||
@ -964,15 +1049,15 @@ public abstract class View extends AbstractModelObject implements AccessControll
|
||||
|
||||
/**
|
||||
* Returns the {@link ViewDescriptor} instances that can be instantiated for the {@link ViewGroup} in the current
|
||||
* {@link StaplerRequest}.
|
||||
* {@link StaplerRequest2}.
|
||||
* <p>
|
||||
* <strong>NOTE: Historically this method is only ever called from a {@link StaplerRequest}</strong>
|
||||
* @return the list of instantiable {@link ViewDescriptor} instances for the current {@link StaplerRequest}
|
||||
* <strong>NOTE: Historically this method is only ever called from a {@link StaplerRequest2}</strong>
|
||||
* @return the list of instantiable {@link ViewDescriptor} instances for the current {@link StaplerRequest2}
|
||||
*/
|
||||
@NonNull
|
||||
public static List<ViewDescriptor> allInstantiable() {
|
||||
List<ViewDescriptor> r = new ArrayList<>();
|
||||
StaplerRequest request = Stapler.getCurrentRequest();
|
||||
StaplerRequest2 request = Stapler.getCurrentRequest2();
|
||||
if (request == null) {
|
||||
throw new IllegalStateException("This method can only be invoked from a stapler request");
|
||||
}
|
||||
@ -1018,7 +1103,10 @@ public abstract class View extends AbstractModelObject implements AccessControll
|
||||
return Item.CREATE;
|
||||
}
|
||||
|
||||
public static View create(StaplerRequest req, StaplerResponse rsp, ViewGroup owner)
|
||||
/**
|
||||
* @since TODO
|
||||
*/
|
||||
public static View create(StaplerRequest2 req, StaplerResponse2 rsp, ViewGroup owner)
|
||||
throws FormException, IOException, ServletException {
|
||||
String mode = req.getParameter("mode");
|
||||
|
||||
@ -1070,7 +1158,20 @@ public abstract class View extends AbstractModelObject implements AccessControll
|
||||
return v;
|
||||
}
|
||||
|
||||
private static View copy(StaplerRequest req, ViewGroup owner, String name) throws IOException {
|
||||
/**
|
||||
* @deprecated use {@link #create(StaplerRequest2, StaplerResponse2, ViewGroup)}
|
||||
*/
|
||||
@Deprecated
|
||||
public static View create(StaplerRequest req, StaplerResponse rsp, ViewGroup owner)
|
||||
throws FormException, IOException, javax.servlet.ServletException {
|
||||
try {
|
||||
return create(StaplerRequest.toStaplerRequest2(req), StaplerResponse.toStaplerResponse2(rsp), owner);
|
||||
} catch (ServletException e) {
|
||||
throw ServletExceptionWrapper.fromJakartaServletException(e);
|
||||
}
|
||||
}
|
||||
|
||||
private static View copy(StaplerRequest2 req, ViewGroup owner, String name) throws IOException {
|
||||
View v;
|
||||
String from = req.getParameter("from");
|
||||
View src = owner.getView(from);
|
||||
|
@ -40,7 +40,7 @@ import org.kohsuke.accmod.restrictions.DoNotUse;
|
||||
import org.kohsuke.stapler.AncestorInPath;
|
||||
import org.kohsuke.stapler.QueryParameter;
|
||||
import org.kohsuke.stapler.Stapler;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
|
||||
/**
|
||||
* {@link Descriptor} for {@link View}.
|
||||
@ -108,7 +108,7 @@ public abstract class ViewDescriptor extends Descriptor<View> {
|
||||
* Possible {@link ListViewColumnDescriptor}s that can be used with this view.
|
||||
*/
|
||||
public List<Descriptor<ListViewColumn>> getColumnsDescriptors() {
|
||||
StaplerRequest request = Stapler.getCurrentRequest();
|
||||
StaplerRequest2 request = Stapler.getCurrentRequest2();
|
||||
if (request != null) {
|
||||
View view = request.findAncestorObject(clazz);
|
||||
return view == null ? DescriptorVisibilityFilter.applyType(clazz, ListViewColumn.all())
|
||||
@ -121,7 +121,7 @@ public abstract class ViewDescriptor extends Descriptor<View> {
|
||||
* Possible {@link ViewJobFilter} types that can be used with this view.
|
||||
*/
|
||||
public List<Descriptor<ViewJobFilter>> getJobFiltersDescriptors() {
|
||||
StaplerRequest request = Stapler.getCurrentRequest();
|
||||
StaplerRequest2 request = Stapler.getCurrentRequest2();
|
||||
if (request != null) {
|
||||
View view = request.findAncestorObject(clazz);
|
||||
return view == null ? DescriptorVisibilityFilter.applyType(clazz, ViewJobFilter.all())
|
||||
|
@ -25,7 +25,10 @@
|
||||
package hudson.model;
|
||||
|
||||
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
|
||||
import hudson.Util;
|
||||
import hudson.model.Descriptor.FormException;
|
||||
import io.jenkins.servlet.ServletExceptionWrapper;
|
||||
import jakarta.servlet.ServletException;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.LinkedHashSet;
|
||||
@ -34,11 +37,12 @@ import java.util.SortedMap;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import javax.servlet.ServletException;
|
||||
import jenkins.model.Jenkins;
|
||||
import jenkins.util.SystemProperties;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.kohsuke.stapler.StaplerResponse;
|
||||
import org.kohsuke.stapler.StaplerResponse2;
|
||||
|
||||
/**
|
||||
* {@link Job} that monitors activities that happen outside Hudson,
|
||||
@ -165,8 +169,30 @@ public abstract class ViewJob<JobT extends ViewJob<JobT, RunT>, RunT extends Run
|
||||
protected abstract void reload();
|
||||
|
||||
@Override
|
||||
protected void submit(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException, FormException {
|
||||
protected void submit(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException, FormException {
|
||||
if (Util.isOverridden(ViewJob.class, getClass(), "submit", StaplerRequest.class, StaplerResponse.class)) {
|
||||
try {
|
||||
submit(StaplerRequest.fromStaplerRequest2(req), StaplerResponse.fromStaplerResponse2(rsp));
|
||||
} catch (javax.servlet.ServletException e) {
|
||||
throw ServletExceptionWrapper.toJakartaServletException(e);
|
||||
}
|
||||
} else {
|
||||
super.submit(req, rsp);
|
||||
submitImpl();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #submit(StaplerRequest2, StaplerResponse2)}
|
||||
*/
|
||||
@Deprecated
|
||||
@Override
|
||||
protected void submit(StaplerRequest req, StaplerResponse rsp) throws IOException, javax.servlet.ServletException, FormException {
|
||||
super.submit(req, rsp);
|
||||
submitImpl();
|
||||
}
|
||||
|
||||
private void submitImpl() {
|
||||
// make sure to reload to reflect this config change.
|
||||
nextUpdate = 0;
|
||||
}
|
||||
|
@ -26,9 +26,11 @@ package hudson.model;
|
||||
|
||||
import hudson.DescriptorExtensionList;
|
||||
import hudson.ExtensionPoint;
|
||||
import hudson.Util;
|
||||
import jenkins.model.Jenkins;
|
||||
import net.sf.json.JSONObject;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
|
||||
/**
|
||||
* Extensible property of {@link View}.
|
||||
@ -68,8 +70,22 @@ public class ViewProperty implements ReconfigurableDescribable<ViewProperty>, Ex
|
||||
return Jenkins.get().getDescriptorList(ViewProperty.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ViewProperty reconfigure(StaplerRequest2 req, JSONObject form) throws Descriptor.FormException {
|
||||
if (Util.isOverridden(ViewProperty.class, getClass(), "reconfigure", StaplerRequest.class, JSONObject.class)) {
|
||||
return reconfigure(StaplerRequest.fromStaplerRequest2(req), form);
|
||||
} else {
|
||||
return reconfigureImpl(req, form);
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
@Override
|
||||
public ViewProperty reconfigure(StaplerRequest req, JSONObject form) throws Descriptor.FormException {
|
||||
return reconfigureImpl(StaplerRequest.toStaplerRequest2(req), form);
|
||||
}
|
||||
|
||||
private ViewProperty reconfigureImpl(StaplerRequest2 req, JSONObject form) throws Descriptor.FormException {
|
||||
return form == null ? null : getDescriptor().newInstance(req, form);
|
||||
}
|
||||
}
|
||||
|
@ -46,6 +46,7 @@ import hudson.util.FormApply;
|
||||
import hudson.util.QuotedStringTokenizer;
|
||||
import hudson.util.VariableResolver;
|
||||
import hudson.util.XStream2;
|
||||
import jakarta.servlet.ServletException;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
@ -56,13 +57,12 @@ import java.util.Vector;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import java.util.regex.Pattern;
|
||||
import javax.servlet.ServletException;
|
||||
import jenkins.model.Jenkins;
|
||||
import jenkins.util.SystemProperties;
|
||||
import org.kohsuke.accmod.Restricted;
|
||||
import org.kohsuke.accmod.restrictions.DoNotUse;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerResponse;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.kohsuke.stapler.StaplerResponse2;
|
||||
import org.kohsuke.stapler.export.Exported;
|
||||
import org.kohsuke.stapler.interceptor.RequirePOST;
|
||||
import org.kohsuke.stapler.verb.POST;
|
||||
@ -221,7 +221,7 @@ public class LabelAtom extends Label implements Saveable {
|
||||
* Accepts the update to the node configuration.
|
||||
*/
|
||||
@POST
|
||||
public void doConfigSubmit(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException, FormException {
|
||||
public void doConfigSubmit(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException, FormException {
|
||||
final Jenkins app = Jenkins.get();
|
||||
|
||||
app.checkPermission(Jenkins.ADMINISTER);
|
||||
@ -249,7 +249,7 @@ public class LabelAtom extends Label implements Saveable {
|
||||
*/
|
||||
@RequirePOST
|
||||
@Restricted(DoNotUse.class)
|
||||
public synchronized void doSubmitDescription(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException {
|
||||
public synchronized void doSubmitDescription(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException {
|
||||
Jenkins.get().checkPermission(Jenkins.ADMINISTER);
|
||||
|
||||
setDescription(req.getParameter("description"));
|
||||
|
@ -32,20 +32,20 @@ import hudson.model.TransientUserActionFactory;
|
||||
import hudson.model.User;
|
||||
import hudson.model.UserProperty;
|
||||
import hudson.model.UserPropertyDescriptor;
|
||||
import jakarta.servlet.ServletException;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import javax.servlet.ServletException;
|
||||
import jenkins.model.Jenkins;
|
||||
import jenkins.security.UserDetailsCache;
|
||||
import net.sf.json.JSONObject;
|
||||
import org.jenkinsci.Symbol;
|
||||
import org.kohsuke.accmod.Restricted;
|
||||
import org.kohsuke.accmod.restrictions.NoExternalUse;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerResponse;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.kohsuke.stapler.StaplerResponse2;
|
||||
import org.kohsuke.stapler.verb.POST;
|
||||
|
||||
@Restricted(NoExternalUse.class)
|
||||
@ -91,7 +91,7 @@ public class UserPropertyCategoryAccountAction extends UserPropertyCategoryActio
|
||||
}
|
||||
|
||||
@POST
|
||||
public void doConfigSubmit(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException, Descriptor.FormException {
|
||||
public void doConfigSubmit(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException, Descriptor.FormException {
|
||||
User targetUser = this.getTargetUser();
|
||||
targetUser.checkPermission(Jenkins.ADMINISTER);
|
||||
|
||||
|
@ -6,14 +6,14 @@ import hudson.model.User;
|
||||
import hudson.model.UserProperty;
|
||||
import hudson.model.UserPropertyDescriptor;
|
||||
import hudson.util.FormApply;
|
||||
import jakarta.servlet.ServletException;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import javax.servlet.ServletException;
|
||||
import jenkins.model.Jenkins;
|
||||
import net.sf.json.JSONObject;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerResponse;
|
||||
import org.kohsuke.stapler.StaplerRequest2;
|
||||
import org.kohsuke.stapler.StaplerResponse2;
|
||||
import org.kohsuke.stapler.verb.POST;
|
||||
|
||||
public abstract class UserPropertyCategoryAction {
|
||||
@ -31,7 +31,7 @@ public abstract class UserPropertyCategoryAction {
|
||||
public @NonNull abstract List<UserPropertyDescriptor> getMyCategoryDescriptors();
|
||||
|
||||
@POST
|
||||
public void doConfigSubmit(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException, Descriptor.FormException {
|
||||
public void doConfigSubmit(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException, ServletException, Descriptor.FormException {
|
||||
this.targetUser.checkPermission(Jenkins.ADMINISTER);
|
||||
|
||||
JSONObject json = req.getSubmittedForm();
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user