Skip to content

Missing valuefier for java.lang.Byte when reading messages from IBM MQ #21

@alexander-milovidov

Description

@alexander-milovidov

I have problem reading messages from IBM WebSphere MQ. It seems that some field(s) in MQMD header has type which is not handled properly. Some messages are read without exception.
When I turn off include_header setting in jms input section, all messages are handled without any errors.

When working with MQ manager on AIX:
java.lang.IllegalArgumentException: Missing Valuefier handling for full class name=java.lang.Byte, simple name=Byte
MQ manager and logstash on Linux:
java.lang.IllegalArgumentException: Missing Valuefier handling for full class name=java.lang.Short, simple name=Short

Logstash version: 5.3.0
Plugin version: logstash-input-jms-3.0.1-java
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
Operating systems:
Client: Windows 7 Ent SP1, Linux RHEL (uname -r output: 2.6.32-642.4.2.el6.x86_64)
Server: AIX 7.1 (Power PC), Linux Mint Serena (x86 32-bit)
WebSphere MQ versions 7.5.0.6, 8.0.0.6
WebSphere MQ client version: 9.0.0.0 (Level: p900-L160512.4)

Update: I have just tried to run this configuration with MQ client 7.5.0.6 for Linux, it makes no difference.

How to reproduce.
You need a Windows or Linux machine with MQ java libraries. I have installed MQ client 9 on Windows.
I have attached two sample messages which can be loaded to MQ queue using RFHUTIL (IBM SupportPac IH03) (use "Load Q" button with default settings). RFHUTIL requires MQ client.
One of these messages is processed without error, another message causes exception.
test_messages.zip

Test messages for qload utility (SupportPac MO03):
qload_test_messages.zip

Logs:
logstash_jms.log.zip

Config input section:

input {
    jms {
        yaml_file => "C:/logstash-5.3.0/config/jms.yml"
        yaml_section => "wmq"
        include_header => true
        include_properties => true
        include_body => true
        use_jms_timestamp => false
        destination => "TEST.LOG"
        interval => 3
        runner => async
        add_field => [ "host", "computer_name" ]
    }
}

jms.yml:

---
# IBM WebSphere MQ
wmq:
  :factory: com.ibm.mq.jms.MQQueueConnectionFactory
  :queue_manager: QMNAME
  :host_name: server_name.domain_name
  :channel: LOGSTASH.CHL
  :port: 1414
  # Transport Type: com.ibm.mq.jms.JMSC::MQJMS_TP_CLIENT_MQ_TCPIP
  :transport_type: 1
  :username: test
  :require_jars:
    - C:/IBM/MQ/java/lib/com.ibm.mq.allclient.jar

You may have to include other jars from MQ java/lib, but this configuration works on my computer.

I have tried to ask at the forum, but no one replied. https://discuss.elastic.co/t/logstash-input-jms-problem-reading-messages-from-ibm-websphere-mq-missing-valuefier/81993

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions