We are running the JMS MI on on linux (Java 😎 with a custom message handler. In jms.py, a Java Exception (java.lang.AbstractMethodError) is thrown. I am using the pattern defined in this Answer:
https://answers.splunk.com/answers/310006/how-to-convert-byte-characters-coming-out-of-mq-th.html
I'm not sure what interface has changed to cause this. Is there a place we should look to debug this?
Thanks,
Mike
I simplified this as much as possible (see code below), and even copied the class AbstractMessageHandler.java into the package, recompiled with Java 7 and we still get the following error:
02-04-2016 16:10:02.947 -0500 ERROR ExecProcessor - message from "python /web/splunk/etc/apps/jms_ta/bin/jms.py" Exception in thread "Thread-3" java.lang.AbstractMethodError: com.splunk.modinput.jms.AbstractMessageHandler.handleMessage(Ljavax/jms/Message;Lcom/splunk/modinput/jms/JMSModularInput$MessageReceiver;)Lcom/splunk/modinput/Stream;
02-04-2016 16:10:02.947 -0500 ERROR ExecProcessor - message from "python /web/splunk/etc/apps/jms_ta/bin/jms.py" at com.splunk.modinput.jms.JMSModularInput$MessageReceiver.streamMessageEvent(Unknown Source)
02-04-2016 16:10:02.947 -0500 ERROR ExecProcessor - message from "python /web/splunk/etc/apps/jms_ta/bin/jms.py" at com.splunk.modinput.jms.JMSModularInput$MessageReceiver.browseQueue(Unknown Source)
02-04-2016 16:10:02.947 -0500 ERROR ExecProcessor - message from "python /web/splunk/etc/apps/jms_ta/bin/jms.py" at com.splunk.modinput.jms.JMSModularInput$MessageReceiver.run(Unknown Source)
package com.tsys.jms;
import com.splunk.modinput.SplunkLogEvent;
import com.splunk.modinput.jms.AbstractMessageHandler;
import com.splunk.modinput.jms.JMSModularInput.MessageReceiver;
import java.util.Map;
import javax.jms.Message;
public class BinaryToText extends AbstractMessageHandler {
@Override
public void handleMessage(Message message, MessageReceiver context)
throws Exception {
SplunkLogEvent splunkEvent = buildCommonEventMessagePart(message, context);
String bodyContent = "Hello World";
splunkEvent.addPair("msg_body", bodyContent);
String text = splunkEvent.toString();
transportMessage(text,String.valueOf(System.currentTimeMillis()),"");
}
@Override
public void setParams(Map<String, String> params) {
// Do nothing , params not used
}
}
What was the Solution to this?
I compiled the custom message handler with Java 8. I will recompile with Java 7 and see if that works.
I have recompiled the handler with Java 7, and am using Java 7 on the linux box. Same error occurs (see output below). What would be the next step to debugging this?
02-04-2016 10:49:02.427 -0500 ERROR ExecProcessor - message from "python /web/splunk/etc/apps/jms_ta/bin/jms.py" Exception in thread "Thread-3" java.lang.AbstractMethodError: com.splunk.modinput.jms.AbstractMessageHandler.handleMessage(Ljavax/jms/Message;Lcom/splunk/modinput/jms/JMSModularInput$MessageReceiver;)Lcom/splunk/modinput/Stream;
02-04-2016 10:49:02.427 -0500 ERROR ExecProcessor - message from "python /web/splunk/etc/apps/jms_ta/bin/jms.py" at com.splunk.modinput.jms.JMSModularInput$MessageReceiver.streamMessageEvent(Unknown Source)
02-04-2016 10:49:02.427 -0500 ERROR ExecProcessor - message from "python /web/splunk/etc/apps/jms_ta/bin/jms.py" at com.splunk.modinput.jms.JMSModularInput$MessageReceiver.browseQueue(Unknown Source)
02-04-2016 10:49:02.427 -0500 ERROR ExecProcessor - message from "python /web/splunk/etc/apps/jms_ta/bin/jms.py" at com.splunk.modinput.jms.JMSModularInput$MessageReceiver.run(Unknown Source)
Adding sanitized source code:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.tsys.convertjmsbinary;
import com.splunk.modinput.SplunkLogEvent;
import com.splunk.modinput.jms.AbstractMessageHandler;
import com.splunk.modinput.jms.JMSModularInput.MessageReceiver;
import java.util.Map;
import javax.jms.BytesMessage;
import javax.jms.JMSException;
import javax.jms.Message;
public class jmsConvertToBinary extends AbstractMessageHandler {
public fieldManager fM = null;
public String fileName = null;
@Override
public void handleMessage(Message message, MessageReceiver context)
throws Exception {
SplunkLogEvent splunkEvent = buildCommonEventMessagePart(message, context);
String bodyContent = convertToBinary(message);
splunkEvent.addPair("msg_body", bodyContent);
String text = splunkEvent.toString();
transportMessage(text,String.valueOf(System.currentTimeMillis()),"");
}
private String convertToBinary(Message message) {
BytesMessage msg;
String decodedContent = "";
byte[] data;
//write some code to get the message content and decode it
if (fM == null)
return("no message format file");
msg = (BytesMessage) message;
try {
data = new byte[(int) msg.getBodyLength()];
msg.readBytes(data);
if (fM != null)
decodedContent = fM.convertBytesToFields(data);
} catch (JMSException ex) {
System.err.println("JMS Exception: " + ex.getMessage());
}
return(decodedContent);
}
@Override
public void setParams(Map<String, String> params) {
// Do nothing , params not used
fileName = params.get("msg.format.file");
if (fileName != null)
fM = new fieldManager(fileName);
else
fM = null;
}
}