diff --git a/README.md b/README.md
index 3fe5937..e4ce89f 100644
--- a/README.md
+++ b/README.md
@@ -22,7 +22,7 @@ Installing the built jar files:
* ArcGIS GeoEvent Extension for Server.
* ArcGIS GeoEvent Extension SDK.
-* Java JDK 1.7 or greater.
+* Java JDK 1.8 or greater.
* Maven.
## Resources
diff --git a/http-handler-for-geoevent.iml b/http-handler-for-geoevent.iml
new file mode 100644
index 0000000..45fccf8
--- /dev/null
+++ b/http-handler-for-geoevent.iml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/httpHandler-processor/pom.xml b/httpHandler-processor/pom.xml
index 8c0d45f..15596e5 100644
--- a/httpHandler-processor/pom.xml
+++ b/httpHandler-processor/pom.xml
@@ -4,7 +4,7 @@
com.esri.geoevent.parent
httpHandler
- 10.5.0
+ 11.3.0
com.esri.geoevent.processor
httpHandler-processor
@@ -14,7 +14,12 @@
org.json
json
- 20160810
+ 20240303
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ 2.10.0
@@ -22,6 +27,7 @@
org.apache.felix
maven-bundle-plugin
+ 5.1.2
true
@@ -30,8 +36,10 @@
${project.version}
com.esri.geoevent.processor.httpHandler
- *,!org.son
- json
+
+ *
+
+ json,jackson-databind
diff --git a/httpHandler-processor/src/main/java/com/esri/geoevent/processor/httpHandler/HttpHandler.java b/httpHandler-processor/src/main/java/com/esri/geoevent/processor/httpHandler/HttpHandler.java
index dd9ff2f..697b10a 100644
--- a/httpHandler-processor/src/main/java/com/esri/geoevent/processor/httpHandler/HttpHandler.java
+++ b/httpHandler-processor/src/main/java/com/esri/geoevent/processor/httpHandler/HttpHandler.java
@@ -20,6 +20,7 @@
Redlands, California, USA 92373
email: contracts@esri.com
+ clean install -Dcontact.address=[hjose@img.com.br]
*/
package com.esri.geoevent.processor.httpHandler;
@@ -48,7 +49,7 @@
import org.apache.http.StatusLine;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.util.EntityUtils;
-import org.codehaus.jackson.map.ObjectMapper;
+import com.fasterxml.jackson.databind.ObjectMapper;
import org.json.JSONObject;
import org.json.XML;
@@ -344,7 +345,64 @@ else if(tempPostBodyParts[i].equals("$currentDateTime"))
{
LOGGER.debug("New PostBody " + newPostBody);
}
-
+ String[] processedHeaders = new String[headers.length]; //To get params from header
+ List fdl = gd.getFieldDefinitions();
+ for (int i = 0; i < headers.length; i++)
+ {
+ String[] nameValue = headers[i].split(":"); //To get params from header name if needed
+ // Process header name
+ String[] nameParts = nameValue[0].split("[{*}]");
+ String processedName = "";
+ for (String part : nameParts)
+ {
+
+ if (part != null && !part.isEmpty()) {
+ Integer idx = gd.getIndexOf(part);
+ if (idx >= 0)
+ {
+ Field field = geoevent.getField(new FieldExpression(part));
+ if (field != null)
+ {
+ part = field.getValue().toString();
+ }
+ }
+ }
+ processedName += part;
+ }
+
+ // Process header value
+ String processedValue = ""; //To get params from header values if needed
+ if (nameValue.length > 1) // To avoid ArrayIndexOutOfBoundsException
+ {
+ String[] valueParts = nameValue[1].split("[{*}]");
+ for (String part : valueParts)
+ {
+ if (part != null && !part.isEmpty()) {
+ Integer idx = gd.getIndexOf(part);
+ if (idx >= 0)
+ {
+ Field field = geoevent.getField(new FieldExpression(part));
+ if (field != null)
+ {
+ part = field.getValue().toString();
+ }
+ }
+ }
+ processedValue += part;
+ }
+ }
+ else
+ {
+ LOGGER.error("Invalid header format for: " + headers[i]);
+ }
+
+ // Store the processed header
+ processedHeaders[i] = processedName + ":" + processedValue;
+ }
+
+ // Set processed headers for use in getFeed
+ headers = processedHeaders;
+ LOGGER.info("headers: \n" + headers.toString());
HttpRequester httpRequester = new HttpRequester(newURL, newPostBody);
executor.execute(httpRequester);
@@ -501,7 +559,7 @@ private String csvToJson(String responseBody)
{
for (Integer i = 0; i < values.length; i++)
{
- if (NumberUtils.isNumber(values[i]))
+ if (NumberUtils.isCreatable(values[i]))
{
json += "\"field" + i.toString() + "\":" + values[i];
}
@@ -556,7 +614,7 @@ private String csvToJson(String responseBody)
{
FieldDefinition fd = fds.get(i);
String fieldName = fd.getName();
- if (NumberUtils.isNumber(values[i]))
+ if (NumberUtils.isCreatable(values[i]))
{
json += "\"" + fieldName + "\":" + values[i];
}
diff --git a/httpHandler-processor/src/main/java/com/esri/geoevent/processor/httpHandler/HttpHandlerAdapter.java b/httpHandler-processor/src/main/java/com/esri/geoevent/processor/httpHandler/HttpHandlerAdapter.java
index 257091d..0926372 100644
--- a/httpHandler-processor/src/main/java/com/esri/geoevent/processor/httpHandler/HttpHandlerAdapter.java
+++ b/httpHandler-processor/src/main/java/com/esri/geoevent/processor/httpHandler/HttpHandlerAdapter.java
@@ -34,15 +34,17 @@
import java.util.Iterator;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
+import java.util.List;
+
+import com.fasterxml.jackson.core.JsonFactory;
+import com.fasterxml.jackson.core.JsonLocation;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.core.JsonParseException;
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.core.JsonToken;
+import com.fasterxml.jackson.databind.ObjectMapper;
-import org.codehaus.jackson.JsonFactory;
-import org.codehaus.jackson.JsonLocation;
-import org.codehaus.jackson.JsonNode;
-import org.codehaus.jackson.JsonParseException;
-import org.codehaus.jackson.JsonParser;
-import org.codehaus.jackson.JsonProcessingException;
-import org.codehaus.jackson.JsonToken;
-import org.codehaus.jackson.map.ObjectMapper;
import com.esri.ges.adapter.AdapterDefinition;
import com.esri.ges.adapter.InboundAdapterBase;
@@ -217,7 +219,7 @@ public void receive(String json)
{
String jsonStrings = StringUtil.removeUTF8BOM(stringBuilder.toString());
- ArrayList objectStrings = parseToIndividualObjects(jsonStrings);
+ List objectStrings = parseToIndividualObjects(jsonStrings);
for (String jsonString : objectStrings)
{
remainingString = jsonString;
@@ -240,64 +242,60 @@ public void receive(String json)
LOGGER.error("PARSE_ERROR");
LOGGER.info(ex.getMessage(), ex);
}
+ catch (Exception ex)
+ {
+ LOGGER.debug(ex.getMessage(), ex);
+ }
}
- private ArrayList parseToIndividualObjects(String inputString) throws JsonProcessingException, IOException
+ private List parseToIndividualObjects(String inputString) throws JsonProcessingException, IOException
{
- ArrayList results = new ArrayList<>();
- JsonParser parser = new JsonFactory().createJsonParser(inputString);
- LOGGER.debug("At the very beginning, the current location is " + parser.getCurrentLocation().getCharOffset());
- // JsonNode tree = parser.readValueAsTree();
- int depth = 0;
- int start = 0;
- JsonToken currentToken = null;
- while (true)
- {
- try
- {
- currentToken = parser.nextToken();
- }
- catch (JsonParseException ex)
- {
- String leftovers = inputString.substring(start);
- LOGGER.debug("Leftovers = " + leftovers);
- results.add(leftovers);
- currentToken = null;
- }
- if (currentToken == null)
- break;
- if (currentToken == JsonToken.START_OBJECT || currentToken == JsonToken.START_ARRAY)
- {
- if (depth == 0)
- {
- LOGGER.debug("At the start of an object, the current location is " + parser.getCurrentLocation().getCharOffset());
- start = (int) parser.getCurrentLocation().getCharOffset();
- }
- depth++;
- }
- else if (currentToken == JsonToken.END_OBJECT || currentToken == JsonToken.END_ARRAY)
- {
- depth--;
- if (depth == 0)
- {
- // we have a complete object
- LOGGER.debug("At the end of an object, the current location is " + parser.getCurrentLocation().getCharOffset());
- int end = (int) parser.getCurrentLocation().getCharOffset() + 1;
- String jsonObjectString = inputString.substring(start, end);
- start = end;
- LOGGER.debug("jsonObject = " + jsonObjectString);
- results.add(jsonObjectString);
- }
+ List results = new ArrayList<>();
+ JsonFactory factory = new JsonFactory();
+ ObjectMapper mapper = new ObjectMapper(factory);
+
+ try (JsonParser parser = factory.createParser(inputString)) {
+ int depth = 0;
+ int start = 0;
+ JsonToken currentToken;
+
+ while ((currentToken = parser.nextToken()) != null) {
+ if (currentToken.isStructStart()) {
+ if (depth == 0) {
+ start = (int) parser.getTokenLocation().getCharOffset();
+ }
+ depth++;
+ } else if (currentToken.isStructEnd()) {
+ depth--;
+ if (depth == 0) {
+ int end = (int) parser.getTokenLocation().getCharOffset() + 1;
+ String jsonObjectString = inputString.substring(start, end);
+ results.add(jsonObjectString);
+ start = end;
+ }
+ }
+ }
+
+ // If there is leftover JSON after parsing, add it to the results
+ if (depth > 0) {
+ String leftovers = inputString.substring(start);
+ results.add(leftovers);
+ }
+ } catch (JsonProcessingException e) {
+ throw new IOException("Error processing JSON", e);
}
- }
- return results;
+
+ return results;
+
}
public static void main(String[] args) throws JsonParseException, IOException
{
String test = "{\"name\":\"ryan\"}{\"name\":\"ric";
- JsonParser outerParser = new JsonFactory().createJsonParser(test);
- ObjectMapper mapper = new ObjectMapper();
+ JsonFactory factory = new JsonFactory();
+ ObjectMapper mapper = new ObjectMapper(factory);
+ JsonParser outerParser = factory.createParser(test);
+
Iterator itr = mapper.readValues(outerParser, JsonNode.class);
while (itr.hasNext())
{
diff --git a/httpHandler-processor/src/main/java/com/esri/geoevent/processor/httpHandler/HttpHandlerDefinition.java b/httpHandler-processor/src/main/java/com/esri/geoevent/processor/httpHandler/HttpHandlerDefinition.java
index 9835af4..aef2f2d 100644
--- a/httpHandler-processor/src/main/java/com/esri/geoevent/processor/httpHandler/HttpHandlerDefinition.java
+++ b/httpHandler-processor/src/main/java/com/esri/geoevent/processor/httpHandler/HttpHandlerDefinition.java
@@ -70,7 +70,7 @@ public HttpHandlerDefinition()
propertyDefinitions.put("NewGeoEventDefinitionName", new PropertyDefinition("NewGeoEventDefinitionName", PropertyType.String, "NewGeoEventDefinition", "New GeoEvent Definition Name", "New GeoEvent Definition Name", "CreateGeoEventDefinition=true", false, false));
propertyDefinitions.put("ExistingGeoEventDefinitionName", new PropertyDefinition("ExistingGeoEventDefinitionName", PropertyType.String, "ExistingGeoEventDefinition", "Existing GeoEvent Definition Name", "Existing GeoEvent Definition Name", "CreateGeoEventDefinition=false", false, false));
- propertyDefinitions.put("headers", new PropertyDefinition("headers", PropertyType.String, "", "Headers", "HTTP headers name:value with | separator", false, false));
+ propertyDefinitions.put("headers", new PropertyDefinition("headers", PropertyType.String, "", "Headers", "HTTP headers name:value with | separator (params after :{field})", false, false));
propertyDefinitions.put("body", new PropertyDefinition("body", PropertyType.String, "", "Body", "HTTP body", "httpMethod=POST,httpMethod=PUT", false, false));
propertyDefinitions.put("TrackIdField", new PropertyDefinition("TrackIdField", PropertyType.String, "", "TrackId Field", "TrackId Field", false, false));
@@ -109,13 +109,14 @@ public String getDomain()
@Override
public String getVersion()
{
- return "10.5.0";
+ return "11.3.0";
}
@Override
public String getLabel()
{
- return "${com.esri.geoevent.processor.httpHandler-processor.PROCESSOR_LABEL}";
+ return "Http Handlerv2";
+ //return "${com.esri.geoevent.processor.httpHandler-processor.PROCESSOR_LABEL}";
}
@Override
diff --git a/httpHandler-processor/src/main/java/com/esri/geoevent/processor/httpHandler/JsonInboundParser.java b/httpHandler-processor/src/main/java/com/esri/geoevent/processor/httpHandler/JsonInboundParser.java
index a7167da..c8b18d3 100644
--- a/httpHandler-processor/src/main/java/com/esri/geoevent/processor/httpHandler/JsonInboundParser.java
+++ b/httpHandler-processor/src/main/java/com/esri/geoevent/processor/httpHandler/JsonInboundParser.java
@@ -34,8 +34,8 @@
import java.util.List;
import java.util.regex.Pattern;
-import org.codehaus.jackson.JsonNode;
-import org.codehaus.jackson.node.NullNode;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.node.NullNode;
import com.esri.core.geometry.Line;
import com.esri.core.geometry.MapGeometry;
@@ -117,7 +117,7 @@ public void findNodes(JsonNode tree, String nodeName, GeoEventProducer geoEventP
{
if (tree.isArray())
{
- Iterator elements = tree.getElements();
+ Iterator elements = tree.elements();
while (elements.hasNext())
{
JsonNode element = elements.next();
@@ -148,7 +148,7 @@ else if (tree.has(nodeName))
}
else
{
- Iterator elements = tree.getElements();
+ Iterator elements = tree.elements();
while (elements.hasNext())
{
JsonNode element = elements.next();
@@ -375,7 +375,7 @@ private void populateGeoEvent(FieldGroup event, JsonNode node, List fieldNames = node.getFieldNames(); fieldNames != null && fieldNames.hasNext();)
+ for (Iterator fieldNames = node.fieldNames(); fieldNames != null && fieldNames.hasNext();)
{
String fieldName = null;
try
@@ -398,7 +398,7 @@ private void populateGeoEvent(FieldGroup event, JsonNode node, List results = new ArrayList