[ 
https://issues.apache.org/jira/browse/KARAF-5894?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16606127#comment-16606127
 ] 

ASF GitHub Bot commented on KARAF-5894:
---------------------------------------

fpapon closed pull request #47: [KARAF-5894] Introduce raw 
marshaller/unmarshaller
URL: https://github.com/apache/karaf-decanter/pull/47
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git 
a/appender/cassandra/src/main/cfg/org.apache.karaf.decanter.appender.cassandra.cfg
 
b/appender/cassandra/src/main/cfg/org.apache.karaf.decanter.appender.cassandra.cfg
index e1eef0d..21ed0fe 100644
--- 
a/appender/cassandra/src/main/cfg/org.apache.karaf.decanter.appender.cassandra.cfg
+++ 
b/appender/cassandra/src/main/cfg/org.apache.karaf.decanter.appender.cassandra.cfg
@@ -33,5 +33,5 @@ cassandra.host=
 # Cassandra port
 cassandra.port=9042
 
-# Marshaller to use
+# Marshaller to use (json is heavily recommended)
 marshaller.target=(dataFormat=json)
\ No newline at end of file
diff --git 
a/appender/elasticsearch-jest/src/main/cfg/org.apache.karaf.decanter.appender.elasticsearch.jest.cfg
 
b/appender/elasticsearch-jest/src/main/cfg/org.apache.karaf.decanter.appender.elasticsearch.jest.cfg
index 4947c2b..7a4a7f0 100644
--- 
a/appender/elasticsearch-jest/src/main/cfg/org.apache.karaf.decanter.appender.elasticsearch.jest.cfg
+++ 
b/appender/elasticsearch-jest/src/main/cfg/org.apache.karaf.decanter.appender.elasticsearch.jest.cfg
@@ -37,5 +37,5 @@ address=http://localhost:9200
 # Index type
 # index.type=decanter
 
-# Marshaller to use (json is recommended)
+# Marshaller to use (json is heavily recommended)
 marshaller.target=(dataFormat=json)
\ No newline at end of file
diff --git 
a/appender/elasticsearch-rest/src/main/cfg/org.apache.karaf.decanter.appender.elasticsearch.rest.cfg
 
b/appender/elasticsearch-rest/src/main/cfg/org.apache.karaf.decanter.appender.elasticsearch.rest.cfg
index 6de324e..b78db7e 100644
--- 
a/appender/elasticsearch-rest/src/main/cfg/org.apache.karaf.decanter.appender.elasticsearch.rest.cfg
+++ 
b/appender/elasticsearch-rest/src/main/cfg/org.apache.karaf.decanter.appender.elasticsearch.rest.cfg
@@ -36,5 +36,5 @@ addresses=http://localhost:9200
 # The index type.
 # index.type=decanter
 
-# Marshaller to use
+# Marshaller to use (json is heavily recommended)
 marshaller.target=(dataFormat=json)
\ No newline at end of file
diff --git 
a/appender/jdbc/src/main/cfg/org.apache.karaf.decanter.appender.jdbc.cfg 
b/appender/jdbc/src/main/cfg/org.apache.karaf.decanter.appender.jdbc.cfg
index e0132f6..3a664f7 100644
--- a/appender/jdbc/src/main/cfg/org.apache.karaf.decanter.appender.jdbc.cfg
+++ b/appender/jdbc/src/main/cfg/org.apache.karaf.decanter.appender.jdbc.cfg
@@ -33,5 +33,5 @@ table.name=decanter
 # Instead of letting Decanter created the table, you can create the table by 
your own
 dialect=generic
 
-# Marshaller to use
+# Marshaller to use (json is recommended)
 marshaller.target=(dataFormat=json)
\ No newline at end of file
diff --git 
a/appender/jms/src/main/cfg/org.apache.karaf.decanter.appender.jms.cfg 
b/appender/jms/src/main/cfg/org.apache.karaf.decanter.appender.jms.cfg
index 5307d9a..e86c9a3 100644
--- a/appender/jms/src/main/cfg/org.apache.karaf.decanter.appender.jms.cfg
+++ b/appender/jms/src/main/cfg/org.apache.karaf.decanter.appender.jms.cfg
@@ -36,8 +36,8 @@ destination.type=queue
 # Connection password
 # password=
 
-# Marshaller to use
-# if not set, a MapMessage will be send
-# else it's a TextMessage using the marshaller
-#marshaller.target=(dataFormat=raw) or whatever to use a MapMessage
+# Message type to use (text using the marshaller, map directly)
+message.type=text
+
+# Marshaller to use (json is recommended)
 marshaller.target=(dataFormat=json)
\ No newline at end of file
diff --git 
a/appender/jms/src/main/java/org/apache/karaf/decanter/appender/jms/JmsAppender.java
 
b/appender/jms/src/main/java/org/apache/karaf/decanter/appender/jms/JmsAppender.java
index 87313c3..c328b19 100644
--- 
a/appender/jms/src/main/java/org/apache/karaf/decanter/appender/jms/JmsAppender.java
+++ 
b/appender/jms/src/main/java/org/apache/karaf/decanter/appender/jms/JmsAppender.java
@@ -26,7 +26,6 @@
 import org.osgi.service.component.annotations.Activate;
 import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.Reference;
-import org.osgi.service.component.annotations.ReferenceCardinality;
 import org.osgi.service.event.Event;
 import org.osgi.service.event.EventConstants;
 import org.osgi.service.event.EventHandler;
@@ -43,7 +42,7 @@
     @Reference
     public ConnectionFactory connectionFactory;
 
-    @Reference(cardinality = ReferenceCardinality.OPTIONAL)
+    @Reference
     public Marshaller marshaller;
 
     private final static Logger LOGGER = 
LoggerFactory.getLogger(JmsAppender.class);
@@ -52,6 +51,7 @@
     private String password;
     private String destinationName;
     private String destinationType;
+    private String messageType;
 
     @SuppressWarnings("unchecked")
     @Activate
@@ -64,6 +64,7 @@ void activate(Dictionary<String, Object> config) {
         password = getProperty(config, "password", null);
         destinationName = getProperty(config, "destination.name", "decanter");
         destinationType = getProperty(config, "destination.type", "queue");
+        messageType = getProperty(config, "message.type", "text");
         LOGGER.info("Decanter JMS Appender started sending to {} 
{}",destinationType, destinationName);
     }
 
@@ -80,7 +81,7 @@ public void handleEvent(Event event) {
             session = connection.createSession(false, 
Session.AUTO_ACKNOWLEDGE);
             Destination destination = createDestination(session);
             MessageProducer producer = session.createProducer(destination);
-            if (marshaller != null) {
+            if (messageType.equalsIgnoreCase("text")) {
                 TextMessage message = 
session.createTextMessage(marshaller.marshal(event));
                 producer.send(message);
             } else {
diff --git 
a/appender/jms/src/test/java/org/apache/karaf/decanter/appender/jms/JmsAppenderTest.java
 
b/appender/jms/src/test/java/org/apache/karaf/decanter/appender/jms/JmsAppenderTest.java
index 2bee6a2..36ac273 100644
--- 
a/appender/jms/src/test/java/org/apache/karaf/decanter/appender/jms/JmsAppenderTest.java
+++ 
b/appender/jms/src/test/java/org/apache/karaf/decanter/appender/jms/JmsAppenderTest.java
@@ -40,6 +40,7 @@ public void testHandleEvent() throws JMSException {
         JmsAppender appender = new JmsAppender();
         appender.connectionFactory = cf;
         Dictionary<String, Object> config = new Hashtable<>();
+        config.put("message.type", "map");
         appender.activate(config);
         
         Connection con = cf.createConnection();
@@ -47,7 +48,6 @@ public void testHandleEvent() throws JMSException {
         Session sess = con.createSession(false, Session.AUTO_ACKNOWLEDGE);
         
         MessageConsumer consumer = 
sess.createConsumer(sess.createQueue("decanter"));
-
         
         Map<String, Object> props = new HashMap<String, Object>();
         props.put("timestamp", 1l);
diff --git a/assembly/src/main/feature/feature.xml 
b/assembly/src/main/feature/feature.xml
index 0493b72..1f74580 100644
--- a/assembly/src/main/feature/feature.xml
+++ b/assembly/src/main/feature/feature.xml
@@ -31,6 +31,7 @@
         <feature>scr</feature>
         <bundle>mvn:org.glassfish/javax.json/${glassfish-json.version}</bundle>
         
<bundle>mvn:org.apache.karaf.decanter/org.apache.karaf.decanter.api/${project.version}</bundle>
+        
<bundle>mvn:org.apache.karaf.decanter.marshaller/org.apache.karaf.decanter.marshaller.raw/${project.version}</bundle>
         
<bundle>mvn:org.apache.karaf.decanter.marshaller/org.apache.karaf.decanter.marshaller.json/${project.version}</bundle>
         
<bundle>mvn:org.apache.karaf.decanter.marshaller/org.apache.karaf.decanter.marshaller.csv/${project.version}</bundle>
     </feature>
diff --git 
a/collector/jms/src/main/java/org/apache/karaf/decanter/collector/jms/JmsCollector.java
 
b/collector/jms/src/main/java/org/apache/karaf/decanter/collector/jms/JmsCollector.java
index 71cb022..3437148 100644
--- 
a/collector/jms/src/main/java/org/apache/karaf/decanter/collector/jms/JmsCollector.java
+++ 
b/collector/jms/src/main/java/org/apache/karaf/decanter/collector/jms/JmsCollector.java
@@ -42,7 +42,7 @@
     @Reference
     public ConnectionFactory connectionFactory;
 
-    @Reference(cardinality = ReferenceCardinality.OPTIONAL)
+    @Reference
     public Unmarshaller unmarshaller;
 
     @Reference
@@ -164,12 +164,8 @@ public void onMessage(Message message) {
                     Map<String, Object> data = new HashMap<>();
                     data.put("type", "jms");
 
-                    if (unmarshaller != null) {
-                        ByteArrayInputStream is = new 
ByteArrayInputStream(textMessage.getText().getBytes());
-                        data.putAll(unmarshaller.unmarshal(is));
-                    } else {
-                        data.put("payload", textMessage.getText());
-                    }
+                    ByteArrayInputStream is = new 
ByteArrayInputStream(textMessage.getText().getBytes());
+                    data.putAll(unmarshaller.unmarshal(is));
 
                     PropertiesPreparator.prepare(data, properties);
 
diff --git a/marshaller/json/pom.xml b/marshaller/json/pom.xml
index 31fcd67..f614d9f 100644
--- a/marshaller/json/pom.xml
+++ b/marshaller/json/pom.xml
@@ -1,4 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
 <project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+
     <!--
 
         Licensed to the Apache Software Foundation (ASF) under one or more
@@ -16,13 +18,16 @@
         See the License for the specific language governing permissions and
         limitations under the License.
     -->
+
     <modelVersion>4.0.0</modelVersion>
+
     <parent>
         <groupId>org.apache.karaf.decanter</groupId>
         <artifactId>marshaller</artifactId>
         <version>2.1.0-SNAPSHOT</version>
-        <relativePath>..</relativePath>
+        <relativePath>../pom.xml</relativePath>
     </parent>
+
     <groupId>org.apache.karaf.decanter.marshaller</groupId>
     <artifactId>org.apache.karaf.decanter.marshaller.json</artifactId>
     <packaging>bundle</packaging>
diff --git a/marshaller/pom.xml b/marshaller/pom.xml
index e012365..93e84d8 100644
--- a/marshaller/pom.xml
+++ b/marshaller/pom.xml
@@ -34,6 +34,7 @@
     <name>Apache Karaf :: Decanter :: Marshaller</name>
 
     <modules>
+        <module>raw</module>
         <module>csv</module>
         <module>json</module>
     </modules>
diff --git a/marshaller/raw/pom.xml b/marshaller/raw/pom.xml
new file mode 100644
index 0000000..734ad08
--- /dev/null
+++ b/marshaller/raw/pom.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+
+    <!--
+
+        Licensed to the Apache Software Foundation (ASF) under one or more
+        contributor license agreements.  See the NOTICE file distributed with
+        this work for additional information regarding copyright ownership.
+        The ASF licenses this file to You under the Apache License, Version 2.0
+        (the "License"); you may not use this file except in compliance with
+        the License.  You may obtain a copy of the License at
+
+           http://www.apache.org/licenses/LICENSE-2.0
+
+        Unless required by applicable law or agreed to in writing, software
+        distributed under the License is distributed on an "AS IS" BASIS,
+        WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 
implied.
+        See the License for the specific language governing permissions and
+        limitations under the License.
+    -->
+
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.karaf.decanter</groupId>
+        <artifactId>marshaller</artifactId>
+        <version>2.1.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+
+    <groupId>org.apache.karaf.decanter.marshaller</groupId>
+    <artifactId>org.apache.karaf.decanter.marshaller.raw</artifactId>
+    <packaging>bundle</packaging>
+    <name>Apache Karaf :: Decanter :: Marshaller :: Raw</name>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.karaf.decanter</groupId>
+            <artifactId>org.apache.karaf.decanter.api</artifactId>
+        </dependency>
+    </dependencies>
+
+</project>
\ No newline at end of file
diff --git 
a/marshaller/raw/src/main/java/org/apache/karaf/decanter/marshaller/raw/RawMarshaller.java
 
b/marshaller/raw/src/main/java/org/apache/karaf/decanter/marshaller/raw/RawMarshaller.java
new file mode 100644
index 0000000..cdfe50d
--- /dev/null
+++ 
b/marshaller/raw/src/main/java/org/apache/karaf/decanter/marshaller/raw/RawMarshaller.java
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.karaf.decanter.marshaller.raw;
+
+import org.apache.karaf.decanter.api.marshaller.Marshaller;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.event.Event;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+
+@Component(immediate = true, property = Marshaller.SERVICE_KEY_DATAFORMAT + 
"=raw")
+public class RawMarshaller implements Marshaller {
+
+    private static final Logger LOGGER = 
LoggerFactory.getLogger(RawMarshaller.class);
+
+    @Override
+    public void marshal(Object obj, OutputStream out) {
+        String result = marshal(obj);
+        OutputStreamWriter writer = new OutputStreamWriter(out);
+        try {
+            writer.write(result);
+        } catch (Exception e) {
+            LOGGER.warn("Can't marshal", e);
+        }
+    }
+
+    @Override
+    public String marshal(Object obj) {
+        return marshal((Event) obj);
+    }
+
+    private String marshal(Event event) {
+        StringBuilder builder = new StringBuilder();
+        for (String propertyName : event.getPropertyNames()) {
+            Object propertyValue = event.getProperty(propertyName);
+            
builder.append(propertyName).append("=").append(propertyValue.toString()).append("\n");
+        }
+        return builder.toString();
+    }
+
+}
diff --git 
a/marshaller/raw/src/main/java/org/apache/karaf/decanter/marshaller/raw/RawUnmarshaller.java
 
b/marshaller/raw/src/main/java/org/apache/karaf/decanter/marshaller/raw/RawUnmarshaller.java
new file mode 100644
index 0000000..8739f40
--- /dev/null
+++ 
b/marshaller/raw/src/main/java/org/apache/karaf/decanter/marshaller/raw/RawUnmarshaller.java
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.karaf.decanter.marshaller.raw;
+
+import org.apache.karaf.decanter.api.marshaller.Marshaller;
+import org.apache.karaf.decanter.api.marshaller.Unmarshaller;
+import org.osgi.service.component.annotations.Component;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.BufferedReader;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.HashMap;
+import java.util.Map;
+
+@Component(immediate = true, property = Marshaller.SERVICE_KEY_DATAFORMAT + 
"=raw")
+public class RawUnmarshaller implements Unmarshaller {
+
+    private final static Logger LOGGER = 
LoggerFactory.getLogger(RawUnmarshaller.class);
+
+    @Override
+    public Map<String, Object> unmarshal(InputStream in) {
+        Map<String, Object> data = new HashMap<>();
+        BufferedReader reader = new BufferedReader(new InputStreamReader(in));
+        try {
+            StringBuilder builder = new StringBuilder();
+            String line;
+            while ((line = reader.readLine()) != null) {
+                builder.append(line).append("\n");
+            }
+            data.put("payload", builder.toString());
+        } catch (Exception e) {
+            LOGGER.warn("Can't unmarshal", e);
+        } finally {
+            try {
+                reader.close();
+            } catch (Exception e) {
+                // nothing to do
+            }
+        }
+        return data;
+    }
+
+}


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


> Introduce a raw marshaller/unmarshaller (identity)
> --------------------------------------------------
>
>                 Key: KARAF-5894
>                 URL: https://issues.apache.org/jira/browse/KARAF-5894
>             Project: Karaf
>          Issue Type: Improvement
>          Components: decanter
>            Reporter: Jean-Baptiste Onofré
>            Assignee: Jean-Baptiste Onofré
>            Priority: Major
>             Fix For: decanter-2.1.0
>
>
> Now, most of the collectors & appenders are using {{json}} marshalling.
> Instead of using an optional reference (which is not super elegant), instead 
> the marshalling/unmarshalling service should be mandatory and we should 
> provide a {{raw}} marshaller/unmarshaller service.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to