From 9b8fe1c981887ced481f7300353484ba7a5319d5 Mon Sep 17 00:00:00 2001 From: gmantele <gmantele@ari.uni-heidelberg.de> Date: Tue, 9 Dec 2014 16:48:03 +0100 Subject: [PATCH] [TAP,UWS] Addition to the last commit: the TAP resource /sync did not yet use the RequestParser to get its parameters, and so it did not worked as before the last commit. --- src/tap/resource/TAP.java | 7 +++++++ src/uws/service/UWS.java | 18 ++++++++++++++++++ src/uws/service/UWSService.java | 13 ++++++++++--- src/uws/service/UWSServlet.java | 7 ++++++- 4 files changed, 41 insertions(+), 4 deletions(-) diff --git a/src/tap/resource/TAP.java b/src/tap/resource/TAP.java index 44dbff5..3ff1789 100644 --- a/src/tap/resource/TAP.java +++ b/src/tap/resource/TAP.java @@ -46,6 +46,7 @@ import tap.metadata.TAPMetadata; import uk.ac.starlink.votable.VOSerializer; import uws.UWSException; import uws.job.user.JobOwner; +import uws.service.UWS; import uws.service.UWSService; import uws.service.UWSUrl; import uws.service.error.ServiceErrorWriter; @@ -656,6 +657,8 @@ public class TAP implements VOSIResource { // Generate a unique ID for this request execution (for log purpose only): final String reqID = generateRequestID(request); + if (request.getAttribute(UWS.REQ_ATTRIBUTE_ID) == null) + request.setAttribute(UWS.REQ_ATTRIBUTE_ID, reqID); // Retrieve the resource path parts: String[] resourcePath = (request.getPathInfo() == null) ? null : request.getPathInfo().split("/"); @@ -675,6 +678,10 @@ public class TAP implements VOSIResource { JobOwner owner = null; try{ + // Extract all parameters: + if (request.getAttribute(UWS.REQ_ATTRIBUTE_PARAMETERS) == null) + request.setAttribute(UWS.REQ_ATTRIBUTE_PARAMETERS, getUWS().getRequestParser().parse(request)); + // Identify the user: try{ if (service.getUserIdentifier() != null) diff --git a/src/uws/service/UWS.java b/src/uws/service/UWS.java index 257960f..ebd0689 100644 --- a/src/uws/service/UWS.java +++ b/src/uws/service/UWS.java @@ -26,6 +26,8 @@ import uws.job.serializer.UWSSerializer; import uws.service.backup.UWSBackupManager; import uws.service.file.UWSFileManager; import uws.service.log.UWSLog; +import uws.service.request.RequestParser; +import uws.service.request.UWSRequestParser; /** * <p> @@ -197,6 +199,22 @@ public interface UWS extends Iterable<JobList> { */ public UWSFactory getFactory(); + /* ******************** */ + /* HTTP REQUEST PARSING */ + /* ******************** */ + + /** + * <p>Get its HTTP request parser.</p> + * <p><i><u>note:</u> This parser is the only one to be able to extract UWS and TAP parameters from any HTTP request. + * Its behavior is adapted in function of the used HTTP method and of the content-type. A default implementation is + * provided by the UWS library: {@link UWSRequestParser}.</i></p> + * + * @return Its request parser. + * + * @since 4.1 + */ + public RequestParser getRequestParser(); + /* *************** */ /* FILE MANAGEMENT */ /* *************** */ diff --git a/src/uws/service/UWSService.java b/src/uws/service/UWSService.java index 8232173..b09dddb 100644 --- a/src/uws/service/UWSService.java +++ b/src/uws/service/UWSService.java @@ -184,7 +184,7 @@ import uws.service.request.RequestParser; * * * @author Grégory Mantelet (CDS;ARI) - * @version 4.1 (09/2014) + * @version 4.1 (12/2014) */ public class UWSService implements UWS { @@ -550,6 +550,11 @@ public class UWSService implements UWS { this.backupManager = backupManager; } + @Override + public final RequestParser getRequestParser(){ + return requestParser; + } + /* ******************** */ /* HOME PAGE MANAGEMENT */ /* ******************** */ @@ -1058,7 +1063,8 @@ public class UWSService implements UWS { // Generate a unique ID for this request execution (for log purpose only): final String reqID = generateRequestID(request); - request.setAttribute(UWS.REQ_ATTRIBUTE_ID, reqID); + if (request.getAttribute(UWS.REQ_ATTRIBUTE_ID) == null) + request.setAttribute(UWS.REQ_ATTRIBUTE_ID, reqID); // Log the reception of the request: logger.logHttp(LogLevel.INFO, request, reqID, null, null); @@ -1081,7 +1087,8 @@ public class UWSService implements UWS { urlInterpreter.load(request); // Extract all parameters: - request.setAttribute(UWS.REQ_ATTRIBUTE_PARAMETERS, requestParser.parse(request)); + if (request.getAttribute(UWS.REQ_ATTRIBUTE_PARAMETERS) == null) + request.setAttribute(UWS.REQ_ATTRIBUTE_PARAMETERS, requestParser.parse(request)); // Identify the user: user = (userIdentifier == null) ? null : userIdentifier.extractUserId(urlInterpreter, request); diff --git a/src/uws/service/UWSServlet.java b/src/uws/service/UWSServlet.java index 8dab40a..2eed062 100644 --- a/src/uws/service/UWSServlet.java +++ b/src/uws/service/UWSServlet.java @@ -132,7 +132,7 @@ import uws.service.request.UploadFile; * </p> * * @author Grégory Mantelet (CDS;ARI) - * @version 4.1 (11/2014) + * @version 4.1 (12/2014) */ public abstract class UWSServlet extends HttpServlet implements UWS, UWSFactory { private static final long serialVersionUID = 1L; @@ -257,6 +257,11 @@ public abstract class UWSServlet extends HttpServlet implements UWS, UWSFactory return fileManager; } + @Override + public RequestParser getRequestParser(){ + return requestParser; + } + @Override public final void service(ServletRequest req, ServletResponse resp) throws ServletException, IOException{ super.service(req, resp); -- GitLab