diff --git a/src/tap/resource/TAP.java b/src/tap/resource/TAP.java index e4ab1448a5d5aaaf7dbe2557233c3aa5a6185bd1..700b46e328b8dee45d4ca3a830b6cc24f1d1558a 100644 --- a/src/tap/resource/TAP.java +++ b/src/tap/resource/TAP.java @@ -2,20 +2,20 @@ package tap.resource; /* * This file is part of TAPLibrary. - * + * * TAPLibrary is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. - * + * * TAPLibrary is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. - * + * * You should have received a copy of the GNU Lesser General Public License * along with TAPLibrary. If not, see <http://www.gnu.org/licenses/>. - * + * * Copyright 2012-2017 - UDS/Centre de DonnĂ©es astronomiques de Strasbourg (CDS), * Astronomisches Rechen Institut (ARI) */ @@ -52,14 +52,18 @@ import uws.service.log.UWSLog.LogLevel; /** * <p>Root/Home of the TAP service. It is also the resource (HOME) which gathers all the others of the same TAP service.</p> - * + * * <p>At its creation it is creating and configuring the other resources in function of the given description of the TAP service.</p> - * + * * @author Grégory Mantelet (CDS;ARI) * @version 2.1 (09/2017) */ public class TAP implements VOSIResource { + /** Version of the TAP protocol used in this library. + * @since 2.1 */ + public final static String VERSION = "1.0"; + /** <p>Name of the TAP AVAILABILITY resource. * This resource tells whether the TAP service is available (i.e. whether it accepts queries or not).</p> * <p><i>Note: this name is suffixing the root TAP URL in order to access one of its resources.</i></p> @@ -124,9 +128,9 @@ public class TAP implements VOSIResource { /** * Build a HOME resource of a TAP service whose the description is given in parameter. * All the other TAP resources will be created and configured here thanks to the given {@link ServiceConnection}. - * + * * @param serviceConnection Description of the TAP service. - * + * * @throws UWSException If an error occurs while creating the /async resource. * @throws TAPException If any other error occurs. */ @@ -161,7 +165,7 @@ public class TAP implements VOSIResource { /** * Get the logger used by this resource and all the other resources managed by it. - * + * * @return The used logger. */ public final TAPLog getLogger(){ @@ -170,13 +174,13 @@ public class TAP implements VOSIResource { /** * <p>Let initialize this resource and all the other managed resources.</p> - * + * * <p>This function is called by the library just once: when the servlet is initialized.</p> - * + * * @param config Configuration of the servlet. - * + * * @throws ServletException If any error occurs while reading the given configuration. - * + * * @see TAPResource#init(ServletConfig) */ public void init(final ServletConfig config) throws ServletException{ @@ -186,9 +190,9 @@ public class TAP implements VOSIResource { /** * <p>Free all the resources used by this resource and the other managed resources.</p> - * + * * <p>This function is called by the library just once: when the servlet is destroyed.</p> - * + * * @see TAPResource#destroy() */ public void destroy(){ @@ -208,16 +212,16 @@ public class TAP implements VOSIResource { /** * <p>Set the base URL of this TAP service.</p> - * + * * <p> * This URL must be the same as the one of this resource ; it corresponds to the * URL of the root (or home) of the TAP service. * </p> - * + * * <p>The given URL will be propagated to the other TAP resources automatically.</p> - * + * * @param baseURL URL of this resource. - * + * * @see TAPResource#setTAPBaseURL(String) */ public void setTAPBaseURL(final String baseURL){ @@ -228,11 +232,11 @@ public class TAP implements VOSIResource { /** * <p>Build the base URL from the given HTTP request, and use it to set the base URL of this TAP service.</p> - * + * * <p>The given URL will be propagated to the other TAP resources automatically.</p> - * + * * @param request HTTP request from which a TAP service's base URL will be extracted. - * + * * @see #setTAPBaseURL(String) */ public void setTAPBaseURL(final HttpServletRequest request){ @@ -245,9 +249,9 @@ public class TAP implements VOSIResource { /** * Get the description of this service. - * + * * @return Description/Configuration of this TAP service. - * + * * @since 2.0 */ public final ServiceConnection getServiceConnection(){ @@ -256,7 +260,7 @@ public class TAP implements VOSIResource { /** * Get the /availability resource of this TAP service. - * + * * @return The /availability resource. */ public final Availability getAvailability(){ @@ -265,7 +269,7 @@ public class TAP implements VOSIResource { /** * Get the /capabilities resource of this TAP service. - * + * * @return The /capabilities resource. */ public final Capabilities getCapabilities(){ @@ -274,7 +278,7 @@ public class TAP implements VOSIResource { /** * Get the /sync resource of this TAP service. - * + * * @return The /sync resource. */ public final Sync getSync(){ @@ -283,7 +287,7 @@ public class TAP implements VOSIResource { /** * Get the /async resource of this TAP service. - * + * * @return The /async resource. */ public final ASync getASync(){ @@ -292,7 +296,7 @@ public class TAP implements VOSIResource { /** * Get the UWS service used for the /async service. - * + * * @return The used UWS service. */ public final UWSService getUWS(){ @@ -306,9 +310,9 @@ public class TAP implements VOSIResource { /** * <p>Get the object managing all the metadata (information about the published columns and tables) * of this TAP service.</p> - * + * * <p>This object is also to the /tables resource.</p> - * + * * @return List of all metadata of this TAP service. */ public final TAPMetadata getTAPMetadata(){ @@ -317,24 +321,24 @@ public class TAP implements VOSIResource { /** * <p>Add the given resource in this TAP service.</p> - * + * * <p>The ID of this resource (which is also its URI) will be its name (given by {@link TAPResource#getName()}).</p> - * + * * <p><b>WARNING: * If another resource with an ID strictly identical (case sensitively) to the name of the given resource, it will be overwritten! * You should check (thanks to {@link #hasResource(String)}) before calling this function that no resource is associated with the same URI. * If it is the case, you should then use the function {@link #addResource(String, TAPResource)} with a different ID/URI. * </b></p> - * + * * <p><i>Note: * This function is equivalent to {@link #addResource(String, TAPResource)} with {@link TAPResource#getName()} in first parameter. * </i></p> - * + * * @param newResource Resource to add in the service. - * + * * @return <i>true</i> if the given resource has been successfully added, * <i>false</i> otherwise (and particularly if the given resource is NULL). - * + * * @see #addResource(String, TAPResource) */ public final boolean addResource(final TAPResource newResource){ @@ -343,20 +347,20 @@ public class TAP implements VOSIResource { /** * <p>Add the given resource in this TAP service with the given ID (which will be also the URI to access this resource).</p> - * + * * <p><b>WARNING: * If another resource with an ID strictly identical (case sensitively) to the name of the given resource, it will be overwritten! * You should check (thanks to {@link #hasResource(String)}) before calling this function that no resource is associated with the same URI. * If it is the case, you should then use the function {@link #addResource(String, TAPResource)} with a different ID/URI. * </b></p> - * + * * <p><i>Note: * If the given ID is NULL, the name of the resource will be used. * </i></p> - * + * * @param resourceId ID/URI of the resource to add. * @param newResource Resource to add. - * + * * @return <i>true</i> if the given resource has been successfully added to this service with the given ID/URI, * <i>false</I> otherwise (and particularly if the given resource is NULL). */ @@ -369,7 +373,7 @@ public class TAP implements VOSIResource { /** * Get the number of all resources managed by this TAP service (this resource - HOME - excluded). - * + * * @return Number of managed resources. */ public final int getNbResources(){ @@ -378,13 +382,13 @@ public class TAP implements VOSIResource { /** * <p>Get the specified resource.</p> - * + * * <p><i>Note: * The research is case sensitive. * </i></p> - * + * * @param resourceId Exact ID/URI of the resource to get. - * + * * @return The corresponding resource, * or NULL if no match can be found. */ @@ -394,7 +398,7 @@ public class TAP implements VOSIResource { /** * Let iterate over the full list of the TAP resources managed by this TAP service. - * + * * @return Iterator over the available TAP resources. */ public final Iterator<TAPResource> getResources(){ @@ -403,7 +407,7 @@ public class TAP implements VOSIResource { /** * Let iterate over the full list of the TAP resources managed by this TAP service. - * + * * @return Iterator over the available TAP resources. * @deprecated The name of this function has been normalized. So now, you should use {@link #getResources()} * which is doing exactly the same thing. @@ -415,13 +419,13 @@ public class TAP implements VOSIResource { /** * <p>Tell whether a resource is already associated with the given ID/URI.</p> - * + * * <p><i>Note: * The research is case sensitive. * </i></p> - * + * * @param resourceId Exact ID/URI of the resource to find. - * + * * @return <i>true</i> if a resource is already associated with the given ID/URI, * <i>false</i> otherwise. */ @@ -431,13 +435,13 @@ public class TAP implements VOSIResource { /** * <p>Remove the resource associated with the given ID/URI.</p> - * + * * <p><i>Note: * The research is case sensitive. * </i></p> - * + * * @param resourceId Exact ID/URI of the resource to remove. - * + * * @return The removed resource, if associated with the given ID/URI, * otherwise, NULL is returned. */ @@ -451,7 +455,7 @@ public class TAP implements VOSIResource { /** * Get the object to use in order to report errors to the user in replacement of the expected result. - * + * * @return Used error writer. */ public final ServiceErrorWriter getErrorWriter(){ @@ -460,7 +464,7 @@ public class TAP implements VOSIResource { /** * Set the object to use in order to report errors to the user in replacement of the expected result. - * + * * @param errorWriter Error writer to use. (if NULL, nothing will be done) */ public final void setErrorWriter(final ServiceErrorWriter errorWriter){ @@ -631,27 +635,27 @@ public class TAP implements VOSIResource { /** * List and declare all IVOA Data Models supported by this TAP service. - * + * * <p>Currently, only the following DMs are natively supported:</p> * <ul> * <li>Obscore (1.0 and PR-1.1)</li> * <li>RegTAP (1.0)</li> * </ul> - * + * * <p> * More can be supported by extending this function * (but not overwriting it completely otherwise the above * supported DMs won't be anymore). * </p> - * + * * <p>A DM declaration should follow this XML syntax:</p> * <pre><dataModel ivo-id="{DM-IVO_ID}">{DM-NAME}</dataModel></pre> - * + * * @param xml The <code>/capabilities</code> in-progress content in which * implemented DMs can be declared. * @param linePrefix Tabulations/Spaces that should prefix all lines * (for human readability). - * + * * @since 2.1 */ protected void appendDataModels(final StringBuffer xml, final String linePrefix){ @@ -664,14 +668,14 @@ public class TAP implements VOSIResource { /** * <p>Append the ObsCore DM declaration in the given {@link StringBuffer} * if an <code>ivoa.Obscore</code> table can be found in <code>TAP_SCHEMA</code>.</p> - * + * * <p> * This function has no effect if <code>ivoa.Obscore</code> can not * be found. The <code>ivoa</code> schema is searched case sensitively, * but not the table name <code>Obscore</code> which can be written * in any possible case. * </p> - * + * * <p> * If an <code>ivoa.Obscore</code> table is found, this function * detects automatically which version of Obscore is implemented. @@ -680,14 +684,14 @@ public class TAP implements VOSIResource { * <code>t_xel</code>, <code>em_xel</code> and <code>pol_xel</code>. * If not, the Obscore table will be declared as Obscore 1.0. * </p> - * + * * @param xml The <code>/capabilities</code> in-progress content * in which Obscore-DM should be declared if found. * @param linePrefix Tabulations/Spaces that should prefix all lines * (for human readability). - * + * * @see TAPMetadata#getObsCoreTable() - * + * * @since 2.1 */ protected void appendObsCoreDM(final StringBuffer xml, final String linePrefix){ @@ -723,26 +727,26 @@ public class TAP implements VOSIResource { * <p>Append the RegTAP DM declaration in the given {@link StringBuffer} * if a schema <code>rr</code> can be found in <code>TAP_SCHEMA</code> * with all its required tables.</p> - * + * * <p> * This function has no effect if the schema <code>rr</code> or its * mandatory children tables can not be found. The research is done * case sensitively by {@link TAPMetadata#getRegTAPSchema()}. * </p> - * + * * <p> * If there is a valid schema <code>rr</code>, this function * detects automatically which version of RegTAP is implemented. For the * moment only one is supported: RegTAP-1.0. * </p> - * + * * @param xml The <code>/capabilities</code> in-progress content * in which RegTAP-DM should be declared if found. * @param linePrefix Tabulations/Spaces that should prefix all lines * (for human readability). - * + * * @see TAPMetadata#getRegTAPTable() - * + * * @since 2.1 */ protected void appendRegTAPDM(final StringBuffer xml, final String linePrefix){ @@ -760,9 +764,9 @@ public class TAP implements VOSIResource { /** * Get the HOME PAGE resource of this TAP service. - * + * * @return The HOME PAGE resource. - * + * * @since 2.0 */ public final HomePage getHomePage(){ @@ -771,13 +775,13 @@ public class TAP implements VOSIResource { /** * <p>Change the whole behavior of the TAP home page.</p> - * + * * <p><i>Note: * If the given resource is NULL, the default home page (i.e. {@link HomePage}) is set. * </i></p> - * + * * @param newHomePageResource The new HOME PAGE resource for this TAP service. - * + * * @since 2.0 */ public final void setHomePage(final HomePage newHomePageResource){ @@ -790,14 +794,14 @@ public class TAP implements VOSIResource { /** * <p>Get the URL or the file path of a custom home page.</p> - * + * * <p>The home page will be displayed when this resource is directly requested.</p> - * + * * <p><i>Note: * This function has a sense only if the HOME PAGE resource of this TAP service * is still the default home page (i.e. {@link HomePage}). * </i></p> - * + * * @return URL or file path of the file to display as home page, * or NULL if no custom home page has been specified. */ @@ -807,14 +811,14 @@ public class TAP implements VOSIResource { /** * <p>Set the URL or the file path of a custom home page.</p> - * + * * <p>The home page will be displayed when this resource is directly requested.</p> - * + * * <p><i>Note: * This function has a sense only if the HOME PAGE resource of this TAP service * is still the default home page (i.e. {@link HomePage}). * </i></p> - * + * * @param uri URL or file path of the file to display as home page, or NULL to display the default home page. */ public final void setHomePageURI(final String uri){ @@ -825,14 +829,14 @@ public class TAP implements VOSIResource { /** * <p>Get the MIME type of the custom home page.</p> - * + * * <p>By default, it is the same as the default home page: "text/html".</p> - * + * * <p><i>Note: * This function has a sense only if the HOME PAGE resource of this TAP service * is still the default home page (i.e. {@link HomePage}). * </i></p> - * + * * @return MIME type of the custom home page. */ public final String getHomePageMimeType(){ @@ -841,14 +845,14 @@ public class TAP implements VOSIResource { /** * <p>Set the MIME type of the custom home page.</p> - * + * * <p>A NULL value will be considered as "text/html".</p> - * + * * <p><i>Note: * This function has a sense only if the HOME PAGE resource of this TAP service * is still the default home page (i.e. {@link HomePage}). * </i></p> - * + * * @param mime MIME type of the custom home page. */ public final void setHomePageMimeType(final String mime){ @@ -857,13 +861,13 @@ public class TAP implements VOSIResource { /** * <p>Generate a unique ID for the given request.</p> - * + * * <p>By default, a timestamp is returned.</p> - * + * * @param request Request whose an ID is asked. - * + * * @return The ID of the given request. - * + * * @since 2.0 */ protected synchronized String generateRequestID(final HttpServletRequest request){ @@ -878,7 +882,7 @@ public class TAP implements VOSIResource { /** * <p>Execute the given request in the TAP service by forwarding it to the appropriate resource.</p> - * + * * <h3>Home page</h3> * <p> * If the appropriate resource is the home page, the request is propagated to a {@link TAPResource} @@ -888,24 +892,24 @@ public class TAP implements VOSIResource { * Those are well documented in the Javadoc of {@link HomePage}. What you should know, is that sometimes it is * using the following attributes of this class: {@link #getHomePage()}, {@link #getHomePageURI()}, {@link #getHomePageMimeType()}. * </p> - * + * * <h3>Error/Exception management</h3> * <p> * Only this resource (the root) should write any errors in the response. For that, it catches any {@link Throwable} and * write an appropriate message in the HTTP response. The format and the content of this message is designed by the {@link ServiceErrorWriter} * set in this class. By changing it, it is then possible to change, for instance, the format of the error responses. * </p> - * + * * <h3>Request ID & Log</h3> * <p> * Each request is identified by a unique identifier (see {@link #generateRequestID(HttpServletRequest)}). * This ID is used only for logging purpose. Request and jobs/threads can then be associated more easily in the logs. * Besides, every requests and their response are logged as INFO with this ID. * </p> - * + * * @param request Request of the user to execute in this TAP service. * @param response Object in which the result of the request must be written. - * + * * @throws ServletException If any grave/fatal error occurs. * @throws IOException If any error occurs while reading or writing from or into a stream (and particularly the given request or response). */ diff --git a/src/uws/service/UWS.java b/src/uws/service/UWS.java index a8d8bab6daafb61d5b7dde3795bc5bd7c7188985..08ce2c7a55d2e458568832b3e0c79a86b187656e 100644 --- a/src/uws/service/UWS.java +++ b/src/uws/service/UWS.java @@ -2,20 +2,20 @@ package uws.service; /* * This file is part of UWSLibrary. - * + * * UWSLibrary is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. - * + * * UWSLibrary is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. - * + * * You should have received a copy of the GNU Lesser General Public License * along with UWSLibrary. If not, see <http://www.gnu.org/licenses/>. - * + * * Copyright 2012-2017 - UDS/Centre de DonnĂ©es astronomiques de Strasbourg (CDS), * Astronomisches Rechen Institut (ARI) */ @@ -34,12 +34,12 @@ import uws.service.request.UWSRequestParser; * Minimal API of a UWS service. * Basically, an instance of this interface is supposed to manage one or several jobs lists. * </p> - * + * * <p><i><u>note:</u> * All the functions of this interface are required by {@link JobList}, {@link uws.job.UWSJob} * and all the other classes available in this library. * </i></p> - * + * * <p>Two default implementations of this interface are provided in this library:</p> * <ul> * <li>{@link UWSService}: this class represents an object which is able to receive, to interpret @@ -51,23 +51,27 @@ import uws.service.request.UWSRequestParser; * Indeed, for each HTTP method, a servlet has one function (i.e. doGet(...), doPost(...)). So, for each UWS action, a {@link UWSServlet} * has one function: doAddJob(...), doDestroyJob(...), doGetJob(...), ...</li> * </ul> - * + * * <p> * These two classes already implement all standard actions and behaviors of UWS 1.0. Nothing really change between them except the * way they lets creating and managing a UWS. The second implementation is the most simple to use because it gathers * the UWS and the servlet. * </p> - * + * * <p><b>IMPORTANT: * All implementations of this interface should implement properly the function {@link #destroy()} and should call it * when the JVM or the HTTP server application is closing. * </b></p> - * + * * @author Grégory Mantelet (CDS;ARI) - * @version 4.2 (06/2017) + * @version 4.2 (09/2017) */ public interface UWS extends Iterable<JobList> { + /** Version of the UWS protocol used in this library. + * @since 4.2 */ + public final static String VERSION = "1.0"; + /** Attribute of the HttpServletRequest to set and to get in order to access the request ID set by the UWS library. * @since 4.1 */ public static final String REQ_ATTRIBUTE_ID = "UWS_REQUEST_ID"; @@ -87,14 +91,14 @@ public interface UWS extends Iterable<JobList> { /** * Gets the name of this UWS. - * + * * @return Its name (MAY BE NULL). */ public String getName(); /** * Gets the description of this UWS. - * + * * @return Its description (MAY BE NULL). */ public String getDescription(); @@ -109,14 +113,14 @@ public interface UWS extends Iterable<JobList> { * open files and database connections should be closed, etc... * In brief, this function should release all used resources. * </p> - * + * * <p><b>IMPORTANT: This function should be called only when the JVM or the Web Application Server is stopping.</b></p> - * + * * <p><i>Note: * A call to this function may prevent this instance of {@link UWS} to execute any subsequent HTTP request, or the behavior * would be unpredictable. * </i></p> - * + * * @since 4.1 */ public void destroy(); @@ -127,9 +131,9 @@ public interface UWS extends Iterable<JobList> { /** * Adds a jobs list to this UWS. - * + * * @param newJL The jobs list to add. - * + * * @return <i>true</i> if the jobs list has been successfully added, * <i>false</i> if the given jobs list is <i>null</i> or if a jobs list with this name already exists * or if a UWS is already associated with another UWS. @@ -138,17 +142,17 @@ public interface UWS extends Iterable<JobList> { /** * Gets the jobs list whose the name matches exactly the given one. - * + * * @param name Name of the jobs list to get. * @return The corresponding jobs list. - * + * * @throws UWSException If the given name is <i>null</i> or empty, or if no jobs list matches. */ public JobList getJobList(final String name) throws UWSException; /** * Gets the number of managed jobs lists. - * + * * @return The number of jobs lists. */ public int getNbJobList(); @@ -156,9 +160,9 @@ public interface UWS extends Iterable<JobList> { /** * <p>Destroys the specified jobs list.</p> * <p><i><u>note:</u> After the call of this function, the UWS reference of the given jobs list should be removed (see {@link JobList#setUWS(UWS)}).</i></p> - * + * * @param name Name of the jobs list to destroy. - * + * * @return <i>true</i> if the given jobs list has been destroyed, <i>false</i> otherwise. */ public boolean destroyJobList(final String name) throws UWSException; @@ -170,13 +174,13 @@ public interface UWS extends Iterable<JobList> { /** * <p>Gets the serializer whose the MIME type is the same as the given one.</p> * <p><i><u>Note:</u> If this UWS has no corresponding serializer, a default one should be returned !</i></p> - * + * * @param mimeTypes The MIME type of the searched serializer (may be more than one MIME types * - comma separated ; see the format of the Accept header of a HTTP-Request). * @return The corresponding serializer * or the default serializer of this UWS if no corresponding serializer has been found. * @throws UWSException If there is no corresponding serializer AND if the default serializer of this UWS can not be found. - * + * * @see uws.AcceptHeader#AcceptHeader(String) * @see uws.AcceptHeader#getOrderedMimeTypes() */ @@ -189,9 +193,9 @@ public interface UWS extends Iterable<JobList> { /** * <p>Gets the object which is able to interpret and to build any UWS URL. * It MUST be loaded with the root URL of this UWS: see {@link UWSUrl#load(javax.servlet.http.HttpServletRequest)} and {@link UWSUrl#load(java.net.URL)}.</p> - * + * * <p><i><u>note:</u> This getter is particularly used to serialize the jobs lists and their jobs.</i></p> - * + * * @return Its UWS URL interpreter (SHOULD BE NOT NULL). */ public UWSUrl getUrlInterpreter(); @@ -205,7 +209,7 @@ public interface UWS extends Iterable<JobList> { * <p><i><u>note:</u>A UWS logger is used to watch the HTTP requests received by the UWS and their responses. * The activity of the UWS is also logged and particularly the life of the different jobs and their threads. * A default implementation is available: {@link uws.service.log.DefaultUWSLog}.</i></p> - * + * * @return Its logger <u><b>(MUST BE NOT NULL)</b></u>. */ public UWSLog getLogger(); @@ -216,7 +220,7 @@ public interface UWS extends Iterable<JobList> { /** * Gets the object which is able to identify a user from an HTTP request. - * + * * @return Its user identifier. */ public UserIdentifier getUserIdentifier(); @@ -230,7 +234,7 @@ public interface UWS extends Iterable<JobList> { * <p><i><u>note:</u> This objects is the only one to know how to extract job parameters from an HTTP request, * how to create a job and how to create its respective thread. A partial implementation which answers to * the 2 first questions is available: {@link AbstractUWSFactory}</i></p> - * + * * @return Its job factory. */ public UWSFactory getFactory(); @@ -244,9 +248,9 @@ public interface UWS extends Iterable<JobList> { * <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(); @@ -259,7 +263,7 @@ public interface UWS extends Iterable<JobList> { * <p>Gets its file manager.</p> * <p><i><u>note:</u> A file manager tells to a UWS how to create, read and write the different managed files * (i.e. log, result, errors, backup). A default implementation is available: {@link uws.service.file.LocalUWSFileManager}.</i></p> - * + * * @return Its file manager. */ public UWSFileManager getFileManager(); @@ -272,7 +276,7 @@ public interface UWS extends Iterable<JobList> { * <p>Gets its backup manager.</p> * <p><i><u>note:</u> This object should be used at the initialization of the UWS to restore a previous "session" (see {@link UWSBackupManager#restoreAll()}) * and must be used each time the list of jobs of a user (see {@link UWSBackupManager#saveOwner(uws.job.user.JobOwner)}) or all the jobs of this UWS must be saved (see {@link UWSBackupManager#saveAll()}).</i></p> - * + * * @return Its backup manager. */ public UWSBackupManager getBackupManager();