From f3d82c1d51ce3812bdc528384c42837ceab9dede Mon Sep 17 00:00:00 2001 From: iroqueta Date: Thu, 25 May 2023 09:29:01 -0300 Subject: [PATCH] WebWrapper was not working after gxweb refactor Issue:102964 --- .../com/genexus/internet/HttpAjaxContext.java | 4 +++ .../com/genexus/webpanels/WebWrapper.java | 28 +++++++++++++------ .../com/genexus/webpanels/HttpContextWeb.java | 15 ++++++++++ 3 files changed, 38 insertions(+), 9 deletions(-) diff --git a/gxweb/src/main/java/com/genexus/internet/HttpAjaxContext.java b/gxweb/src/main/java/com/genexus/internet/HttpAjaxContext.java index fd55ddc2b..1fc06ddc0 100644 --- a/gxweb/src/main/java/com/genexus/internet/HttpAjaxContext.java +++ b/gxweb/src/main/java/com/genexus/internet/HttpAjaxContext.java @@ -85,6 +85,10 @@ public DynAjaxEventContext getDynAjaxEventContext() { private boolean isJsOutputEnabled = true; + public HttpAjaxContext(IHttpServletRequest req) throws IOException{ + this("GET", req, null, null); + } + public HttpAjaxContext(String requestMethod, IHttpServletRequest req, IHttpServletResponse res, IServletContext servletContext) throws IOException { super(requestMethod, req, res, servletContext); diff --git a/gxweb/src/main/java/com/genexus/webpanels/WebWrapper.java b/gxweb/src/main/java/com/genexus/webpanels/WebWrapper.java index fc01a20c3..076387460 100644 --- a/gxweb/src/main/java/com/genexus/webpanels/WebWrapper.java +++ b/gxweb/src/main/java/com/genexus/webpanels/WebWrapper.java @@ -1,13 +1,18 @@ package com.genexus.webpanels; import java.io.ByteArrayOutputStream; + +import com.genexus.internet.HttpAjaxContext; import com.genexus.servlet.http.IHttpServletRequest; import com.genexus.ModelContext; import com.genexus.internet.HttpContext; import com.genexus.internet.HttpContextNull; import com.genexus.internet.HttpRequest; +import org.apache.logging.log4j.Logger; public class WebWrapper { + private static Logger log = org.apache.logging.log4j.LogManager.getLogger(WebWrapper.class); + private String baseURL = ""; private GXWebPanel panel; private ByteArrayOutputStream out; @@ -28,15 +33,20 @@ public void setSource(GXWebPanel panel) ModelContext context = panel.getModelContext(); HttpRequest httpReq = ((HttpContext) context.getHttpContext()).getHttpRequest(); IHttpServletRequest httpSerReq = ((HttpContext) context.getHttpContext()).getRequest(); - context.setHttpContext(new HttpContextNull()); - ((HttpContext) context.getHttpContext()).setHttpRequest(httpReq); - ((HttpContext) context.getHttpContext()).setRequest(httpSerReq); - ((HttpContext) context.getHttpContext()).setContext(context); - panel.setHttpContext(((HttpContext) context.getHttpContext())); - panel.getHttpContext().setCompression(false); - panel.getHttpContext().setBuffered(false); - panel.getHttpContext().useUtf8 = true; - panel.getHttpContext().setOutputStream(new java.io.ByteArrayOutputStream()); + try { + context.setHttpContext(new HttpAjaxContext(httpSerReq)); + ((HttpContext) context.getHttpContext()).setHttpRequest(httpReq); + ((HttpContext) context.getHttpContext()).setRequest(httpSerReq); + ((HttpContext) context.getHttpContext()).setContext(context); + panel.httpContext = (HttpAjaxContext)context.getHttpContext(); + panel.httpContext.setCompression(false); + panel.httpContext.setBuffered(false); + panel.httpContext.useUtf8 = true; + panel.httpContext.setOutputStream(new java.io.ByteArrayOutputStream()); + } + catch (Exception e) { + log.error("Failed to create WebWrapper", e); + } } public GXWebPanel getSource() diff --git a/java/src/main/java/com/genexus/webpanels/HttpContextWeb.java b/java/src/main/java/com/genexus/webpanels/HttpContextWeb.java index 7a6c6e38d..08b4b1a2f 100644 --- a/java/src/main/java/com/genexus/webpanels/HttpContextWeb.java +++ b/java/src/main/java/com/genexus/webpanels/HttpContextWeb.java @@ -451,6 +451,9 @@ public String GetNextPar() { } public byte setHeader(String header, String value) { + if (getResponse() == null) + return 0; + response.setHeader(header, value.replace("\n", "%0a").replace("\r", "%0d")); return 0; } @@ -485,6 +488,9 @@ public boolean forwardAsWebCallMethod() { private String contextPath; public String getContextPath() { + if (getResponse() == null) + return ""; + if (contextPath == null) { if (servletContext.getServerInfo().startsWith("ApacheJServ")) { contextPath = ""; @@ -1011,6 +1017,9 @@ public int getHttpSecure() { } public byte setContentType(String type) { + if (getResponse() == null) + return 1; + contentType = type; if (type.equalsIgnoreCase("text/html") && useUtf8) { type += "; charset=utf-8"; @@ -1246,6 +1255,9 @@ private boolean useCustomRedirect() { } public String getDefaultPath() { + if (servletContext == null) + return ""; + String path = servletContext.getRealPath("/"); if (path == null && servletContext.getAttribute(servletContext.getTEMPDIR()) != null) { @@ -1350,6 +1362,9 @@ protected void pushUrlSessionStorage() { } public void setStream() { + if (getResponse() == null) + return; + try { if (streamSet) { return;