[
https://issues.apache.org/jira/browse/KARAF-5892?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16605362#comment-16605362
]
ASF GitHub Bot commented on KARAF-5892:
---------------------------------------
fpapon closed pull request #44: [KARAF-5892] Use JMS raw message in collector &
appender
URL: https://github.com/apache/karaf-decanter/pull/44
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/jms/pom.xml b/appender/jms/pom.xml
index 2bf5766..33eb6d1 100644
--- a/appender/jms/pom.xml
+++ b/appender/jms/pom.xml
@@ -34,6 +34,10 @@
<name>Apache Karaf :: Decanter :: Appender :: JMS</name>
<dependencies>
+ <dependency>
+ <groupId>org.apache.karaf.decanter</groupId>
+ <artifactId>org.apache.karaf.decanter.api</artifactId>
+ </dependency>
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-jms_1.1_spec</artifactId>
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 a2722b9..8d30b56 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
@@ -15,4 +15,10 @@ destination.type=queue
# username=
# Connection password
-# password=
\ No newline at end of file
+# 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
+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 dd560d7..87313c3 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
@@ -21,10 +21,12 @@
import javax.jms.*;
+import org.apache.karaf.decanter.api.marshaller.Marshaller;
import org.osgi.service.component.ComponentContext;
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;
@@ -41,6 +43,9 @@
@Reference
public ConnectionFactory connectionFactory;
+ @Reference(cardinality = ReferenceCardinality.OPTIONAL)
+ public Marshaller marshaller;
+
private final static Logger LOGGER =
LoggerFactory.getLogger(JmsAppender.class);
private String username;
@@ -75,14 +80,17 @@ public void handleEvent(Event event) {
session = connection.createSession(false,
Session.AUTO_ACKNOWLEDGE);
Destination destination = createDestination(session);
MessageProducer producer = session.createProducer(destination);
- MapMessage message = session.createMapMessage();
-
- for (String name : event.getPropertyNames()) {
- Object value = event.getProperty(name);
- setProperty(message, name, value);
+ if (marshaller != null) {
+ TextMessage message =
session.createTextMessage(marshaller.marshal(event));
+ producer.send(message);
+ } else {
+ MapMessage message = session.createMapMessage();
+ for (String name : event.getPropertyNames()) {
+ Object value = event.getProperty(name);
+ setProperty(message, name, value);
+ }
+ producer.send(message);
}
-
- producer.send(message);
producer.close();
} catch (Exception e) {
LOGGER.warn("Can't send to JMS broker", e);
diff --git
a/collector/jms/src/main/cfg/org.apache.karaf.decanter.collector.jms.cfg
b/collector/jms/src/main/cfg/org.apache.karaf.decanter.collector.jms.cfg
index 1c73d2c..98c7dd2 100644
--- a/collector/jms/src/main/cfg/org.apache.karaf.decanter.collector.jms.cfg
+++ b/collector/jms/src/main/cfg/org.apache.karaf.decanter.collector.jms.cfg
@@ -18,4 +18,5 @@ destination.type=queue
# password=
# Unmarshaller to use (json is recommended)
+# unmarshaller.target=(dataFormat=raw) or whatever to use raw text message
unmarshaller.target=(dataFormat=json)
\ No newline at end of file
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 356157a..71cb022 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
@@ -19,10 +19,7 @@
import org.apache.karaf.decanter.api.marshaller.Unmarshaller;
import org.apache.karaf.decanter.collector.utils.PropertiesPreparator;
import org.osgi.service.component.ComponentContext;
-import org.osgi.service.component.annotations.Activate;
-import org.osgi.service.component.annotations.Component;
-import org.osgi.service.component.annotations.Deactivate;
-import org.osgi.service.component.annotations.Reference;
+import org.osgi.service.component.annotations.*;
import org.osgi.service.event.Event;
import org.osgi.service.event.EventAdmin;
import org.osgi.service.event.EventConstants;
@@ -45,7 +42,7 @@
@Reference
public ConnectionFactory connectionFactory;
- @Reference
+ @Reference(cardinality = ReferenceCardinality.OPTIONAL)
public Unmarshaller unmarshaller;
@Reference
@@ -167,8 +164,12 @@ public void onMessage(Message message) {
Map<String, Object> data = new HashMap<>();
data.put("type", "jms");
- ByteArrayInputStream is = new
ByteArrayInputStream(textMessage.getText().getBytes());
- data.putAll(unmarshaller.unmarshal(is));
+ if (unmarshaller != null) {
+ ByteArrayInputStream is = new
ByteArrayInputStream(textMessage.getText().getBytes());
+ data.putAll(unmarshaller.unmarshal(is));
+ } else {
+ data.put("payload", textMessage.getText());
+ }
PropertiesPreparator.prepare(data, properties);
----------------------------------------------------------------
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]
> Decanter JMS Collector should deal with "raw" message when no unmarshaller is
> provided
> --------------------------------------------------------------------------------------
>
> Key: KARAF-5892
> URL: https://issues.apache.org/jira/browse/KARAF-5892
> Project: Karaf
> Issue Type: Improvement
> Components: decanter
> Reporter: Jean-Baptiste Onofré
> Assignee: Jean-Baptiste Onofré
> Priority: Major
> Fix For: decanter-2.1.0
>
>
> Now, the Decanter {{jms}} collector supports both {{MapMessage}} and
> {{TextMessage}}. When using {{TextMessage}}, it uses the {{json}}
> unmarshaller by default.
> We should be able to set the marshaller service optional, and if not
> provided, just use the "raw" message in a {{payload}} property.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)