diff --git a/common/src/main/java/com/genexus/db/DynamicExecute.java b/common/src/main/java/com/genexus/db/DynamicExecute.java index ed72237c7..3e09e97ad 100644 --- a/common/src/main/java/com/genexus/db/DynamicExecute.java +++ b/common/src/main/java/com/genexus/db/DynamicExecute.java @@ -189,7 +189,8 @@ private static boolean dynamicExecute2(ModelContext context, int handle, Class c return true; } - private final static String METHOD_EXECUTE = "execute"; // El m�todo a ejecutar en la clase + public final static String METHOD_EXECUTE = "execute"; // Method to Execute for entry points in GXWebProcedure. + public static boolean dynamicExecute(ModelContext context, int handle, Class caller, String sPackage, String sPgmName, Object[] params) { String pgmName = getDynamicPgmName(caller, sPackage, sPgmName); @@ -198,7 +199,7 @@ public static boolean dynamicExecute(ModelContext context, int handle, Class cal public static boolean dynamicExecute(ModelContext context, int handle, Class caller, String className, Object[] params) { - Object [] callingParams = new Object[params.length]; // Contiene el verdadero array a pasarle a la clase + Object [] callingParams = new Object[params.length]; boolean [] needToUpdateParams = new boolean[params.length]; // Indica si hay que actualizar el array de parametros(params) al terminar la invocaci�n del m�todo. Solo se deben actualizar los parametros que en destino son 'arrays', que son los que pueden sufrir modificaci�n // Primero obtengo la clase a ejecutar diff --git a/gxawsserverless/pom.xml b/gxawsserverless/pom.xml index ec180cc8d..ad8de1377 100644 --- a/gxawsserverless/pom.xml +++ b/gxawsserverless/pom.xml @@ -55,6 +55,13 @@ 1.2.1 + + com.amazonaws + aws-lambda-java-events + 3.11.0 + + + org.glassfish.jersey.media jersey-media-json-jackson diff --git a/gxawsserverless/src/main/java/com/genexus/cloud/serverless/GXProcedureExecutor.java b/gxawsserverless/src/main/java/com/genexus/cloud/serverless/GXProcedureExecutor.java new file mode 100644 index 000000000..3809181b1 --- /dev/null +++ b/gxawsserverless/src/main/java/com/genexus/cloud/serverless/GXProcedureExecutor.java @@ -0,0 +1,112 @@ +package com.genexus.cloud.serverless; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.genexus.GXProcedure; +import com.genexus.GxUserType; +import com.genexus.ModelContext; +import com.genexus.cloud.serverless.model.EventMessageResponse; +import com.genexus.cloud.serverless.model.EventMessages; +import com.genexus.db.DynamicExecute; +import org.apache.commons.lang.NotImplementedException; + +import java.lang.reflect.Array; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.Optional; + +public class GXProcedureExecutor { + protected Class entryPointClass; + + private Class[][] supportedMethodSignatures = new Class[5][]; + private int methodSignatureIdx = -1; + + protected static final String MESSAGE_COLLECTION_INPUT_CLASS_NAME = "com.genexus.genexusserverlessapi.SdtEventMessages"; + protected static final String MESSAGE_OUTPUT_COLLECTION_CLASS_NAME = "com.genexus.genexusserverlessapi.SdtEventMessageResponse"; + + public GXProcedureExecutor(Class entryPointClassParms) throws ClassNotFoundException, NotImplementedException { + entryPointClass = entryPointClassParms; + supportedMethodSignatures[0] = new Class[]{Class.forName(MESSAGE_COLLECTION_INPUT_CLASS_NAME), Class.forName(MESSAGE_OUTPUT_COLLECTION_CLASS_NAME)}; + supportedMethodSignatures[1] = new Class[]{String.class, Class.forName(MESSAGE_OUTPUT_COLLECTION_CLASS_NAME)}; + supportedMethodSignatures[2] = new Class[]{String.class}; + supportedMethodSignatures[3] = new Class[]{Class.forName(MESSAGE_OUTPUT_COLLECTION_CLASS_NAME)}; + supportedMethodSignatures[4] = new Class[]{}; //No inputs, no outputs + + Optional executeMethodOpt = Arrays.stream(this.entryPointClass.getDeclaredMethods()).filter(m -> m.getName() == DynamicExecute.METHOD_EXECUTE).findFirst(); + + if (!executeMethodOpt.isPresent()) { + throw new NotImplementedException(String.format("EXECUTE Method not implemented on Class '%s'", entryPointClass.getName())); + } + + Method executeMethod = executeMethodOpt.get(); + Class[] parametersTypes = executeMethod.getParameterTypes(); + + for (int i = 0; i < supportedMethodSignatures.length && methodSignatureIdx < 0; i++) { + if (supportedMethodSignatures[i].length != parametersTypes.length) { + continue; + } + Class[] listParameters = (Class[]) supportedMethodSignatures[i]; + boolean isMatch = true; + for (int j = 0; j < listParameters.length && isMatch; j++) { + isMatch = listParameters[j] == parametersTypes[j] || listParameters[j] == parametersTypes[j].getComponentType(); + } + if (isMatch) { + methodSignatureIdx = i; + } + } + if (methodSignatureIdx < 0) { + throw new NotImplementedException("Expected signature method did not match"); + } + + } + + public EventMessageResponse execute(ModelContext modelContext, EventMessages msgs, String rawJsonEvent) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException, JsonProcessingException { + EventMessageResponse response = new EventMessageResponse(); + + Object[] parameters; + boolean returnsValue = true; + switch (methodSignatureIdx) { + case 0: + Class inputClass = Class.forName(MESSAGE_COLLECTION_INPUT_CLASS_NAME); + Object msgsInput = inputClass.getConstructor().newInstance(); + if (GxUserType.class.isAssignableFrom(inputClass)) { + ((GxUserType) msgsInput).fromJSonString(Helper.toJSONString(msgs)); + } + parameters = new Object[]{msgsInput, new Object[]{}}; + break; + case 1: + parameters = new Object[]{rawJsonEvent, new Object[]{}}; + break; + case 2: + parameters = new Object[]{rawJsonEvent}; + response.setHandled(true); + returnsValue = false; + break; + case 3: + parameters = new Object[]{new Object[]{}}; + break; + default: + parameters = new Object[]{}; + returnsValue = false; + response.setHandled(true); + break; + } + + Object[] paramOutArray = null; + if (returnsValue) { + parameters[parameters.length - 1] = (Object[]) Array.newInstance(Class.forName(MESSAGE_OUTPUT_COLLECTION_CLASS_NAME), 1); + paramOutArray = (Object[]) parameters[parameters.length - 1]; + paramOutArray[0] = Class.forName(MESSAGE_OUTPUT_COLLECTION_CLASS_NAME).getConstructor(int.class, ModelContext.class).newInstance(-1, modelContext); + } + + com.genexus.db.DynamicExecute.dynamicExecute(modelContext, -1, entryPointClass, "", entryPointClass.getName(), parameters); + + if (paramOutArray != null) { + GxUserType handlerOutput = (GxUserType) paramOutArray[0]; + String jsonResponse = handlerOutput.toJSonString(false); + response = new ObjectMapper().readValue(jsonResponse, EventMessageResponse.class); + } + return response; + } +} diff --git a/gxawsserverless/src/main/java/com/genexus/cloud/serverless/Helper.java b/gxawsserverless/src/main/java/com/genexus/cloud/serverless/Helper.java new file mode 100644 index 000000000..1f86e4c0b --- /dev/null +++ b/gxawsserverless/src/main/java/com/genexus/cloud/serverless/Helper.java @@ -0,0 +1,27 @@ +package com.genexus.cloud.serverless; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.genexus.cloud.serverless.model.EventMessage; +import com.genexus.cloud.serverless.model.EventMessageProperty; +import com.genexus.diagnostics.core.ILogger; +import com.genexus.diagnostics.core.LogManager; + +public class Helper { + + private static final ILogger logger = LogManager.getLogger(Helper.class); + + public static String toJSONString(Object dtoObject) { + try { + ObjectMapper mapper = new ObjectMapper(); + return mapper.writeValueAsString(dtoObject); + } + catch (Exception e) { + logger.error("Failed to serialize object to jsonString", e); + } + return ""; + } + + public static void addEventMessageProperty(EventMessage msg, String key, String value) { + msg.getMessageProperties().add(new EventMessageProperty(key, value)); + } +} diff --git a/gxawsserverless/src/main/java/com/genexus/cloud/serverless/aws/LambdaHandler.java b/gxawsserverless/src/main/java/com/genexus/cloud/serverless/aws/LambdaHandler.java index c782c76d4..16a53717f 100644 --- a/gxawsserverless/src/main/java/com/genexus/cloud/serverless/aws/LambdaHandler.java +++ b/gxawsserverless/src/main/java/com/genexus/cloud/serverless/aws/LambdaHandler.java @@ -9,6 +9,7 @@ import com.amazonaws.serverless.proxy.internal.servlet.AwsProxyHttpServletRequest; import com.amazonaws.serverless.proxy.internal.servlet.AwsServletContext; import com.amazonaws.serverless.proxy.model.MultiValuedTreeMap; +import com.genexus.cloud.serverless.aws.handler.AwsGxServletResponse; import com.genexus.specific.java.Connect; import com.genexus.specific.java.LogManager; import com.genexus.webpanels.GXWebObjectStub; @@ -35,7 +36,7 @@ public class LambdaHandler implements RequestHandler handler = null; private static ResourceConfig jerseyApplication = null; private static final String BASE_REST_PATH = "/rest/"; - private static final String GX_APPLICATION_CLASS = "GXApplication"; + private static final String GX_APPLICATION_CLASS = "GXApplication"; public LambdaHandler() throws Exception { if (LambdaHandler.jerseyApplication == null) { diff --git a/gxawsserverless/src/main/java/com/genexus/cloud/serverless/aws/AwsGxServletResponse.java b/gxawsserverless/src/main/java/com/genexus/cloud/serverless/aws/handler/AwsGxServletResponse.java similarity index 88% rename from gxawsserverless/src/main/java/com/genexus/cloud/serverless/aws/AwsGxServletResponse.java rename to gxawsserverless/src/main/java/com/genexus/cloud/serverless/aws/handler/AwsGxServletResponse.java index 1a043d986..ed1f17691 100644 --- a/gxawsserverless/src/main/java/com/genexus/cloud/serverless/aws/AwsGxServletResponse.java +++ b/gxawsserverless/src/main/java/com/genexus/cloud/serverless/aws/handler/AwsGxServletResponse.java @@ -1,4 +1,4 @@ -package com.genexus.cloud.serverless.aws; +package com.genexus.cloud.serverless.aws.handler; import com.amazonaws.serverless.proxy.model.AwsProxyResponse; diff --git a/gxawsserverless/src/main/java/com/genexus/cloud/serverless/aws/handler/LambdaBaseEventHandler.java b/gxawsserverless/src/main/java/com/genexus/cloud/serverless/aws/handler/LambdaBaseEventHandler.java new file mode 100644 index 000000000..02ec3b03f --- /dev/null +++ b/gxawsserverless/src/main/java/com/genexus/cloud/serverless/aws/handler/LambdaBaseEventHandler.java @@ -0,0 +1,90 @@ +package com.genexus.cloud.serverless.aws.handler; + +import com.genexus.ModelContext; +import com.genexus.cloud.serverless.*; +import com.genexus.cloud.serverless.model.EventMessageResponse; +import com.genexus.cloud.serverless.model.EventMessages; +import com.genexus.diagnostics.core.ILogger; +import com.genexus.specific.java.Connect; +import com.genexus.specific.java.LogManager; +import com.genexus.util.IniFile; + + +public class LambdaBaseEventHandler { + protected static ILogger logger = null; + protected static Class entryPointClass = null; + private static LambdaFunctionConfiguration functionConfiguration; + private static final String GX_APPLICATION_CLASS = "GXcfg"; + private static String packageName = null; + private static GXProcedureExecutor executor; + + public LambdaBaseEventHandler() throws Exception { + initialize(); + + } + + public LambdaBaseEventHandler(String className) throws Exception { + functionConfiguration = new LambdaFunctionConfiguration(className); + initialize(); + + } + + + private void initialize() throws Exception { + logger = LogManager.initialize(".", LambdaBaseEventHandler.class); + Connect.init(); + + IniFile config = com.genexus.ConfigFileFinder.getConfigFile(null, "client.cfg", null); + packageName = config.getProperty("Client", "PACKAGE", null); + Class cfgClass; + + String cfgClassName = packageName.isEmpty() ? GX_APPLICATION_CLASS : String.format("%s.%s", packageName, GX_APPLICATION_CLASS); + try { + cfgClass = Class.forName(cfgClassName); + com.genexus.Application.init(cfgClass); + } catch (ClassNotFoundException e) { + logger.error(String.format("Failed to initialize GX AppConfig Class: %s", cfgClassName), e); + throw e; + } + + logger.debug("Initializing Function configuration"); + try { + if (functionConfiguration == null) { + functionConfiguration = LambdaFunctionConfigurationHelper.getFunctionConfiguration(); + } + entryPointClass = Class.forName(functionConfiguration.getEntryPointClassName()); + } catch (Exception e) { + logger.error(String.format("Failed to initialize Application for className: %s", functionConfiguration.getEntryPointClassName()), e); + throw e; + } + + executor = new GXProcedureExecutor(entryPointClass); + } + + protected EventMessageResponse dispatchEvent(EventMessages eventMessages, String lambdaRawMessageBody) throws Exception { + String jsonStringMessages = Helper.toJSONString(eventMessages); + + if (logger.isDebugEnabled()) { + logger.debug(String.format("dispatchEventMessages (%s) - serialized messages: %s", functionConfiguration.getEntryPointClassName(), jsonStringMessages)); + } + + ModelContext modelContext = new ModelContext(entryPointClass); + EventMessageResponse response = null; + + try { + response = executor.execute(modelContext, eventMessages, lambdaRawMessageBody); + } catch (Exception e) { + logger.error(String.format("dispatchEventmessages - program '%s' execution error", entryPointClass.getName()), e); + throw e; + } + + if (!response.isHandled()) { + logger.info("dispatchEventmessages - messages not handled with success: " + response.getErrorMessage()); + } else { + logger.debug("dispatchEventmessages - message handled with success"); + } + return response; + + } +} + diff --git a/gxawsserverless/src/main/java/com/genexus/cloud/serverless/aws/handler/LambdaEventBridgeHandler.java b/gxawsserverless/src/main/java/com/genexus/cloud/serverless/aws/handler/LambdaEventBridgeHandler.java new file mode 100644 index 000000000..c3ae7c7bb --- /dev/null +++ b/gxawsserverless/src/main/java/com/genexus/cloud/serverless/aws/handler/LambdaEventBridgeHandler.java @@ -0,0 +1,68 @@ +package com.genexus.cloud.serverless.aws.handler; + +import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.RequestHandler; +import com.genexus.cloud.serverless.Helper; +import com.genexus.cloud.serverless.exception.FunctionRuntimeException; +import com.genexus.cloud.serverless.model.EventMessage; +import com.genexus.cloud.serverless.model.EventMessageResponse; +import com.genexus.cloud.serverless.model.EventMessageSourceType; +import com.genexus.cloud.serverless.model.EventMessages; +import json.org.json.JSONObject; +import org.apache.http.client.utils.DateUtils; + +import java.util.Map; + +public class LambdaEventBridgeHandler extends LambdaBaseEventHandler implements RequestHandler, String> { + + public LambdaEventBridgeHandler() throws Exception { + super(); + } + + public LambdaEventBridgeHandler(String entryPointClassName) throws Exception { + super(entryPointClassName); + } + + @Override + public String handleRequest(Map stringObjectMap, Context context) { + String jsonEventRaw = Helper.toJSONString(stringObjectMap); + + logger.debug("handleRequest started with event: " + jsonEventRaw); + + String errorMessage; + EventMessageResponse response; + + try { + EventMessages msgs = new EventMessages(); + EventMessage msgItem = new EventMessage(); + msgItem.setMessageSourceType(EventMessageSourceType.SERVICE_BUS_MESSAGE); + if (stringObjectMap.containsKey("time")) { + msgItem.setMessageDate(DateUtils.parseDate(stringObjectMap.get("time").toString())); + } + msgItem.setMessageId(stringObjectMap.getOrDefault("id", "").toString()); + if (stringObjectMap.containsKey("detail")) { + msgItem.setMessageData(new JSONObject(jsonEventRaw).getString("detail")); + } + for (Map.Entry entry : stringObjectMap.entrySet()) { + Helper.addEventMessageProperty(msgItem, entry.getKey(), entry.getValue().toString()); + } + msgs.add(msgItem); + response = dispatchEvent(msgs, jsonEventRaw); + } catch (Exception e) { + errorMessage = "HandleRequest execution error"; + logger.error(errorMessage, e); + throw new FunctionRuntimeException(errorMessage, e); + } + + if (response == null) { + return ""; + } + + if (!response.isHandled()) { + //Throw exception in order to mark the message as not processed. + logger.error(String.format("Messages were not handled. Error: %s", response.getErrorMessage())); + throw new RuntimeException(response.getErrorMessage()); + } + return Helper.toJSONString(response); + } +} diff --git a/gxawsserverless/src/main/java/com/genexus/cloud/serverless/aws/handler/LambdaFunctionConfiguration.java b/gxawsserverless/src/main/java/com/genexus/cloud/serverless/aws/handler/LambdaFunctionConfiguration.java new file mode 100644 index 000000000..8105a142a --- /dev/null +++ b/gxawsserverless/src/main/java/com/genexus/cloud/serverless/aws/handler/LambdaFunctionConfiguration.java @@ -0,0 +1,28 @@ +package com.genexus.cloud.serverless.aws.handler; + +import com.fasterxml.jackson.annotation.JsonProperty; + +public class LambdaFunctionConfiguration { + + @JsonProperty("entryPointClassName") + private String entryPointClassName = null; + + public LambdaFunctionConfiguration() { + + } + public LambdaFunctionConfiguration(String entryPointClassName) { + this.entryPointClassName = entryPointClassName; + } + + public String getEntryPointClassName() { + return entryPointClassName; + } + + public void setEntryPointClassName(String entryPointClassName) { + this.entryPointClassName = entryPointClassName; + } + + public boolean isValidConfiguration () { + return getEntryPointClassName() != null; + } +} diff --git a/gxawsserverless/src/main/java/com/genexus/cloud/serverless/aws/handler/LambdaFunctionConfigurationHelper.java b/gxawsserverless/src/main/java/com/genexus/cloud/serverless/aws/handler/LambdaFunctionConfigurationHelper.java new file mode 100644 index 000000000..b66e79d3b --- /dev/null +++ b/gxawsserverless/src/main/java/com/genexus/cloud/serverless/aws/handler/LambdaFunctionConfigurationHelper.java @@ -0,0 +1,44 @@ +package com.genexus.cloud.serverless.aws.handler; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.genexus.cloud.serverless.exception.FunctionConfigurationException; +import com.genexus.diagnostics.core.ILogger; +import com.genexus.specific.java.LogManager; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; + +public class LambdaFunctionConfigurationHelper { + private static ILogger logger = LogManager.initialize(".", LambdaFunctionConfiguration.class); + private static String ENTRY_POINT_CLASS_NAME_VAR = "GX_MAIN_CLASS_NAME"; + private static String FUNCTION_CONFIG_PATH = "gx-awslambda-function.json"; + + public static LambdaFunctionConfiguration getFunctionConfiguration() throws FunctionConfigurationException { + File configFile = new File(FUNCTION_CONFIG_PATH); + LambdaFunctionConfiguration config = null; + + if (configFile.exists()) { + try { + String jsonConfig = new String(Files.readAllBytes(Paths.get(FUNCTION_CONFIG_PATH))); + config = new ObjectMapper().readValue(jsonConfig, LambdaFunctionConfiguration.class); + } catch (IOException e) { + logger.error(String.format("Invalid lambda function configuration file: %s. Please check json content.", FUNCTION_CONFIG_PATH), e); + } + } + if (config == null) { + config = new LambdaFunctionConfiguration(); + } + + if (System.getenv(ENTRY_POINT_CLASS_NAME_VAR) != null) { + config.setEntryPointClassName(System.getenv(ENTRY_POINT_CLASS_NAME_VAR)); + } + + if (!config.isValidConfiguration()) { + throw new FunctionConfigurationException(String.format("Please check function configuration. Either file '%s' should be present, or '%s' Environment Variable must be defined", FUNCTION_CONFIG_PATH, ENTRY_POINT_CLASS_NAME_VAR)); + } + return config; + } + +} diff --git a/gxawsserverless/src/main/java/com/genexus/cloud/serverless/aws/handler/LambdaSQSHandler.java b/gxawsserverless/src/main/java/com/genexus/cloud/serverless/aws/handler/LambdaSQSHandler.java new file mode 100644 index 000000000..24034679a --- /dev/null +++ b/gxawsserverless/src/main/java/com/genexus/cloud/serverless/aws/handler/LambdaSQSHandler.java @@ -0,0 +1,90 @@ +package com.genexus.cloud.serverless.aws.handler; + +import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.RequestHandler; +import com.amazonaws.services.lambda.runtime.events.SQSBatchResponse; +import com.amazonaws.services.lambda.runtime.events.SQSEvent; +import com.amazonaws.services.lambda.runtime.events.SQSEvent.SQSMessage; +import com.genexus.cloud.serverless.*; +import com.genexus.cloud.serverless.model.EventMessageProperty; +import com.genexus.cloud.serverless.model.EventMessage; +import com.genexus.cloud.serverless.model.EventMessageResponse; +import com.genexus.cloud.serverless.model.EventMessageSourceType; +import com.genexus.cloud.serverless.model.EventMessages; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; + + +public class LambdaSQSHandler extends LambdaBaseEventHandler implements RequestHandler { + + public LambdaSQSHandler() throws Exception { + super(); + } + + public LambdaSQSHandler(String className) throws Exception { + super(className); + } + + @Override + public SQSBatchResponse handleRequest(SQSEvent sqsEvent, Context context) { + if (logger.isDebugEnabled()) { + logger.debug("handleRequest started with #sqsItems: " + (int) sqsEvent.getRecords().size()); + } + + EventMessages msgs = new EventMessages(); + + for (SQSMessage sqsItem : sqsEvent.getRecords()) { + logger.debug(String.format("Processing sqsEvent Message: %s", sqsItem.getMessageId())); + EventMessage msg = new EventMessage(); + msg.setMessageId(sqsItem.getMessageId()); + msg.setMessageSourceType(EventMessageSourceType.QUEUE_MESSAGE); + msg.setMessageDate(new Date()); + msg.setMessageData(sqsItem.getBody()); + List msgAtts = msg.getMessageProperties(); + + for (Map.Entry entry : sqsItem.getAttributes().entrySet()) { + msgAtts.add(new EventMessageProperty(entry.getKey(), entry.getValue())); + } + for (Map.Entry entry : sqsItem.getMessageAttributes().entrySet()) { + msgAtts.add(new EventMessageProperty(entry.getKey(), entry.getValue().getStringValue())); + } + msgAtts.add(new EventMessageProperty("eventSource", sqsItem.getEventSource())); + msgAtts.add(new EventMessageProperty("eventSourceARN", sqsItem.getEventSourceArn())); + msgAtts.add(new EventMessageProperty("awsRegion", sqsItem.getAwsRegion())); + msgAtts.add(new EventMessageProperty("receiptHandle", sqsItem.getReceiptHandle())); + msgAtts.add(new EventMessageProperty("md5Body", sqsItem.getMd5OfBody())); + + msgs.add(msg); + } + + boolean wasHandled = false; + String errorMessage; + + try { + EventMessageResponse response = dispatchEvent(msgs, Helper.toJSONString(sqsEvent)); + wasHandled = response.isHandled(); + errorMessage = response.getErrorMessage(); + } catch (Exception e) { + errorMessage = "HandleRequest execution error"; + logger.error(errorMessage, e); + } + + if (!wasHandled) { + logger.error(String.format("Messages were not handled. Marking all SQS Events as failed: %s", errorMessage)); + List failures = new ArrayList<>(); + //Assume all batch has failed. + for (SQSMessage sqsItem : sqsEvent.getRecords()) { + failures.add(new SQSBatchResponse.BatchItemFailure(sqsItem.getMessageId())); + } + return new SQSBatchResponse(failures); + } else { + logger.info("Event Message processed successfully"); + } + + return null; + } +} + diff --git a/gxawsserverless/src/main/java/com/genexus/cloud/serverless/exception/FunctionConfigurationException.java b/gxawsserverless/src/main/java/com/genexus/cloud/serverless/exception/FunctionConfigurationException.java new file mode 100644 index 000000000..c4e395ca2 --- /dev/null +++ b/gxawsserverless/src/main/java/com/genexus/cloud/serverless/exception/FunctionConfigurationException.java @@ -0,0 +1,7 @@ +package com.genexus.cloud.serverless.exception; + +public class FunctionConfigurationException extends Exception { + public FunctionConfigurationException(String exceptionMessage) { + super(exceptionMessage); + } +} diff --git a/gxawsserverless/src/main/java/com/genexus/cloud/serverless/exception/FunctionRuntimeException.java b/gxawsserverless/src/main/java/com/genexus/cloud/serverless/exception/FunctionRuntimeException.java new file mode 100644 index 000000000..83849cc79 --- /dev/null +++ b/gxawsserverless/src/main/java/com/genexus/cloud/serverless/exception/FunctionRuntimeException.java @@ -0,0 +1,9 @@ +package com.genexus.cloud.serverless.exception; + +public class FunctionRuntimeException extends RuntimeException { + + public FunctionRuntimeException(String errorMessage, Throwable e) { + super(errorMessage, e); + } + +} diff --git a/gxawsserverless/src/main/java/com/genexus/cloud/serverless/model/EventMessage.java b/gxawsserverless/src/main/java/com/genexus/cloud/serverless/model/EventMessage.java new file mode 100644 index 000000000..bdbdc5b84 --- /dev/null +++ b/gxawsserverless/src/main/java/com/genexus/cloud/serverless/model/EventMessage.java @@ -0,0 +1,71 @@ +package com.genexus.cloud.serverless.model; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import java.util.*; + +public class EventMessage { + @JsonProperty("EventMessageId") + private String messageId; + + @JsonProperty("EventMessageDate") + private Date messageDate; + + @JsonProperty("EventMessageSourceType") + private String messageSourceType; + + @JsonProperty("EventMessageData") + private String messageData; + + @JsonProperty("EventMessageVersion") + private String messageVersion = "1.0"; + + @JsonProperty("EventMessageProperties") + private List messageProperties = new ArrayList<>(); + + public String getMessageId() { + return messageId; + } + + public void setMessageId(String messageId) { + this.messageId = messageId; + } + + public Date getMessageDate() { + return messageDate; + } + + public void setMessageDate(Date messageDate) { + this.messageDate = messageDate; + } + + public String getMessageSourceType() { + return messageSourceType; + } + + public void setMessageSourceType(String messageSourceType) { + this.messageSourceType = messageSourceType; + } + + public String getMessageData() { + return messageData; + } + + public void setMessageData(String messageData) { + this.messageData = messageData; + } + + public String getMessageVersion() { + return messageVersion; + } + + public void setMessageVersion(String messageVersion) { + this.messageVersion = messageVersion; + } + + public List getMessageProperties() { + return messageProperties; + } + +} + diff --git a/gxawsserverless/src/main/java/com/genexus/cloud/serverless/model/EventMessageProperty.java b/gxawsserverless/src/main/java/com/genexus/cloud/serverless/model/EventMessageProperty.java new file mode 100644 index 000000000..a32e16bb9 --- /dev/null +++ b/gxawsserverless/src/main/java/com/genexus/cloud/serverless/model/EventMessageProperty.java @@ -0,0 +1,17 @@ +package com.genexus.cloud.serverless.model; + +import com.fasterxml.jackson.annotation.JsonProperty; + +public class EventMessageProperty { + + public EventMessageProperty(String pId, String pValue) { + propertyId = pId; + propertyValue = pValue; + } + + @JsonProperty("PropertyId") + private String propertyId; + + @JsonProperty("PropertyValue") + private String propertyValue; +} diff --git a/gxawsserverless/src/main/java/com/genexus/cloud/serverless/model/EventMessageResponse.java b/gxawsserverless/src/main/java/com/genexus/cloud/serverless/model/EventMessageResponse.java new file mode 100644 index 000000000..2211b0528 --- /dev/null +++ b/gxawsserverless/src/main/java/com/genexus/cloud/serverless/model/EventMessageResponse.java @@ -0,0 +1,28 @@ +package com.genexus.cloud.serverless.model; + +import com.fasterxml.jackson.annotation.JsonProperty; + +public class EventMessageResponse { + @JsonProperty("Handled") + private boolean handled = false; + + @JsonProperty("ErrorMessage") + private String errorMessage = ""; + + public boolean isHandled() { + return handled; + } + + public void setHandled(boolean handled) { + this.handled = handled; + } + + public String getErrorMessage() { + return errorMessage; + } + + public void setErrorMessage(String errorMessage) { + this.errorMessage = errorMessage; + } + +} diff --git a/gxawsserverless/src/main/java/com/genexus/cloud/serverless/model/EventMessageSourceType.java b/gxawsserverless/src/main/java/com/genexus/cloud/serverless/model/EventMessageSourceType.java new file mode 100644 index 000000000..8421202d2 --- /dev/null +++ b/gxawsserverless/src/main/java/com/genexus/cloud/serverless/model/EventMessageSourceType.java @@ -0,0 +1,8 @@ +package com.genexus.cloud.serverless.model; + +public class EventMessageSourceType { + public static String QUEUE_MESSAGE = "QueueMessage"; + public static String SERVICE_BUS_MESSAGE = "ServiceBusMessage"; + public static String TIMER = "Timer"; + public static String STREAM_MESSAGE = "StreamMessage"; +} diff --git a/gxawsserverless/src/main/java/com/genexus/cloud/serverless/model/EventMessages.java b/gxawsserverless/src/main/java/com/genexus/cloud/serverless/model/EventMessages.java new file mode 100644 index 000000000..c2d31c84e --- /dev/null +++ b/gxawsserverless/src/main/java/com/genexus/cloud/serverless/model/EventMessages.java @@ -0,0 +1,15 @@ +package com.genexus.cloud.serverless.model; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import java.util.ArrayList; +import java.util.List; + +public class EventMessages { + @JsonProperty("EventMessage") + List eventMessages = new ArrayList<>(); + + public void add(EventMessage msg) { + eventMessages.add(msg); + } +} diff --git a/gxawsserverless/src/test/java/com/amazonaws/serverless/proxy/test/jersey/model/MapResponseModel.java b/gxawsserverless/src/test/java/com/amazonaws/serverless/proxy/test/jersey/model/MapResponseModel.java index 48fb23fe5..7a965e076 100644 --- a/gxawsserverless/src/test/java/com/amazonaws/serverless/proxy/test/jersey/model/MapResponseModel.java +++ b/gxawsserverless/src/test/java/com/amazonaws/serverless/proxy/test/jersey/model/MapResponseModel.java @@ -19,21 +19,21 @@ * Request/response model */ public class MapResponseModel { - private Map values; + private Map values; - public MapResponseModel() { - this.values = new HashMap<>(); - } + public MapResponseModel() { + this.values = new HashMap<>(); + } - public void addValue(String key, String value) { - this.values.put(key, value); - } + public void addValue(String key, String value) { + this.values.put(key, value); + } - public Map getValues() { - return values; - } + public Map getValues() { + return values; + } - public void setValues(Map values) { - this.values = values; - } + public void setValues(Map values) { + this.values = values; + } } \ No newline at end of file diff --git a/gxawsserverless/src/test/java/com/genexus/cloud/aws/events/MockContext.java b/gxawsserverless/src/test/java/com/genexus/cloud/aws/events/MockContext.java new file mode 100644 index 000000000..8d642b9f8 --- /dev/null +++ b/gxawsserverless/src/test/java/com/genexus/cloud/aws/events/MockContext.java @@ -0,0 +1,65 @@ +package com.genexus.cloud.aws.events; + +import com.amazonaws.services.lambda.runtime.ClientContext; +import com.amazonaws.services.lambda.runtime.CognitoIdentity; +import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.LambdaLogger; + +public class MockContext implements Context { + @Override + public String getAwsRequestId() { + return "1"; + } + + @Override + public String getLogGroupName() { + return ""; + } + + @Override + public String getLogStreamName() { + return ""; + } + + @Override + public String getFunctionName() { + return ""; + } + + @Override + public String getFunctionVersion() { + return ""; + } + + @Override + public String getInvokedFunctionArn() { + return ""; + } + + @Override + public CognitoIdentity getIdentity() { + return null; + } + + @Override + public ClientContext getClientContext() { + return null; + } + + @Override + public int getRemainingTimeInMillis() { + return 200; + } + + @Override + public int getMemoryLimitInMB() { + return 100; + } + + @Override + public LambdaLogger getLogger() { + return null; + } + +} + diff --git a/gxawsserverless/src/test/java/com/genexus/cloud/aws/events/TestLambdaEventBridgeHandler.java b/gxawsserverless/src/test/java/com/genexus/cloud/aws/events/TestLambdaEventBridgeHandler.java new file mode 100644 index 000000000..0d4d37098 --- /dev/null +++ b/gxawsserverless/src/test/java/com/genexus/cloud/aws/events/TestLambdaEventBridgeHandler.java @@ -0,0 +1,64 @@ +package com.genexus.cloud.aws.events; + +import com.genexus.cloud.serverless.aws.handler.LambdaEventBridgeHandler; +import com.unittest.eventdriven.dummy.handlerruntimeexception; +import com.unittest.eventdriven.dummy.handlesimplenoparmsevent; +import com.unittest.eventdriven.dummy.handlesimplesqsevent; +import com.unittest.eventdriven.dummy.handlesimplesqsevent2; +import org.junit.Assert; +import org.junit.Test; + +import java.util.HashMap; +import java.util.Map; + +public class TestLambdaEventBridgeHandler { + private static String SIMPLE_HANDLER = handlesimplesqsevent2.class.getName(); + private static String SIMPLE_RAW_HANDLER = handlesimplesqsevent.class.getName(); + private static String SIMPLE_NO_OUTPUT_HANDLER_EXCEPTION = handlerruntimeexception.class.getName(); + + private Map createEvent() { + Map evt = new HashMap(); + evt.put("id", "d043a3b9-7e7f-41d3-9656-6fe970b62888"); + evt.put("time", "2022-05-24T00:43:16Z"); + Map detail = new HashMap<>(); + detail.put("name", "test"); + evt.put("detail", detail); + return evt; + } + + @Test + public void simpleEvent() throws Exception { + LambdaEventBridgeHandler handler = new LambdaEventBridgeHandler(SIMPLE_HANDLER); + String result = handler.handleRequest(createEvent(), new MockContext()); + Assert.assertEquals("{\"Handled\":true,\"ErrorMessage\":\"\"}", result); + } + + @Test + public void simpleEventRaw() throws Exception { + LambdaEventBridgeHandler handler = new LambdaEventBridgeHandler(SIMPLE_RAW_HANDLER); + String result = handler.handleRequest(createEvent(), new MockContext()); + Assert.assertEquals("{\"Handled\":true,\"ErrorMessage\":\"\"}", result); + } + + @Test + public void simpleEventNoParms() throws Exception { + LambdaEventBridgeHandler handler = new LambdaEventBridgeHandler(handlesimplenoparmsevent.class.getName()); + String result = handler.handleRequest(createEvent(), new MockContext()); + Assert.assertEquals("{\"Handled\":true,\"ErrorMessage\":\"\"}", result); + } + + + @Test + public void handlerExceptionError() throws Exception { + LambdaEventBridgeHandler handler = new LambdaEventBridgeHandler(SIMPLE_NO_OUTPUT_HANDLER_EXCEPTION); + + Exception thrown = null; + try { + String result = handler.handleRequest(createEvent(), new MockContext()); + } catch (Exception e) { + thrown = e; + } + Assert.assertNotNull(thrown); + } + +} diff --git a/gxawsserverless/src/test/java/com/genexus/cloud/aws/events/TestLambdaSQSHandler.java b/gxawsserverless/src/test/java/com/genexus/cloud/aws/events/TestLambdaSQSHandler.java new file mode 100644 index 000000000..7f7392bb0 --- /dev/null +++ b/gxawsserverless/src/test/java/com/genexus/cloud/aws/events/TestLambdaSQSHandler.java @@ -0,0 +1,89 @@ +package com.genexus.cloud.aws.events; + +import com.amazonaws.services.lambda.runtime.events.SQSBatchResponse; +import com.amazonaws.services.lambda.runtime.events.SQSEvent; +import com.genexus.cloud.serverless.aws.handler.LambdaSQSHandler; +import com.unittest.eventdriven.queue.handlesimplesqsevent; +import com.unittest.eventdriven.queue.handlesimplesqsevent2; +import org.junit.Assert; +import org.junit.Test; + +import java.util.*; + +public class TestLambdaSQSHandler { + private static String SIMPLE_HANDLER = handlesimplesqsevent2.class.getName(); + private static String SIMPLE_RAW_HANDLER = handlesimplesqsevent.class.getName(); + + @Test + public void TestSQSSimpleEvent() throws Exception { + LambdaSQSHandler sqsHandler = new LambdaSQSHandler(SIMPLE_HANDLER); + SQSEvent sqsEvent = new SQSEvent(); + createSqsEvent("1", "{\"UserId\":\"d2376a4c-86c3-461f-93cc-1c2e0174222b\", \"UserName\":\"John\"}", sqsEvent); + SQSBatchResponse response = sqsHandler.handleRequest(sqsEvent, new MockContext()); + Assert.assertNull(response); + } + + @Test + public void TestSQSSimpleMultipleEvent() throws Exception { + LambdaSQSHandler sqsHandler = new LambdaSQSHandler(SIMPLE_HANDLER); + SQSEvent sqsEvent = new SQSEvent(); + createSqsEvent("1", "{\"UserId\":\"d2376a4c-86c3-461f-93cc-1c2e0174222b\", \"UserName\":\"John\"}", sqsEvent); + createSqsEvent("2", "{\"UserId\":\"d2996a4c-86c3-461f-93cc-1c2e0174222b\", \"UserName\":\"John2\"}", sqsEvent); + SQSBatchResponse response = sqsHandler.handleRequest(sqsEvent, new MockContext()); + Assert.assertNull(response); + } + + @Test + public void TestSQSRAWEvent() throws Exception { + LambdaSQSHandler sqsHandler = new LambdaSQSHandler(SIMPLE_RAW_HANDLER); + SQSEvent sqsEvent = new SQSEvent(); + createSqsEvent("1", "{\"UserId\":\"d2376a4c-86c3-461f-93cc-1c2e0174222b\", \"UserName\":\"John\"}", sqsEvent); + SQSBatchResponse response = sqsHandler.handleRequest(sqsEvent, new MockContext()); + Assert.assertNull(response); + } + + @Test + public void TestSQSSimpleEventError() throws Exception { + LambdaSQSHandler sqsHandler = new LambdaSQSHandler(SIMPLE_HANDLER); + String msgId = "1"; + SQSEvent sqsEvent = new SQSEvent(); + createSqsEvent(msgId, "{sadadsa}", sqsEvent); + SQSBatchResponse response = sqsHandler.handleRequest(sqsEvent, new MockContext()); + Assert.assertNotNull(response); + Assert.assertEquals(1, response.getBatchItemFailures().size()); + Assert.assertEquals(msgId, response.getBatchItemFailures().get(0).getItemIdentifier()); + } + + @Test + public void TestSQSSimpleMultipleEventError() throws Exception { + LambdaSQSHandler sqsHandler = new LambdaSQSHandler(SIMPLE_HANDLER); + + SQSEvent sqsEvent = new SQSEvent(); + createSqsEvent("1", "{aa}", sqsEvent); + createSqsEvent("2", "{aaaa}", sqsEvent); + createSqsEvent("3", "{aaaaaaa}", sqsEvent); + SQSBatchResponse response = sqsHandler.handleRequest(sqsEvent, new MockContext()); + Assert.assertNotNull(response); + Assert.assertEquals(3, response.getBatchItemFailures().size()); + Assert.assertEquals("1", response.getBatchItemFailures().get(0).getItemIdentifier()); + Assert.assertEquals("2", response.getBatchItemFailures().get(1).getItemIdentifier()); + Assert.assertEquals("3", response.getBatchItemFailures().get(2).getItemIdentifier()); + } + + private void createSqsEvent(String msgId, String body, SQSEvent sqsEvent) { + if (sqsEvent.getRecords() == null) { + sqsEvent.setRecords(new ArrayList<>()); + } + List sqsMessagesList = sqsEvent.getRecords(); + SQSEvent.SQSMessage sqsMessage = new SQSEvent.SQSMessage(); + sqsMessage.setMessageId(msgId); + sqsMessage.setEventSource("aws:sqs"); + sqsMessage.setAwsRegion("us-east-1"); + sqsMessage.setBody(body); + sqsMessage.setEventSourceArn("arn:test"); + sqsMessage.setReceiptHandle("123123"); + sqsMessage.setAttributes(new HashMap<>()); + sqsMessage.setMessageAttributes(new HashMap()); + sqsMessagesList.add(sqsMessage); + } +} diff --git a/gxawsserverless/src/test/java/com/genexus/genexusserverlessapi/SdtEventCustomPayload_CustomPayloadItem.java b/gxawsserverless/src/test/java/com/genexus/genexusserverlessapi/SdtEventCustomPayload_CustomPayloadItem.java new file mode 100644 index 000000000..7510b3ed8 --- /dev/null +++ b/gxawsserverless/src/test/java/com/genexus/genexusserverlessapi/SdtEventCustomPayload_CustomPayloadItem.java @@ -0,0 +1,98 @@ +package com.genexus.genexusserverlessapi; + +import com.genexus.*; +import com.genexus.*; +import com.genexus.xml.*; +import com.genexus.search.*; +import com.genexus.webpanels.*; + +import java.util.*; + +public final class SdtEventCustomPayload_CustomPayloadItem extends GxUserType { + public SdtEventCustomPayload_CustomPayloadItem() { + this(new ModelContext(SdtEventCustomPayload_CustomPayloadItem.class)); + } + + public SdtEventCustomPayload_CustomPayloadItem(ModelContext context) { + super(context, "SdtEventCustomPayload_CustomPayloadItem"); + } + + public SdtEventCustomPayload_CustomPayloadItem(int remoteHandle, + ModelContext context) { + super(remoteHandle, context, "SdtEventCustomPayload_CustomPayloadItem"); + } + + public SdtEventCustomPayload_CustomPayloadItem(StructSdtEventCustomPayload_CustomPayloadItem struct) { + this(); + setStruct(struct); + } + + private static java.util.HashMap mapper = new java.util.HashMap(); + + static { + } + + public String getJsonMap(String value) { + return (String) mapper.get(value); + } + + public String getgxTv_SdtEventCustomPayload_CustomPayloadItem_Propertyid() { + return gxTv_SdtEventCustomPayload_CustomPayloadItem_Propertyid; + } + + public void setgxTv_SdtEventCustomPayload_CustomPayloadItem_Propertyid(String value) { + gxTv_SdtEventCustomPayload_CustomPayloadItem_N = (byte) (0); + gxTv_SdtEventCustomPayload_CustomPayloadItem_Propertyid = value; + } + + public String getgxTv_SdtEventCustomPayload_CustomPayloadItem_Propertyvalue() { + return gxTv_SdtEventCustomPayload_CustomPayloadItem_Propertyvalue; + } + + public void setgxTv_SdtEventCustomPayload_CustomPayloadItem_Propertyvalue(String value) { + gxTv_SdtEventCustomPayload_CustomPayloadItem_N = (byte) (0); + gxTv_SdtEventCustomPayload_CustomPayloadItem_Propertyvalue = value; + } + + public void initialize(int remoteHandle) { + initialize(); + } + + public void initialize() { + gxTv_SdtEventCustomPayload_CustomPayloadItem_Propertyid = ""; + gxTv_SdtEventCustomPayload_CustomPayloadItem_N = (byte) (1); + gxTv_SdtEventCustomPayload_CustomPayloadItem_Propertyvalue = ""; + sTagName = ""; + } + + public byte isNull() { + return gxTv_SdtEventCustomPayload_CustomPayloadItem_N; + } + + public com.genexus.genexusserverlessapi.SdtEventCustomPayload_CustomPayloadItem Clone() { + return (com.genexus.genexusserverlessapi.SdtEventCustomPayload_CustomPayloadItem) (clone()); + } + + public void setStruct(com.genexus.genexusserverlessapi.StructSdtEventCustomPayload_CustomPayloadItem struct) { + setgxTv_SdtEventCustomPayload_CustomPayloadItem_Propertyid(struct.getPropertyid()); + setgxTv_SdtEventCustomPayload_CustomPayloadItem_Propertyvalue(struct.getPropertyvalue()); + } + + @SuppressWarnings("unchecked") + public com.genexus.genexusserverlessapi.StructSdtEventCustomPayload_CustomPayloadItem getStruct() { + com.genexus.genexusserverlessapi.StructSdtEventCustomPayload_CustomPayloadItem struct = new com.genexus.genexusserverlessapi.StructSdtEventCustomPayload_CustomPayloadItem(); + struct.setPropertyid(getgxTv_SdtEventCustomPayload_CustomPayloadItem_Propertyid()); + struct.setPropertyvalue(getgxTv_SdtEventCustomPayload_CustomPayloadItem_Propertyvalue()); + return struct; + } + + protected byte gxTv_SdtEventCustomPayload_CustomPayloadItem_N; + protected short readOk; + protected short nOutParmCount; + protected String gxTv_SdtEventCustomPayload_CustomPayloadItem_Propertyvalue; + protected String sTagName; + protected boolean readElement; + protected boolean formatError; + protected String gxTv_SdtEventCustomPayload_CustomPayloadItem_Propertyid; +} + diff --git a/gxawsserverless/src/test/java/com/genexus/genexusserverlessapi/SdtEventMessage.java b/gxawsserverless/src/test/java/com/genexus/genexusserverlessapi/SdtEventMessage.java new file mode 100644 index 000000000..d3502078e --- /dev/null +++ b/gxawsserverless/src/test/java/com/genexus/genexusserverlessapi/SdtEventMessage.java @@ -0,0 +1,186 @@ +package com.genexus.genexusserverlessapi; + +import com.genexus.*; +import java.util.*; + +public final class SdtEventMessage extends GxUserType { + public SdtEventMessage() { + this(new ModelContext(SdtEventMessage.class)); + } + + public SdtEventMessage(ModelContext context) { + super(context, "SdtEventMessage"); + } + + public SdtEventMessage(int remoteHandle, + ModelContext context) { + super(remoteHandle, context, "SdtEventMessage"); + } + + public SdtEventMessage(StructSdtEventMessage struct) { + this(); + setStruct(struct); + } + + private static java.util.HashMap mapper = new java.util.HashMap(); + + public String getJsonMap(String value) { + return (String) mapper.get(value); + } + + public String getgxTv_SdtEventMessage_Eventmessageid() { + return gxTv_SdtEventMessage_Eventmessageid; + } + + public void setgxTv_SdtEventMessage_Eventmessageid(String value) { + gxTv_SdtEventMessage_N = (byte) (0); + gxTv_SdtEventMessage_Eventmessageid = value; + } + + public java.util.Date getgxTv_SdtEventMessage_Eventmessagedate() { + return gxTv_SdtEventMessage_Eventmessagedate; + } + + public void setgxTv_SdtEventMessage_Eventmessagedate(java.util.Date value) { + gxTv_SdtEventMessage_Eventmessagedate_N = (byte) (0); + gxTv_SdtEventMessage_N = (byte) (0); + gxTv_SdtEventMessage_Eventmessagedate = value; + } + + public String getgxTv_SdtEventMessage_Eventmessagesourcetype() { + return gxTv_SdtEventMessage_Eventmessagesourcetype; + } + + public void setgxTv_SdtEventMessage_Eventmessagesourcetype(String value) { + gxTv_SdtEventMessage_N = (byte) (0); + gxTv_SdtEventMessage_Eventmessagesourcetype = value; + } + + public String getgxTv_SdtEventMessage_Eventmessagedata() { + return gxTv_SdtEventMessage_Eventmessagedata; + } + + public void setgxTv_SdtEventMessage_Eventmessagedata(String value) { + gxTv_SdtEventMessage_N = (byte) (0); + gxTv_SdtEventMessage_Eventmessagedata = value; + } + + public String getgxTv_SdtEventMessage_Eventmessageversion() { + return gxTv_SdtEventMessage_Eventmessageversion; + } + + public void setgxTv_SdtEventMessage_Eventmessageversion(String value) { + gxTv_SdtEventMessage_N = (byte) (0); + gxTv_SdtEventMessage_Eventmessageversion = value; + } + + public GXBaseCollection getgxTv_SdtEventMessage_Eventmessagecustompayload() { + if (gxTv_SdtEventMessage_Eventmessagecustompayload == null) { + gxTv_SdtEventMessage_Eventmessagecustompayload = new GXBaseCollection(com.genexus.genexusserverlessapi.SdtEventCustomPayload_CustomPayloadItem.class, "CustomPayloadItem", "ServerlessAPI", remoteHandle); + } + gxTv_SdtEventMessage_Eventmessagecustompayload_N = (byte) (0); + gxTv_SdtEventMessage_N = (byte) (0); + return gxTv_SdtEventMessage_Eventmessagecustompayload; + } + + public void setgxTv_SdtEventMessage_Eventmessagecustompayload(GXBaseCollection value) { + gxTv_SdtEventMessage_Eventmessagecustompayload_N = (byte) (0); + gxTv_SdtEventMessage_N = (byte) (0); + gxTv_SdtEventMessage_Eventmessagecustompayload = value; + } + + public void setgxTv_SdtEventMessage_Eventmessagecustompayload_SetNull() { + gxTv_SdtEventMessage_Eventmessagecustompayload_N = (byte) (1); + gxTv_SdtEventMessage_Eventmessagecustompayload = null; + } + + public boolean getgxTv_SdtEventMessage_Eventmessagecustompayload_IsNull() { + if (gxTv_SdtEventMessage_Eventmessagecustompayload == null) { + return true; + } + return false; + } + + public byte getgxTv_SdtEventMessage_Eventmessagecustompayload_N() { + return gxTv_SdtEventMessage_Eventmessagecustompayload_N; + } + + public void initialize(int remoteHandle) { + initialize(); + } + + public void initialize() { + gxTv_SdtEventMessage_Eventmessageid = ""; + gxTv_SdtEventMessage_N = (byte) (1); + gxTv_SdtEventMessage_Eventmessagedate = GXutil.resetTime(GXutil.nullDate()); + gxTv_SdtEventMessage_Eventmessagedate_N = (byte) (1); + gxTv_SdtEventMessage_Eventmessagesourcetype = ""; + gxTv_SdtEventMessage_Eventmessagedata = ""; + gxTv_SdtEventMessage_Eventmessageversion = ""; + gxTv_SdtEventMessage_Eventmessagecustompayload_N = (byte) (1); + sTagName = ""; + sDateCnv = ""; + sNumToPad = ""; + datetime_STZ = GXutil.resetTime(GXutil.nullDate()); + } + + public byte isNull() { + return gxTv_SdtEventMessage_N; + } + + public com.genexus.genexusserverlessapi.SdtEventMessage Clone() { + return (com.genexus.genexusserverlessapi.SdtEventMessage) (clone()); + } + + public void setStruct(com.genexus.genexusserverlessapi.StructSdtEventMessage struct) { + setgxTv_SdtEventMessage_Eventmessageid(struct.getEventmessageid()); + if (struct.gxTv_SdtEventMessage_Eventmessagedate_N == 0) { + setgxTv_SdtEventMessage_Eventmessagedate(struct.getEventmessagedate()); + } + setgxTv_SdtEventMessage_Eventmessagesourcetype(struct.getEventmessagesourcetype()); + setgxTv_SdtEventMessage_Eventmessagedata(struct.getEventmessagedata()); + setgxTv_SdtEventMessage_Eventmessageversion(struct.getEventmessageversion()); + GXBaseCollection gxTv_SdtEventMessage_Eventmessagecustompayload_aux = new GXBaseCollection(com.genexus.genexusserverlessapi.SdtEventCustomPayload_CustomPayloadItem.class, "CustomPayloadItem", "ServerlessAPI", remoteHandle); + Vector gxTv_SdtEventMessage_Eventmessagecustompayload_aux1 = struct.getEventmessagecustompayload(); + if (gxTv_SdtEventMessage_Eventmessagecustompayload_aux1 != null) { + for (int i = 0; i < gxTv_SdtEventMessage_Eventmessagecustompayload_aux1.size(); i++) { + gxTv_SdtEventMessage_Eventmessagecustompayload_aux.add(new com.genexus.genexusserverlessapi.SdtEventCustomPayload_CustomPayloadItem(gxTv_SdtEventMessage_Eventmessagecustompayload_aux1.elementAt(i))); + } + } + setgxTv_SdtEventMessage_Eventmessagecustompayload(gxTv_SdtEventMessage_Eventmessagecustompayload_aux); + } + + @SuppressWarnings("unchecked") + public com.genexus.genexusserverlessapi.StructSdtEventMessage getStruct() { + com.genexus.genexusserverlessapi.StructSdtEventMessage struct = new com.genexus.genexusserverlessapi.StructSdtEventMessage(); + struct.setEventmessageid(getgxTv_SdtEventMessage_Eventmessageid()); + if (gxTv_SdtEventMessage_Eventmessagedate_N == 0) { + struct.setEventmessagedate(getgxTv_SdtEventMessage_Eventmessagedate()); + } + struct.setEventmessagesourcetype(getgxTv_SdtEventMessage_Eventmessagesourcetype()); + struct.setEventmessagedata(getgxTv_SdtEventMessage_Eventmessagedata()); + struct.setEventmessageversion(getgxTv_SdtEventMessage_Eventmessageversion()); + struct.setEventmessagecustompayload(getgxTv_SdtEventMessage_Eventmessagecustompayload().getStruct()); + return struct; + } + + protected byte gxTv_SdtEventMessage_N; + protected byte gxTv_SdtEventMessage_Eventmessagedate_N; + protected byte gxTv_SdtEventMessage_Eventmessagecustompayload_N; + protected short readOk; + protected short nOutParmCount; + protected String sTagName; + protected String sDateCnv; + protected String sNumToPad; + protected java.util.Date gxTv_SdtEventMessage_Eventmessagedate; + protected java.util.Date datetime_STZ; + protected boolean readElement; + protected boolean formatError; + protected String gxTv_SdtEventMessage_Eventmessagedata; + protected String gxTv_SdtEventMessage_Eventmessageid; + protected String gxTv_SdtEventMessage_Eventmessagesourcetype; + protected String gxTv_SdtEventMessage_Eventmessageversion; + protected GXBaseCollection gxTv_SdtEventMessage_Eventmessagecustompayload_aux; + protected GXBaseCollection gxTv_SdtEventMessage_Eventmessagecustompayload = null; +} + diff --git a/gxawsserverless/src/test/java/com/genexus/genexusserverlessapi/SdtEventMessageResponse.java b/gxawsserverless/src/test/java/com/genexus/genexusserverlessapi/SdtEventMessageResponse.java new file mode 100644 index 000000000..a1d83fcd4 --- /dev/null +++ b/gxawsserverless/src/test/java/com/genexus/genexusserverlessapi/SdtEventMessageResponse.java @@ -0,0 +1,111 @@ +package com.genexus.genexusserverlessapi; + +import com.genexus.*; +import com.genexus.*; +import com.genexus.xml.*; +import com.genexus.search.*; +import com.genexus.webpanels.*; + +import java.util.*; + +public final class SdtEventMessageResponse extends GxUserType { + public SdtEventMessageResponse() { + this(new ModelContext(SdtEventMessageResponse.class)); + } + + public SdtEventMessageResponse(ModelContext context) { + super(context, "SdtEventMessageResponse"); + } + + public SdtEventMessageResponse(int remoteHandle, + ModelContext context) { + super(remoteHandle, context, "SdtEventMessageResponse"); + } + + public SdtEventMessageResponse(StructSdtEventMessageResponse struct) { + this(); + setStruct(struct); + } + + private static java.util.HashMap mapper = new java.util.HashMap(); + + static { + } + + public String getJsonMap(String value) { + return (String) mapper.get(value); + } + + public void tojson() { + tojson(true); + } + + public void tojson(boolean includeState) { + tojson(includeState, true); + } + + public void tojson(boolean includeState, + boolean includeNonInitialized) { + AddObjectProperty("Handled", gxTv_SdtEventMessageResponse_Handled, false, false); + AddObjectProperty("ErrorMessage", gxTv_SdtEventMessageResponse_Errormessage, false, false); + } + + public boolean getgxTv_SdtEventMessageResponse_Handled() { + return gxTv_SdtEventMessageResponse_Handled; + } + + public void setgxTv_SdtEventMessageResponse_Handled(boolean value) { + gxTv_SdtEventMessageResponse_N = (byte) (0); + gxTv_SdtEventMessageResponse_Handled = value; + } + + public String getgxTv_SdtEventMessageResponse_Errormessage() { + return gxTv_SdtEventMessageResponse_Errormessage; + } + + public void setgxTv_SdtEventMessageResponse_Errormessage(String value) { + gxTv_SdtEventMessageResponse_N = (byte) (0); + gxTv_SdtEventMessageResponse_Errormessage = value; + } + + public void initialize(int remoteHandle) { + initialize(); + } + + public void initialize() { + gxTv_SdtEventMessageResponse_N = (byte) (1); + gxTv_SdtEventMessageResponse_Errormessage = ""; + sTagName = ""; + } + + public byte isNull() { + return gxTv_SdtEventMessageResponse_N; + } + + public com.genexus.genexusserverlessapi.SdtEventMessageResponse Clone() { + return (com.genexus.genexusserverlessapi.SdtEventMessageResponse) (clone()); + } + + public void setStruct(com.genexus.genexusserverlessapi.StructSdtEventMessageResponse struct) { + setgxTv_SdtEventMessageResponse_Handled(struct.getHandled()); + setgxTv_SdtEventMessageResponse_Errormessage(struct.getErrormessage()); + } + + @SuppressWarnings("unchecked") + public com.genexus.genexusserverlessapi.StructSdtEventMessageResponse getStruct() { + com.genexus.genexusserverlessapi.StructSdtEventMessageResponse struct = new com.genexus.genexusserverlessapi.StructSdtEventMessageResponse(); + struct.setHandled(getgxTv_SdtEventMessageResponse_Handled()); + struct.setErrormessage(getgxTv_SdtEventMessageResponse_Errormessage()); + return struct; + } + + protected byte gxTv_SdtEventMessageResponse_N; + protected short readOk; + protected short nOutParmCount; + protected String sTagName; + protected boolean gxTv_SdtEventMessageResponse_Handled; + protected boolean readElement; + protected boolean formatError; + protected String gxTv_SdtEventMessageResponse_Errormessage; +} + diff --git a/gxawsserverless/src/test/java/com/genexus/genexusserverlessapi/SdtEventMessages.java b/gxawsserverless/src/test/java/com/genexus/genexusserverlessapi/SdtEventMessages.java new file mode 100644 index 000000000..af0c5fb35 --- /dev/null +++ b/gxawsserverless/src/test/java/com/genexus/genexusserverlessapi/SdtEventMessages.java @@ -0,0 +1,116 @@ +package com.genexus.genexusserverlessapi; + +import com.genexus.*; +import com.genexus.*; +import com.genexus.xml.*; +import com.genexus.search.*; +import com.genexus.webpanels.*; + +import java.util.*; + +public final class SdtEventMessages extends GxUserType { + public SdtEventMessages() { + this(new ModelContext(SdtEventMessages.class)); + } + + public SdtEventMessages(ModelContext context) { + super(context, "SdtEventMessages"); + } + + public SdtEventMessages(int remoteHandle, + ModelContext context) { + super(remoteHandle, context, "SdtEventMessages"); + } + + public SdtEventMessages(StructSdtEventMessages struct) { + this(); + setStruct(struct); + } + + private static java.util.HashMap mapper = new java.util.HashMap(); + + static { + } + + public String getJsonMap(String value) { + return (String) mapper.get(value); + } + + public GXBaseCollection getgxTv_SdtEventMessages_Eventmessage() { + if (gxTv_SdtEventMessages_Eventmessage == null) { + gxTv_SdtEventMessages_Eventmessage = new GXBaseCollection(com.genexus.genexusserverlessapi.SdtEventMessage.class, "EventMessage", "ServerlessAPI", remoteHandle); + } + gxTv_SdtEventMessages_Eventmessage_N = (byte) (0); + gxTv_SdtEventMessages_N = (byte) (0); + return gxTv_SdtEventMessages_Eventmessage; + } + + public void setgxTv_SdtEventMessages_Eventmessage(GXBaseCollection value) { + gxTv_SdtEventMessages_Eventmessage_N = (byte) (0); + gxTv_SdtEventMessages_N = (byte) (0); + gxTv_SdtEventMessages_Eventmessage = value; + } + + public void setgxTv_SdtEventMessages_Eventmessage_SetNull() { + gxTv_SdtEventMessages_Eventmessage_N = (byte) (1); + gxTv_SdtEventMessages_Eventmessage = null; + } + + public boolean getgxTv_SdtEventMessages_Eventmessage_IsNull() { + if (gxTv_SdtEventMessages_Eventmessage == null) { + return true; + } + return false; + } + + public byte getgxTv_SdtEventMessages_Eventmessage_N() { + return gxTv_SdtEventMessages_Eventmessage_N; + } + + public void initialize(int remoteHandle) { + initialize(); + } + + public void initialize() { + gxTv_SdtEventMessages_Eventmessage_N = (byte) (1); + gxTv_SdtEventMessages_N = (byte) (1); + sTagName = ""; + } + + public byte isNull() { + return gxTv_SdtEventMessages_N; + } + + public com.genexus.genexusserverlessapi.SdtEventMessages Clone() { + return (com.genexus.genexusserverlessapi.SdtEventMessages) (clone()); + } + + public void setStruct(com.genexus.genexusserverlessapi.StructSdtEventMessages struct) { + GXBaseCollection gxTv_SdtEventMessages_Eventmessage_aux = new GXBaseCollection(com.genexus.genexusserverlessapi.SdtEventMessage.class, "EventMessage", "ServerlessAPI", remoteHandle); + Vector gxTv_SdtEventMessages_Eventmessage_aux1 = struct.getEventmessage(); + if (gxTv_SdtEventMessages_Eventmessage_aux1 != null) { + for (int i = 0; i < gxTv_SdtEventMessages_Eventmessage_aux1.size(); i++) { + gxTv_SdtEventMessages_Eventmessage_aux.add(new com.genexus.genexusserverlessapi.SdtEventMessage(gxTv_SdtEventMessages_Eventmessage_aux1.elementAt(i))); + } + } + setgxTv_SdtEventMessages_Eventmessage(gxTv_SdtEventMessages_Eventmessage_aux); + } + + @SuppressWarnings("unchecked") + public com.genexus.genexusserverlessapi.StructSdtEventMessages getStruct() { + com.genexus.genexusserverlessapi.StructSdtEventMessages struct = new com.genexus.genexusserverlessapi.StructSdtEventMessages(); + struct.setEventmessage(getgxTv_SdtEventMessages_Eventmessage().getStruct()); + return struct; + } + + protected byte gxTv_SdtEventMessages_Eventmessage_N; + protected byte gxTv_SdtEventMessages_N; + protected short readOk; + protected short nOutParmCount; + protected String sTagName; + protected boolean readElement; + protected boolean formatError; + protected GXBaseCollection gxTv_SdtEventMessages_Eventmessage_aux; + protected GXBaseCollection gxTv_SdtEventMessages_Eventmessage = null; +} + diff --git a/gxawsserverless/src/test/java/com/genexus/genexusserverlessapi/StructSdtEventCustomPayload.java b/gxawsserverless/src/test/java/com/genexus/genexusserverlessapi/StructSdtEventCustomPayload.java new file mode 100644 index 000000000..38d73aaae --- /dev/null +++ b/gxawsserverless/src/test/java/com/genexus/genexusserverlessapi/StructSdtEventCustomPayload.java @@ -0,0 +1,40 @@ +package com.genexus.genexusserverlessapi; + +import com.genexus.*; + +@javax.xml.bind.annotation.XmlType(name = "EventCustomPayload", namespace = "ServerlessAPI") +public final class StructSdtEventCustomPayload implements Cloneable, java.io.Serializable { + public StructSdtEventCustomPayload() { + this(-1, new ModelContext(StructSdtEventCustomPayload.class)); + } + + public StructSdtEventCustomPayload(int remoteHandle, + ModelContext context) { + } + + public StructSdtEventCustomPayload(java.util.Vector value) { + item = value; + } + + public Object clone() { + Object cloned = null; + try { + cloned = super.clone(); + } catch (CloneNotSupportedException e) { + ; + } + return cloned; + } + + @javax.xml.bind.annotation.XmlElement(name = "CustomPayloadItem", namespace = "ServerlessAPI") + public java.util.Vector getItem() { + return item; + } + + public void setItem(java.util.Vector value) { + item = value; + } + + protected java.util.Vector item = new java.util.Vector<>(); +} + diff --git a/gxawsserverless/src/test/java/com/genexus/genexusserverlessapi/StructSdtEventCustomPayload_CustomPayloadItem.java b/gxawsserverless/src/test/java/com/genexus/genexusserverlessapi/StructSdtEventCustomPayload_CustomPayloadItem.java new file mode 100644 index 000000000..d1485d4c7 --- /dev/null +++ b/gxawsserverless/src/test/java/com/genexus/genexusserverlessapi/StructSdtEventCustomPayload_CustomPayloadItem.java @@ -0,0 +1,48 @@ +package com.genexus.genexusserverlessapi; + +import com.genexus.*; + +public final class StructSdtEventCustomPayload_CustomPayloadItem implements Cloneable, java.io.Serializable { + public StructSdtEventCustomPayload_CustomPayloadItem() { + this(-1, new ModelContext(StructSdtEventCustomPayload_CustomPayloadItem.class)); + } + + public StructSdtEventCustomPayload_CustomPayloadItem(int remoteHandle, + ModelContext context) { + gxTv_SdtEventCustomPayload_CustomPayloadItem_Propertyid = ""; + gxTv_SdtEventCustomPayload_CustomPayloadItem_Propertyvalue = ""; + } + + public Object clone() { + Object cloned = null; + try { + cloned = super.clone(); + } catch (CloneNotSupportedException e) { + ; + } + return cloned; + } + + public String getPropertyid() { + return gxTv_SdtEventCustomPayload_CustomPayloadItem_Propertyid; + } + + public void setPropertyid(String value) { + gxTv_SdtEventCustomPayload_CustomPayloadItem_N = (byte) (0); + gxTv_SdtEventCustomPayload_CustomPayloadItem_Propertyid = value; + } + + public String getPropertyvalue() { + return gxTv_SdtEventCustomPayload_CustomPayloadItem_Propertyvalue; + } + + public void setPropertyvalue(String value) { + gxTv_SdtEventCustomPayload_CustomPayloadItem_N = (byte) (0); + gxTv_SdtEventCustomPayload_CustomPayloadItem_Propertyvalue = value; + } + + protected byte gxTv_SdtEventCustomPayload_CustomPayloadItem_N; + protected String gxTv_SdtEventCustomPayload_CustomPayloadItem_Propertyvalue; + protected String gxTv_SdtEventCustomPayload_CustomPayloadItem_Propertyid; +} + diff --git a/gxawsserverless/src/test/java/com/genexus/genexusserverlessapi/StructSdtEventMessage.java b/gxawsserverless/src/test/java/com/genexus/genexusserverlessapi/StructSdtEventMessage.java new file mode 100644 index 000000000..2c5c3414e --- /dev/null +++ b/gxawsserverless/src/test/java/com/genexus/genexusserverlessapi/StructSdtEventMessage.java @@ -0,0 +1,100 @@ +package com.genexus.genexusserverlessapi; + +import com.genexus.*; + +public final class StructSdtEventMessage implements Cloneable, java.io.Serializable { + public StructSdtEventMessage() { + this(-1, new ModelContext(StructSdtEventMessage.class)); + } + + public StructSdtEventMessage(int remoteHandle, + ModelContext context) { + java.util.Calendar cal = java.util.Calendar.getInstance(); + cal.set(1, 0, 1, 0, 0, 0); + cal.set(java.util.Calendar.MILLISECOND, 0); + gxTv_SdtEventMessage_Eventmessageid = ""; + gxTv_SdtEventMessage_Eventmessagedate = cal.getTime(); + gxTv_SdtEventMessage_Eventmessagesourcetype = ""; + gxTv_SdtEventMessage_Eventmessagedata = ""; + gxTv_SdtEventMessage_Eventmessageversion = ""; + gxTv_SdtEventMessage_Eventmessagedate_N = (byte) (1); + gxTv_SdtEventMessage_Eventmessagecustompayload_N = (byte) (1); + } + + public Object clone() { + Object cloned = null; + try { + cloned = super.clone(); + } catch (CloneNotSupportedException e) { + ; + } + return cloned; + } + + public String getEventmessageid() { + return gxTv_SdtEventMessage_Eventmessageid; + } + + public void setEventmessageid(String value) { + gxTv_SdtEventMessage_N = (byte) (0); + gxTv_SdtEventMessage_Eventmessageid = value; + } + + public java.util.Date getEventmessagedate() { + return gxTv_SdtEventMessage_Eventmessagedate; + } + + public void setEventmessagedate(java.util.Date value) { + gxTv_SdtEventMessage_Eventmessagedate_N = (byte) (0); + gxTv_SdtEventMessage_N = (byte) (0); + gxTv_SdtEventMessage_Eventmessagedate = value; + } + + public String getEventmessagesourcetype() { + return gxTv_SdtEventMessage_Eventmessagesourcetype; + } + + public void setEventmessagesourcetype(String value) { + gxTv_SdtEventMessage_N = (byte) (0); + gxTv_SdtEventMessage_Eventmessagesourcetype = value; + } + + public String getEventmessagedata() { + return gxTv_SdtEventMessage_Eventmessagedata; + } + + public void setEventmessagedata(String value) { + gxTv_SdtEventMessage_N = (byte) (0); + gxTv_SdtEventMessage_Eventmessagedata = value; + } + + public String getEventmessageversion() { + return gxTv_SdtEventMessage_Eventmessageversion; + } + + public void setEventmessageversion(String value) { + gxTv_SdtEventMessage_N = (byte) (0); + gxTv_SdtEventMessage_Eventmessageversion = value; + } + + public java.util.Vector getEventmessagecustompayload() { + return gxTv_SdtEventMessage_Eventmessagecustompayload; + } + + public void setEventmessagecustompayload(java.util.Vector value) { + gxTv_SdtEventMessage_Eventmessagecustompayload_N = (byte) (0); + gxTv_SdtEventMessage_N = (byte) (0); + gxTv_SdtEventMessage_Eventmessagecustompayload = value; + } + + protected byte gxTv_SdtEventMessage_Eventmessagedate_N; + protected byte gxTv_SdtEventMessage_Eventmessagecustompayload_N; + protected byte gxTv_SdtEventMessage_N; + protected String gxTv_SdtEventMessage_Eventmessagedata; + protected String gxTv_SdtEventMessage_Eventmessageid; + protected String gxTv_SdtEventMessage_Eventmessagesourcetype; + protected String gxTv_SdtEventMessage_Eventmessageversion; + protected java.util.Date gxTv_SdtEventMessage_Eventmessagedate; + protected java.util.Vector gxTv_SdtEventMessage_Eventmessagecustompayload = null; +} + diff --git a/gxawsserverless/src/test/java/com/genexus/genexusserverlessapi/StructSdtEventMessageResponse.java b/gxawsserverless/src/test/java/com/genexus/genexusserverlessapi/StructSdtEventMessageResponse.java new file mode 100644 index 000000000..382542dbf --- /dev/null +++ b/gxawsserverless/src/test/java/com/genexus/genexusserverlessapi/StructSdtEventMessageResponse.java @@ -0,0 +1,47 @@ +package com.genexus.genexusserverlessapi; + +import com.genexus.*; + +public final class StructSdtEventMessageResponse implements Cloneable, java.io.Serializable { + public StructSdtEventMessageResponse() { + this(-1, new ModelContext(StructSdtEventMessageResponse.class)); + } + + public StructSdtEventMessageResponse(int remoteHandle, + ModelContext context) { + gxTv_SdtEventMessageResponse_Errormessage = ""; + } + + public Object clone() { + Object cloned = null; + try { + cloned = super.clone(); + } catch (CloneNotSupportedException e) { + ; + } + return cloned; + } + + public boolean getHandled() { + return gxTv_SdtEventMessageResponse_Handled; + } + + public void setHandled(boolean value) { + gxTv_SdtEventMessageResponse_N = (byte) (0); + gxTv_SdtEventMessageResponse_Handled = value; + } + + public String getErrormessage() { + return gxTv_SdtEventMessageResponse_Errormessage; + } + + public void setErrormessage(String value) { + gxTv_SdtEventMessageResponse_N = (byte) (0); + gxTv_SdtEventMessageResponse_Errormessage = value; + } + + protected byte gxTv_SdtEventMessageResponse_N; + protected boolean gxTv_SdtEventMessageResponse_Handled; + protected String gxTv_SdtEventMessageResponse_Errormessage; +} + diff --git a/gxawsserverless/src/test/java/com/genexus/genexusserverlessapi/StructSdtEventMessages.java b/gxawsserverless/src/test/java/com/genexus/genexusserverlessapi/StructSdtEventMessages.java new file mode 100644 index 000000000..18a558a2d --- /dev/null +++ b/gxawsserverless/src/test/java/com/genexus/genexusserverlessapi/StructSdtEventMessages.java @@ -0,0 +1,39 @@ +package com.genexus.genexusserverlessapi; + +import com.genexus.*; + +public final class StructSdtEventMessages implements Cloneable, java.io.Serializable { + public StructSdtEventMessages() { + this(-1, new ModelContext(StructSdtEventMessages.class)); + } + + public StructSdtEventMessages(int remoteHandle, + ModelContext context) { + gxTv_SdtEventMessages_Eventmessage_N = (byte) (1); + } + + public Object clone() { + Object cloned = null; + try { + cloned = super.clone(); + } catch (CloneNotSupportedException e) { + ; + } + return cloned; + } + + public java.util.Vector getEventmessage() { + return gxTv_SdtEventMessages_Eventmessage; + } + + public void setEventmessage(java.util.Vector value) { + gxTv_SdtEventMessages_Eventmessage_N = (byte) (0); + gxTv_SdtEventMessages_N = (byte) (0); + gxTv_SdtEventMessages_Eventmessage = value; + } + + protected byte gxTv_SdtEventMessages_Eventmessage_N; + protected byte gxTv_SdtEventMessages_N; + protected java.util.Vector gxTv_SdtEventMessages_Eventmessage = null; +} + diff --git a/gxawsserverless/src/test/java/com/genexus/serverless/proxy/test/jersey/EchoJerseyResource.java b/gxawsserverless/src/test/java/com/genexus/serverless/proxy/test/jersey/EchoJerseyResource.java index 94e0afd40..7508e8810 100644 --- a/gxawsserverless/src/test/java/com/genexus/serverless/proxy/test/jersey/EchoJerseyResource.java +++ b/gxawsserverless/src/test/java/com/genexus/serverless/proxy/test/jersey/EchoJerseyResource.java @@ -37,83 +37,83 @@ @Path("/echo") public class EchoJerseyResource { - @Path("/hola") - @GET - @Produces(MediaType.APPLICATION_JSON) - public Response hola(@Context ContainerRequestContext context) { - MapResponseModel headers = new MapResponseModel(); - headers.addValue("key", "hola"); - - return Response.status(200).entity(headers).build(); - } - - @Path("/headers") - @GET - @Produces(MediaType.APPLICATION_JSON) - public MapResponseModel echoHeaders(@Context ContainerRequestContext context) { - MapResponseModel headers = new MapResponseModel(); - for (String key : context.getHeaders().keySet()) { - headers.addValue(key, context.getHeaderString(key)); - } - - return headers; - } - - @Path("/servlet-headers") - @GET - @Produces(MediaType.APPLICATION_JSON) - public MapResponseModel echoServletHeaders(@Context HttpServletRequest context) { - MapResponseModel headers = new MapResponseModel(); - Enumeration headerNames = context.getHeaderNames(); - while (headerNames.hasMoreElements()) { - String headerName = headerNames.nextElement(); - headers.addValue(headerName, context.getHeader(headerName)); - } - - return headers; - } - - @Path("/query-string") - @GET - @Produces(MediaType.APPLICATION_JSON) - public MapResponseModel echoQueryString(@Context UriInfo context) { - MapResponseModel queryStrings = new MapResponseModel(); - for (String key : context.getQueryParameters().keySet()) { - queryStrings.addValue(key, context.getQueryParameters().getFirst(key)); - } - - return queryStrings; - } - - - @Path("/json-body") - @POST - @Consumes(MediaType.APPLICATION_JSON) - @Produces(MediaType.APPLICATION_JSON) - public SingleValueModel echoJsonValue(final SingleValueModel requestValue) { - SingleValueModel output = new SingleValueModel(); - output.setValue(requestValue.getValue()); - - return output; - } - - @Path("/status-code") - @GET - @Produces(MediaType.APPLICATION_JSON) - public Response echoCustomStatusCode(@QueryParam("status") int statusCode) { - SingleValueModel output = new SingleValueModel(); - output.setValue("" + statusCode); - - return Response.status(statusCode).entity(output).build(); - } - - @Path("/binary") - @GET - @Produces("application/octet-stream") - public Response echoBinaryData() { - byte[] b = new byte[128]; - new Random().nextBytes(b); - - return Response.ok(b).build(); - } + @Path("/hola") + @GET + @Produces(MediaType.APPLICATION_JSON) + public Response hola(@Context ContainerRequestContext context) { + MapResponseModel headers = new MapResponseModel(); + headers.addValue("key", "hola"); + + return Response.status(200).entity(headers).build(); + } + + @Path("/headers") + @GET + @Produces(MediaType.APPLICATION_JSON) + public MapResponseModel echoHeaders(@Context ContainerRequestContext context) { + MapResponseModel headers = new MapResponseModel(); + for (String key : context.getHeaders().keySet()) { + headers.addValue(key, context.getHeaderString(key)); + } + + return headers; + } + + @Path("/servlet-headers") + @GET + @Produces(MediaType.APPLICATION_JSON) + public MapResponseModel echoServletHeaders(@Context HttpServletRequest context) { + MapResponseModel headers = new MapResponseModel(); + Enumeration headerNames = context.getHeaderNames(); + while (headerNames.hasMoreElements()) { + String headerName = headerNames.nextElement(); + headers.addValue(headerName, context.getHeader(headerName)); + } + + return headers; + } + + @Path("/query-string") + @GET + @Produces(MediaType.APPLICATION_JSON) + public MapResponseModel echoQueryString(@Context UriInfo context) { + MapResponseModel queryStrings = new MapResponseModel(); + for (String key : context.getQueryParameters().keySet()) { + queryStrings.addValue(key, context.getQueryParameters().getFirst(key)); + } + + return queryStrings; + } + + + @Path("/json-body") + @POST + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + public SingleValueModel echoJsonValue(final SingleValueModel requestValue) { + SingleValueModel output = new SingleValueModel(); + output.setValue(requestValue.getValue()); + + return output; + } + + @Path("/status-code") + @GET + @Produces(MediaType.APPLICATION_JSON) + public Response echoCustomStatusCode(@QueryParam("status") int statusCode) { + SingleValueModel output = new SingleValueModel(); + output.setValue("" + statusCode); + + return Response.status(statusCode).entity(output).build(); + } + + @Path("/binary") + @GET + @Produces("application/octet-stream") + public Response echoBinaryData() { + byte[] b = new byte[128]; + new Random().nextBytes(b); + + return Response.ok(b).build(); + } } diff --git a/gxawsserverless/src/test/java/com/genexus/serverless/proxy/test/jersey/GeneXusAppAwsProxyTest.java b/gxawsserverless/src/test/java/com/genexus/serverless/proxy/test/jersey/GeneXusAppAwsProxyTest.java index de991eada..797992e31 100644 --- a/gxawsserverless/src/test/java/com/genexus/serverless/proxy/test/jersey/GeneXusAppAwsProxyTest.java +++ b/gxawsserverless/src/test/java/com/genexus/serverless/proxy/test/jersey/GeneXusAppAwsProxyTest.java @@ -38,61 +38,62 @@ * Unit test class for the Jersey AWS_PROXY default implementation */ public class GeneXusAppAwsProxyTest { - private static final String CUSTOM_HEADER_KEY = "x-custom-header"; - private static final String CUSTOM_HEADER_VALUE = "my-custom-value"; - private ResourceConfig app; - private LambdaHandler l; + private static final String CUSTOM_HEADER_KEY = "x-custom-header"; + private static final String CUSTOM_HEADER_VALUE = "my-custom-value"; - @Before - public void setUpStreams() { + private ResourceConfig app; + private LambdaHandler l; + + @Before + public void setUpStreams() { Connect.init(); - try { - System.setProperty("LAMBDA_TASK_ROOT", "."); - l = new LambdaHandler(); - handler = LambdaHandler.handler; - } catch (Exception e) { - e.printStackTrace(); - } - } + try { + System.setProperty("LAMBDA_TASK_ROOT", "."); + l = new LambdaHandler(); + handler = LambdaHandler.handler; + } catch (Exception e) { + e.printStackTrace(); + } + } - public GeneXusAppAwsProxyTest() { + public GeneXusAppAwsProxyTest() { - } + } - private JerseyLambdaContainerHandler handler = null; + private JerseyLambdaContainerHandler handler = null; - private static ObjectMapper objectMapper = new ObjectMapper(); + private static ObjectMapper objectMapper = new ObjectMapper(); - private static Context lambdaContext = new MockLambdaContext(); + private static Context lambdaContext = new MockLambdaContext(); - @Test - public void testGXDataProvider() { - AwsProxyRequest request = new AwsProxyRequestBuilder("/Test", "GET") - .queryString("Itemnumber", "9") - .json() - .header(CUSTOM_HEADER_KEY, CUSTOM_HEADER_VALUE) - .build(); + @Test + public void testGXDataProvider() { + AwsProxyRequest request = new AwsProxyRequestBuilder("/Test", "GET") + .queryString("Itemnumber", "9") + .json() + .header(CUSTOM_HEADER_KEY, CUSTOM_HEADER_VALUE) + .build(); - AwsProxyResponse output = handler.proxy(request, lambdaContext); - assertEquals(200, output.getStatusCode()); - assertEquals("{\"ItemId\":9,\"ItemName\":\"9 Item\"}", output.getBody()); - } + AwsProxyResponse output = handler.proxy(request, lambdaContext); + assertEquals(200, output.getStatusCode()); + assertEquals("{\"ItemId\":9,\"ItemName\":\"9 Item\"}", output.getBody()); + } - @Test - public void testGXDataProviderWithParams() { - AwsProxyRequest request = new AwsProxyRequestBuilder("/Test/12", "GET") - .queryString("Itemnumber", "9") - .json() - .header(CUSTOM_HEADER_KEY, CUSTOM_HEADER_VALUE) - .build(); + @Test + public void testGXDataProviderWithParams() { + AwsProxyRequest request = new AwsProxyRequestBuilder("/Test/12", "GET") + .queryString("Itemnumber", "9") + .json() + .header(CUSTOM_HEADER_KEY, CUSTOM_HEADER_VALUE) + .build(); - AwsProxyResponse output = handler.proxy(request, lambdaContext); - assertEquals(200, output.getStatusCode()); - assertEquals("{\"ItemId\":12,\"ItemName\":\"12 Item\"}", output.getBody()); - } + AwsProxyResponse output = handler.proxy(request, lambdaContext); + assertEquals(200, output.getStatusCode()); + assertEquals("{\"ItemId\":12,\"ItemName\":\"12 Item\"}", output.getBody()); + } @Test public void testGxMultiCall() { @@ -122,18 +123,18 @@ public void testUpload() { @Test @Ignore - public void gxTestOAuthAccessToken() { + public void gxTestOAuthAccessToken() { - AwsProxyRequest request = new AwsProxyRequestBuilder("/oauth/access_token", "POST") - .body("client_id=b0be5400435f42e588480fa06330f5ff&grant_type=password&username=ggallotti&password=gonzalo&scope=FullControl") - .header("Content-Type", "application/x-www-form-urlencoded") - //.header("Content-Length", "116") - .build(); + AwsProxyRequest request = new AwsProxyRequestBuilder("/oauth/access_token", "POST") + .body("client_id=b0be5400435f42e588480fa06330f5ff&grant_type=password&username=ggallotti&password=gonzalo&scope=FullControl") + .header("Content-Type", "application/x-www-form-urlencoded") + //.header("Content-Length", "116") + .build(); - AwsProxyResponse output = l.handleRequest(request, lambdaContext); - System.out.println(output); - //assertEquals(200, output.getStatusCode()); + AwsProxyResponse output = l.handleRequest(request, lambdaContext); + System.out.println(output); + //assertEquals(200, output.getStatusCode()); - } + } } diff --git a/gxawsserverless/src/test/java/com/genexus/serverless/proxy/test/jersey/JerseyAwsProxyTest.java b/gxawsserverless/src/test/java/com/genexus/serverless/proxy/test/jersey/JerseyAwsProxyTest.java index c96c52f38..ce572407f 100644 --- a/gxawsserverless/src/test/java/com/genexus/serverless/proxy/test/jersey/JerseyAwsProxyTest.java +++ b/gxawsserverless/src/test/java/com/genexus/serverless/proxy/test/jersey/JerseyAwsProxyTest.java @@ -51,149 +51,150 @@ * Unit test class for the Jersey AWS_PROXY default implementation */ public class JerseyAwsProxyTest { - private static final String CUSTOM_HEADER_KEY = "x-custom-header"; - private static final String CUSTOM_HEADER_VALUE = "my-custom-value"; - private ResourceConfig app; - private LambdaHandler l; + private static final String CUSTOM_HEADER_KEY = "x-custom-header"; + private static final String CUSTOM_HEADER_VALUE = "my-custom-value"; - @Before - public void setUpStreams() { + private ResourceConfig app; + private LambdaHandler l; + + @Before + public void setUpStreams() { Connect.init(); - try { - System.setProperty("LAMBDA_TASK_ROOT", "."); - l = new LambdaHandler(); - handler = LambdaHandler.handler; - } catch (Exception e) { - e.printStackTrace(); - } - } - - public JerseyAwsProxyTest() { - - } - - private JerseyLambdaContainerHandler handler = null; - - private static ObjectMapper objectMapper = new ObjectMapper(); - - private static Context lambdaContext = new MockLambdaContext(); - - - @Test - public void headers_getHeaders_echo() { - AwsProxyRequest request = new AwsProxyRequestBuilder("/echo/headers", "GET") - .json() - .header(CUSTOM_HEADER_KEY, CUSTOM_HEADER_VALUE) - .build(); - - AwsProxyResponse output = handler.proxy(request, lambdaContext); - assertEquals(200, output.getStatusCode()); - } - - @Test - public void headers_servletRequest_echo() { - AwsProxyRequest request = new AwsProxyRequestBuilder("/echo/servlet-headers", "GET") - .json() - .header(CUSTOM_HEADER_KEY, CUSTOM_HEADER_VALUE) - .build(); - - AwsProxyResponse output = handler.proxy(request, lambdaContext); - assertEquals(200, output.getStatusCode()); - validateMapResponseModel(output); - } - - @Test - public void queryString_uriInfo_echo() { - AwsProxyRequest request = new AwsProxyRequestBuilder("/echo/query-string", "GET") - .json() - .queryString(CUSTOM_HEADER_KEY, CUSTOM_HEADER_VALUE) - .build(); - - AwsProxyResponse output = handler.proxy(request, lambdaContext); - assertEquals(200, output.getStatusCode()); - validateMapResponseModel(output); - } - - - @Test - public void errors_unknownRoute_expect404() { - AwsProxyRequest request = new AwsProxyRequestBuilder("/echo/test33", "GET").build(); - - AwsProxyResponse output = handler.proxy(request, lambdaContext); - assertEquals(404, output.getStatusCode()); - } - - @Test - public void error_contentType_invalidContentType() { - AwsProxyRequest request = new AwsProxyRequestBuilder("/echo/json-body", "POST") - .header("Content-Type", "application/octet-stream") - .body("asdasdasd") - .build(); - - AwsProxyResponse output = handler.proxy(request, lambdaContext); - assertEquals(415, output.getStatusCode()); - } - - @Test - public void error_statusCode_methodNotAllowed() { - AwsProxyRequest request = new AwsProxyRequestBuilder("/echo/status-code", "POST") - .json() - .queryString("status", "201") - .build(); - - AwsProxyResponse output = handler.proxy(request, lambdaContext); - assertEquals(405, output.getStatusCode()); - } - - @Test - public void responseBody_responseWriter_validBody() throws JsonProcessingException { - SingleValueModel singleValueModel = new SingleValueModel(); - singleValueModel.setValue(CUSTOM_HEADER_VALUE); - AwsProxyRequest request = new AwsProxyRequestBuilder("/echo/json-body", "POST") - .json() - .body(objectMapper.writeValueAsString(singleValueModel)) - .build(); - - AwsProxyResponse output = handler.proxy(request, lambdaContext); - assertEquals(200, output.getStatusCode()); - assertNotNull(output.getBody()); - - validateSingleValueModel(output, CUSTOM_HEADER_VALUE); - } - - @Test - public void statusCode_responseStatusCode_customStatusCode() { - AwsProxyRequest request = new AwsProxyRequestBuilder("/echo/status-code", "GET") - .json() - .queryString("status", "201") - .build(); - - AwsProxyResponse output = handler.proxy(request, lambdaContext); - assertEquals(201, output.getStatusCode()); - } - - - private void validateMapResponseModel(AwsProxyResponse output) { - try { - MapResponseModel response = objectMapper.readValue(output.getBody(), MapResponseModel.class); - assertNotNull(response.getValues().get(CUSTOM_HEADER_KEY)); - assertEquals(CUSTOM_HEADER_VALUE, response.getValues().get(CUSTOM_HEADER_KEY)); - } catch (IOException e) { - fail("Exception while parsing response body: " + e.getMessage()); - e.printStackTrace(); - } - } - - private void validateSingleValueModel(AwsProxyResponse output, String value) { - try { - SingleValueModel response = objectMapper.readValue(output.getBody(), SingleValueModel.class); - assertNotNull(response.getValue()); - assertEquals(value, response.getValue()); - } catch (IOException e) { - fail("Exception while parsing response body: " + e.getMessage()); - e.printStackTrace(); - } - } + try { + System.setProperty("LAMBDA_TASK_ROOT", "."); + l = new LambdaHandler(); + handler = LambdaHandler.handler; + } catch (Exception e) { + e.printStackTrace(); + } + } + + public JerseyAwsProxyTest() { + + } + + private JerseyLambdaContainerHandler handler = null; + + private static ObjectMapper objectMapper = new ObjectMapper(); + + private static Context lambdaContext = new MockLambdaContext(); + + + @Test + public void headers_getHeaders_echo() { + AwsProxyRequest request = new AwsProxyRequestBuilder("/echo/headers", "GET") + .json() + .header(CUSTOM_HEADER_KEY, CUSTOM_HEADER_VALUE) + .build(); + + AwsProxyResponse output = handler.proxy(request, lambdaContext); + assertEquals(200, output.getStatusCode()); + } + + @Test + public void headers_servletRequest_echo() { + AwsProxyRequest request = new AwsProxyRequestBuilder("/echo/servlet-headers", "GET") + .json() + .header(CUSTOM_HEADER_KEY, CUSTOM_HEADER_VALUE) + .build(); + + AwsProxyResponse output = handler.proxy(request, lambdaContext); + assertEquals(200, output.getStatusCode()); + validateMapResponseModel(output); + } + + @Test + public void queryString_uriInfo_echo() { + AwsProxyRequest request = new AwsProxyRequestBuilder("/echo/query-string", "GET") + .json() + .queryString(CUSTOM_HEADER_KEY, CUSTOM_HEADER_VALUE) + .build(); + + AwsProxyResponse output = handler.proxy(request, lambdaContext); + assertEquals(200, output.getStatusCode()); + validateMapResponseModel(output); + } + + + @Test + public void errors_unknownRoute_expect404() { + AwsProxyRequest request = new AwsProxyRequestBuilder("/echo/test33", "GET").build(); + + AwsProxyResponse output = handler.proxy(request, lambdaContext); + assertEquals(404, output.getStatusCode()); + } + + @Test + public void error_contentType_invalidContentType() { + AwsProxyRequest request = new AwsProxyRequestBuilder("/echo/json-body", "POST") + .header("Content-Type", "application/octet-stream") + .body("asdasdasd") + .build(); + + AwsProxyResponse output = handler.proxy(request, lambdaContext); + assertEquals(415, output.getStatusCode()); + } + + @Test + public void error_statusCode_methodNotAllowed() { + AwsProxyRequest request = new AwsProxyRequestBuilder("/echo/status-code", "POST") + .json() + .queryString("status", "201") + .build(); + + AwsProxyResponse output = handler.proxy(request, lambdaContext); + assertEquals(405, output.getStatusCode()); + } + + @Test + public void responseBody_responseWriter_validBody() throws JsonProcessingException { + SingleValueModel singleValueModel = new SingleValueModel(); + singleValueModel.setValue(CUSTOM_HEADER_VALUE); + AwsProxyRequest request = new AwsProxyRequestBuilder("/echo/json-body", "POST") + .json() + .body(objectMapper.writeValueAsString(singleValueModel)) + .build(); + + AwsProxyResponse output = handler.proxy(request, lambdaContext); + assertEquals(200, output.getStatusCode()); + assertNotNull(output.getBody()); + + validateSingleValueModel(output, CUSTOM_HEADER_VALUE); + } + + @Test + public void statusCode_responseStatusCode_customStatusCode() { + AwsProxyRequest request = new AwsProxyRequestBuilder("/echo/status-code", "GET") + .json() + .queryString("status", "201") + .build(); + + AwsProxyResponse output = handler.proxy(request, lambdaContext); + assertEquals(201, output.getStatusCode()); + } + + + private void validateMapResponseModel(AwsProxyResponse output) { + try { + MapResponseModel response = objectMapper.readValue(output.getBody(), MapResponseModel.class); + assertNotNull(response.getValues().get(CUSTOM_HEADER_KEY)); + assertEquals(CUSTOM_HEADER_VALUE, response.getValues().get(CUSTOM_HEADER_KEY)); + } catch (IOException e) { + fail("Exception while parsing response body: " + e.getMessage()); + e.printStackTrace(); + } + } + + private void validateSingleValueModel(AwsProxyResponse output, String value) { + try { + SingleValueModel response = objectMapper.readValue(output.getBody(), SingleValueModel.class); + assertNotNull(response.getValue()); + assertEquals(value, response.getValue()); + } catch (IOException e) { + fail("Exception while parsing response body: " + e.getMessage()); + e.printStackTrace(); + } + } } diff --git a/gxawsserverless/src/test/java/com/gx/serverless/test/GXApplication.java b/gxawsserverless/src/test/java/com/gx/serverless/test/GXApplication.java index e856392ad..854fa68d9 100644 --- a/gxawsserverless/src/test/java/com/gx/serverless/test/GXApplication.java +++ b/gxawsserverless/src/test/java/com/gx/serverless/test/GXApplication.java @@ -7,19 +7,19 @@ Main DBMS: SQL Server */ package com.gx.serverless.test; + import java.util.*; import javax.ws.rs.core.Application; + import com.genexus.webpanels.WebUtils; -public final class GXApplication extends Application -{ - public Set> getClasses( ) - { - Set> rrcs = new HashSet>(); - WebUtils.getGXApplicationClasses( getClass(), rrcs); - WebUtils.AddExternalServices( getClass(), rrcs); - return rrcs ; - } +public final class GXApplication extends Application { + public Set> getClasses() { + Set> rrcs = new HashSet>(); + WebUtils.getGXApplicationClasses(getClass(), rrcs); + WebUtils.AddExternalServices(getClass(), rrcs); + return rrcs; + } } diff --git a/gxawsserverless/src/test/java/com/gx/serverless/test/GXcfg.java b/gxawsserverless/src/test/java/com/gx/serverless/test/GXcfg.java index 4c9217142..07c1321fb 100644 --- a/gxawsserverless/src/test/java/com/gx/serverless/test/GXcfg.java +++ b/gxawsserverless/src/test/java/com/gx/serverless/test/GXcfg.java @@ -7,19 +7,19 @@ Main DBMS: SQL Server */ package com.gx.serverless.test; + import com.gx.serverless.*; import com.genexus.*; import com.genexus.db.*; import com.genexus.search.*; + import java.sql.*; -public final class GXcfg -{ - public static int strcmp( String Left , - String Right ) - { - return GXutil.rtrim(Left).compareTo(GXutil.rtrim(Right)); - } +public final class GXcfg { + public static int strcmp(String Left, + String Right) { + return GXutil.rtrim(Left).compareTo(GXutil.rtrim(Right)); + } } diff --git a/gxawsserverless/src/test/java/com/unittest/eventdriven/SdtUser.java b/gxawsserverless/src/test/java/com/unittest/eventdriven/SdtUser.java new file mode 100644 index 000000000..73f489a6b --- /dev/null +++ b/gxawsserverless/src/test/java/com/unittest/eventdriven/SdtUser.java @@ -0,0 +1,242 @@ +package com.unittest.eventdriven; + +import com.unittest.*; +import com.genexus.*; +import com.genexus.xml.*; +import com.genexus.search.*; +import com.genexus.webpanels.*; + +import java.util.*; + +public final class SdtUser extends GxSilentTrnSdt { + public SdtUser(int remoteHandle) { + this(remoteHandle, new ModelContext(SdtUser.class)); + } + + public SdtUser(int remoteHandle, + ModelContext context) { + super(remoteHandle, context, "SdtUser"); + initialize(); + } + + public SdtUser(int remoteHandle, + StructSdtUser struct) { + this(remoteHandle); + setStruct(struct); + } + + private static HashMap mapper = new HashMap(); + + static { + } + + public String getJsonMap(String value) { + return (String) mapper.get(value); + } + + public UUID getgxTv_SdtUser_Userid() { + return gxTv_SdtUser_Userid; + } + + public void setgxTv_SdtUser_Userid(UUID value) { + gxTv_SdtUser_N = (byte) (0); + if (!(gxTv_SdtUser_Userid.equals(value))) { + gxTv_SdtUser_Mode = "INS"; + this.setgxTv_SdtUser_Userid_Z_SetNull(); + this.setgxTv_SdtUser_Username_Z_SetNull(); + this.setgxTv_SdtUser_Userregistereddatetime_Z_SetNull(); + } + SetDirty("Userid"); + gxTv_SdtUser_Userid = value; + } + + public String getgxTv_SdtUser_Username() { + return gxTv_SdtUser_Username; + } + + public void setgxTv_SdtUser_Username(String value) { + gxTv_SdtUser_N = (byte) (0); + SetDirty("Username"); + gxTv_SdtUser_Username = value; + } + + public Date getgxTv_SdtUser_Userregistereddatetime() { + return gxTv_SdtUser_Userregistereddatetime; + } + + public void setgxTv_SdtUser_Userregistereddatetime(Date value) { + gxTv_SdtUser_N = (byte) (0); + SetDirty("Userregistereddatetime"); + gxTv_SdtUser_Userregistereddatetime = value; + } + + public String getgxTv_SdtUser_Usereventmessagedata() { + return gxTv_SdtUser_Usereventmessagedata; + } + + public void setgxTv_SdtUser_Usereventmessagedata(String value) { + gxTv_SdtUser_N = (byte) (0); + SetDirty("Usereventmessagedata"); + gxTv_SdtUser_Usereventmessagedata = value; + } + + public String getgxTv_SdtUser_Mode() { + return gxTv_SdtUser_Mode; + } + + public void setgxTv_SdtUser_Mode(String value) { + gxTv_SdtUser_N = (byte) (0); + SetDirty("Mode"); + gxTv_SdtUser_Mode = value; + } + + public void setgxTv_SdtUser_Mode_SetNull() { + gxTv_SdtUser_Mode = ""; + SetDirty("Mode"); + } + + public boolean getgxTv_SdtUser_Mode_IsNull() { + return false; + } + + public short getgxTv_SdtUser_Initialized() { + return gxTv_SdtUser_Initialized; + } + + public void setgxTv_SdtUser_Initialized(short value) { + gxTv_SdtUser_N = (byte) (0); + SetDirty("Initialized"); + gxTv_SdtUser_Initialized = value; + } + + public void setgxTv_SdtUser_Initialized_SetNull() { + gxTv_SdtUser_Initialized = (short) (0); + SetDirty("Initialized"); + } + + public boolean getgxTv_SdtUser_Initialized_IsNull() { + return false; + } + + public UUID getgxTv_SdtUser_Userid_Z() { + return gxTv_SdtUser_Userid_Z; + } + + public void setgxTv_SdtUser_Userid_Z(UUID value) { + gxTv_SdtUser_N = (byte) (0); + SetDirty("Userid_Z"); + gxTv_SdtUser_Userid_Z = value; + } + + public void setgxTv_SdtUser_Userid_Z_SetNull() { + gxTv_SdtUser_Userid_Z = UUID.fromString("00000000-0000-0000-0000-000000000000"); + SetDirty("Userid_Z"); + } + + public boolean getgxTv_SdtUser_Userid_Z_IsNull() { + return false; + } + + public String getgxTv_SdtUser_Username_Z() { + return gxTv_SdtUser_Username_Z; + } + + public void setgxTv_SdtUser_Username_Z(String value) { + gxTv_SdtUser_N = (byte) (0); + SetDirty("Username_Z"); + gxTv_SdtUser_Username_Z = value; + } + + public void setgxTv_SdtUser_Username_Z_SetNull() { + gxTv_SdtUser_Username_Z = ""; + SetDirty("Username_Z"); + } + + public boolean getgxTv_SdtUser_Username_Z_IsNull() { + return false; + } + + public Date getgxTv_SdtUser_Userregistereddatetime_Z() { + return gxTv_SdtUser_Userregistereddatetime_Z; + } + + public void setgxTv_SdtUser_Userregistereddatetime_Z(Date value) { + gxTv_SdtUser_N = (byte) (0); + SetDirty("Userregistereddatetime_Z"); + gxTv_SdtUser_Userregistereddatetime_Z = value; + } + + public void setgxTv_SdtUser_Userregistereddatetime_Z_SetNull() { + gxTv_SdtUser_Userregistereddatetime_Z = GXutil.resetTime(GXutil.nullDate()); + SetDirty("Userregistereddatetime_Z"); + } + + public boolean getgxTv_SdtUser_Userregistereddatetime_Z_IsNull() { + return false; + } + + + public void initialize() { + gxTv_SdtUser_Userid = UUID.fromString("00000000-0000-0000-0000-000000000000"); + gxTv_SdtUser_N = (byte) (1); + gxTv_SdtUser_Username = ""; + gxTv_SdtUser_Userregistereddatetime = GXutil.resetTime(GXutil.nullDate()); + gxTv_SdtUser_Usereventmessagedata = ""; + gxTv_SdtUser_Mode = ""; + gxTv_SdtUser_Userid_Z = UUID.fromString("00000000-0000-0000-0000-000000000000"); + gxTv_SdtUser_Username_Z = ""; + gxTv_SdtUser_Userregistereddatetime_Z = GXutil.resetTime(GXutil.nullDate()); + sTagName = ""; + sDateCnv = ""; + sNumToPad = ""; + datetime_STZ = GXutil.resetTime(GXutil.nullDate()); + } + + public byte isNull() { + return gxTv_SdtUser_N; + } + + + public void setStruct(com.unittest.eventdriven.StructSdtUser struct) { + setgxTv_SdtUser_Userid(struct.getUserid()); + setgxTv_SdtUser_Username(struct.getUsername()); + setgxTv_SdtUser_Userregistereddatetime(struct.getUserregistereddatetime()); + setgxTv_SdtUser_Usereventmessagedata(struct.getUsereventmessagedata()); + setgxTv_SdtUser_Mode(struct.getMode()); + setgxTv_SdtUser_Initialized(struct.getInitialized()); + setgxTv_SdtUser_Userid_Z(struct.getUserid_Z()); + setgxTv_SdtUser_Username_Z(struct.getUsername_Z()); + setgxTv_SdtUser_Userregistereddatetime_Z(struct.getUserregistereddatetime_Z()); + } + + @SuppressWarnings("unchecked") + public com.unittest.eventdriven.StructSdtUser getStruct() { + com.unittest.eventdriven.StructSdtUser struct = new com.unittest.eventdriven.StructSdtUser(); + struct.setUserid(getgxTv_SdtUser_Userid()); + struct.setUsername(getgxTv_SdtUser_Username()); + struct.setUserregistereddatetime(getgxTv_SdtUser_Userregistereddatetime()); + struct.setUsereventmessagedata(getgxTv_SdtUser_Usereventmessagedata()); + struct.setMode(getgxTv_SdtUser_Mode()); + struct.setInitialized(getgxTv_SdtUser_Initialized()); + struct.setUserid_Z(getgxTv_SdtUser_Userid_Z()); + struct.setUsername_Z(getgxTv_SdtUser_Username_Z()); + struct.setUserregistereddatetime_Z(getgxTv_SdtUser_Userregistereddatetime_Z()); + return struct; + } + + private byte gxTv_SdtUser_N; + private short gxTv_SdtUser_Initialized; + private String gxTv_SdtUser_Username; + private String gxTv_SdtUser_Mode; + private String gxTv_SdtUser_Username_Z; + private String sTagName; + private String sDateCnv; + private String sNumToPad; + private Date gxTv_SdtUser_Userregistereddatetime; + private Date gxTv_SdtUser_Userregistereddatetime_Z; + private Date datetime_STZ; + private String gxTv_SdtUser_Usereventmessagedata; + private UUID gxTv_SdtUser_Userid; + private UUID gxTv_SdtUser_Userid_Z; +} + diff --git a/gxawsserverless/src/test/java/com/unittest/eventdriven/StructSdtUser.java b/gxawsserverless/src/test/java/com/unittest/eventdriven/StructSdtUser.java new file mode 100644 index 000000000..bd2a81b20 --- /dev/null +++ b/gxawsserverless/src/test/java/com/unittest/eventdriven/StructSdtUser.java @@ -0,0 +1,127 @@ +package com.unittest.eventdriven; + +import com.genexus.*; + +public final class StructSdtUser implements Cloneable, java.io.Serializable { + public StructSdtUser() { + this(-1, new ModelContext(StructSdtUser.class)); + } + + public StructSdtUser(int remoteHandle, + ModelContext context) { + java.util.Calendar cal = java.util.Calendar.getInstance(); + cal.set(1, 0, 1, 0, 0, 0); + cal.set(java.util.Calendar.MILLISECOND, 0); + gxTv_SdtUser_Userid = java.util.UUID.fromString("00000000-0000-0000-0000-000000000000"); + gxTv_SdtUser_Username = ""; + gxTv_SdtUser_Userregistereddatetime = cal.getTime(); + gxTv_SdtUser_Usereventmessagedata = ""; + gxTv_SdtUser_Mode = ""; + gxTv_SdtUser_Userid_Z = java.util.UUID.fromString("00000000-0000-0000-0000-000000000000"); + gxTv_SdtUser_Username_Z = ""; + gxTv_SdtUser_Userregistereddatetime_Z = cal.getTime(); + } + + public Object clone() { + Object cloned = null; + try { + cloned = super.clone(); + } catch (CloneNotSupportedException e) { + ; + } + return cloned; + } + + public java.util.UUID getUserid() { + return gxTv_SdtUser_Userid; + } + + public void setUserid(java.util.UUID value) { + gxTv_SdtUser_N = (byte) (0); + gxTv_SdtUser_Userid = value; + } + + public String getUsername() { + return gxTv_SdtUser_Username; + } + + public void setUsername(String value) { + gxTv_SdtUser_N = (byte) (0); + gxTv_SdtUser_Username = value; + } + + public java.util.Date getUserregistereddatetime() { + return gxTv_SdtUser_Userregistereddatetime; + } + + public void setUserregistereddatetime(java.util.Date value) { + gxTv_SdtUser_N = (byte) (0); + gxTv_SdtUser_Userregistereddatetime = value; + } + + public String getUsereventmessagedata() { + return gxTv_SdtUser_Usereventmessagedata; + } + + public void setUsereventmessagedata(String value) { + gxTv_SdtUser_N = (byte) (0); + gxTv_SdtUser_Usereventmessagedata = value; + } + + public String getMode() { + return gxTv_SdtUser_Mode; + } + + public void setMode(String value) { + gxTv_SdtUser_N = (byte) (0); + gxTv_SdtUser_Mode = value; + } + + public short getInitialized() { + return gxTv_SdtUser_Initialized; + } + + public void setInitialized(short value) { + gxTv_SdtUser_N = (byte) (0); + gxTv_SdtUser_Initialized = value; + } + + public java.util.UUID getUserid_Z() { + return gxTv_SdtUser_Userid_Z; + } + + public void setUserid_Z(java.util.UUID value) { + gxTv_SdtUser_N = (byte) (0); + gxTv_SdtUser_Userid_Z = value; + } + + public String getUsername_Z() { + return gxTv_SdtUser_Username_Z; + } + + public void setUsername_Z(String value) { + gxTv_SdtUser_N = (byte) (0); + gxTv_SdtUser_Username_Z = value; + } + + public java.util.Date getUserregistereddatetime_Z() { + return gxTv_SdtUser_Userregistereddatetime_Z; + } + + public void setUserregistereddatetime_Z(java.util.Date value) { + gxTv_SdtUser_N = (byte) (0); + gxTv_SdtUser_Userregistereddatetime_Z = value; + } + + private byte gxTv_SdtUser_N; + protected short gxTv_SdtUser_Initialized; + protected String gxTv_SdtUser_Username; + protected String gxTv_SdtUser_Mode; + protected String gxTv_SdtUser_Username_Z; + protected String gxTv_SdtUser_Usereventmessagedata; + protected java.util.UUID gxTv_SdtUser_Userid; + protected java.util.UUID gxTv_SdtUser_Userid_Z; + protected java.util.Date gxTv_SdtUser_Userregistereddatetime; + protected java.util.Date gxTv_SdtUser_Userregistereddatetime_Z; +} + diff --git a/gxawsserverless/src/test/java/com/unittest/eventdriven/dummy/handlerruntimeexception.java b/gxawsserverless/src/test/java/com/unittest/eventdriven/dummy/handlerruntimeexception.java new file mode 100644 index 000000000..7e7190d16 --- /dev/null +++ b/gxawsserverless/src/test/java/com/unittest/eventdriven/dummy/handlerruntimeexception.java @@ -0,0 +1,58 @@ +package com.unittest.eventdriven.dummy; + +import com.genexus.GXProcedure; +import com.genexus.ModelContext; + +public final class handlerruntimeexception extends GXProcedure { + public handlerruntimeexception(int remoteHandle) { + super(remoteHandle, new ModelContext(handlerruntimeexception.class), ""); + } + + public handlerruntimeexception(int remoteHandle, ModelContext context) { + super(remoteHandle, context, ""); + } + + + public void execute(String s, com.genexus.genexusserverlessapi.SdtEventMessageResponse[] aP1) { + execute_int(s, aP1); + } + + private void execute_int(String s, com.genexus.genexusserverlessapi.SdtEventMessageResponse[] aP1) { + handlerruntimeexception.this.aP1 = aP1; + initialize(); + /* GeneXus formulas */ + /* Output device settings */ + privateExecute(); + } + + private void privateExecute() { + System.out.println("START Schedule Event received"); + throw new RuntimeException("Handler error"); + } + + protected void cleanup() { + this.aP1[0] = handlerruntimeexception.this.AV9EventMessageResponse; + CloseOpenCursors(); + exitApp(); + } + + protected void CloseOpenCursors() { + } + + /* Aggregate/select formulas */ + public void initialize() { + AV9EventMessageResponse = new com.genexus.genexusserverlessapi.SdtEventMessageResponse(remoteHandle, context); + AV16Pgmname = ""; + AV16Pgmname = "EventDriven.Queue.HandleSimpleRAWSQSEvent"; + /* GeneXus formulas. */ + AV16Pgmname = "EventDriven.Queue.HandleSimpleRAWSQSEvent"; + Gx_err = (short) (0); + } + + private short Gx_err; + private String AV13RAWMessage; + private String AV16Pgmname; + private com.genexus.genexusserverlessapi.SdtEventMessageResponse[] aP1; + private com.genexus.genexusserverlessapi.SdtEventMessageResponse AV9EventMessageResponse; +} + diff --git a/gxawsserverless/src/test/java/com/unittest/eventdriven/dummy/handlesimplenoparmsevent.java b/gxawsserverless/src/test/java/com/unittest/eventdriven/dummy/handlesimplenoparmsevent.java new file mode 100644 index 000000000..66ca40440 --- /dev/null +++ b/gxawsserverless/src/test/java/com/unittest/eventdriven/dummy/handlesimplenoparmsevent.java @@ -0,0 +1,47 @@ +package com.unittest.eventdriven.dummy; + +import com.genexus.GXProcedure; +import com.genexus.ModelContext; + +public final class handlesimplenoparmsevent extends GXProcedure { + public handlesimplenoparmsevent(int remoteHandle) { + super(remoteHandle, new ModelContext(handlesimplenoparmsevent.class), ""); + } + + public handlesimplenoparmsevent(int remoteHandle, ModelContext context) { + super(remoteHandle, context, ""); + } + + + public void execute() { + execute_int(); + } + + private void execute_int() { + initialize(); + /* GeneXus formulas */ + /* Output device settings */ + privateExecute(); + } + + private void privateExecute() { + System.out.println("START EventBridge Event received with no parms"); + System.out.println("END EventBridge Event"); + cleanup(); + } + + protected void cleanup() { + CloseOpenCursors(); + exitApp(); + } + + protected void CloseOpenCursors() { + } + + /* Aggregate/select formulas */ + public void initialize() { + + } + +} + diff --git a/gxawsserverless/src/test/java/com/unittest/eventdriven/dummy/handlesimplesqsevent.java b/gxawsserverless/src/test/java/com/unittest/eventdriven/dummy/handlesimplesqsevent.java new file mode 100644 index 000000000..6bc8f2d21 --- /dev/null +++ b/gxawsserverless/src/test/java/com/unittest/eventdriven/dummy/handlesimplesqsevent.java @@ -0,0 +1,61 @@ +package com.unittest.eventdriven.dummy; + +import com.genexus.GXProcedure; +import com.genexus.ModelContext; + +public final class handlesimplesqsevent extends GXProcedure { + public handlesimplesqsevent(int remoteHandle) { + super(remoteHandle, new ModelContext(handlesimplesqsevent.class), ""); + } + + public handlesimplesqsevent(int remoteHandle, ModelContext context) { + super(remoteHandle, context, ""); + } + + + public void execute(String aP0, com.genexus.genexusserverlessapi.SdtEventMessageResponse[] aP1) { + execute_int(aP0, aP1); + } + + private void execute_int(String aP0, com.genexus.genexusserverlessapi.SdtEventMessageResponse[] aP1) { + handlesimplesqsevent.this.AV13RAWMessage = aP0; + handlesimplesqsevent.this.aP1 = aP1; + initialize(); + /* GeneXus formulas */ + /* Output device settings */ + privateExecute(); + } + + private void privateExecute() { + System.out.println("START EventBridge Event received"); + System.out.println("END EventBridge Event received"); + handlesimplesqsevent.this.AV9EventMessageResponse.setgxTv_SdtEventMessageResponse_Handled(true); + cleanup(); + } + + protected void cleanup() { + this.aP1[0] = handlesimplesqsevent.this.AV9EventMessageResponse; + CloseOpenCursors(); + exitApp(); + } + + protected void CloseOpenCursors() { + } + + /* Aggregate/select formulas */ + public void initialize() { + AV9EventMessageResponse = new com.genexus.genexusserverlessapi.SdtEventMessageResponse(remoteHandle, context); + AV16Pgmname = ""; + AV16Pgmname = "EventDriven.Queue.HandleSimpleRAWSQSEvent"; + /* GeneXus formulas. */ + AV16Pgmname = "EventDriven.Queue.HandleSimpleRAWSQSEvent"; + Gx_err = (short) (0); + } + + private short Gx_err; + private String AV13RAWMessage; + private String AV16Pgmname; + private com.genexus.genexusserverlessapi.SdtEventMessageResponse[] aP1; + private com.genexus.genexusserverlessapi.SdtEventMessageResponse AV9EventMessageResponse; +} + diff --git a/gxawsserverless/src/test/java/com/unittest/eventdriven/dummy/handlesimplesqsevent2.java b/gxawsserverless/src/test/java/com/unittest/eventdriven/dummy/handlesimplesqsevent2.java new file mode 100644 index 000000000..d12c39f98 --- /dev/null +++ b/gxawsserverless/src/test/java/com/unittest/eventdriven/dummy/handlesimplesqsevent2.java @@ -0,0 +1,80 @@ +package com.unittest.eventdriven.dummy; + +import com.genexus.GXBaseCollection; +import com.genexus.GXProcedure; +import com.genexus.ModelContext; +import com.genexus.SdtMessages_Message; + +public final class handlesimplesqsevent2 extends GXProcedure { + public handlesimplesqsevent2(int remoteHandle) { + super(remoteHandle, new ModelContext(handlesimplesqsevent2.class), ""); + } + + public handlesimplesqsevent2(int remoteHandle, + ModelContext context) { + super(remoteHandle, context, ""); + } + + @SuppressWarnings("unchecked") + public com.genexus.genexusserverlessapi.SdtEventMessageResponse executeUdp(com.genexus.genexusserverlessapi.SdtEventMessages aP0) { + handlesimplesqsevent2.this.aP1 = new com.genexus.genexusserverlessapi.SdtEventMessageResponse[]{new com.genexus.genexusserverlessapi.SdtEventMessageResponse()}; + execute_int(aP0, aP1); + return aP1[0]; + } + + public void execute(com.genexus.genexusserverlessapi.SdtEventMessages aP0, + com.genexus.genexusserverlessapi.SdtEventMessageResponse[] aP1) { + execute_int(aP0, aP1); + } + + private void execute_int(com.genexus.genexusserverlessapi.SdtEventMessages aP0, + com.genexus.genexusserverlessapi.SdtEventMessageResponse[] aP1) { + handlesimplesqsevent2.this.AV8EventMessages = aP0; + handlesimplesqsevent2.this.aP1 = aP1; + initialize(); + /* GeneXus formulas */ + /* Output device settings */ + privateExecute(); + } + + private void privateExecute() { + System.out.println("START EventBridge Event received"); + System.out.println("END EventBridge Event received"); + handlesimplesqsevent2.this.AV9EventMessageResponse.setgxTv_SdtEventMessageResponse_Handled(true); + cleanup(); + } + + protected void cleanup() { + this.aP1[0] = handlesimplesqsevent2.this.AV9EventMessageResponse; + CloseOpenCursors(); + exitApp(); + } + + protected void CloseOpenCursors() { + } + + /* Aggregate/select formulas */ + public void initialize() { + AV9EventMessageResponse = new com.genexus.genexusserverlessapi.SdtEventMessageResponse(remoteHandle, context); + AV15Pgmname = ""; + AV10EventMessage = new com.genexus.genexusserverlessapi.SdtEventMessage(remoteHandle, context); + AV12OutMessages = new GXBaseCollection(SdtMessages_Message.class, "Message", "GeneXus", remoteHandle); + AV11UserSDT = new com.unittest.eventdriven.SdtUser(remoteHandle); + AV15Pgmname = "EventDriven.Queue.HandleSimpleUserQueueEvent"; + /* GeneXus formulas. */ + AV15Pgmname = "EventDriven.Queue.HandleSimpleUserQueueEvent"; + Gx_err = (short) (0); + } + + private short Gx_err; + private int AV16GXV1; + private String AV15Pgmname; + private boolean returnInSub; + private com.unittest.eventdriven.SdtUser AV11UserSDT; + private com.genexus.genexusserverlessapi.SdtEventMessageResponse[] aP1; + private GXBaseCollection AV12OutMessages; + private com.genexus.genexusserverlessapi.SdtEventMessages AV8EventMessages; + private com.genexus.genexusserverlessapi.SdtEventMessage AV10EventMessage; + private com.genexus.genexusserverlessapi.SdtEventMessageResponse AV9EventMessageResponse; +} + diff --git a/gxawsserverless/src/test/java/com/unittest/eventdriven/queue/handlesimplesqsevent.java b/gxawsserverless/src/test/java/com/unittest/eventdriven/queue/handlesimplesqsevent.java new file mode 100644 index 000000000..e5ae43f17 --- /dev/null +++ b/gxawsserverless/src/test/java/com/unittest/eventdriven/queue/handlesimplesqsevent.java @@ -0,0 +1,62 @@ +package com.unittest.eventdriven.queue; + +import com.genexus.*; + +public final class handlesimplesqsevent extends GXProcedure { + public handlesimplesqsevent(int remoteHandle) { + super(remoteHandle, new ModelContext(handlesimplesqsevent.class), ""); + } + + public handlesimplesqsevent(int remoteHandle, ModelContext context) { + super(remoteHandle, context, ""); + } + + + public void execute(String aP0, com.genexus.genexusserverlessapi.SdtEventMessageResponse[] aP1) { + execute_int(aP0, aP1); + } + + private void execute_int(String aP0, com.genexus.genexusserverlessapi.SdtEventMessageResponse[] aP1) { + handlesimplesqsevent.this.AV13RAWMessage = aP0; + handlesimplesqsevent.this.aP1 = aP1; + initialize(); + /* GeneXus formulas */ + /* Output device settings */ + privateExecute(); + } + + private void privateExecute() { + System.out.println("START Queue Event received"); + System.out.println(AV13RAWMessage); + System.out.println("END Queue Event received"); + System.out.println((boolean) ((GXutil.len(AV13RAWMessage) > 0))); + AV9EventMessageResponse.setgxTv_SdtEventMessageResponse_Handled(AV13RAWMessage.startsWith("{\"records\":[{\"messageId\":\"1\",\"receiptHandle\":\"123123\",\"body\":\"")); + cleanup(); + } + + protected void cleanup() { + this.aP1[0] = handlesimplesqsevent.this.AV9EventMessageResponse; + CloseOpenCursors(); + exitApp(); + } + + protected void CloseOpenCursors() { + } + + /* Aggregate/select formulas */ + public void initialize() { + AV9EventMessageResponse = new com.genexus.genexusserverlessapi.SdtEventMessageResponse(remoteHandle, context); + AV16Pgmname = ""; + AV16Pgmname = "EventDriven.Queue.HandleSimpleRAWSQSEvent"; + /* GeneXus formulas. */ + AV16Pgmname = "EventDriven.Queue.HandleSimpleRAWSQSEvent"; + Gx_err = (short) (0); + } + + private short Gx_err; + private String AV13RAWMessage; + private String AV16Pgmname; + private com.genexus.genexusserverlessapi.SdtEventMessageResponse[] aP1; + private com.genexus.genexusserverlessapi.SdtEventMessageResponse AV9EventMessageResponse; +} + diff --git a/gxawsserverless/src/test/java/com/unittest/eventdriven/queue/handlesimplesqsevent2.java b/gxawsserverless/src/test/java/com/unittest/eventdriven/queue/handlesimplesqsevent2.java new file mode 100644 index 000000000..df68e999c --- /dev/null +++ b/gxawsserverless/src/test/java/com/unittest/eventdriven/queue/handlesimplesqsevent2.java @@ -0,0 +1,95 @@ +package com.unittest.eventdriven.queue; + +import com.genexus.*; + +public final class handlesimplesqsevent2 extends GXProcedure { + public handlesimplesqsevent2(int remoteHandle) { + super(remoteHandle, new ModelContext(handlesimplesqsevent2.class), ""); + } + + public handlesimplesqsevent2(int remoteHandle, + ModelContext context) { + super(remoteHandle, context, ""); + } + + @SuppressWarnings("unchecked") + public com.genexus.genexusserverlessapi.SdtEventMessageResponse executeUdp(com.genexus.genexusserverlessapi.SdtEventMessages aP0) { + handlesimplesqsevent2.this.aP1 = new com.genexus.genexusserverlessapi.SdtEventMessageResponse[]{new com.genexus.genexusserverlessapi.SdtEventMessageResponse()}; + execute_int(aP0, aP1); + return aP1[0]; + } + + public void execute(com.genexus.genexusserverlessapi.SdtEventMessages aP0, + com.genexus.genexusserverlessapi.SdtEventMessageResponse[] aP1) { + execute_int(aP0, aP1); + } + + private void execute_int(com.genexus.genexusserverlessapi.SdtEventMessages aP0, + com.genexus.genexusserverlessapi.SdtEventMessageResponse[] aP1) { + handlesimplesqsevent2.this.AV8EventMessages = aP0; + handlesimplesqsevent2.this.aP1 = aP1; + initialize(); + /* GeneXus formulas */ + /* Output device settings */ + privateExecute(); + } + + private void privateExecute() { + System.out.println("START Queue Event received"); + System.out.println(AV8EventMessages.toJSonString(false, true)); + + AV16GXV1 = 1; + while (AV16GXV1 <= AV8EventMessages.getgxTv_SdtEventMessages_Eventmessage().size()) { + AV10EventMessage = (com.genexus.genexusserverlessapi.SdtEventMessage) ((com.genexus.genexusserverlessapi.SdtEventMessage) AV8EventMessages.getgxTv_SdtEventMessages_Eventmessage().elementAt(-1 + AV16GXV1)); + System.out.println("Processing: " + AV10EventMessage.toJSonString(false, true)); + AV9EventMessageResponse.setgxTv_SdtEventMessageResponse_Handled(AV11UserSDT.fromJSonString(AV10EventMessage.getgxTv_SdtEventMessage_Eventmessagedata(), AV12OutMessages)); + if (!AV9EventMessageResponse.getgxTv_SdtEventMessageResponse_Handled()) { + System.out.println("EventMessageData could not be parsed: " + AV10EventMessage.getgxTv_SdtEventMessage_Eventmessagedata()); + System.out.println(AV12OutMessages.toJSonString(false)); + AV9EventMessageResponse.setgxTv_SdtEventMessageResponse_Errormessage(AV12OutMessages.toJSonString(false)); + returnInSub = true; + cleanup(); + if (true) return; + } + System.out.println("UserSDT Processed OK: " + AV11UserSDT.toJSonString(false, true)); + ; + AV16GXV1 = (int) (AV16GXV1 + 1); + } + System.out.println("END Queue Event received"); + cleanup(); + } + + protected void cleanup() { + this.aP1[0] = handlesimplesqsevent2.this.AV9EventMessageResponse; + CloseOpenCursors(); + exitApp(); + } + + protected void CloseOpenCursors() { + } + + /* Aggregate/select formulas */ + public void initialize() { + AV9EventMessageResponse = new com.genexus.genexusserverlessapi.SdtEventMessageResponse(remoteHandle, context); + AV15Pgmname = ""; + AV10EventMessage = new com.genexus.genexusserverlessapi.SdtEventMessage(remoteHandle, context); + AV12OutMessages = new GXBaseCollection(com.genexus.SdtMessages_Message.class, "Message", "GeneXus", remoteHandle); + AV11UserSDT = new com.unittest.eventdriven.SdtUser(remoteHandle); + AV15Pgmname = "EventDriven.Queue.HandleSimpleUserQueueEvent"; + /* GeneXus formulas. */ + AV15Pgmname = "EventDriven.Queue.HandleSimpleUserQueueEvent"; + Gx_err = (short) (0); + } + + private short Gx_err; + private int AV16GXV1; + private String AV15Pgmname; + private boolean returnInSub; + private com.unittest.eventdriven.SdtUser AV11UserSDT; + private com.genexus.genexusserverlessapi.SdtEventMessageResponse[] aP1; + private GXBaseCollection AV12OutMessages; + private com.genexus.genexusserverlessapi.SdtEventMessages AV8EventMessages; + private com.genexus.genexusserverlessapi.SdtEventMessage AV10EventMessage; + private com.genexus.genexusserverlessapi.SdtEventMessageResponse AV9EventMessageResponse; +} + diff --git a/gxawsserverless/src/test/java/log4j2.xml b/gxawsserverless/src/test/java/log4j2.xml index 6c2178224..412bab990 100644 --- a/gxawsserverless/src/test/java/log4j2.xml +++ b/gxawsserverless/src/test/java/log4j2.xml @@ -1,21 +1,21 @@ - - logs - - - - - - - - - - - - - - - - + + logs + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/java/src/main/java/com/genexus/webpanels/HttpContextWeb.java b/java/src/main/java/com/genexus/webpanels/HttpContextWeb.java index 517f5caf0..0c0aaf342 100644 --- a/java/src/main/java/com/genexus/webpanels/HttpContextWeb.java +++ b/java/src/main/java/com/genexus/webpanels/HttpContextWeb.java @@ -1481,6 +1481,7 @@ public void setStream() { public void flushStream() { proxyCookieValues(); + try { if (buffered) { // Esto en realidad cierra el ZipOutputStream, o el ByteOutputStream, no cierra @@ -1490,6 +1491,7 @@ public void flushStream() { // que se grabaron al bytearray closeOutputStream(); IHttpServletResponse response = getResponse(); + if (buffer != null && !response.isCommitted()) { IServletOutputStream stream = response.getOutputStream(); response.setContentLength(buffer.size());