All Apps and Add-ons
Highlighted

JMS Messaging Modular Input Custom Message Handler throws java.lang.AbstractMethodError

Path Finder

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

Highlighted

Re: JMS Messaging Modular Input Custom Message Handler throws java.lang.AbstractMethodError

Ultra Champion

Did you compile your custom handler with Java 7 ?

The 0033 hex in the compiled class file means was compiled with Java 7. So if you compiled with Java 8 , I think that is the cause of your error message. You can still run with Java 8 after compiling with Java 7.

alt text

0 Karma
Highlighted

Re: JMS Messaging Modular Input Custom Message Handler throws java.lang.AbstractMethodError

Path Finder

I compiled the custom message handler with Java 8. I will recompile with Java 7 and see if that works.

0 Karma
Highlighted

Re: JMS Messaging Modular Input Custom Message Handler throws java.lang.AbstractMethodError

Path Finder

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)
0 Karma
Highlighted

Re: JMS Messaging Modular Input Custom Message Handler throws java.lang.AbstractMethodError

Path Finder

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;
}

}

0 Karma
Highlighted

Re: JMS Messaging Modular Input Custom Message Handler throws java.lang.AbstractMethodError

Path Finder

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
}
}
0 Karma
Highlighted

Re: JMS Messaging Modular Input Custom Message Handler throws java.lang.AbstractMethodError

Engager

What was the Solution to this?

0 Karma
Speak Up for Splunk Careers!

We want to better understand the impact Splunk experience and expertise has has on individuals' careers, and help highlight the growing demand for Splunk skills.