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?
Config example :
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));
}
}
Config example :
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));
}
}
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.