You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@streampipes.apache.org by ze...@apache.org on 2023/01/10 09:07:08 UTC

[streampipes] branch SP-1065 updated: [#1065] Replace library underscore with jackson-dataformat-xml

This is an automated email from the ASF dual-hosted git repository.

zehnder pushed a commit to branch SP-1065
in repository https://gitbox.apache.org/repos/asf/streampipes.git


The following commit(s) were added to refs/heads/SP-1065 by this push:
     new c36c21fce  [#1065] Replace library underscore with jackson-dataformat-xml
c36c21fce is described below

commit c36c21fceeae298af9e26904b29ded73be6cd4a4
Author: Philipp Zehnder <te...@users.noreply.github.com>
AuthorDate: Tue Jan 10 10:06:58 2023 +0100

     [#1065] Replace library underscore with jackson-dataformat-xml
---
 pom.xml                                            |  6 ----
 streampipes-extensions-management/pom.xml          |  8 ++---
 .../connect/adapter/format/xml/XmlParser.java      | 37 +++++++++++++++++-----
 3 files changed, 33 insertions(+), 18 deletions(-)

diff --git a/pom.xml b/pom.xml
index 9a76c9204..41a94c326 100644
--- a/pom.xml
+++ b/pom.xml
@@ -127,7 +127,6 @@
 	<spring-security.version>6.0.1</spring-security.version>
 	<swagger.version>2.2.7</swagger.version>
 	<type-parser.version>0.7.0</type-parser.version>
-	<underscore.version>1.47</underscore.version>
 	<wildfly-common.version>1.6.0.Final</wildfly-common.version>
 	<hawtbuf.version>1.11</hawtbuf.version>
 	<netty-tc-native.version>2.0.52.Final</netty-tc-native.version>
@@ -373,11 +372,6 @@
 					<artifactId>commons-logging</artifactId>
 					<version>${commons-logging.version}</version>
 				</dependency>
-				<dependency>
-					<groupId>com.github.javadev</groupId>
-					<artifactId>underscore</artifactId>
-					<version>${underscore.version}</version>
-				</dependency>
 				<dependency>
 					<groupId>com.squareup</groupId>
 					<artifactId>javapoet</artifactId>
diff --git a/streampipes-extensions-management/pom.xml b/streampipes-extensions-management/pom.xml
index 473cde354..bc893851f 100644
--- a/streampipes-extensions-management/pom.xml
+++ b/streampipes-extensions-management/pom.xml
@@ -102,10 +102,6 @@
             <groupId>ch.qos.logback</groupId>
             <artifactId>logback-classic</artifactId>
         </dependency>
-        <dependency>
-            <groupId>com.github.javadev</groupId>
-            <artifactId>underscore</artifactId>
-        </dependency>
         <dependency>
             <groupId>de.grundid.opendatalab</groupId>
             <artifactId>geojson-jackson</artifactId>
@@ -114,6 +110,10 @@
             <groupId>jakarta.json</groupId>
             <artifactId>jakarta.json-api</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.dataformat</groupId>
+            <artifactId>jackson-dataformat-xml</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.eclipse.parsson</groupId>
             <artifactId>jakarta.json</artifactId>
diff --git a/streampipes-extensions-management/src/main/java/org/apache/streampipes/extensions/management/connect/adapter/format/xml/XmlParser.java b/streampipes-extensions-management/src/main/java/org/apache/streampipes/extensions/management/connect/adapter/format/xml/XmlParser.java
index 5c8f372b7..6eefbd546 100644
--- a/streampipes-extensions-management/src/main/java/org/apache/streampipes/extensions/management/connect/adapter/format/xml/XmlParser.java
+++ b/streampipes-extensions-management/src/main/java/org/apache/streampipes/extensions/management/connect/adapter/format/xml/XmlParser.java
@@ -26,11 +26,12 @@ import org.apache.streampipes.extensions.management.connect.adapter.format.util.
 import org.apache.streampipes.extensions.management.connect.adapter.model.generic.Parser;
 import org.apache.streampipes.extensions.management.connect.adapter.sdk.ParameterExtractor;
 import org.apache.streampipes.model.connect.grounding.FormatDescription;
+import org.apache.streampipes.model.connect.guess.AdapterGuessInfo;
+import org.apache.streampipes.model.connect.guess.GuessTypeInfo;
 import org.apache.streampipes.model.schema.EventProperty;
 import org.apache.streampipes.model.schema.EventSchema;
 
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.github.underscore.lodash.U;
+import com.fasterxml.jackson.dataformat.xml.XmlMapper;
 import com.google.common.base.Charsets;
 import com.google.common.io.CharStreams;
 import com.google.gson.Gson;
@@ -42,6 +43,7 @@ import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 public class XmlParser extends Parser {
 
@@ -49,10 +51,11 @@ public class XmlParser extends Parser {
   private static final String ENCODING = "#encoding";
 
   private String tag;
-  private ObjectMapper objectMapper;
+
+  private XmlMapper xmlMapper;
 
   public XmlParser() {
-    this.objectMapper = new ObjectMapper();
+    this.xmlMapper = new XmlMapper();
   }
 
   public XmlParser(String tag) {
@@ -75,8 +78,8 @@ public class XmlParser extends Parser {
     try {
       String dataString = CharStreams.toString(new InputStreamReader(data, Charsets.UTF_8));
 
-      Map<String, Object> map =
-          (Map<String, Object>) U.fromXmlWithoutNamespaces(dataString);
+      Map<String, Object> map = xmlMapper.readValue(dataString, Map.class);
+
       map.remove(ENCODING);
       Map<String, Object> convertedMap = new XmlMapConverter(map).convert();
       searchAndEmitEvents(convertedMap, tag, emitBinaryEvent);
@@ -89,6 +92,17 @@ public class XmlParser extends Parser {
 
   @Override
   public EventSchema getEventSchema(List<byte[]> oneEvent) {
+    return this.getSchemaAndSample(oneEvent).getEventSchema();
+  }
+
+
+  @Override
+  public boolean supportsPreview() {
+    return true;
+  }
+
+
+  public AdapterGuessInfo getSchemaAndSample(List<byte[]> eventSample) throws ParseException {
     EventSchema resultSchema = new EventSchema();
 
     JsonDataFormatDefinition jsonDefinition = new JsonDataFormatDefinition();
@@ -96,7 +110,7 @@ public class XmlParser extends Parser {
     Map<String, Object> exampleEvent = null;
 
     try {
-      exampleEvent = jsonDefinition.toMap(oneEvent.get(0));
+      exampleEvent = jsonDefinition.toMap(eventSample.get(0));
     } catch (SpRuntimeException e) {
       logger.error(e.toString());
     }
@@ -106,9 +120,16 @@ public class XmlParser extends Parser {
       resultSchema.addEventProperty(p);
     }
 
-    return resultSchema;
+    var sample = exampleEvent
+        .entrySet()
+        .stream()
+        .collect(Collectors.toMap(Map.Entry::getKey, e ->
+            new GuessTypeInfo(e.getValue().getClass().getCanonicalName(), e.getValue())));
+
+    return new AdapterGuessInfo(resultSchema, sample);
   }
 
+
   private void searchAndEmitEvents(Map<String, Object> map, String key, EmitBinaryEvent emitBinaryEvent) {
     Gson gson = new Gson();