Skip to content

Commit 8e9db20

Browse files
sjuarezBeta Bot
authored andcommitted
Cherry pick branch 'genexuslabs:AzureFunctions' into beta
1 parent bba507b commit 8e9db20

File tree

4 files changed

+29
-14
lines changed

4 files changed

+29
-14
lines changed

gxazureserverless/src/main/java/com/genexus/cloud/serverless/azure/handler/AzureCosmosDBHandler.java

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,36 +3,32 @@
33
import com.genexus.cloud.serverless.model.*;
44
import com.microsoft.azure.functions.ExecutionContext;
55
import com.microsoft.azure.functions.annotation.CosmosDBTrigger;
6-
import com.sun.jna.platform.win32.Guid;
76

8-
import java.util.Date;
9-
import java.util.List;
10-
import java.util.Map;
7+
import java.util.*;
118

129
public class AzureCosmosDBHandler extends AzureEventHandler{
1310

1411
public AzureCosmosDBHandler() throws Exception {
1512
super();
1613
}
1714
public void run(
18-
@CosmosDBTrigger(name = "itemIn", databaseName = "%CosmosDB_Database_Name%", containerName = "%Container_Name%", leaseContainerName = "%lease_Container_Name%", connection = "%CosmosDB_Connection%") List<Map<String,Object>> items ,
15+
@CosmosDBTrigger(name = "itemIn", databaseName = "%CosmosDB_Database_Name%", containerName = "%Container_Name%", leaseContainerName = "%lease_Container_Name%", connection = "connection") List<Object> items ,
1916
final ExecutionContext context) throws Exception {
2017

2118
context.getLogger().info("GeneXus CosmosDB trigger handler. Function processed: " + context.getFunctionName() + " Invocation Id: " + context.getInvocationId());
2219

23-
Guid.GUID eventId = new Guid.GUID(context.getInvocationId());
24-
20+
UUID eventId = UUID.randomUUID();
2521
EventMessages msgs = new EventMessages();
2622
EventMessagesList eventMessagesList = new EventMessagesList();
2723
String rawMessage= "";
2824
setupServerlessMappings(context.getFunctionName());
2925

3026
switch (executor.getMethodSignatureIdx()) {
3127
case 0:
32-
msgs = setupEventMessages(eventId,items);
28+
msgs = setupEventMessages(eventId,TryGetDocuments(items));
3329
break;
3430
case 4:
35-
eventMessagesList = setupEventMessagesList(items);
31+
eventMessagesList = setupEventMessagesList(TryGetDocuments(items));
3632
break;
3733
default:
3834
rawMessage = JSONHelper.toJSONString(items);
@@ -50,6 +46,26 @@ public void run(
5046
}
5147
}
5248

49+
private List<Map<String,Object>> TryGetDocuments(List<Object> items){
50+
List<Map<String,Object>> documents = new ArrayList<>();
51+
if (items != null && !items.isEmpty()) {
52+
for (Object item : items) {
53+
if (item instanceof Map) {
54+
try {
55+
Map<String, Object> document = (Map<String, Object>) item;
56+
documents.add(document);
57+
}
58+
catch (Exception ex)
59+
{
60+
logger.error(String.format("Messages were not handled. Error trying to read Cosmos DB data. %s", ex.toString()));
61+
throw new RuntimeException(String.format("Error trying to read Cosmos DB data. %s", ex.toString())); //Throw the exception so the runtime can Retry the operation.
62+
}
63+
}
64+
}
65+
return documents;
66+
}
67+
return null;
68+
}
5369
private EventMessagesList setupEventMessagesList(List<Map<String,Object>> jsonList)
5470
{
5571
EventMessagesList messagesList = new EventMessagesList();
@@ -59,7 +75,7 @@ private EventMessagesList setupEventMessagesList(List<Map<String,Object>> jsonLi
5975
return messagesList;
6076
}
6177

62-
private EventMessages setupEventMessages(Guid.GUID eventId, List<Map<String,Object>> jsonList)
78+
private EventMessages setupEventMessages(UUID eventId, List<Map<String,Object>> jsonList)
6379
{
6480
EventMessages msgs = new EventMessages();
6581
for (Map<String, Object> json : jsonList) {

gxazureserverless/src/main/java/com/genexus/cloud/serverless/azure/handler/AzureQueueHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public void run(
3232
msg.setMessageSourceType(EventMessageSourceType.QUEUE_MESSAGE);
3333
try {
3434
String sanitizedTime = insertionTime.replace("\"", "");
35-
if (!sanitizedTime.endsWith("Z")) {
35+
if (!sanitizedTime.endsWith("Z") && !sanitizedTime.matches(".*[+-]\\d{2}:\\d{2}$")) {
3636
sanitizedTime += "Z";
3737
}
3838
Instant instant = Instant.from(Instant.parse(sanitizedTime));

gxazureserverless/src/main/java/com/genexus/cloud/serverless/helpers/ServiceBusSingleMessageProcessor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public ServiceBusProcessedMessage processQueueMessage(GXProcedureExecutor execut
2020
msg.setMessageSourceType(EventMessageSourceType.SERVICE_BUS_MESSAGE);
2121
try {
2222
String sanitizedTime = enqueuedTimeUtc.replace("\"", "");
23-
if (!sanitizedTime.endsWith("Z")) {
23+
if (!sanitizedTime.endsWith("Z") && !sanitizedTime.matches(".*[+-]\\d{2}:\\d{2}$")) {
2424
sanitizedTime += "Z";
2525
}
2626
Instant instant = Instant.from(Instant.parse(sanitizedTime));

gxazureserverless/src/test/java/com/genexus/cloud/azure/events/TestAzureCosmosDBHandler.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,11 @@ public class TestAzureCosmosDBHandler {
1515
private AzureCosmosDBHandler cosmosDBFunction;
1616
private ExecutionContext context;
1717

18-
1918
@Test
2019
public void testCosmosDBFunction() throws Exception {
2120

2221
cosmosDBFunction = new AzureCosmosDBHandler();
23-
List<Map<String, Object>> list = new ArrayList<>(2);
22+
List<Object> list = new ArrayList<>(2);
2423

2524
Map<String, Object> map1 = new HashMap<>();
2625
map1.put("UserId", "ac7f12fd-9784-4c93-94cd-7e02a7b1cf4b");

0 commit comments

Comments
 (0)