diff --git a/knowage-core/src/main/java/it/eng/spagobi/commons/services/KnowageCaptchaServlet.java b/knowage-core/src/main/java/it/eng/spagobi/commons/services/KnowageCaptchaServlet.java index 960fca01e6c..7b517a26794 100644 --- a/knowage-core/src/main/java/it/eng/spagobi/commons/services/KnowageCaptchaServlet.java +++ b/knowage-core/src/main/java/it/eng/spagobi/commons/services/KnowageCaptchaServlet.java @@ -19,27 +19,18 @@ public class KnowageCaptchaServlet extends HttpServlet { * */ private static final long serialVersionUID = -1268155968745374787L; - protected int width; - protected int height; - - public KnowageCaptchaServlet() { - width = 200; - height = 50; - } @Override - public void init() throws ServletException { + public void doGet(HttpServletRequest httpservletrequest, HttpServletResponse httpservletresponse) throws ServletException, IOException { + int width = 200; + int height = 50; + if (getInitParameter("height") != null) height = Integer.valueOf(getInitParameter("height")).intValue(); if (getInitParameter("width") != null) width = Integer.valueOf(getInitParameter("width")).intValue(); - } - - @Override - public void doGet(HttpServletRequest httpservletrequest, HttpServletResponse httpservletresponse) throws ServletException, IOException { ImageCaptcha imageCaptcha = new ImageCaptcha.Builder(width, height).addContent().addBackground().addFilter(new FishEyeImageFilter()).addBackground() -// .addBackground(new SquigglesBackgroundProducer()) .build(); writeImage(httpservletresponse, imageCaptcha.getImage()); httpservletrequest.getSession().setAttribute("simpleCaptcha", imageCaptcha); diff --git a/knowage/src/main/java/it/eng/spago/dispatching/httpchannel/AdapterHTTP.java b/knowage/src/main/java/it/eng/spago/dispatching/httpchannel/AdapterHTTP.java index 47d8dca5b48..a35fd6f2cad 100644 --- a/knowage/src/main/java/it/eng/spago/dispatching/httpchannel/AdapterHTTP.java +++ b/knowage/src/main/java/it/eng/spago/dispatching/httpchannel/AdapterHTTP.java @@ -143,10 +143,6 @@ public class AdapterHTTP extends HttpServlet { private static final String SERIALIZE_SESSION_ATTRIBUTE = "COMMON.SERIALIZE_SESSION"; - // Atributo della configurazione che indica se serializzare il contenuto - // della sessione - private boolean serializeSession = false; - private void handleQueryStringField(HttpServletRequest request, SourceBean serviceReq, String queryStringFieldName) throws SourceBeanException { String queryString = queryStringFieldName.substring(queryStringFieldName.indexOf("{") + 1, queryStringFieldName.indexOf("}")); @@ -288,6 +284,8 @@ private void handleSimpleForm(HttpServletRequest request, RequestContextIFace re @Override public void service(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { + boolean serializeSession = this.getSerializedSession(); + Monitor monitor = null; IEventNotifier eventNotifier = null; RequestContextIFace requestContext = null; @@ -579,19 +577,11 @@ private void setHttpRequestData(HttpServletRequest request, RequestContainer req // RequestContainer requestContainer) - /* - * (non-Javadoc) - * - * @see javax.servlet.GenericServlet#init() - */ - @Override - public void init() throws ServletException { - super.init(); - + private boolean getSerializedSession() { String serializeSessionStr = (String) ConfigSingleton.getInstance().getAttribute(SERIALIZE_SESSION_ATTRIBUTE); if ((serializeSessionStr != null) && (serializeSessionStr.equalsIgnoreCase("TRUE"))) { - serializeSession = true; + return true; } + return false; } - } // public class ActionServlet extends HttpServlet diff --git a/knowagebirtreportengine/src/main/java/it/eng/spagobi/engines/birt/BirtImageServlet.java b/knowagebirtreportengine/src/main/java/it/eng/spagobi/engines/birt/BirtImageServlet.java index 43e03639e1d..4b1c8251438 100644 --- a/knowagebirtreportengine/src/main/java/it/eng/spagobi/engines/birt/BirtImageServlet.java +++ b/knowagebirtreportengine/src/main/java/it/eng/spagobi/engines/birt/BirtImageServlet.java @@ -41,7 +41,7 @@ public class BirtImageServlet extends HttpServlet { - private transient Logger logger = Logger.getLogger(this.getClass()); + private static final Logger logger = Logger.getLogger(BirtImageServlet.class); private static final String CHART_LABEL = "chart_label"; /* @@ -161,12 +161,11 @@ public void run() { /** * This method execute the engine chart and returns its image in byte[] - * + * * @param userId * @param session * - * @param request - * the httpRequest + * @param request the httpRequest * @return the chart in inputstream form */ private InputStream executeEngineChart(Map parametersMap, HttpSession session, String userId) { diff --git a/knowagebirtreportengine/src/main/java/it/eng/spagobi/engines/birt/BirtReportServlet.java b/knowagebirtreportengine/src/main/java/it/eng/spagobi/engines/birt/BirtReportServlet.java index 967fca6cd99..b2943162ba3 100644 --- a/knowagebirtreportengine/src/main/java/it/eng/spagobi/engines/birt/BirtReportServlet.java +++ b/knowagebirtreportengine/src/main/java/it/eng/spagobi/engines/birt/BirtReportServlet.java @@ -107,7 +107,7 @@ **/ public class BirtReportServlet extends HttpServlet { - private IReportEngine birtReportEngine = null; + // private IReportEngine birtReportEngine = null; protected static Logger logger = Logger.getLogger(BirtReportServlet.class); private static final String CONNECTION_NAME = "connectionName"; public static final String JS_EXT_ZIP = ".zip"; @@ -287,7 +287,7 @@ protected String handleImage(IImage image, Object context, String prefix, boolea return renderOption; } - private InputStream getTemplateContent(HttpServletRequest servletRequest) throws IOException { + private InputStream getTemplateContent(HttpServletRequest servletRequest, IReportEngine birtReportEngine) throws IOException { logger.debug("IN"); HttpSession session = servletRequest.getSession(); IEngUserProfile profile = (IEngUserProfile) session.getAttribute(IEngUserProfile.ENG_USER_PROFILE); @@ -358,14 +358,14 @@ private InputStream getTemplateContent(HttpServletRequest servletRequest) throws } String resourcePath = getBirtExecutionTempDirName(executionId); if (resourcePath != null) { - this.birtReportEngine.getConfig().setResourcePath(resourcePath); + birtReportEngine.getConfig().setResourcePath(resourcePath); } } else { String resPath = BirtEngineConfig.getEngineResourcePath(); if (resPath != null) { logger.debug("Resource path is [" + resPath + "]"); - this.birtReportEngine.getConfig().setResourcePath(resPath); + birtReportEngine.getConfig().setResourcePath(resPath); } else { logger.debug("Resource path is null"); // TODO: should I throw an exception here? @@ -376,7 +376,7 @@ private InputStream getTemplateContent(HttpServletRequest servletRequest) throws return is; } - protected Map findReportParams(HttpServletRequest request, IReportRunnable design) throws ConnectionDefinitionException { + protected Map findReportParams(HttpServletRequest request, IReportRunnable design, IReportEngine birtReportEngine) throws ConnectionDefinitionException { logger.debug("IN"); String dateformat = request.getParameter("dateformat"); if (dateformat != null) { @@ -502,11 +502,11 @@ protected void runReport(HttpServletRequest request, HttpServletResponse respons logger.debug("documentId=" + documentId); ServletContext servletContext = getServletContext(); - this.birtReportEngine = BirtEngine.getBirtEngine(request, servletContext); + IReportEngine birtReportEngine = BirtEngine.getBirtEngine(request, servletContext); IReportRunnable design = null; // retrieve once in order to convert into string and check if contains javascript for progressive view - InputStream isToString = getTemplateContent(request); + InputStream isToString = getTemplateContent(request, birtReportEngine); int n = isToString.available(); byte[] bytes = new byte[n]; isToString.read(bytes, 0, n); @@ -515,7 +515,7 @@ protected void runReport(HttpServletRequest request, HttpServletResponse respons // reds again in order to make template - InputStream is = getTemplateContent(request); + InputStream is = getTemplateContent(request, birtReportEngine); logger.debug("runReport(): template document retrieved."); // Open the report design design = birtReportEngine.openReportDesign(is); @@ -600,7 +600,7 @@ protected void runReport(HttpServletRequest request, HttpServletResponse respons logger.debug("runReport(): RunAndRenderTask created successfully."); // Set parameters for the report - Map reportParams = findReportParams(request, design); + Map reportParams = findReportParams(request, design, birtReportEngine); String requestConnectionName = request.getParameter(CONNECTION_NAME); logger.debug("requestConnectionName:" + requestConnectionName); @@ -711,7 +711,7 @@ protected void runReport(HttpServletRequest request, HttpServletResponse respons response.setHeader("Content-disposition", "inline; filename=" + templateFileName + ".ps"); } else if (outputFormat != null && outputFormat.equalsIgnoreCase(DataExtractionParameterUtil.EXTRACTION_FORMAT_CSV)) { logger.debug(" Output format parameter is CSV. Create document obj ."); - prepareCSVRender(reportParams, request, design, userId, documentId, profile, kpiUrl, response, context); + prepareCSVRender(reportParams, request, design, userId, documentId, profile, kpiUrl, response, context, birtReportEngine); return; } else { @@ -726,7 +726,7 @@ protected void runReport(HttpServletRequest request, HttpServletResponse respons IRunAndRenderTask runAndRenderTask = null; IRunTask runTask = null; - if (progressiveViewing == false) { // Traditional run and rendering + if (!progressiveViewing) { // Traditional run and rendering // Create task to run and render the report, runAndRenderTask = birtReportEngine.createRunAndRenderTask(design); runAndRenderTask.setLocale(locale); @@ -737,7 +737,7 @@ protected void runReport(HttpServletRequest request, HttpServletResponse respons runAndRenderTask.setRenderOption(renderOption); logger.debug("runReport(): RunAndRenderTask created successfully."); } else { // progressive run - ProgressiveCustomPageHandler myPageHandler = new ProgressiveCustomPageHandler((String) context.get(REPORT_EXECUTION_ID)); + ProgressiveCustomPageHandler myPageHandler = new ProgressiveCustomPageHandler((String) context.get(REPORT_EXECUTION_ID), birtReportEngine); runTask = birtReportEngine.createRunTask(design); runTask.setLocale(locale); runTask.setPageHandler(myPageHandler); @@ -756,7 +756,7 @@ protected void runReport(HttpServletRequest request, HttpServletResponse respons logger.debug("Execution id is : " + reportExecutionId); try { - if (progressiveViewing == false) { + if (!progressiveViewing) { runAndRenderTask.run(); } else { String file = OUTPUT_FOLDER + reportExecutionId + ".rptdocument"; @@ -911,7 +911,7 @@ private Map getTaskContext(String userId, Map reportParams, HttpServletRequest r */ private void prepareCSVRender(Map reportParams, HttpServletRequest request, IReportRunnable design, String userId, String documentId, - IEngUserProfile profile, String kpiUrl, HttpServletResponse response, Map context) throws Exception { + IEngUserProfile profile, String kpiUrl, HttpServletResponse response, Map context, IReportEngine birtReportEngine) throws Exception { logger.debug("IN"); @@ -919,7 +919,7 @@ private void prepareCSVRender(Map reportParams, HttpServletRequest request, IRep try { - reportDocument = getReportDocument(design, reportParams, context); + reportDocument = getReportDocument(design, reportParams, context, birtReportEngine); logger.debug("Report document obtained for report " + design.getReportName() + "; pages count = " + reportDocument.getPageCount()); @@ -1086,7 +1086,7 @@ protected String getCSVEncoding() { return encoding; } - protected IReportDocument getReportDocument(IReportRunnable design, Map reportParams, Map context) throws EngineException { + protected IReportDocument getReportDocument(IReportRunnable design, Map reportParams, Map context, IReportEngine birtReportEngine) throws EngineException { logger.debug("IN"); IReportDocument toReturn = null; IRunTask runTask = null; @@ -1165,12 +1165,13 @@ public class ProgressiveCustomPageHandler implements IPageHandler { // Define local variables for the callback class private int lastCheckpoint = 0; private String reportExecutionId = null; + private IReportEngine birtReportEngine = null; - public ProgressiveCustomPageHandler(String reportExecutionId) { + public ProgressiveCustomPageHandler(String reportExecutionId, IReportEngine birtReportEngine) { this.reportExecutionId = reportExecutionId; + this.birtReportEngine = birtReportEngine; } - // @Override @Override public void onPage(int pageNumber, boolean readyForViewing, IReportDocumentInfo reportDocument) { // we only want to do something if this is a checkpoint event diff --git a/knowagecommonjengine/src/main/java/it/eng/spago/dispatching/httpchannel/AdapterHTTP.java b/knowagecommonjengine/src/main/java/it/eng/spago/dispatching/httpchannel/AdapterHTTP.java index 013c21b8bf9..77bb86a6f64 100644 --- a/knowagecommonjengine/src/main/java/it/eng/spago/dispatching/httpchannel/AdapterHTTP.java +++ b/knowagecommonjengine/src/main/java/it/eng/spago/dispatching/httpchannel/AdapterHTTP.java @@ -1,7 +1,7 @@ /* * Knowage, Open Source Business Intelligence suite * Copyright (C) 2016 Engineering Ingegneria Informatica S.p.A. - * + * * Knowage is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or @@ -11,12 +11,33 @@ * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. - * + * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ package it.eng.spago.dispatching.httpchannel; +import java.io.IOException; +import java.util.Enumeration; +import java.util.Iterator; +import java.util.List; +import java.util.StringTokenizer; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; + +import org.apache.commons.fileupload.FileItem; +import org.apache.commons.fileupload.FileItemFactory; +import org.apache.commons.fileupload.disk.DiskFileItemFactory; +import org.apache.commons.fileupload.servlet.ServletFileUpload; +import org.apache.commons.fileupload.servlet.ServletRequestContext; + +import com.jamonapi.Monitor; +import com.jamonapi.MonitorFactory; + import it.eng.spago.base.Constants; import it.eng.spago.base.RequestContainer; import it.eng.spago.base.ResponseContainer; @@ -50,590 +71,512 @@ import it.eng.spago.tracing.TracerSingleton; import it.eng.spago.util.Serializer; -import java.io.IOException; -import java.util.Enumeration; -import java.util.Iterator; -import java.util.List; -import java.util.StringTokenizer; +public class AdapterHTTP extends HttpServlet { -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; + private static final long serialVersionUID = 1L; -import org.apache.commons.fileupload.FileItem; -import org.apache.commons.fileupload.FileItemFactory; -import org.apache.commons.fileupload.disk.DiskFileItemFactory; -import org.apache.commons.fileupload.servlet.ServletFileUpload; -import org.apache.commons.fileupload.servlet.ServletRequestContext; + public static final String NEW_SESSION = "NEW_SESSION"; -import com.jamonapi.Monitor; -import com.jamonapi.MonitorFactory; + public static final String HTTP_CONTENT_TYPE = "text/html"; -public class AdapterHTTP extends HttpServlet { + public static final String WAP_CONTENT_TYPE = "text/vnd.wap.wml"; + + public static final String XML_CONTENT_TYPE = "text/xml"; + + public static final String HTTP_REQUEST_AUTH_TYPE = "HTTP_REQUEST_AUTH_TYPE"; + + public static final String HTTP_REQUEST_CHARACTER_ENCODING = "HTTP_REQUEST_CHARACTER_ENCODING"; + + public static final String HTTP_REQUEST_CONTENT_LENGTH = "HTTP_REQUEST_CONTENT_LENGTH"; + + public static final String HTTP_REQUEST_CONTENT_TYPE = "HTTP_REQUEST_CONTENT_TYPE"; + + public static final String HTTP_REQUEST_CONTEXT_PATH = "HTTP_REQUEST_CONTEXT_PATH"; - private static final long serialVersionUID = 1L; + public static final String HTTP_REQUEST_METHOD = "HTTP_REQUEST_METHOD"; - public static final String NEW_SESSION = "NEW_SESSION"; + public static final String HTTP_REQUEST_PATH_INFO = "HTTP_REQUEST_PATH_INFO"; - public static final String HTTP_CONTENT_TYPE = "text/html"; + public static final String HTTP_REQUEST_PATH_TRANSLATED = "HTTP_REQUEST_PATH_TRANSLATED"; - public static final String WAP_CONTENT_TYPE = "text/vnd.wap.wml"; + public static final String HTTP_REQUEST_PROTOCOL = "HTTP_REQUEST_PROTOCOL"; - public static final String XML_CONTENT_TYPE = "text/xml"; + public static final String HTTP_REQUEST_QUERY_STRING = "HTTP_REQUEST_QUERY_STRING"; - public static final String HTTP_REQUEST_AUTH_TYPE = "HTTP_REQUEST_AUTH_TYPE"; + public static final String HTTP_REQUEST_REMOTE_ADDR = "HTTP_REQUEST_REMOTE_ADDR"; - public static final String HTTP_REQUEST_CHARACTER_ENCODING = "HTTP_REQUEST_CHARACTER_ENCODING"; + public static final String HTTP_REQUEST_REMOTE_HOST = "HTTP_REQUEST_REMOTE_HOST"; - public static final String HTTP_REQUEST_CONTENT_LENGTH = "HTTP_REQUEST_CONTENT_LENGTH"; + public static final String HTTP_REQUEST_REMOTE_USER = "HTTP_REQUEST_REMOTE_USER"; - public static final String HTTP_REQUEST_CONTENT_TYPE = "HTTP_REQUEST_CONTENT_TYPE"; + public static final String HTTP_REQUEST_REQUESTED_SESSION_ID = "HTTP_REQUEST_REQUESTED_SESSION_ID"; - public static final String HTTP_REQUEST_CONTEXT_PATH = "HTTP_REQUEST_CONTEXT_PATH"; + public static final String HTTP_REQUEST_REQUEST_URI = "HTTP_REQUEST_REQUEST_URI"; - public static final String HTTP_REQUEST_METHOD = "HTTP_REQUEST_METHOD"; + public static final String HTTP_REQUEST_SCHEME = "HTTP_REQUEST_SCHEME"; - public static final String HTTP_REQUEST_PATH_INFO = "HTTP_REQUEST_PATH_INFO"; + public static final String HTTP_REQUEST_SERVER_NAME = "HTTP_REQUEST_SERVER_NAME"; - public static final String HTTP_REQUEST_PATH_TRANSLATED = "HTTP_REQUEST_PATH_TRANSLATED"; + public static final String HTTP_REQUEST_SERVER_PORT = "HTTP_REQUEST_SERVER_PORT"; - public static final String HTTP_REQUEST_PROTOCOL = "HTTP_REQUEST_PROTOCOL"; + public static final String HTTP_REQUEST_SERVLET_PATH = "HTTP_REQUEST_SERVLET_PATH"; - public static final String HTTP_REQUEST_QUERY_STRING = "HTTP_REQUEST_QUERY_STRING"; + public static final String HTTP_REQUEST_USER_PRINCIPAL = "HTTP_REQUEST_USER_PRINCIPAL"; - public static final String HTTP_REQUEST_REMOTE_ADDR = "HTTP_REQUEST_REMOTE_ADDR"; + public static final String HTTP_REQUEST_REQUESTED_SESSION_ID_FROM_COOKIE = "HTTP_REQUEST_REQUESTED_SESSION_ID_FROM_COOKIE"; - public static final String HTTP_REQUEST_REMOTE_HOST = "HTTP_REQUEST_REMOTE_HOST"; + public static final String HTTP_REQUEST_REQUESTED_SESSION_ID_FROM_URL = "HTTP_REQUEST_REQUESTED_SESSION_ID_FROM_URL"; - public static final String HTTP_REQUEST_REMOTE_USER = "HTTP_REQUEST_REMOTE_USER"; + public static final String HTTP_REQUEST_REQUESTED_SESSION_ID_VALID = "HTTP_REQUEST_REQUESTED_SESSION_ID_VALID"; - public static final String HTTP_REQUEST_REQUESTED_SESSION_ID = "HTTP_REQUEST_REQUESTED_SESSION_ID"; + public static final String HTTP_REQUEST_SECURE = "HTTP_REQUEST_SECURE"; - public static final String HTTP_REQUEST_REQUEST_URI = "HTTP_REQUEST_REQUEST_URI"; + public static final String HTTP_ACCEPT_HEADER = "ACCEPT"; - public static final String HTTP_REQUEST_SCHEME = "HTTP_REQUEST_SCHEME"; + public static final String WAP_MIME_TYPE = "vnd.wap"; - public static final String HTTP_REQUEST_SERVER_NAME = "HTTP_REQUEST_SERVER_NAME"; - - public static final String HTTP_REQUEST_SERVER_PORT = "HTTP_REQUEST_SERVER_PORT"; - - public static final String HTTP_REQUEST_SERVLET_PATH = "HTTP_REQUEST_SERVLET_PATH"; - - public static final String HTTP_REQUEST_USER_PRINCIPAL = "HTTP_REQUEST_USER_PRINCIPAL"; - - public static final String HTTP_REQUEST_REQUESTED_SESSION_ID_FROM_COOKIE = "HTTP_REQUEST_REQUESTED_SESSION_ID_FROM_COOKIE"; - - public static final String HTTP_REQUEST_REQUESTED_SESSION_ID_FROM_URL = "HTTP_REQUEST_REQUESTED_SESSION_ID_FROM_URL"; - - public static final String HTTP_REQUEST_REQUESTED_SESSION_ID_VALID = "HTTP_REQUEST_REQUESTED_SESSION_ID_VALID"; - - public static final String HTTP_REQUEST_SECURE = "HTTP_REQUEST_SECURE"; - - public static final String HTTP_ACCEPT_HEADER = "ACCEPT"; - - public static final String WAP_MIME_TYPE = "vnd.wap"; - - public static final String HTTP_SESSION_ID = "HTTP_SESSION_ID"; - - public static final String HTTP_REQUESTED_WITH = "x-requested-with"; - - public static final String XMLHTTPREQUEST = "XMLHttpRequest"; - - private static final String SERIALIZE_SESSION_ATTRIBUTE = "COMMON.SERIALIZE_SESSION"; - - // Atributo della configurazione che indica se serializzare il contenuto - // della sessione - private boolean serializeSession = false; - - - private void handleQueryStringField(HttpServletRequest request,SourceBean serviceReq,String queryStringFieldName) throws SourceBeanException { - - String queryString = queryStringFieldName.substring(queryStringFieldName.indexOf("{")+1, queryStringFieldName.indexOf("}")); - - StringTokenizer st = new StringTokenizer(queryString, "&", false); - - String parameterToken = null; - String parameterName = null; - String parameterValue = null; - while (st.hasMoreTokens()){ - parameterToken = st.nextToken(); - parameterName = parameterToken.substring(0, parameterToken.indexOf("=")); - parameterValue = parameterToken.substring(parameterToken.indexOf("=")+1); - - if(parameterName!= null && !"".equalsIgnoreCase(parameterName)) { - - if (serviceReq.containsAttribute(parameterName)){ - serviceReq.updAttribute(parameterName, parameterValue); - } else { - serviceReq.setAttribute(parameterName, parameterValue); - } - } - - } - - } - - /** - * Make the service name available in request also if the service was invoked with the - * .action or .page URL - * @param requestContainer Current RequestContainer - * @param serviceRequest Current request - */ - private void handleServiceName(SourceBean serviceRequest, final RequestContainer requestContainer) { - String path = ((String)requestContainer.getAttribute(HTTP_REQUEST_SERVLET_PATH)).toUpperCase(); - try { - if (path.endsWith(Constants.ACTION_URL_PATTERN)) { - serviceRequest.setAttribute(Constants.ACTION_NAME, path.substring(1, path.length() - Constants.ACTION_URL_PATTERN.length())); - } else if (path.endsWith(Constants.PAGE_URL_PATTERN)) { - serviceRequest.setAttribute(Constants.PAGE, path.substring(1, path.length() - Constants.PAGE_URL_PATTERN.length())); - } - } catch (SourceBeanException ex) { - TracerSingleton.log(Constants.NOME_MODULO, TracerSingleton.WARNING, - "AdapterHTTP::handleServiceName: ", ex); - } - } - - private void handleSuspendResume(SourceBean serviceRequest, RequestContainer requestContainer) - throws SourceBeanException { - String deleteSuspendResumeId = (String)serviceRequest.getAttribute("DELETE_SUSPEND_RESUME_ID"); - if ((deleteSuspendResumeId != null) && (deleteSuspendResumeId.trim().length() > 0)){ - TracerSingleton.log(Constants.NOME_MODULO, TracerSingleton.INFORMATION, - "AdapterHTTP::service: DELETE_SUSPEND_RESUME_ID ["+deleteSuspendResumeId+"] FOUND IN SERVICE REQUEST : DELETE SUSPEND RESUME CONTAINERS"); - SessionContainer aPermanentContainer = requestContainer.getSessionContainer().getPermanentContainer(); - SourceBean suspendedResumeContainers = (SourceBean)aPermanentContainer.getAttribute(deleteSuspendResumeId); - /* - TracerSingleton.log(Constants.NOME_MODULO, TracerSingleton.INFORMATION, - "AdapterHTTP::service: DELETE_SUSPEND_RESUME_ID Container to delete" + suspendedResumeContainers); - */ - if (suspendedResumeContainers != null){ - aPermanentContainer.delAttribute(deleteSuspendResumeId); - } - /* - suspendedResumeContainers = (SourceBean)aPermanentContainer.getAttribute(deleteSuspendResumeId); - TracerSingleton.log(Constants.NOME_MODULO, TracerSingleton.INFORMATION, - "AdapterHTTP::service: DELETE_SUSPEND_RESUME_ID Container to delete" + suspendedResumeContainers); - */ - } - // Suspend Service Request - String suspendResumeId = (String)serviceRequest.getAttribute("SUSPEND_RESUME_ID"); - if ((suspendResumeId != null) && (suspendResumeId.trim().length() > 0)){ - TracerSingleton.log(Constants.NOME_MODULO, TracerSingleton.INFORMATION, - "AdapterHTTP::service: SUSPEND_RESUME_ID ["+suspendResumeId+"] FOUND IN SERVICE REQUEST SUSPEND CURRENT SERVICE REQUEST"); - SessionContainer aPermanentContainer = requestContainer.getSessionContainer().getPermanentContainer(); - SourceBean suspendedResumeContainers = (SourceBean)aPermanentContainer.getAttribute(suspendResumeId); - - if (suspendedResumeContainers == null) { - TracerSingleton.log(Constants.NOME_MODULO, TracerSingleton.WARNING, - "AdapterHTTP::service: SUSPENDED-RESUME-CONTAINER NOT FOUND"); - } else if (suspendedResumeContainers.getAttribute(Constants.SERVICE_REQUEST) != null){ - TracerSingleton.log(Constants.NOME_MODULO, TracerSingleton.INFORMATION, - "AdapterHTTP::service: SUSPENDED-RESUME-CONTAINER CONTAINS ALREADY A SERVICE REQUEST OVERWRITE IT"); - suspendedResumeContainers.updAttribute(serviceRequest); - } else { - TracerSingleton.log(Constants.NOME_MODULO, TracerSingleton.INFORMATION, - "AdapterHTTP::service: SUSPENDED-RESUME-CONTAINER CONTAINS ALREADY A SERVICE REQUEST WRITE IT"); - suspendedResumeContainers.setAttribute(serviceRequest); - } - } - } - - private void handleMultipartForm(HttpServletRequest request, RequestContextIFace requestContext) - throws Exception{ - SourceBean serviceRequest = requestContext.getServiceRequest(); - - // Create a factory for disk-based file items - FileItemFactory factory = new DiskFileItemFactory(); - - // Create a new file upload handler - ServletFileUpload upload = new ServletFileUpload(factory); - - // Parse the request - List fileItems = upload.parseRequest(request); - Iterator iter = fileItems.iterator(); - while (iter.hasNext()) { - FileItem item = (FileItem) iter.next(); - - if (item.isFormField()) { - String name = item.getFieldName(); - String value = item.getString(); - serviceRequest.setAttribute(name, value); - } else { - processFileField(item, requestContext); - } - } - } - - private void handleSimpleForm(HttpServletRequest request, RequestContextIFace requestContext) - throws SourceBeanException{ - SourceBean serviceRequest = requestContext.getServiceRequest(); - Enumeration names = request.getParameterNames(); - while (names.hasMoreElements()) { - String parameterName = (String) names.nextElement(); - - if( parameterName != null && !"".equalsIgnoreCase(parameterName) ) { - - if (parameterName.startsWith("QUERY_STRING")){ - handleQueryStringField(request, serviceRequest, parameterName); - }else{ - String[] parameterValues = request.getParameterValues(parameterName); - if (parameterValues != null) - for (int i = 0; i < parameterValues.length; i++) - serviceRequest.setAttribute(parameterName, parameterValues[i]); - } - } - - - - } // while (names.hasMoreElements()) - } - - public void service(HttpServletRequest request, HttpServletResponse response) - throws IOException, ServletException { - Monitor monitor = null; - IEventNotifier eventNotifier = null; - RequestContextIFace requestContext = null; - - try { - SourceBean serviceRequest = null; - EMFErrorHandler emfErrorHandler = null; - EMFExceptionHandler exceptionHandler = new EMFExceptionHandler(); - - // Retrieve LOOP responseContainer, if any - ResponseContainer loopbackResponseContainer = ResponseContainer.getResponseContainer(); - - RequestContainer requestContainer = new RequestContainer(); - RequestContainer.setRequestContainer(requestContainer); - - ResponseContainer responseContainer = new ResponseContainer(); - ResponseContainer.setResponseContainer(responseContainer); - - requestContext = new DefaultRequestContext(requestContainer, - responseContainer); - - // Retrieve HTTP session - HttpSession session = request.getSession(true); - - eventNotifier = EventNotifierFactory.getEventNotifier(); - eventNotifier.notifyEvent( - new ServiceStartEvent(session), - requestContext); - - // Trace only after calling listener, so the session id can be written on log files - TracerSingleton.log(Constants.NOME_MODULO, TracerSingleton.DEBUG, - "AdapterHTTP::service: invocato"); - - boolean loopback = (request.getAttribute(Constants.PUBLISHING_MODE_LOOPBACK) != null); - if (loopback) { - TracerSingleton.log(Constants.NOME_MODULO, TracerSingleton.DEBUG, - "AdapterHTTP::service: loop-back rilevato"); - - // remove from the request the loopback attribute - request.removeAttribute(Constants.PUBLISHING_MODE_LOOPBACK); - - loopbackResponseContainer = ResponseContainerAccess.getResponseContainer(request); - serviceRequest = loopbackResponseContainer.getLoopbackServiceRequest(); - if (serviceRequest == null) { - serviceRequest = new SourceBean(Constants.SERVICE_REQUEST); - } else { - Object newServiceRequest = serviceRequest - .getAttribute(Constants.SERVICE_REQUEST); - if ((newServiceRequest != null) && (newServiceRequest instanceof SourceBean)) - serviceRequest = (SourceBean) newServiceRequest; - } // if (serviceRequest == null) - requestContainer.setServiceRequest(serviceRequest); - - // The errors are kept in loop mode, so retrieve old error handler - emfErrorHandler = loopbackResponseContainer.getErrorHandler(); - - if (emfErrorHandler == null) { - emfErrorHandler = new EMFErrorHandler(); - } - } // if (loopbackResponseContainer != null) - else { - monitor = MonitorFactory.start("controller.adapter.http"); - serviceRequest = new SourceBean(Constants.SERVICE_REQUEST); - requestContainer.setServiceRequest(serviceRequest); - - // Get header parameter before parsing the request - setHttpRequestData(request, requestContainer); - - // Check if the service was invoked with the .action or .page URL - handleServiceName(serviceRequest, requestContainer); - - boolean isMultipart = ServletFileUpload.isMultipartContent(new ServletRequestContext(request)); - if (isMultipart) { - handleMultipartForm(request, requestContext); - } else { - handleSimpleForm(request, requestContext); - } - - emfErrorHandler = new EMFErrorHandler(); - } // if (loopbackResponseContainer != null) else - - - //***************** NAVIGATION CONTROL ******************************************************* - serviceRequest = LightNavigationManager.controlLightNavigation(request, serviceRequest); - requestContainer.setServiceRequest(serviceRequest); - //******************************************************************************************** - - Exception serviceException = null; - CoordinatorIFace coordinator = null; - try { - responseContainer.setErrorHandler(emfErrorHandler); - - String channelType = Constants.HTTP_CHANNEL; - String channelTypeParameter = (String) (serviceRequest - .getAttribute(Constants.CHANNEL_TYPE)); - String channelTypeHeader = (String) (requestContainer.getAttribute(HTTP_ACCEPT_HEADER)); - if (((channelTypeParameter != null) && channelTypeParameter - .equalsIgnoreCase(Constants.WAP_CHANNEL)) - || ((channelTypeHeader != null) && (channelTypeHeader.indexOf(WAP_MIME_TYPE) != -1))) - channelType = Constants.WAP_CHANNEL; - requestContainer.setChannelType(channelType); - requestContainer.setInternalRequest(request); - requestContainer.setInternalResponse(response); - requestContainer.setAdapterConfig(getServletConfig()); - TracerSingleton.log(Constants.NOME_MODULO, TracerSingleton.DEBUG, - "AdapterHTTP::service: requestContainer", requestContainer); - TracerSingleton.log(Constants.NOME_MODULO, TracerSingleton.DEBUG, - "AdapterHTTP::service: sessionContainer", requestContainer - .getSessionContainer()); - - SourceBean serviceResponse = new SourceBean(Constants.SERVICE_RESPONSE); - responseContainer.setServiceResponse(serviceResponse); - - checkSession(session, requestContext); - Navigator.checkNavigation(requestContainer); - - // Refresh service request because Navigator services can changed it - serviceRequest = requestContainer.getServiceRequest(); - - // Suspend/Resume service - handleSuspendResume(serviceRequest, requestContainer); - - coordinator = DispatcherManager.getCoordinator(requestContext); - if (coordinator == null) { - TracerSingleton.log(Constants.NOME_MODULO, TracerSingleton.WARNING, - "AdapterHTTP::service: coordinator nullo !"); - serviceException = new Exception("Coordinatore non trovato"); - emfErrorHandler.addError(new EMFInternalError(EMFErrorSeverity.ERROR, - "Coordinatore non trovato !")); - } // if (coordinator == null) - else { - ((RequestContextIFace) coordinator).setRequestContext(requestContext); - responseContainer.setBusinessType(coordinator.getBusinessType()); - responseContainer.setBusinessName(coordinator.getBusinessName()); - responseContainer.setPublisherName(coordinator.getPublisherName()); - coordinator.service(serviceRequest, serviceResponse); - - ((RequestContextIFace) coordinator).setRequestContext(null); + public static final String HTTP_SESSION_ID = "HTTP_SESSION_ID"; + + public static final String HTTP_REQUESTED_WITH = "x-requested-with"; + + public static final String XMLHTTPREQUEST = "XMLHttpRequest"; + + private static final String SERIALIZE_SESSION_ATTRIBUTE = "COMMON.SERIALIZE_SESSION"; + + private void handleQueryStringField(HttpServletRequest request, SourceBean serviceReq, String queryStringFieldName) throws SourceBeanException { + + String queryString = queryStringFieldName.substring(queryStringFieldName.indexOf("{") + 1, queryStringFieldName.indexOf("}")); + + StringTokenizer st = new StringTokenizer(queryString, "&", false); + + String parameterToken = null; + String parameterName = null; + String parameterValue = null; + while (st.hasMoreTokens()) { + parameterToken = st.nextToken(); + parameterName = parameterToken.substring(0, parameterToken.indexOf("=")); + parameterValue = parameterToken.substring(parameterToken.indexOf("=") + 1); + + if (parameterName != null && !"".equalsIgnoreCase(parameterName)) { + + if (serviceReq.containsAttribute(parameterName)) { + serviceReq.updAttribute(parameterName, parameterValue); + } else { + serviceReq.setAttribute(parameterName, parameterValue); + } + } + + } + + } + + /** + * Make the service name available in request also if the service was invoked with the .action or .page URL + * + * @param requestContainer Current RequestContainer + * @param serviceRequest Current request + */ + private void handleServiceName(SourceBean serviceRequest, final RequestContainer requestContainer) { + String path = ((String) requestContainer.getAttribute(HTTP_REQUEST_SERVLET_PATH)).toUpperCase(); + try { + if (path.endsWith(Constants.ACTION_URL_PATTERN)) { + serviceRequest.setAttribute(Constants.ACTION_NAME, path.substring(1, path.length() - Constants.ACTION_URL_PATTERN.length())); + } else if (path.endsWith(Constants.PAGE_URL_PATTERN)) { + serviceRequest.setAttribute(Constants.PAGE, path.substring(1, path.length() - Constants.PAGE_URL_PATTERN.length())); + } + } catch (SourceBeanException ex) { + TracerSingleton.log(Constants.NOME_MODULO, TracerSingleton.WARNING, "AdapterHTTP::handleServiceName: ", ex); + } + } + + private void handleSuspendResume(SourceBean serviceRequest, RequestContainer requestContainer) throws SourceBeanException { + String deleteSuspendResumeId = (String) serviceRequest.getAttribute("DELETE_SUSPEND_RESUME_ID"); + if ((deleteSuspendResumeId != null) && (deleteSuspendResumeId.trim().length() > 0)) { + TracerSingleton.log(Constants.NOME_MODULO, TracerSingleton.INFORMATION, "AdapterHTTP::service: DELETE_SUSPEND_RESUME_ID [" + deleteSuspendResumeId + + "] FOUND IN SERVICE REQUEST : DELETE SUSPEND RESUME CONTAINERS"); + SessionContainer aPermanentContainer = requestContainer.getSessionContainer().getPermanentContainer(); + SourceBean suspendedResumeContainers = (SourceBean) aPermanentContainer.getAttribute(deleteSuspendResumeId); + /* + * TracerSingleton.log(Constants.NOME_MODULO, TracerSingleton.INFORMATION, "AdapterHTTP::service: DELETE_SUSPEND_RESUME_ID Container to delete" + + * suspendedResumeContainers); + */ + if (suspendedResumeContainers != null) { + aPermanentContainer.delAttribute(deleteSuspendResumeId); + } + /* + * suspendedResumeContainers = (SourceBean)aPermanentContainer.getAttribute(deleteSuspendResumeId); TracerSingleton.log(Constants.NOME_MODULO, + * TracerSingleton.INFORMATION, "AdapterHTTP::service: DELETE_SUSPEND_RESUME_ID Container to delete" + suspendedResumeContainers); + */ + } + // Suspend Service Request + String suspendResumeId = (String) serviceRequest.getAttribute("SUSPEND_RESUME_ID"); + if ((suspendResumeId != null) && (suspendResumeId.trim().length() > 0)) { + TracerSingleton.log(Constants.NOME_MODULO, TracerSingleton.INFORMATION, + "AdapterHTTP::service: SUSPEND_RESUME_ID [" + suspendResumeId + "] FOUND IN SERVICE REQUEST SUSPEND CURRENT SERVICE REQUEST"); + SessionContainer aPermanentContainer = requestContainer.getSessionContainer().getPermanentContainer(); + SourceBean suspendedResumeContainers = (SourceBean) aPermanentContainer.getAttribute(suspendResumeId); + + if (suspendedResumeContainers == null) { + TracerSingleton.log(Constants.NOME_MODULO, TracerSingleton.WARNING, "AdapterHTTP::service: SUSPENDED-RESUME-CONTAINER NOT FOUND"); + } else if (suspendedResumeContainers.getAttribute(Constants.SERVICE_REQUEST) != null) { + TracerSingleton.log(Constants.NOME_MODULO, TracerSingleton.INFORMATION, + "AdapterHTTP::service: SUSPENDED-RESUME-CONTAINER CONTAINS ALREADY A SERVICE REQUEST OVERWRITE IT"); + suspendedResumeContainers.updAttribute(serviceRequest); + } else { + TracerSingleton.log(Constants.NOME_MODULO, TracerSingleton.INFORMATION, + "AdapterHTTP::service: SUSPENDED-RESUME-CONTAINER CONTAINS ALREADY A SERVICE REQUEST WRITE IT"); + suspendedResumeContainers.setAttribute(serviceRequest); + } + } + } + + private void handleMultipartForm(HttpServletRequest request, RequestContextIFace requestContext) throws Exception { + SourceBean serviceRequest = requestContext.getServiceRequest(); + + // Create a factory for disk-based file items + FileItemFactory factory = new DiskFileItemFactory(); + + // Create a new file upload handler + ServletFileUpload upload = new ServletFileUpload(factory); + + // Parse the request + List fileItems = upload.parseRequest(request); + Iterator iter = fileItems.iterator(); + while (iter.hasNext()) { + FileItem item = (FileItem) iter.next(); + + if (item.isFormField()) { + String name = item.getFieldName(); + String value = item.getString(); + serviceRequest.setAttribute(name, value); + } else { + processFileField(item, requestContext); + } + } + } + + private void handleSimpleForm(HttpServletRequest request, RequestContextIFace requestContext) throws SourceBeanException { + SourceBean serviceRequest = requestContext.getServiceRequest(); + Enumeration names = request.getParameterNames(); + while (names.hasMoreElements()) { + String parameterName = (String) names.nextElement(); + + if (parameterName != null && !"".equalsIgnoreCase(parameterName)) { + + if (parameterName.startsWith("QUERY_STRING")) { + handleQueryStringField(request, serviceRequest, parameterName); + } else { + String[] parameterValues = request.getParameterValues(parameterName); + if (parameterValues != null) + for (int i = 0; i < parameterValues.length; i++) + serviceRequest.setAttribute(parameterName, parameterValues[i]); + } + } + + } // while (names.hasMoreElements()) + } + + @Override + public void service(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { + boolean serializeSession = this.getSerializedSession(); + + Monitor monitor = null; + IEventNotifier eventNotifier = null; + RequestContextIFace requestContext = null; + + try { + SourceBean serviceRequest = null; + EMFErrorHandler emfErrorHandler = null; + EMFExceptionHandler exceptionHandler = new EMFExceptionHandler(); + + // Retrieve LOOP responseContainer, if any + ResponseContainer loopbackResponseContainer = ResponseContainer.getResponseContainer(); + + RequestContainer requestContainer = new RequestContainer(); + RequestContainer.setRequestContainer(requestContainer); + + ResponseContainer responseContainer = new ResponseContainer(); + ResponseContainer.setResponseContainer(responseContainer); + + requestContext = new DefaultRequestContext(requestContainer, responseContainer); + + // Retrieve HTTP session + HttpSession session = request.getSession(true); + + eventNotifier = EventNotifierFactory.getEventNotifier(); + eventNotifier.notifyEvent(new ServiceStartEvent(session), requestContext); + + // Trace only after calling listener, so the session id can be written on log files + TracerSingleton.log(Constants.NOME_MODULO, TracerSingleton.DEBUG, "AdapterHTTP::service: invocato"); + + boolean loopback = (request.getAttribute(Constants.PUBLISHING_MODE_LOOPBACK) != null); + if (loopback) { + TracerSingleton.log(Constants.NOME_MODULO, TracerSingleton.DEBUG, "AdapterHTTP::service: loop-back rilevato"); + + // remove from the request the loopback attribute + request.removeAttribute(Constants.PUBLISHING_MODE_LOOPBACK); + + loopbackResponseContainer = ResponseContainerAccess.getResponseContainer(request); + serviceRequest = loopbackResponseContainer.getLoopbackServiceRequest(); + if (serviceRequest == null) { + serviceRequest = new SourceBean(Constants.SERVICE_REQUEST); + } else { + Object newServiceRequest = serviceRequest.getAttribute(Constants.SERVICE_REQUEST); + if ((newServiceRequest != null) && (newServiceRequest instanceof SourceBean)) + serviceRequest = (SourceBean) newServiceRequest; + } // if (serviceRequest == null) + requestContainer.setServiceRequest(serviceRequest); + + // The errors are kept in loop mode, so retrieve old error handler + emfErrorHandler = loopbackResponseContainer.getErrorHandler(); + + if (emfErrorHandler == null) { + emfErrorHandler = new EMFErrorHandler(); + } + } // if (loopbackResponseContainer != null) + else { + monitor = MonitorFactory.start("controller.adapter.http"); + serviceRequest = new SourceBean(Constants.SERVICE_REQUEST); + requestContainer.setServiceRequest(serviceRequest); + + // Get header parameter before parsing the request + setHttpRequestData(request, requestContainer); + + // Check if the service was invoked with the .action or .page URL + handleServiceName(serviceRequest, requestContainer); + + boolean isMultipart = ServletFileUpload.isMultipartContent(new ServletRequestContext(request)); + if (isMultipart) { + handleMultipartForm(request, requestContext); + } else { + handleSimpleForm(request, requestContext); + } + + emfErrorHandler = new EMFErrorHandler(); + } // if (loopbackResponseContainer != null) else + + // ***************** NAVIGATION CONTROL ******************************************************* + serviceRequest = LightNavigationManager.controlLightNavigation(request, serviceRequest); + requestContainer.setServiceRequest(serviceRequest); + // ******************************************************************************************** + + Exception serviceException = null; + CoordinatorIFace coordinator = null; + try { + responseContainer.setErrorHandler(emfErrorHandler); + + String channelType = Constants.HTTP_CHANNEL; + String channelTypeParameter = (String) (serviceRequest.getAttribute(Constants.CHANNEL_TYPE)); + String channelTypeHeader = (String) (requestContainer.getAttribute(HTTP_ACCEPT_HEADER)); + if (((channelTypeParameter != null) && channelTypeParameter.equalsIgnoreCase(Constants.WAP_CHANNEL)) + || ((channelTypeHeader != null) && (channelTypeHeader.indexOf(WAP_MIME_TYPE) != -1))) + channelType = Constants.WAP_CHANNEL; + requestContainer.setChannelType(channelType); + requestContainer.setInternalRequest(request); + requestContainer.setInternalResponse(response); + requestContainer.setAdapterConfig(getServletConfig()); + TracerSingleton.log(Constants.NOME_MODULO, TracerSingleton.DEBUG, "AdapterHTTP::service: requestContainer", requestContainer); + TracerSingleton.log(Constants.NOME_MODULO, TracerSingleton.DEBUG, "AdapterHTTP::service: sessionContainer", + requestContainer.getSessionContainer()); + + SourceBean serviceResponse = new SourceBean(Constants.SERVICE_RESPONSE); + responseContainer.setServiceResponse(serviceResponse); + + checkSession(session, requestContext); + Navigator.checkNavigation(requestContainer); + + // Refresh service request because Navigator services can changed it + serviceRequest = requestContainer.getServiceRequest(); + + // Suspend/Resume service + handleSuspendResume(serviceRequest, requestContainer); + + coordinator = DispatcherManager.getCoordinator(requestContext); + if (coordinator == null) { + TracerSingleton.log(Constants.NOME_MODULO, TracerSingleton.WARNING, "AdapterHTTP::service: coordinator nullo !"); + serviceException = new Exception("Coordinatore non trovato"); + emfErrorHandler.addError(new EMFInternalError(EMFErrorSeverity.ERROR, "Coordinatore non trovato !")); + } // if (coordinator == null) + else { + ((RequestContextIFace) coordinator).setRequestContext(requestContext); + responseContainer.setBusinessType(coordinator.getBusinessType()); + responseContainer.setBusinessName(coordinator.getBusinessName()); + responseContainer.setPublisherName(coordinator.getPublisherName()); + coordinator.service(serviceRequest, serviceResponse); + + ((RequestContextIFace) coordinator).setRequestContext(null); // requestContainer.setInternalRequest(null); - } // if (coordinator == null) else - - } // try - catch (Exception ex) { - ServiceIFace service = (coordinator != null)? coordinator.getService() : null; - exceptionHandler.handleException(ex, service, requestContext); - } // catch (Exception ex) - + } // if (coordinator == null) else + + } // try + catch (Exception ex) { + ServiceIFace service = (coordinator != null) ? coordinator.getService() : null; + exceptionHandler.handleException(ex, service, requestContext); + } // catch (Exception ex) + // requestContainer.setInternalResponse(null); // requestContainer.setAdapterConfig(null); - // nel caso in cui sia attiva la persistenza della sessione - // forza la scrittura sul database - synchronized (session) { - session.setAttribute(Constants.REQUEST_CONTAINER, session.getAttribute(Constants.REQUEST_CONTAINER)); - } // synchronized (session) - - TracerSingleton.log(Constants.NOME_MODULO, TracerSingleton.DEBUG, - "AdapterHTTP::service: responseContainer", responseContainer); - TracerSingleton.log(Constants.NOME_MODULO, TracerSingleton.DEBUG, - "AdapterHTTP::service: sessionContainer", requestContainer - .getSessionContainer()); - - if (serializeSession) { - TracerSingleton - .log(Constants.NOME_MODULO, TracerSingleton.DEBUG, - "AdapterHTTP::service: sessionContainer size [" - + Serializer.serialize(requestContainer - .getSessionContainer()).length + "]"); - } - - render(requestContext, serviceException); - } // try - catch (Exception ex) { - TracerSingleton.log(Constants.NOME_MODULO, TracerSingleton.CRITICAL, - "AdapterHTTP::service: ", ex); - } // catch (Excpetion ex) try - finally { - RequestContainer.delRequestContainer(); - ResponseContainer.delResponseContainer(); - if (monitor != null) { - monitor.stop(); - } - - if (eventNotifier != null) { - eventNotifier.notifyEvent( - new ServiceEndEvent(null), - requestContext); - } - - } // finally - } // public void service(HttpServletRequest request, HttpServletResponse - // response) throws IOException, ServletException - - private void processFileField(final FileItem item, RequestContextIFace requestContext) - throws Exception { - String uploadManagerName = (String)ConfigSingleton.getInstance().getAttribute("UPLOAD.UPLOAD-MANAGER.NAME"); - if (uploadManagerName == null) { - TracerSingleton.log(Constants.NOME_MODULO, TracerSingleton.CRITICAL, - "AdapterHTTP::processFileField: metodo di upload non selezionato"); - } - - IUploadHandler uploadHandler = UploadFactory.getHandler(uploadManagerName); - if (uploadHandler instanceof RequestContextIFace) { - ((RequestContextIFace) uploadHandler).setRequestContext(requestContext); - } - uploadHandler.upload(item); - } - - private void checkSession(HttpSession session, RequestContextIFace requestContext) - throws SessionExpiredException { - - // start modifications by Zerbetto on 25-02-2008: NEW_SESSION parameter can force a new session - boolean isRequestedSessionIdValid = true; - boolean isRequiredNewSession = false; // Zerbetto on 25-02-2008 - RequestContainer requestContainer = requestContext.getRequestContainer(); - - if (session.isNew()) { - isRequestedSessionIdValid = (requestContainer.getAttribute(HTTP_REQUEST_REQUESTED_SESSION_ID) == null); - String newSessionRequestAttr = (String) requestContainer.getServiceRequest().getAttribute(NEW_SESSION); // Zerbetto on 25-02-2008 - isRequiredNewSession = newSessionRequestAttr != null && newSessionRequestAttr.equalsIgnoreCase("TRUE"); // Zerbetto on 25-02-2008 - } // if (session.isNew()) - synchronized (session) { - RequestContainer parentRequestContainer = (RequestContainer) session - .getAttribute(Constants.REQUEST_CONTAINER); - if (!Navigator.isNavigatorEnabled()) { - if (parentRequestContainer == null) - requestContainer.setSessionContainer(new SessionContainer(true)); - else - requestContainer.setSessionContainer(parentRequestContainer - .getSessionContainer()); - } - else { - if (parentRequestContainer == null) - requestContainer.setSessionContainer(new SessionContainer(true)); - else { - requestContainer.setSessionContainer(new SessionContainer(false)); - requestContainer.setParent(parentRequestContainer); - } // if (parentRequestContainer == null) else - } // if (!Navigator.isNavigatorEnabled()) - session.setAttribute(Constants.REQUEST_CONTAINER, requestContainer); - } // synchronized (session) - if (!isRequestedSessionIdValid) { - if (!isRequiredNewSession) { // Zerbetto on 25-02-2008 - TracerSingleton.log(Constants.NOME_MODULO, TracerSingleton.WARNING, - "AdapterHTTP::service: sessione scaduta !"); - throw new SessionExpiredException(EMFErrorSeverity.ERROR, "Expired Session"); - } // Zerbetto on 25-02-2008 - } // if (!isRequestedSessionIdValid) - // end modifications by Zerbetto on 25-02-2008: NEW_SESSION parameter can force a new session - } - - private void render(RequestContextIFace requestContext, Exception serviceException) - throws Exception { - ResponseContainer responseContainer = requestContext.getResponseContainer(); - - Boolean isHttpResponseFreezed = (Boolean) responseContainer - .getAttribute(Constants.HTTP_RESPONSE_FREEZED); - if ((isHttpResponseFreezed == null) || (!isHttpResponseFreezed.booleanValue())) { - - // Retrieve publisher configuration for current service - PublisherConfiguration publisherConfig = Publisher.getPublisherConfiguration(requestContext, - serviceException); - - try { - // Retrieve renderer according to publisher type and channel type - RenderIFace renderer = RenderManager.getInstance().getRenderer(publisherConfig); - - // Store in session last used publisher name - Publisher.setLastPublisherName(publisherConfig.getName()); - - // Setup phase - renderer.prepareRender(requestContext, publisherConfig, getServletContext()); - - // Render phase - renderer.render(requestContext, publisherConfig, getServletContext()); - } finally { - // Allow better garbage collection - publisherConfig.release(); - } - - } // if ((isHttpResponseFreezed == null) || - // (!isHttpResponseFreezed.getBoolean())) - else - TracerSingleton.log(Constants.NOME_MODULO, TracerSingleton.DEBUG, - "AdapterHTTP::service: http response congelata"); - } - - private void setHttpRequestData(HttpServletRequest request, RequestContainer requestContainer) { - requestContainer.setAttribute(HTTP_REQUEST_AUTH_TYPE, request.getAuthType()); - requestContainer.setAttribute(HTTP_REQUEST_CHARACTER_ENCODING, request.getCharacterEncoding()); - requestContainer.setAttribute(HTTP_REQUEST_CONTENT_LENGTH, String.valueOf(request - .getContentLength())); - requestContainer.setAttribute(HTTP_REQUEST_CONTENT_TYPE, request.getContentType()); - requestContainer.setAttribute(HTTP_REQUEST_CONTEXT_PATH, request.getContextPath()); - requestContainer.setAttribute(HTTP_REQUEST_METHOD, request.getMethod()); - requestContainer.setAttribute(HTTP_REQUEST_PATH_INFO, request.getPathInfo()); - requestContainer.setAttribute(HTTP_REQUEST_PATH_TRANSLATED, request.getPathTranslated()); - requestContainer.setAttribute(HTTP_REQUEST_PROTOCOL, request.getProtocol()); - requestContainer.setAttribute(HTTP_REQUEST_QUERY_STRING, request.getQueryString()); - requestContainer.setAttribute(HTTP_REQUEST_REMOTE_ADDR, request.getRemoteAddr()); - requestContainer.setAttribute(HTTP_REQUEST_REMOTE_HOST, request.getRemoteHost()); - requestContainer.setAttribute(HTTP_REQUEST_REMOTE_USER, request.getRemoteUser()); - requestContainer.setAttribute(HTTP_REQUEST_REQUESTED_SESSION_ID, request - .getRequestedSessionId()); - requestContainer.setAttribute(HTTP_REQUEST_REQUEST_URI, request.getRequestURI()); - requestContainer.setAttribute(HTTP_REQUEST_SCHEME, request.getScheme()); - requestContainer.setAttribute(HTTP_REQUEST_SERVER_NAME, request.getServerName()); - requestContainer.setAttribute(HTTP_REQUEST_SERVER_PORT, String.valueOf(request - .getServerPort())); - requestContainer.setAttribute(HTTP_REQUEST_SERVLET_PATH, request.getServletPath()); - if (request.getUserPrincipal() != null) - requestContainer.setAttribute(HTTP_REQUEST_USER_PRINCIPAL, request.getUserPrincipal()); - requestContainer.setAttribute(HTTP_REQUEST_REQUESTED_SESSION_ID_FROM_COOKIE, String - .valueOf(request.isRequestedSessionIdFromCookie())); - requestContainer.setAttribute(HTTP_REQUEST_REQUESTED_SESSION_ID_FROM_URL, String - .valueOf(request.isRequestedSessionIdFromURL())); - requestContainer.setAttribute(HTTP_REQUEST_REQUESTED_SESSION_ID_VALID, String - .valueOf(request.isRequestedSessionIdValid())); - requestContainer.setAttribute(HTTP_REQUEST_SECURE, String.valueOf(request.isSecure())); - Enumeration headerNames = request.getHeaderNames(); - while (headerNames.hasMoreElements()) { - String headerName = (String) headerNames.nextElement(); - String headerValue = request.getHeader(headerName); - requestContainer.setAttribute(headerName, headerValue); - } // while (headerNames.hasMoreElements()) - requestContainer.setAttribute(HTTP_SESSION_ID, request.getSession().getId()); - requestContainer.setAttribute(Constants.HTTP_IS_XML_REQUEST, "FALSE"); - } // private void setHttpRequestData(HttpServletRequest request, - - // RequestContainer requestContainer) - - /* - * (non-Javadoc) - * - * @see javax.servlet.GenericServlet#init() - */ - public void init() throws ServletException { - super.init(); - - String serializeSessionStr = (String) ConfigSingleton.getInstance().getAttribute( - SERIALIZE_SESSION_ATTRIBUTE); - if ((serializeSessionStr != null) && (serializeSessionStr.equalsIgnoreCase("TRUE"))) { - serializeSession = true; - } - } + // nel caso in cui sia attiva la persistenza della sessione + // forza la scrittura sul database + synchronized (session) { + session.setAttribute(Constants.REQUEST_CONTAINER, session.getAttribute(Constants.REQUEST_CONTAINER)); + } // synchronized (session) + + TracerSingleton.log(Constants.NOME_MODULO, TracerSingleton.DEBUG, "AdapterHTTP::service: responseContainer", responseContainer); + TracerSingleton.log(Constants.NOME_MODULO, TracerSingleton.DEBUG, "AdapterHTTP::service: sessionContainer", requestContainer.getSessionContainer()); + + if (serializeSession) { + TracerSingleton.log(Constants.NOME_MODULO, TracerSingleton.DEBUG, + "AdapterHTTP::service: sessionContainer size [" + Serializer.serialize(requestContainer.getSessionContainer()).length + "]"); + } + + render(requestContext, serviceException); + } // try + catch (Exception ex) { + TracerSingleton.log(Constants.NOME_MODULO, TracerSingleton.CRITICAL, "AdapterHTTP::service: ", ex); + } // catch (Excpetion ex) try + finally { + RequestContainer.delRequestContainer(); + ResponseContainer.delResponseContainer(); + if (monitor != null) { + monitor.stop(); + } + + if (eventNotifier != null) { + eventNotifier.notifyEvent(new ServiceEndEvent(null), requestContext); + } + + } // finally + } // public void service(HttpServletRequest request, HttpServletResponse + // response) throws IOException, ServletException + + private void processFileField(final FileItem item, RequestContextIFace requestContext) throws Exception { + String uploadManagerName = (String) ConfigSingleton.getInstance().getAttribute("UPLOAD.UPLOAD-MANAGER.NAME"); + if (uploadManagerName == null) { + TracerSingleton.log(Constants.NOME_MODULO, TracerSingleton.CRITICAL, "AdapterHTTP::processFileField: metodo di upload non selezionato"); + } + + IUploadHandler uploadHandler = UploadFactory.getHandler(uploadManagerName); + if (uploadHandler instanceof RequestContextIFace) { + ((RequestContextIFace) uploadHandler).setRequestContext(requestContext); + } + uploadHandler.upload(item); + } + + private void checkSession(HttpSession session, RequestContextIFace requestContext) throws SessionExpiredException { + + // start modifications by Zerbetto on 25-02-2008: NEW_SESSION parameter can force a new session + boolean isRequestedSessionIdValid = true; + boolean isRequiredNewSession = false; // Zerbetto on 25-02-2008 + RequestContainer requestContainer = requestContext.getRequestContainer(); + + if (session.isNew()) { + isRequestedSessionIdValid = (requestContainer.getAttribute(HTTP_REQUEST_REQUESTED_SESSION_ID) == null); + String newSessionRequestAttr = (String) requestContainer.getServiceRequest().getAttribute(NEW_SESSION); // Zerbetto on 25-02-2008 + isRequiredNewSession = newSessionRequestAttr != null && newSessionRequestAttr.equalsIgnoreCase("TRUE"); // Zerbetto on 25-02-2008 + } // if (session.isNew()) + synchronized (session) { + RequestContainer parentRequestContainer = (RequestContainer) session.getAttribute(Constants.REQUEST_CONTAINER); + if (!Navigator.isNavigatorEnabled()) { + if (parentRequestContainer == null) + requestContainer.setSessionContainer(new SessionContainer(true)); + else + requestContainer.setSessionContainer(parentRequestContainer.getSessionContainer()); + } else { + if (parentRequestContainer == null) + requestContainer.setSessionContainer(new SessionContainer(true)); + else { + requestContainer.setSessionContainer(new SessionContainer(false)); + requestContainer.setParent(parentRequestContainer); + } // if (parentRequestContainer == null) else + } // if (!Navigator.isNavigatorEnabled()) + session.setAttribute(Constants.REQUEST_CONTAINER, requestContainer); + } // synchronized (session) + if (!isRequestedSessionIdValid) { + if (!isRequiredNewSession) { // Zerbetto on 25-02-2008 + TracerSingleton.log(Constants.NOME_MODULO, TracerSingleton.WARNING, "AdapterHTTP::service: sessione scaduta !"); + throw new SessionExpiredException(EMFErrorSeverity.ERROR, "Expired Session"); + } // Zerbetto on 25-02-2008 + } // if (!isRequestedSessionIdValid) + // end modifications by Zerbetto on 25-02-2008: NEW_SESSION parameter can force a new session + } + + private void render(RequestContextIFace requestContext, Exception serviceException) throws Exception { + ResponseContainer responseContainer = requestContext.getResponseContainer(); + + Boolean isHttpResponseFreezed = (Boolean) responseContainer.getAttribute(Constants.HTTP_RESPONSE_FREEZED); + if ((isHttpResponseFreezed == null) || (!isHttpResponseFreezed.booleanValue())) { + + // Retrieve publisher configuration for current service + PublisherConfiguration publisherConfig = Publisher.getPublisherConfiguration(requestContext, serviceException); + + try { + // Retrieve renderer according to publisher type and channel type + RenderIFace renderer = RenderManager.getInstance().getRenderer(publisherConfig); + + // Store in session last used publisher name + Publisher.setLastPublisherName(publisherConfig.getName()); + + // Setup phase + renderer.prepareRender(requestContext, publisherConfig, getServletContext()); + + // Render phase + renderer.render(requestContext, publisherConfig, getServletContext()); + } finally { + // Allow better garbage collection + publisherConfig.release(); + } + + } // if ((isHttpResponseFreezed == null) || + // (!isHttpResponseFreezed.getBoolean())) + else + TracerSingleton.log(Constants.NOME_MODULO, TracerSingleton.DEBUG, "AdapterHTTP::service: http response congelata"); + } + + private void setHttpRequestData(HttpServletRequest request, RequestContainer requestContainer) { + requestContainer.setAttribute(HTTP_REQUEST_AUTH_TYPE, request.getAuthType()); + requestContainer.setAttribute(HTTP_REQUEST_CHARACTER_ENCODING, request.getCharacterEncoding()); + requestContainer.setAttribute(HTTP_REQUEST_CONTENT_LENGTH, String.valueOf(request.getContentLength())); + requestContainer.setAttribute(HTTP_REQUEST_CONTENT_TYPE, request.getContentType()); + requestContainer.setAttribute(HTTP_REQUEST_CONTEXT_PATH, request.getContextPath()); + requestContainer.setAttribute(HTTP_REQUEST_METHOD, request.getMethod()); + requestContainer.setAttribute(HTTP_REQUEST_PATH_INFO, request.getPathInfo()); + requestContainer.setAttribute(HTTP_REQUEST_PATH_TRANSLATED, request.getPathTranslated()); + requestContainer.setAttribute(HTTP_REQUEST_PROTOCOL, request.getProtocol()); + requestContainer.setAttribute(HTTP_REQUEST_QUERY_STRING, request.getQueryString()); + requestContainer.setAttribute(HTTP_REQUEST_REMOTE_ADDR, request.getRemoteAddr()); + requestContainer.setAttribute(HTTP_REQUEST_REMOTE_HOST, request.getRemoteHost()); + requestContainer.setAttribute(HTTP_REQUEST_REMOTE_USER, request.getRemoteUser()); + requestContainer.setAttribute(HTTP_REQUEST_REQUESTED_SESSION_ID, request.getRequestedSessionId()); + requestContainer.setAttribute(HTTP_REQUEST_REQUEST_URI, request.getRequestURI()); + requestContainer.setAttribute(HTTP_REQUEST_SCHEME, request.getScheme()); + requestContainer.setAttribute(HTTP_REQUEST_SERVER_NAME, request.getServerName()); + requestContainer.setAttribute(HTTP_REQUEST_SERVER_PORT, String.valueOf(request.getServerPort())); + requestContainer.setAttribute(HTTP_REQUEST_SERVLET_PATH, request.getServletPath()); + if (request.getUserPrincipal() != null) + requestContainer.setAttribute(HTTP_REQUEST_USER_PRINCIPAL, request.getUserPrincipal()); + requestContainer.setAttribute(HTTP_REQUEST_REQUESTED_SESSION_ID_FROM_COOKIE, String.valueOf(request.isRequestedSessionIdFromCookie())); + requestContainer.setAttribute(HTTP_REQUEST_REQUESTED_SESSION_ID_FROM_URL, String.valueOf(request.isRequestedSessionIdFromURL())); + requestContainer.setAttribute(HTTP_REQUEST_REQUESTED_SESSION_ID_VALID, String.valueOf(request.isRequestedSessionIdValid())); + requestContainer.setAttribute(HTTP_REQUEST_SECURE, String.valueOf(request.isSecure())); + Enumeration headerNames = request.getHeaderNames(); + while (headerNames.hasMoreElements()) { + String headerName = (String) headerNames.nextElement(); + String headerValue = request.getHeader(headerName); + requestContainer.setAttribute(headerName, headerValue); + } // while (headerNames.hasMoreElements()) + requestContainer.setAttribute(HTTP_SESSION_ID, request.getSession().getId()); + requestContainer.setAttribute(Constants.HTTP_IS_XML_REQUEST, "FALSE"); + } // private void setHttpRequestData(HttpServletRequest request, + + // RequestContainer requestContainer) + + private boolean getSerializedSession() { + String serializeSessionStr = (String) ConfigSingleton.getInstance().getAttribute(SERIALIZE_SESSION_ATTRIBUTE); + if ((serializeSessionStr != null) && (serializeSessionStr.equalsIgnoreCase("TRUE"))) { + return true; + } + return false; + } } // public class ActionServlet extends HttpServlet diff --git a/knowageqbeengine/src/main/java/it/eng/spago/dispatching/httpchannel/AdapterHTTP.java b/knowageqbeengine/src/main/java/it/eng/spago/dispatching/httpchannel/AdapterHTTP.java index 5f9aa69963e..6818bb27ee0 100644 --- a/knowageqbeengine/src/main/java/it/eng/spago/dispatching/httpchannel/AdapterHTTP.java +++ b/knowageqbeengine/src/main/java/it/eng/spago/dispatching/httpchannel/AdapterHTTP.java @@ -182,18 +182,13 @@ public class AdapterHTTP extends HttpServlet { /** The Constant SERIALIZE_SESSION_ATTRIBUTE. */ private static final String SERIALIZE_SESSION_ATTRIBUTE = "COMMON.SERIALIZE_SESSION"; - // Atributo della configurazione che indica se serializzare il contenuto - // della sessione - /** The serialize session. */ - private boolean serializeSession = false; - /** * Handle query string field. - * + * * @param request the request * @param serviceReq the service req * @param queryStringFieldName the query string field name - * + * * @throws SourceBeanException the source bean exception */ private void handleQueryStringField(HttpServletRequest request, SourceBean serviceReq, String queryStringFieldName) throws SourceBeanException { @@ -220,7 +215,7 @@ private void handleQueryStringField(HttpServletRequest request, SourceBean servi /** * Make the service name available in request also if the service was invoked with the .action or .page URL - * + * * @param requestContainer Current RequestContainer * @param serviceRequest Current request */ @@ -239,10 +234,10 @@ private void handleServiceName(SourceBean serviceRequest, final RequestContainer /** * Handle suspend resume. - * + * * @param serviceRequest the service request * @param requestContainer the request container - * + * * @throws SourceBeanException the source bean exception */ private void handleSuspendResume(SourceBean serviceRequest, RequestContainer requestContainer) throws SourceBeanException { @@ -288,10 +283,10 @@ private void handleSuspendResume(SourceBean serviceRequest, RequestContainer req /** * Handle multipart form. - * + * * @param request the request * @param requestContext the request context - * + * * @throws Exception the exception */ private void handleMultipartForm(HttpServletRequest request, RequestContextIFace requestContext) throws Exception { @@ -321,10 +316,10 @@ private void handleMultipartForm(HttpServletRequest request, RequestContextIFace /** * Handle simple form. - * + * * @param request the request * @param requestContext the request context - * + * * @throws SourceBeanException the source bean exception */ private void handleSimpleForm(HttpServletRequest request, RequestContextIFace requestContext) throws SourceBeanException { @@ -346,11 +341,13 @@ private void handleSimpleForm(HttpServletRequest request, RequestContextIFace re /* * (non-Javadoc) - * + * * @see javax.servlet.http.HttpServlet#service(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) */ @Override public void service(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { + boolean serializeSession = this.getSerializedSession(); + Monitor monitor = null; IEventNotifier eventNotifier = null; RequestContextIFace requestContext = null; @@ -522,10 +519,10 @@ public void service(HttpServletRequest request, HttpServletResponse response) th /** * Process file field. - * + * * @param item the item * @param requestContext the request context - * + * * @throws Exception the exception */ private void processFileField(final FileItem item, RequestContextIFace requestContext) throws Exception { @@ -543,10 +540,10 @@ private void processFileField(final FileItem item, RequestContextIFace requestCo /** * Check session. - * + * * @param session the session * @param requestContext the request context - * + * * @throws SessionExpiredException the session expired exception */ private void checkSession(HttpSession session, RequestContextIFace requestContext) throws SessionExpiredException { @@ -589,10 +586,10 @@ private void checkSession(HttpSession session, RequestContextIFace requestContex /** * Render. - * + * * @param requestContext the request context * @param serviceException the service exception - * + * * @throws Exception the exception */ private void render(RequestContextIFace requestContext, Exception serviceException) throws Exception { @@ -629,7 +626,7 @@ private void render(RequestContextIFace requestContext, Exception serviceExcepti /** * Sets the http request data. - * + * * @param request the request * @param requestContainer the request container */ @@ -671,19 +668,12 @@ private void setHttpRequestData(HttpServletRequest request, RequestContainer req // RequestContainer requestContainer) - /* - * (non-Javadoc) - * - * @see javax.servlet.GenericServlet#init() - */ - @Override - public void init() throws ServletException { - super.init(); - + private boolean getSerializedSession() { String serializeSessionStr = (String) ConfigSingleton.getInstance().getAttribute(SERIALIZE_SESSION_ATTRIBUTE); if ((serializeSessionStr != null) && (serializeSessionStr.equalsIgnoreCase("TRUE"))) { - serializeSession = true; + return true; } + return false; } } // public class ActionServlet extends HttpServlet