tilln / jmeter-iso8583

ISO8583 Plugin for JMeter
MIT License
62 stars 32 forks source link

[receive] org.jpos.iso.IF_CHAR: Problem unpacking field 37 in jmeter-iso8583 #23

Closed wayne5168 closed 4 years ago

wayne5168 commented 4 years ago

Hi, I met a unpacking failure issue: [receive] org.jpos.iso.IF_CHAR: Problem unpacking field 37 (java.lang.StringIndexOutOfBoundsException: String index out of range: 73) unpacking field=37 I study much jmeter-iso8583 related information but still cannot solve this issue. If I add field 37 into the request and receive it in the response, then the Exception will show problem unpacking field 55.

Jmeter_log.txt ws-log.txt

image image

Please advise. Thank you very much.

tilln commented 4 years ago

Can you please double check the content of the attached Jmeter_log.txt?

wayne5168 commented 4 years ago

Sorry, I attached wrong one, which is downloaded from other issue. Here you are. jmeter.log

tilln commented 4 years ago

Can you double check your bitmap has the correct class in the packager?

wayne5168 commented 4 years ago

Here is the Packager Configuration file "D:/UTILS/apache-jmeter-5.3/extras/base24.xml". base24.zip It uses IFA_BITMAP, ASCII bitmap that is what we use. The bitmap in the request is built according this packager and the response bitmap with additional bit 39 only as shown in ws-log.txt I attached. request bitmap:82200000000000000400000000000000 response bitmap:82200000020000000400000000000000 Please advise.

tilln commented 4 years ago

It appears that the packager tries to unpack the data inclusive of the message header, i.e.

new org.jpos.iso.ISOMsg().with {
    setPackager(new org.jpos.iso.packager.GenericPackager('c:/temp/base24.xml'))
    unpack(org.jpos.iso.ISOUtil.hex2byte('49534F303035303030303636303831303832323030303030303230303030303030343030303030303030303030303030303631393036333034373437323837353030333031'))
    dump(System.out, '')
}

This reproduces the error you get in the JMeter log.

You may want to try specifying the header length in the packager:

<!-- BASE24 field descriptions for GenericPackager -->
<isopackager headerLength="12">
wayne5168 commented 4 years ago

Thanks, I find the header shall not be configured in Message header, it shall be on Channel header instead, and this headerLength is not required.

tilln commented 4 years ago

@wayne5168 would you mind sharing how you configured the Channel for others we come across this issue? Thanks!

wayne5168 commented 4 years ago

I put the message header value "ISO005000060" in Channel Header. The request and response will be as following, it can be accepted by jmeter. ISO0050000600800822000000000000004000000000000000623095337012624301 ISO005000066081082200000020000000400000000000000062301534701262400301 image

If I put the "ISO005000060" with hex "49534F303035303030303630" in Message Header (hex) with headerLength="12" or any other value, the request will repeat the header in the request as ISO005000060ISO0050000600800822000000000000004000000000000000623102257685856301.

Put the header in Channel Header is what my solution to solve this issue.

By the way, since the Channel Header can only put ASCII string, if I want to put binary in the header then this solution seems don't work. I am studying the document to find out the possible solution. I appreciate if you can show me some guide or tips. Thank you very much.

tilln commented 4 years ago

Thanks, @wayne5168 for posting this.

Re binary values in the Channel header: The jPOS API only supports string values, so perhaps you could try embedding non-ASCII characters with the JMeter function __char.

mdzeyaullah commented 2 years ago

@wayne5168 - can we talk on this issue as we are getting challenges in iso 8583 echo message implementation?