From ce9483c2131751e6c6c26e679631841f5ceff1a9 Mon Sep 17 00:00:00 2001 From: Dave Ward Date: Mon, 26 Sep 2011 18:24:09 +0000 Subject: [PATCH] Merged V3.4-BUG-FIX to HEAD 30270: ALF-9492 Can now update task properties through the Workflow JavaScript API. ALF-10087 Fixed failing Multi-tenancy tests. 30306: Fixed ALF-7384: Xam: XamArchiveCleaner can delete files before retention period has passed - Keep the NOW upper limit to the query - Add a double-check using Java code to precisely check (down to the ms) that the retention time has passed 30308: Merged V3.4 to V3.4-BUG-FIX 30307: ALF-10186: Fix up all code that expects it can cast a WebScriptRequest directly into a WebScriptServletRequest 30310: ALF-5830 show_audit.ftl template doesn't work any more - Changes to support new audit api - Works with high level content auditing 30337: Merge DEV to V3.4-BUG-FIX 30160 : ALF-9257 - Renaming web project cause no trigger of the autodeploy process 30362: ALF-10227 Add space after ''{0}'' in text 30395: Removed deep svn:mergeinfo 30433: Merged DEV/TEMPORARY to V3.4-BUG-FIX 30424: ALF-8941: WCM: Virtual server setting lazyDeployExperimentalOnly ="true" (as per si3 fix) fails to load library under WEB-INF/lib directory (for HTTP filter). Walk up by hierarchy to the root and deploys a context if it wasn't deployed yet, through invocation of updateAllVirtualWebapps recursively. 30454: Fixed ALF-9158: Assignment of workflow task is not proper - out-of-the-box WCM workflow 30466: Merged DEV/TEMPORARY to V3.4-BUG-FIX 30460: ALF-9424 : Webform(XSD): xf:switch switch group does not work based on "complexContent with Base" element. Schema2XForms and SchemaUtil were modified to allow correctly process elements with namespace that differ from "http://www.w3.org/2001/XMLSchema" 30476: Merged DEV to V3.4-BUG-FIX 30474: ALF-10021: Get the last node in the resultset outside the timing loop to force prefetch. 30483: Fixed ALF-9417: (pdf2swf) Share preview is blank with some pdf files. 30514: ALF-240: Unfriendly error appears when trying to view details for created discussion for multilingual content Webdav URLs were not valid for non-ML or ML discussion items, but were only stopping the details page for the ML items from being shown. Utils.generateURL now returns null for such items. 30517: Fixed ALF-5526: Component-Generator for d:noteref and other "system" types always disabled => breaks extensibility 30519: FileFolderService moveFrom method was not supported by MLTranslationInterceptor 30527: ALF-240: added missing exception message. 30531: Fixed ALF-9599: Share forms do not allow edit of non-cm:content nodes 30541: ALF-9424: Missed change, causing compilation error 30552: Tests to accompany fix for ALF-240, ALF-10298: discussion topic webdav URLs causing error page in explorer. 30565: Fixed ALF-10336 "Drag and Drop item in Customize Site Dashboard - text of item reverts to default font style and size during drag operation" 30568: Fixed ALF-10342: ClassCastException on org.alfresco.repo.copy.AbstractCopyBehaviourCallback 30570: ALF-3332: (circa 2008) Pagination inks rewritten incorrectly by opensearch proxy 30574: ALF-9470: OwnableService cache not being updated for archived nodes - modified fix by Pavel 30579: ALF-5607: Cancelling of install. Some directories are not deleted from disk. - Fixed provided by Bitrock for Mac and Windows 30583: Merged HEAD to V3.4-BUG-FIX (Back ported 2 fixes for included resource handling when running unit tests) 28711: Avoid a NPE on certain kinds missing included resources, and instead give a helpful error along the lines of other include issues 28716: When loading JS includes with a full classpath reference, handle the Eclipse classloader behaving slightly differently on absolute paths compared to the JVM one 30648: Fixed ALF-10401: No simple way to disable auto-versioning behaviour - Added property: version.store.enableAutoVersioning=true - When set to 'false', the VersionableAspect will not respond to any events; even if the aspect is present, it will not create versions. 30657: Merged DEV/TEMPORARY to V3.4-BUG-FIX 30590: ALF-7105: pdfbox returns errors in the logs but one cannot understand what file is affected (PDFBox) Level log4j.logger.org.apache.pdfbox.pdmodel.font.PDCIDFont=fatal was introduced in log4j.properties. 30669: Fixes: ALF-6470 (Updates FR translation) 30686: ALF-1017: Fixed compilation error in backport 30696: Fix for ALF-8176 30708: ALF-10040: Added missing ReferenceCountingReadOnlyIndexReaderFactory wrapper to IndexInfo.getMainIndexReferenceCountingReadOnlyIndexReader() to make it consistent with IndexInfo.getMainIndexReferenceCountingReadOnlyIndexReader(String, Set, boolean) and allow SingleFieldSelectors to make it through from LeafScorer to the path caches! Affects ALL Lucene queries that run OUTSIDE of a transaction. 30722: Fixed ALF-9465: Share: We can add category in Share, but the selected value will not be shown in U.I. 30724: Merged BRANCHES/DEV/BELARUS/V3.4-BUG-FIX-2011_09_05 to BRANCHES/DEV/V3.4-BUG-FIX: 30603: ALF-10165: Unexpected behaviour when title duplicated between web forms 30754: Fix for ALF-9899 Huge share site migration, add group to site and user access site related performance issue. - generic performance improvements for PATH queries ending "..../*" - specifically to improve listing calendar items for users in many share sites 30765: Fix for ALF-760 - import loses category association data 30779: Merged V3.4 to V3.4-BUG-FIX 30716: ALF-10452 It's impossible to edit existing user details - Change for ALF-371 did not handle the simplest case - no change of home folder location 30549: Fixes ALF-9534 - Location API git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@30780 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../slingshot/documentlibrary/location.get.js | 2 +- .../documentlibrary/parse-args.lib.js | 9 ++++++- .../web/scripts/bean/BaseRemoteStore.java | 27 +++++++++++++++++-- .../repo/web/scripts/bean/SearchProxy.java | 2 +- .../AbortTransferCommandProcessor.java | 26 +++++++++++++++++- .../CommitTransferCommandProcessor.java | 24 ++++++++++++++++- .../transfer/PostContentCommandProcessor.java | 25 +++++++++++++++-- .../PostSnapshotCommandProcessor.java | 25 +++++++++++++++-- .../PrepareTransferCommandProcessor.java | 23 +++++++++++++++- .../transfer/ReportCommandProcessor.java | 23 +++++++++++++++- .../transfer/StatusCommandProcessor.java | 23 +++++++++++++++- 11 files changed, 195 insertions(+), 14 deletions(-) diff --git a/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/location.get.js b/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/location.get.js index f52197934f..795f7e2bab 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/location.get.js +++ b/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/location.get.js @@ -17,7 +17,7 @@ function resolveLocations() var libraryRoot = parsedArgs.libraryRoot ? parsedArgs.libraryRoot : companyhome, repoLocation = Common.getLocation(parsedArgs.rootNode, libraryRoot), siteLocation = Common.getLocation(parsedArgs.rootNode, null), - fileName = !parsedArgs.rootNode.isContainer ? parsedArgs.rootNode.properties["name"] : null; + fileName = parsedArgs.rootNode.properties["name"]; var locations = { diff --git a/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/parse-args.lib.js b/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/parse-args.lib.js index f4f51bd3a2..5951dad640 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/parse-args.lib.js +++ b/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/parse-args.lib.js @@ -310,7 +310,14 @@ var ParseArgs = id = url.templateArgs.id; nodeRef = storeType + "://" + storeId + "/" + id; - rootNode = libraryRoot || ParseArgs.resolveNode(nodeRef); + if (url.templateArgs.store_type == "workspace") + { + rootNode = ParseArgs.resolveNode(nodeRef); + } + else + { + rootNode = libraryRoot || ParseArgs.resolveNode(nodeRef); + } if (rootNode == null) { status.setCode(status.STATUS_NOT_FOUND, "Not a valid nodeRef: '" + nodeRef + "'"); diff --git a/source/java/org/alfresco/repo/web/scripts/bean/BaseRemoteStore.java b/source/java/org/alfresco/repo/web/scripts/bean/BaseRemoteStore.java index 19573686b2..bfc04fc57d 100644 --- a/source/java/org/alfresco/repo/web/scripts/bean/BaseRemoteStore.java +++ b/source/java/org/alfresco/repo/web/scripts/bean/BaseRemoteStore.java @@ -32,6 +32,7 @@ import org.springframework.extensions.webscripts.AbstractWebScript; import org.springframework.extensions.webscripts.WebScriptException; import org.springframework.extensions.webscripts.WebScriptRequest; import org.springframework.extensions.webscripts.WebScriptResponse; +import org.springframework.extensions.webscripts.WrappingWebScriptRequest; import org.springframework.extensions.webscripts.servlet.WebScriptServletRequest; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -124,12 +125,34 @@ public abstract class BaseRemoteStore extends AbstractWebScript public void execute(WebScriptRequest req, WebScriptResponse res) throws IOException { // NOTE: This web script must be executed in a HTTP Servlet environment - if (!(req instanceof WebScriptServletRequest)) + + // Unwrap to a WebScriptServletRequest if we have one + WebScriptServletRequest webScriptServletRequest = null; + WebScriptRequest current = req; + do + { + if (current instanceof WebScriptServletRequest) + { + webScriptServletRequest = (WebScriptServletRequest) current; + current = null; + } + else if (current instanceof WrappingWebScriptRequest) + { + current = ((WrappingWebScriptRequest) req).getNext(); + } + else + { + current = null; + } + } + while (current != null); + + if (webScriptServletRequest == null) { throw new WebScriptException("Remote Store access must be executed in HTTP Servlet environment"); } - HttpServletRequest httpReq = ((WebScriptServletRequest)req).getHttpServletRequest(); + HttpServletRequest httpReq = webScriptServletRequest.getHttpServletRequest(); // the request path for the remote store String extPath = req.getExtensionPath(); diff --git a/source/java/org/alfresco/repo/web/scripts/bean/SearchProxy.java b/source/java/org/alfresco/repo/web/scripts/bean/SearchProxy.java index 0483f72a37..4846d6a73d 100644 --- a/source/java/org/alfresco/repo/web/scripts/bean/SearchProxy.java +++ b/source/java/org/alfresco/repo/web/scripts/bean/SearchProxy.java @@ -168,7 +168,7 @@ public class SearchProxy extends AbstractWebScript implements InitializingBean } HttpServletResponse servletRes = WebScriptServletRuntime.getHttpServletResponse(res); - SearchEngineHttpProxy proxy = new SearchEngineHttpProxy(req.getServicePath() + "/" + req.getContextPath(), + SearchEngineHttpProxy proxy = new SearchEngineHttpProxy(req.getServerPath() + req.getServiceContextPath(), engine, engineUrl, servletRes, Collections.singletonMap("User-Agent", req.getHeader("User-Agent"))); proxy.service(); } diff --git a/source/java/org/alfresco/repo/web/scripts/transfer/AbortTransferCommandProcessor.java b/source/java/org/alfresco/repo/web/scripts/transfer/AbortTransferCommandProcessor.java index 518d3367e9..b78592d49a 100644 --- a/source/java/org/alfresco/repo/web/scripts/transfer/AbortTransferCommandProcessor.java +++ b/source/java/org/alfresco/repo/web/scripts/transfer/AbortTransferCommandProcessor.java @@ -31,6 +31,7 @@ import org.apache.commons.logging.LogFactory; import org.springframework.extensions.webscripts.Status; import org.springframework.extensions.webscripts.WebScriptRequest; import org.springframework.extensions.webscripts.WebScriptResponse; +import org.springframework.extensions.webscripts.WrappingWebScriptRequest; import org.springframework.extensions.webscripts.json.JSONWriter; import org.springframework.extensions.webscripts.servlet.WebScriptServletRequest; @@ -60,7 +61,30 @@ public class AbortTransferCommandProcessor implements CommandProcessor String transferRecordId = null; //Read the transfer id from the request - HttpServletRequest servletRequest = ((WebScriptServletRequest)req).getHttpServletRequest(); + + // Unwrap to a WebScriptServletRequest if we have one + // TODO: Why is this necessary? + WebScriptServletRequest webScriptServletRequest = null; + WebScriptRequest current = req; + do + { + if (current instanceof WebScriptServletRequest) + { + webScriptServletRequest = (WebScriptServletRequest) current; + current = null; + } + else if (current instanceof WrappingWebScriptRequest) + { + current = ((WrappingWebScriptRequest) req).getNext(); + } + else + { + current = null; + } + } + while (current != null); + + HttpServletRequest servletRequest = webScriptServletRequest.getHttpServletRequest(); String transferId = servletRequest.getParameter("transferId"); if ((transferId == null)) diff --git a/source/java/org/alfresco/repo/web/scripts/transfer/CommitTransferCommandProcessor.java b/source/java/org/alfresco/repo/web/scripts/transfer/CommitTransferCommandProcessor.java index 5d72463a13..5f788917c2 100644 --- a/source/java/org/alfresco/repo/web/scripts/transfer/CommitTransferCommandProcessor.java +++ b/source/java/org/alfresco/repo/web/scripts/transfer/CommitTransferCommandProcessor.java @@ -30,6 +30,7 @@ import org.apache.commons.logging.LogFactory; import org.springframework.extensions.webscripts.Status; import org.springframework.extensions.webscripts.WebScriptRequest; import org.springframework.extensions.webscripts.WebScriptResponse; +import org.springframework.extensions.webscripts.WrappingWebScriptRequest; import org.springframework.extensions.webscripts.json.JSONWriter; import org.springframework.extensions.webscripts.servlet.WebScriptServletRequest; @@ -58,7 +59,28 @@ public class CommitTransferCommandProcessor implements CommandProcessor { //Read the transfer id from the request - HttpServletRequest servletRequest = ((WebScriptServletRequest)req).getHttpServletRequest(); + // Unwrap to a WebScriptServletRequest if we have one + WebScriptServletRequest webScriptServletRequest = null; + WebScriptRequest current = req; + do + { + if (current instanceof WebScriptServletRequest) + { + webScriptServletRequest = (WebScriptServletRequest) current; + current = null; + } + else if (current instanceof WrappingWebScriptRequest) + { + current = ((WrappingWebScriptRequest) req).getNext(); + } + else + { + current = null; + } + } + while (current != null); + + HttpServletRequest servletRequest = webScriptServletRequest.getHttpServletRequest(); String transferId = servletRequest.getParameter("transferId"); if ((transferId == null)) diff --git a/source/java/org/alfresco/repo/web/scripts/transfer/PostContentCommandProcessor.java b/source/java/org/alfresco/repo/web/scripts/transfer/PostContentCommandProcessor.java index 1e7739c518..1d3920864d 100644 --- a/source/java/org/alfresco/repo/web/scripts/transfer/PostContentCommandProcessor.java +++ b/source/java/org/alfresco/repo/web/scripts/transfer/PostContentCommandProcessor.java @@ -31,6 +31,7 @@ import org.apache.commons.logging.LogFactory; import org.springframework.extensions.webscripts.Status; import org.springframework.extensions.webscripts.WebScriptRequest; import org.springframework.extensions.webscripts.WebScriptResponse; +import org.springframework.extensions.webscripts.WrappingWebScriptRequest; import org.springframework.extensions.webscripts.servlet.WebScriptServletRequest; import org.springframework.extensions.webscripts.servlet.FormData.FormField; @@ -66,13 +67,33 @@ public class PostContentCommandProcessor implements CommandProcessor public int process(WebScriptRequest req, WebScriptResponse resp) { logger.debug("post content start"); - if (!WebScriptServletRequest.class.isAssignableFrom(req.getClass())) + // Unwrap to a WebScriptServletRequest if we have one + WebScriptServletRequest webScriptServletRequest = null; + WebScriptRequest current = req; + do + { + if (current instanceof WebScriptServletRequest) + { + webScriptServletRequest = (WebScriptServletRequest) current; + current = null; + } + else if (current instanceof WrappingWebScriptRequest) + { + current = ((WrappingWebScriptRequest) req).getNext(); + } + else + { + current = null; + } + } + while (current != null); + if (webScriptServletRequest == null) { resp.setStatus(Status.STATUS_BAD_REQUEST); return Status.STATUS_BAD_REQUEST; } - HttpServletRequest servletRequest = ((WebScriptServletRequest) req).getHttpServletRequest(); + HttpServletRequest servletRequest = webScriptServletRequest.getHttpServletRequest(); //Read the transfer id from the request String transferId = servletRequest.getParameter("transferId"); diff --git a/source/java/org/alfresco/repo/web/scripts/transfer/PostSnapshotCommandProcessor.java b/source/java/org/alfresco/repo/web/scripts/transfer/PostSnapshotCommandProcessor.java index 42283c176b..0198775fb1 100644 --- a/source/java/org/alfresco/repo/web/scripts/transfer/PostSnapshotCommandProcessor.java +++ b/source/java/org/alfresco/repo/web/scripts/transfer/PostSnapshotCommandProcessor.java @@ -34,6 +34,7 @@ import org.apache.commons.logging.LogFactory; import org.springframework.extensions.webscripts.Status; import org.springframework.extensions.webscripts.WebScriptRequest; import org.springframework.extensions.webscripts.WebScriptResponse; +import org.springframework.extensions.webscripts.WrappingWebScriptRequest; import org.springframework.extensions.webscripts.servlet.WebScriptServletRequest; import org.springframework.extensions.webscripts.servlet.FormData.FormField; @@ -58,7 +59,27 @@ public class PostSnapshotCommandProcessor implements CommandProcessor { int result = Status.STATUS_OK; - if (!WebScriptServletRequest.class.isAssignableFrom(req.getClass())) + // Unwrap to a WebScriptServletRequest if we have one + WebScriptServletRequest webScriptServletRequest = null; + WebScriptRequest current = req; + do + { + if (current instanceof WebScriptServletRequest) + { + webScriptServletRequest = (WebScriptServletRequest) current; + current = null; + } + else if (current instanceof WrappingWebScriptRequest) + { + current = ((WrappingWebScriptRequest) req).getNext(); + } + else + { + current = null; + } + } + while (current != null); + if (webScriptServletRequest == null) { logger.debug("bad request, not assignable from"); resp.setStatus(Status.STATUS_BAD_REQUEST); @@ -67,7 +88,7 @@ public class PostSnapshotCommandProcessor implements CommandProcessor //We can't use the WebScriptRequest version of getParameter, since that may cause the content stream //to be parsed. Get hold of the raw HttpServletRequest and work with that. - HttpServletRequest servletRequest = ((WebScriptServletRequest)req).getHttpServletRequest(); + HttpServletRequest servletRequest = webScriptServletRequest.getHttpServletRequest(); //Read the transfer id from the request String transferId = servletRequest.getParameter("transferId"); diff --git a/source/java/org/alfresco/repo/web/scripts/transfer/PrepareTransferCommandProcessor.java b/source/java/org/alfresco/repo/web/scripts/transfer/PrepareTransferCommandProcessor.java index 87af34d8c1..e0e7b18bcf 100644 --- a/source/java/org/alfresco/repo/web/scripts/transfer/PrepareTransferCommandProcessor.java +++ b/source/java/org/alfresco/repo/web/scripts/transfer/PrepareTransferCommandProcessor.java @@ -32,6 +32,7 @@ import org.apache.commons.logging.LogFactory; import org.springframework.extensions.webscripts.Status; import org.springframework.extensions.webscripts.WebScriptRequest; import org.springframework.extensions.webscripts.WebScriptResponse; +import org.springframework.extensions.webscripts.WrappingWebScriptRequest; import org.springframework.extensions.webscripts.json.JSONWriter; import org.springframework.extensions.webscripts.servlet.WebScriptServletRequest; @@ -59,7 +60,27 @@ public class PrepareTransferCommandProcessor implements CommandProcessor String transferRecordId = null; //Read the transfer id from the request - HttpServletRequest servletRequest = ((WebScriptServletRequest)req).getHttpServletRequest(); + // Unwrap to a WebScriptServletRequest if we have one + WebScriptServletRequest webScriptServletRequest = null; + WebScriptRequest current = req; + do + { + if (current instanceof WebScriptServletRequest) + { + webScriptServletRequest = (WebScriptServletRequest) current; + current = null; + } + else if (current instanceof WrappingWebScriptRequest) + { + current = ((WrappingWebScriptRequest) req).getNext(); + } + else + { + current = null; + } + } + while (current != null); + HttpServletRequest servletRequest = webScriptServletRequest.getHttpServletRequest(); String transferId = servletRequest.getParameter("transferId"); if (transferId == null) diff --git a/source/java/org/alfresco/repo/web/scripts/transfer/ReportCommandProcessor.java b/source/java/org/alfresco/repo/web/scripts/transfer/ReportCommandProcessor.java index deffe0d412..e165cbed92 100644 --- a/source/java/org/alfresco/repo/web/scripts/transfer/ReportCommandProcessor.java +++ b/source/java/org/alfresco/repo/web/scripts/transfer/ReportCommandProcessor.java @@ -33,6 +33,7 @@ import org.apache.commons.logging.LogFactory; import org.springframework.extensions.webscripts.Status; import org.springframework.extensions.webscripts.WebScriptRequest; import org.springframework.extensions.webscripts.WebScriptResponse; +import org.springframework.extensions.webscripts.WrappingWebScriptRequest; import org.springframework.extensions.webscripts.json.JSONWriter; import org.springframework.extensions.webscripts.servlet.WebScriptServletRequest; @@ -59,7 +60,27 @@ public class ReportCommandProcessor implements CommandProcessor public int process(WebScriptRequest req, WebScriptResponse resp) { //Read the transfer id from the request - HttpServletRequest servletRequest = ((WebScriptServletRequest)req).getHttpServletRequest(); + // Unwrap to a WebScriptServletRequest if we have one + WebScriptServletRequest webScriptServletRequest = null; + WebScriptRequest current = req; + do + { + if (current instanceof WebScriptServletRequest) + { + webScriptServletRequest = (WebScriptServletRequest) current; + current = null; + } + else if (current instanceof WrappingWebScriptRequest) + { + current = ((WrappingWebScriptRequest) req).getNext(); + } + else + { + current = null; + } + } + while (current != null); + HttpServletRequest servletRequest = webScriptServletRequest.getHttpServletRequest(); String transferId = servletRequest.getParameter("transferId"); if (transferId == null) diff --git a/source/java/org/alfresco/repo/web/scripts/transfer/StatusCommandProcessor.java b/source/java/org/alfresco/repo/web/scripts/transfer/StatusCommandProcessor.java index b95f752951..180021b264 100644 --- a/source/java/org/alfresco/repo/web/scripts/transfer/StatusCommandProcessor.java +++ b/source/java/org/alfresco/repo/web/scripts/transfer/StatusCommandProcessor.java @@ -32,6 +32,7 @@ import org.json.JSONObject; import org.springframework.extensions.webscripts.Status; import org.springframework.extensions.webscripts.WebScriptRequest; import org.springframework.extensions.webscripts.WebScriptResponse; +import org.springframework.extensions.webscripts.WrappingWebScriptRequest; import org.springframework.extensions.webscripts.servlet.WebScriptServletRequest; /** @@ -59,7 +60,27 @@ public class StatusCommandProcessor implements CommandProcessor public int process(WebScriptRequest req, WebScriptResponse resp) { //Read the transfer id from the request - HttpServletRequest servletRequest = ((WebScriptServletRequest)req).getHttpServletRequest(); + // Unwrap to a WebScriptServletRequest if we have one + WebScriptServletRequest webScriptServletRequest = null; + WebScriptRequest current = req; + do + { + if (current instanceof WebScriptServletRequest) + { + webScriptServletRequest = (WebScriptServletRequest) current; + current = null; + } + else if (current instanceof WrappingWebScriptRequest) + { + current = ((WrappingWebScriptRequest) req).getNext(); + } + else + { + current = null; + } + } + while (current != null); + HttpServletRequest servletRequest = webScriptServletRequest.getHttpServletRequest(); String transferId = servletRequest.getParameter("transferId"); if (transferId == null)