From e71ade0ee750e4ca7d2984d58df07ac73b8e85d6 Mon Sep 17 00:00:00 2001 From: 3013050 <3013050@stud.hs-mannheim.de> Date: Tue, 2 Dec 2025 17:58:17 +0100 Subject: [PATCH] Added serializable and one more publisher --- .gitignore | 6 +- .../java/vs/messagingmonitor/AsciiChars.java | 11 ++- .../vs/messagingmonitor/MqttReceiver.java | 8 +-- .../{Publisher.java => Publisher1.java} | 32 ++++++--- .../java/vs/messagingmonitor/Publisher2.java | 69 +++++++++++++++++++ .../vs/messagingmonitor/StructuredData.java | 12 +++- .../vs/messagingmonitor/SyslogMessage.java | 8 ++- 7 files changed, 121 insertions(+), 25 deletions(-) rename src/main/java/vs/messagingmonitor/{Publisher.java => Publisher1.java} (63%) create mode 100644 src/main/java/vs/messagingmonitor/Publisher2.java diff --git a/.gitignore b/.gitignore index 480bdf5..adc17c2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,7 @@ +/.idea/ +/.mvn/ +/paho*/ + target/ !.mvn/wrapper/maven-wrapper.jar !**/src/main/**/target/ @@ -36,4 +40,4 @@ build/ .vscode/ ### Mac OS ### -.DS_Store \ No newline at end of file +.DS_Store diff --git a/src/main/java/vs/messagingmonitor/AsciiChars.java b/src/main/java/vs/messagingmonitor/AsciiChars.java index 31aee9a..23f2769 100644 --- a/src/main/java/vs/messagingmonitor/AsciiChars.java +++ b/src/main/java/vs/messagingmonitor/AsciiChars.java @@ -1,5 +1,7 @@ package vs.messagingmonitor; +import java.io.Serializable; + /** * helper class for RFC 5424 (https://datatracker.ietf.org/doc/html/rfc5424) * compliant log messages as immutable Java objects - representation of a subset @@ -8,7 +10,8 @@ package vs.messagingmonitor; * @author Sandro Leuchter * */ -public abstract class AsciiChars { +public abstract class AsciiChars implements Serializable { + private static final long serialVersionUID = 1L; private final String value; public String value() { @@ -41,36 +44,42 @@ public abstract class AsciiChars { } static public final class L004 extends AsciiChars { + private static final long serialVersionUID = 2L; public L004(String value) { super(4, value); } } static public final class L012 extends AsciiChars { + private static final long serialVersionUID = 3L; public L012(String value) { super(12, value); } } static public final class L032 extends AsciiChars { + private static final long serialVersionUID = 4L; public L032(String value) { super(32, value); } } static public final class L048 extends AsciiChars { + private static final long serialVersionUID = 5L; public L048(String value) { super(48, value); } } static public final class L128 extends AsciiChars { + private static final long serialVersionUID = 6L; public L128(String value) { super(128, value); } } static public final class L255 extends AsciiChars { + private static final long serialVersionUID = 7L; public L255(String value) { super(255, value); } diff --git a/src/main/java/vs/messagingmonitor/MqttReceiver.java b/src/main/java/vs/messagingmonitor/MqttReceiver.java index 2ada60e..8df255d 100644 --- a/src/main/java/vs/messagingmonitor/MqttReceiver.java +++ b/src/main/java/vs/messagingmonitor/MqttReceiver.java @@ -50,17 +50,13 @@ public class MqttReceiver { @Override public void messageArrived(String topic, MqttMessage mqttMessage) { - System.out.println("Test"); System.out.println("Received: " + mqttMessage.toString()); byte[] messageData = mqttMessage.getPayload(); SyslogMessage syslogMsg; - System.out.println("After getting payload"); - try { ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(messageData)); - System.out.println("After converting to stream"); Object receivedObject = ois.readObject(); @@ -70,8 +66,8 @@ public class MqttReceiver { } syslogMsg = (SyslogMessage) receivedObject; - if (!(syslogMsg.sev().ordinal() <= SyslogMessage.Severity.WARNING.ordinal())) { - WebappWebsocket.sendMessage("Channel " + channel + ": " + syslogMsg.toString()); + if (syslogMsg.sev().ordinal() <= SyslogMessage.Severity.WARNING.ordinal()) { + WebappWebsocket.sendMessage("Channel " + channel + ": " + syslogMsg.toString() + "\n"); } } catch (ClassNotFoundException | IOException e) { diff --git a/src/main/java/vs/messagingmonitor/Publisher.java b/src/main/java/vs/messagingmonitor/Publisher1.java similarity index 63% rename from src/main/java/vs/messagingmonitor/Publisher.java rename to src/main/java/vs/messagingmonitor/Publisher1.java index bb51ee7..8b3b825 100644 --- a/src/main/java/vs/messagingmonitor/Publisher.java +++ b/src/main/java/vs/messagingmonitor/Publisher1.java @@ -3,8 +3,7 @@ package vs.messagingmonitor; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectOutputStream; -import java.util.ArrayList; -import java.util.Date; + import vs.messagingmonitor.AsciiChars.L032; import vs.messagingmonitor.AsciiChars.L048; import vs.messagingmonitor.AsciiChars.L128; @@ -12,12 +11,13 @@ import vs.messagingmonitor.AsciiChars.L255; import org.eclipse.paho.client.mqttv3.MqttClient; import org.eclipse.paho.client.mqttv3.MqttException; import org.eclipse.paho.client.mqttv3.MqttMessage; +import vs.messagingmonitor.StructuredData.Element; +import vs.messagingmonitor.StructuredData.Param; -class Publisher { +class Publisher1 { public static void main(String[] args) { - String broker = args[0]; - System.out.println("Broker: " + broker); - String topic = args[1]; + String broker = "tcp://localhost:1883"; + String topic = "messagingMonitor1337/t"; System.out.println("Topic: " + topic); @@ -27,15 +27,21 @@ class Publisher { client = new MqttClient(broker, clientId); client.connect(); + var sd = new StructuredData()// + .add(Element.newTimeQuality(true, true)) + .add(new Element("exampleSDID@32473").add(new Param("iut", "3")) + .add(new Param("eventSource", "Application")).add(new Param("eventID", "1011"))) + .add(new Element("examplePriority@32473").add(new Param("class", "high"))); + SyslogMessage.TextMessage textMessage = new SyslogMessage.TextMessage("message"); SyslogMessage syslogMessage = new SyslogMessage( SyslogMessage.Facility.USER, - SyslogMessage.Severity.INFORMATIONAL, + SyslogMessage.Severity.EMERGENCY, new L255("192.168.2.100"), new L048("java"), new L128("1"), new L032("1"), - new StructuredData(new ArrayList<>()), + sd, textMessage ); @@ -44,16 +50,20 @@ class Publisher { ObjectOutputStream oos = new ObjectOutputStream(baos); oos.writeObject(syslogMessage); oos.flush(); - message.setPayload(baos.toByteArray()); + //MqttMessage message = new MqttMessage(); + //String s = message.toString(); + //message.setPayload(s.getBytes()); + + client.publish(topic, message); oos.close(); client.disconnect(); System.out.println("DONE!"); - } catch (MqttException | IOException e) { - System.err.println(e.getMessage()); + } catch (MqttException |IOException e) { + e.printStackTrace(System.err); } } } diff --git a/src/main/java/vs/messagingmonitor/Publisher2.java b/src/main/java/vs/messagingmonitor/Publisher2.java new file mode 100644 index 0000000..bcea782 --- /dev/null +++ b/src/main/java/vs/messagingmonitor/Publisher2.java @@ -0,0 +1,69 @@ +package vs.messagingmonitor; + +import org.eclipse.paho.client.mqttv3.MqttClient; +import org.eclipse.paho.client.mqttv3.MqttException; +import org.eclipse.paho.client.mqttv3.MqttMessage; +import vs.messagingmonitor.AsciiChars.L032; +import vs.messagingmonitor.AsciiChars.L048; +import vs.messagingmonitor.AsciiChars.L128; +import vs.messagingmonitor.AsciiChars.L255; +import vs.messagingmonitor.StructuredData.Element; +import vs.messagingmonitor.StructuredData.Param; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.ObjectOutputStream; + +class Publisher2 { + public static void main(String[] args) { + String broker = "tcp://localhost:1883"; + String topic = "messagingMonitor1337/g"; + + System.out.println("Topic: " + topic); + + MqttClient client; + String clientId = MqttClient.generateClientId(); + try { + client = new MqttClient(broker, clientId); + client.connect(); + + var sd = new StructuredData()// + .add(Element.newTimeQuality(true, true)) + .add(new Element("exampleSDID@32473").add(new Param("iut", "3")) + .add(new Param("eventSource", "Application")).add(new Param("eventID", "1011"))) + .add(new Element("examplePriority@32473").add(new Param("class", "high"))); + + SyslogMessage.TextMessage textMessage = new SyslogMessage.TextMessage("message"); + SyslogMessage syslogMessage = new SyslogMessage( + SyslogMessage.Facility.USER, + SyslogMessage.Severity.EMERGENCY, + new L255("192.168.2.100"), + new L048("java"), + new L128("1"), + new L032("1"), + sd, + textMessage + ); + + MqttMessage message = new MqttMessage(); + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ObjectOutputStream oos = new ObjectOutputStream(baos); + oos.writeObject(syslogMessage); + oos.flush(); + message.setPayload(baos.toByteArray()); + + //MqttMessage message = new MqttMessage(); + //String s = message.toString(); + //message.setPayload(s.getBytes()); + + + client.publish(topic, message); + + oos.close(); + client.disconnect(); + System.out.println("DONE!"); + } catch (MqttException |IOException e) { + e.printStackTrace(System.err); + } + } +} diff --git a/src/main/java/vs/messagingmonitor/StructuredData.java b/src/main/java/vs/messagingmonitor/StructuredData.java index 9113c1a..6c9bc0f 100644 --- a/src/main/java/vs/messagingmonitor/StructuredData.java +++ b/src/main/java/vs/messagingmonitor/StructuredData.java @@ -1,5 +1,6 @@ package vs.messagingmonitor; +import java.io.Serializable; import java.util.ArrayList; import java.util.List; @@ -12,8 +13,11 @@ import java.util.List; * @author Sandro Leuchter * */ -public class StructuredData { - static public class Element { +public class StructuredData implements Serializable { + private static final long serialVersionUID = 8L; + + static public class Element implements Serializable{ + private static final long serialVersionUID = 9L; private final String name; private List parameters; @@ -101,8 +105,10 @@ public class StructuredData { } } - static public class Param { + static public class Param implements Serializable{ + private static final long serialVersionUID = 10L; private final String name; + // name: printable US-ASCII string ^[@=\]\"\s]+ // "@" + private enterpise number "@\d+(\.\d+)*" private final String value; diff --git a/src/main/java/vs/messagingmonitor/SyslogMessage.java b/src/main/java/vs/messagingmonitor/SyslogMessage.java index d326a57..e1acf3f 100644 --- a/src/main/java/vs/messagingmonitor/SyslogMessage.java +++ b/src/main/java/vs/messagingmonitor/SyslogMessage.java @@ -84,13 +84,14 @@ public class SyslogMessage implements Serializable { DEBUG; } - public static interface Message { + public static interface Message extends Serializable { public Object message(); public int length(); } - public static class BinaryMessage implements Message { + public static class BinaryMessage implements Message, Serializable { + private static final long serialVersionUID = 11L; private Byte[] message; public BinaryMessage(Byte[] message) { @@ -113,7 +114,8 @@ public class SyslogMessage implements Serializable { } } - public static class TextMessage implements Message { + public static class TextMessage implements Message, Serializable { + private static final long serialVersionUID = 12L; private String message; // UTF8 public TextMessage(String message) {