All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.optionfactory.journalwebd.client.JournalEntryMixin Maven / Gradle / Ivy

The newest version!
package net.optionfactory.journalwebd.client;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Iterator;

@JsonIgnoreProperties(ignoreUnknown = true)
public record JournalEntryMixin(
        @JsonProperty(value = "_BOOT_ID")
        String bootId,
        @JsonProperty(value = "_PID")
        String pid,
        @JsonProperty(value = "_HOSTNAME")
        String hostname,
        @JsonProperty(value = "_SYSTEMD_UNIT")
        String systemdUnit,
        @JsonProperty(value = "MESSAGE")
        @JsonDeserialize(using = FromStringOrArray.class)
        String message,
        @JsonProperty(value = "__REALTIME_TIMESTAMP")
        long timestamp) {

    public static class FromStringOrArray extends StdDeserializer {

        public FromStringOrArray() {
            super((Class) null);
        }

        @Override
        public String deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
            final JsonNode node = jp.getCodec().readTree(jp);
            if (node.isNull()) {
                return null;
            }
            if (node.isTextual()) {
                return node.asText();
            }
            if (!node.isArray()) {
                return node.toString();
            }
            final byte[] bytes = new byte[node.size()];
            final Iterator iter = node.elements();
            int i = 0;
            while (iter.hasNext()) {
                bytes[i] = (byte) iter.next().asInt();
                ++i;
            }
            return new String(bytes, StandardCharsets.UTF_8);
        }

    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy