All Apps and Add-ons

How to pass parameters into a custom JMS Modular Input Message Handler

mcormier_splunk
Splunk Employee
Splunk Employee

I'm working on a project to convert binary JMS message bodies to Strings. I've built the converter and will integrate it using the template you've laid out in Splunk Answers
https://answers.splunk.com/answers/310006/how-to-convert-byte-characters-coming-out-of-mq-th.html

I've run into a problem. The converter uses a properties file to describe the message format. How can I get the file path/name passed into this class so I can load the message format? I see the setParams (Map<String, String> params) method, but don't know
(a) if that's the right call and
(b) how to initialize a parameter that might get passed into this call in the first place.

Anyone have an example of how they've done this, how it might be done, or a pointer to documentation?

0 Karma
1 Solution

Damien_Dallimor
Ultra Champion

Config example :

alt text

Rough code example :

package com.splunk.modinput.jms.custom.handler;

import java.io.File;
import java.util.Map;

import javax.jms.Message;

import com.splunk.modinput.jms.AbstractMessageHandler;
import com.splunk.modinput.jms.JMSModularInput.MessageReceiver;

public class ExampleMessageHandler extends AbstractMessageHandler {

    private final static String MSG_FORMAT_FILE_PARAM = "msg_format_file";

    private File msgFormatFile;

    @Override
    public void handleMessage(Message message, MessageReceiver context) throws Exception {


        String event = decodeMessageBody(message);

        transportMessage(event, String.valueOf(System.currentTimeMillis()), "");

    }

    private String decodeMessageBody(Message message) {
        String result = "";
        try {

           //TODO your logic to pull out the message bytes and decode them

        } catch (Exception e) {}

        return result;

    }

    @Override
    public void setParams(Map<String, String> params) {

        if (params.containsKey(MSG_FORMAT_FILE_PARAM))
            this.msgFormatFile = new File(params.get(MSG_FORMAT_FILE_PARAM));

    }

}

View solution in original post

0 Karma

Damien_Dallimor
Ultra Champion

Config example :

alt text

Rough code example :

package com.splunk.modinput.jms.custom.handler;

import java.io.File;
import java.util.Map;

import javax.jms.Message;

import com.splunk.modinput.jms.AbstractMessageHandler;
import com.splunk.modinput.jms.JMSModularInput.MessageReceiver;

public class ExampleMessageHandler extends AbstractMessageHandler {

    private final static String MSG_FORMAT_FILE_PARAM = "msg_format_file";

    private File msgFormatFile;

    @Override
    public void handleMessage(Message message, MessageReceiver context) throws Exception {


        String event = decodeMessageBody(message);

        transportMessage(event, String.valueOf(System.currentTimeMillis()), "");

    }

    private String decodeMessageBody(Message message) {
        String result = "";
        try {

           //TODO your logic to pull out the message bytes and decode them

        } catch (Exception e) {}

        return result;

    }

    @Override
    public void setParams(Map<String, String> params) {

        if (params.containsKey(MSG_FORMAT_FILE_PARAM))
            this.msgFormatFile = new File(params.get(MSG_FORMAT_FILE_PARAM));

    }

}
0 Karma

mcormier_splunk
Splunk Employee
Splunk Employee

Thanks for this! I was hoping it would be straightforward to use setParams(), just didn't know the "config" side of the equation. I will test it out and report back.

0 Karma
Got questions? Get answers!

Join the Splunk Community Slack to learn, troubleshoot, and make connections with fellow Splunk practitioners in real time!

Meet up IRL or virtually!

Join Splunk User Groups to connect and learn in-person by region or remotely by topic or industry.

Get Updates on the Splunk Community!

Catalog Is Now Generally Available on Splunk Cloud Platform

A Unified View of Your Data  Security logs, application events, business data, and historical telemetry often ...

Developer Spotlight with Eduard Lekanne

From Network Engineer to Building Agentic AI for Splunk Eduard Lekanne has been architecting technology ...

From Data Landing to Insight

Search Across More of Your Data Ecosystem The data you need may live in Splunk, high-volume machine data, ...