{"id":37021258,"url":"https://github.com/tilln/jmeter-iso8583","last_synced_at":"2026-01-14T02:30:18.914Z","repository":{"id":36074867,"uuid":"194500518","full_name":"tilln/jmeter-iso8583","owner":"tilln","description":"ISO8583 Plugin for JMeter","archived":false,"fork":false,"pushed_at":"2025-03-15T04:16:07.000Z","size":2418,"stargazers_count":70,"open_issues_count":0,"forks_count":35,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-07-23T19:19:15.561Z","etag":null,"topics":["iso8583","jmeter","jmeter-plugin","jpos","pos"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tilln.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-06-30T09:56:17.000Z","updated_at":"2025-06-09T23:01:56.000Z","dependencies_parsed_at":"2024-03-03T02:28:03.842Z","dependency_job_id":"72ccb17b-4e08-48f0-b075-79846f1ba0f6","html_url":"https://github.com/tilln/jmeter-iso8583","commit_stats":null,"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/tilln/jmeter-iso8583","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tilln%2Fjmeter-iso8583","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tilln%2Fjmeter-iso8583/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tilln%2Fjmeter-iso8583/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tilln%2Fjmeter-iso8583/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tilln","download_url":"https://codeload.github.com/tilln/jmeter-iso8583/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tilln%2Fjmeter-iso8583/sbom","scorecard":{"id":885365,"data":{"date":"2025-08-11","repo":{"name":"github.com/tilln/jmeter-iso8583","commit":"b848436fb7a4b573169550b99c8904a2a96f8d59"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.1,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/26 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Token-Permissions","score":9,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: jobLevel 'contents' permission set to 'write': .github/workflows/release.yml:14","Warn: no topLevel permission defined: .github/workflows/close-inactive-issues.yml:1","Warn: no topLevel permission defined: .github/workflows/release.yml:1"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/close-inactive-issues.yml:13: update your workflow using https://app.stepsecurity.io/secureworkflow/tilln/jmeter-iso8583/close-inactive-issues.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/tilln/jmeter-iso8583/release.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/tilln/jmeter-iso8583/release.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:30: update your workflow using https://app.stepsecurity.io/secureworkflow/tilln/jmeter-iso8583/release.yml/master?enable=pin","Info:   0 out of   3 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   1 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.txt:0","Info: FSF or OSI recognized license: MIT License: LICENSE.txt:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact 1.4 not signed: https://api.github.com/repos/tilln/jmeter-iso8583/releases/205984504","Warn: release artifact 1.3 not signed: https://api.github.com/repos/tilln/jmeter-iso8583/releases/96891541","Warn: release artifact 1.2 not signed: https://api.github.com/repos/tilln/jmeter-iso8583/releases/41332828","Warn: release artifact 1.1 not signed: https://api.github.com/repos/tilln/jmeter-iso8583/releases/25558432","Warn: release artifact 1.0 not signed: https://api.github.com/repos/tilln/jmeter-iso8583/releases/18822718","Warn: release artifact 1.4 does not have provenance: https://api.github.com/repos/tilln/jmeter-iso8583/releases/205984504","Warn: release artifact 1.3 does not have provenance: https://api.github.com/repos/tilln/jmeter-iso8583/releases/96891541","Warn: release artifact 1.2 does not have provenance: https://api.github.com/repos/tilln/jmeter-iso8583/releases/41332828","Warn: release artifact 1.1 does not have provenance: https://api.github.com/repos/tilln/jmeter-iso8583/releases/25558432","Warn: release artifact 1.0 does not have provenance: https://api.github.com/repos/tilln/jmeter-iso8583/releases/18822718"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 9 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":0,"reason":"115 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-4v6p-cxf9-98rf","Warn: Project is vulnerable to: GHSA-p5pg-wm9q-8v6r","Warn: Project is vulnerable to: GHSA-h46c-h94j-95f3","Warn: Project is vulnerable to: GHSA-wf8f-6423-gfxg","Warn: Project is vulnerable to: GHSA-5xqr-grq4-qwgx","Warn: Project is vulnerable to: GHSA-m6cj-93v6-cvr5","Warn: Project is vulnerable to: GHSA-4jrv-ppp4-jm57","Warn: Project is vulnerable to: GHSA-5mg8-w23w-74h3","Warn: Project is vulnerable to: GHSA-7g45-4rm6-3mm3","Warn: Project is vulnerable to: GHSA-mvr2-9pj6-7w5j","Warn: Project is vulnerable to: GHSA-4gg5-vx3j-xwc7","Warn: Project is vulnerable to: GHSA-735f-pc8j-v9w8","Warn: Project is vulnerable to: GHSA-77rm-9x9h-xj3g","Warn: Project is vulnerable to: GHSA-g5ww-5jh7-63cx","Warn: Project is vulnerable to: GHSA-h4h5-3hr4-j3g2","Warn: Project is vulnerable to: GHSA-wrvw-hg22-4m67","Warn: Project is vulnerable to: GHSA-pfh2-hfmq-phg5","Warn: Project is vulnerable to: GHSA-2p3x-qw9c-25hh","Warn: Project is vulnerable to: GHSA-2q8x-2p7f-574v","Warn: Project is vulnerable to: GHSA-3ccq-5vw3-2p6x","Warn: Project is vulnerable to: GHSA-43gc-mjxg-gvrq","Warn: Project is vulnerable to: GHSA-4cch-wxpw-8p28","Warn: Project is vulnerable to: GHSA-4hrm-m67v-5cxr","Warn: Project is vulnerable to: GHSA-56p8-3fh9-4cvq","Warn: Project is vulnerable to: GHSA-59jw-jqf4-3wq3","Warn: Project is vulnerable to: GHSA-64xx-cq4q-mf44","Warn: Project is vulnerable to: GHSA-6w62-hx7r-mw68","Warn: Project is vulnerable to: GHSA-6wf9-jmg9-vxcc","Warn: Project is vulnerable to: GHSA-74cv-f58x-f9wf","Warn: Project is vulnerable to: GHSA-7chv-rrw6-w6fc","Warn: Project is vulnerable to: GHSA-8jrj-525p-826v","Warn: Project is vulnerable to: GHSA-cxfm-5m4g-x7xp","Warn: Project is vulnerable to: GHSA-f554-x222-wgf7","Warn: Project is vulnerable to: GHSA-f6hm-88x3-mfjv","Warn: Project is vulnerable to: GHSA-f8cc-g7j8-xxpm","Warn: Project is vulnerable to: GHSA-g5w6-mrj7-75h2","Warn: Project is vulnerable to: GHSA-h7v4-7xg3-hxcc","Warn: Project is vulnerable to: GHSA-hf23-9pf7-388p","Warn: Project is vulnerable to: GHSA-hfq9-hggm-c56q","Warn: Project is vulnerable to: GHSA-hph2-m3g5-xxv4","Warn: Project is vulnerable to: GHSA-hrcp-8f3q-4w2c","Warn: Project is vulnerable to: GHSA-hvv8-336g-rx3m","Warn: Project is vulnerable to: GHSA-hwpc-8xqv-jvj4","Warn: Project is vulnerable to: GHSA-j563-grx4-pjpv","Warn: Project is vulnerable to: GHSA-j9h8-phrw-h4fh","Warn: Project is vulnerable to: GHSA-jfvx-7wrx-43fh","Warn: Project is vulnerable to: GHSA-mw36-7c6c-q4q2","Warn: Project is vulnerable to: GHSA-p8pq-r894-fm8f","Warn: Project is vulnerable to: GHSA-qpfq-ph7r-qv6f","Warn: Project is vulnerable to: GHSA-qrx8-8545-4wg2","Warn: Project is vulnerable to: GHSA-rmr5-cpv2-vgjf","Warn: Project is vulnerable to: GHSA-xw4p-crpj-vjx2","Warn: Project is vulnerable to: GHSA-78wr-2p64-hpwj","Warn: Project is vulnerable to: GHSA-gwrp-pvrq-jmwv","Warn: Project is vulnerable to: GHSA-j288-q9x7-2f5v","Warn: Project is vulnerable to: GHSA-cgp8-4m63-fhh5","Warn: Project is vulnerable to: GHSA-cfxw-4h78-h7fw","Warn: Project is vulnerable to: GHSA-269g-pwp5-87pp","Warn: Project is vulnerable to: GHSA-p53j-g8pw-4w5f","Warn: Project is vulnerable to: GHSA-493p-pfq6-5258","Warn: Project is vulnerable to: GHSA-v528-7hrm-frqp","Warn: Project is vulnerable to: GHSA-4g9r-vxhx-9pgx","Warn: Project is vulnerable to: GHSA-7hfm-57qf-j43q","Warn: Project is vulnerable to: GHSA-crv7-7245-f45f","Warn: Project is vulnerable to: GHSA-h436-432x-8fvx","Warn: Project is vulnerable to: GHSA-hrmr-f5m6-m9pq","Warn: Project is vulnerable to: GHSA-mc84-pj99-q6hh","Warn: Project is vulnerable to: GHSA-xqfj-vm6h-2x34","Warn: Project is vulnerable to: GHSA-36wv-v2qp-v4g4","Warn: Project is vulnerable to: GHSA-3w37-5p3p-jv92","Warn: Project is vulnerable to: GHSA-fh5r-crhr-qrrq","Warn: Project is vulnerable to: GHSA-qmgx-j96g-4428","Warn: Project is vulnerable to: GHSA-x3x3-qwjq-8gj4","Warn: Project is vulnerable to: GHSA-jc7r-v6fg-2gpf","Warn: Project is vulnerable to: GHSA-7r82-7xv7-xcpj","Warn: Project is vulnerable to: GHSA-jw7r-rxff-gv24","Warn: Project is vulnerable to: GHSA-7rjr-3q55-vv33","Warn: Project is vulnerable to: GHSA-8489-44mv-ggj8","Warn: Project is vulnerable to: GHSA-jfh8-c2jp-5v3q","Warn: Project is vulnerable to: GHSA-p6xc-xr62-6r2g","Warn: Project is vulnerable to: GHSA-vwqq-5vrc-xw9h","Warn: Project is vulnerable to: GHSA-2h3j-m7gr-25xj","Warn: Project is vulnerable to: GHSA-6vqp-h455-42mr","Warn: Project is vulnerable to: GHSA-7grw-6pjh-jpc9","Warn: Project is vulnerable to: GHSA-fg3j-q579-v8x4","Warn: Project is vulnerable to: GHSA-gx96-vgf7-hwfg","Warn: Project is vulnerable to: GHSA-j2xq-pfff-mvgg","Warn: Project is vulnerable to: GHSA-9jwc-q6j3-8g9g","Warn: Project is vulnerable to: GHSA-gmg8-593g-7mv3","Warn: Project is vulnerable to: GHSA-mqvp-7rrg-9jxc","Warn: Project is vulnerable to: GHSA-2326-hx7g-3m9r","Warn: Project is vulnerable to: GHSA-mjmq-gwgm-5qhm","Warn: Project is vulnerable to: GHSA-5mf7-26mw-3rqr","Warn: Project is vulnerable to: GHSA-6jq2-789q-fff2","Warn: Project is vulnerable to: GHSA-9r24-gp44-h3pm","Warn: Project is vulnerable to: GHSA-h8q5-g2cj-qr5h","Warn: Project is vulnerable to: GHSA-j53j-gmr9-h8g3","Warn: Project is vulnerable to: GHSA-mfwh-gqx8-c787","Warn: Project is vulnerable to: GHSA-mm7m-xg4h-6m52","Warn: Project is vulnerable to: GHSA-qw3f-w4pf-jh5f","Warn: Project is vulnerable to: GHSA-w6g3-v46q-5p28","Warn: Project is vulnerable to: GHSA-3448-vfvv-xp9g","Warn: Project is vulnerable to: GHSA-p699-3wgc-7h72","Warn: Project is vulnerable to: GHSA-mw3r-pfmg-xp92","Warn: Project is vulnerable to: GHSA-fmj2-7wx8-qj4v","Warn: Project is vulnerable to: GHSA-rcjj-h6gh-jf3r","Warn: Project is vulnerable to: GHSA-gp7f-rwcx-9369","Warn: Project is vulnerable to: GHSA-m72m-mhq2-9p6c","Warn: Project is vulnerable to: GHSA-9qcf-c26r-x5rf","Warn: Project is vulnerable to: GHSA-w77p-8cfg-2x43","Warn: Project is vulnerable to: GHSA-9339-86wc-4qgf","Warn: Project is vulnerable to: GHSA-7j4h-8wpf-rqfh","Warn: Project is vulnerable to: GHSA-h65f-jvqw-m9fj","Warn: Project is vulnerable to: GHSA-vmqm-g3vh-847m","Warn: Project is vulnerable to: GHSA-w4jq-qh47-hvjq"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-24T09:49:28.970Z","repository_id":36074867,"created_at":"2025-08-24T09:49:28.970Z","updated_at":"2025-08-24T09:49:28.970Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28408711,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T01:52:23.358Z","status":"online","status_checked_at":"2026-01-14T02:00:06.678Z","response_time":107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["iso8583","jmeter","jmeter-plugin","jpos","pos"],"created_at":"2026-01-14T02:30:16.156Z","updated_at":"2026-01-14T02:30:18.858Z","avatar_url":"https://github.com/tilln.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# jmeter-iso8583 [![github-actions](https://github.com/tilln/jmeter-iso8583/actions/workflows/release.yml/badge.svg)](https://github.com/tilln/jmeter-iso8583/actions/workflows/release.yml)\n\nOverview\n--------\n\nApache JMeter plugin for load testing of payment gateways and switches via [ISO 8583](https://en.wikipedia.org/wiki/ISO_8583) messaging, \nbased on the excellent [jPOS framework](http://jpos.org/). Includes the following components:\n\n- [*ISO8583 Sampler*](#sampler) for defining and sending messages,\n- [*ISO8583 Connection Configuration*](#config) for integration with the system under test,\n- [*ISO8583 Message Component*](#component) (optional) for sharing common message fields,\n- [*ISO8583 Crypto PreProcessor*](#crypto) (optional) for encryption operations of certain message elements (PIN Block, MAC, ARQC).\n- [*Crypto functions*](#functions) (optional) for non-message related cryptographic calculations.\n\n#### Prerequisites\nA so-called Packager is required to transform (\"pack\") the message into its binary representation for sending it over the wire.\nThis plugin uses a jPOS [Generic Packager](https://github.com/jpos/jPOS/blob/v2_1_10/doc/src/asciidoc/ch04/genericpackager.adoc)\nthat needs to be configured with an XML file.\n\nOften one of the jPOS [packager configuration files](https://github.com/jpos/jPOS/tree/v2_1_10/jpos/src/dist/cfg/packager)\nmay be used as-is or with few customisations.\n\n#### Sample Message\n\n![Message](docs/request.png)\n\nIn JMeter's *View Results Tree* and JTL files, request and response messages are represented \nas XML, so Extractors and Assertions can easily be used.\nA hex dump of the raw (binary) message is included for troubleshooting purposes.\n\n\nUsage\n-----\n\n\u003ch3 id=\"config\"\u003eISO8583 Connection Configuration\u003c/h3\u003e\n\n![ISO8583 Connection Configuration](docs/config.png)\n\nThis Configuration Element represents a connection to the system under test.\nIt must be present in the [Scope](https://jmeter.apache.org/usermanual/test_plan.html#scoping_rules)\nof an *ISO8583 Sampler*.\n\nMandatory settings:\n- *Channel Class*: \nEncapsulates the wire protocol details. The dropdown contains classes included in jPOS \n(refer [Channels documentation](http://jpos.org/doc/javadoc/org/jpos/iso/channel/package-summary.html)). \nIf none of those are suitable, a custom channel class may be supplied (enter fully qualified class name).\n- *Packager Configuration*:\nXML configuration file that defines the packaging format of each message field (as per Prerequisites above).\n- *Hostname*: \n    * Client mode (JMeter connects to switch socket): Name or IP address of the switch to connect to.\n    * Server mode (switch connects to JMeter socket): Leave blank. JMeter will wait for incoming connection from the switch\n      before starting threads (timeout configurable via JMeter property `jmeter.iso8583.incomingConnectionTimeout`).\n- *Port*: \nPort number to connect to (outgoing from JMeter in client mode; incoming to JMeter in server mode).\n- *Reuse Connection* (only for client mode; since v1.1): Whether to reuse a persistent connection or reconnect for every request\n(default: true).\n- *Maximum Connections* (since v1.1):\n    * Client mode (only for non-persistent connections): Maximum number of concurrent connections to the remote host.\n    * Server mode: Ignored.\n\nOptional settings:\n- *Connection Reference*: This *Identifier* can be used to distinguish multiple configuration elements in a sampler's Scope.\n- *Channel Header*: \nA static header string for all messages (sent and received). \nNote that some Channels use dynamic headers instead (e.g. VAPChannel).\n- *Advanced Configuration*: \nChannel-dependent properties can be specified via *Name*/*Value* pairs.\nFor example, [`srcid` and `dstid`](https://github.com/jpos/jPOS/blob/v2_1_10/jpos/src/main/java/org/jpos/iso/channel/VAPChannel.java#L236-L237)\nfor VAPChannel's [Base1Header](https://github.com/jpos/jPOS/blob/v2_1_10/jpos/src/main/java/org/jpos/iso/header/BASE1Header.java).\n- *SSL Settings*: \nFor SSL/TLS connections, the *Keystore File* \n(protected with *Keystore Password* for the file and *Key Password* for a private key) should contain:\n    * Client mode: the server's public certificate to trust and, optionally, \n      the client certificate to send for authentication (mutual SSL).\n    * Server mode: the server certificate (with public and private key).\n- *Mux Settings* (since v1.1):\n    Control how the Mux finds matches between outgoing requests and incoming response messages. \n    See [QMUX documentation](https://github.com/jpos/jPOS/blob/v2_1_10/doc/src/asciidoc/ch08/qmux.adoc#mti-mapping-and-default-key)\n    for further details.\n    * *MTI Mapping*: 3 ten-digit numbers representing how the first 3 MTI digits are mapped between request and response.\n    Example (default): \"0123456789 0123456789 0022446789\" maps response MTI `0110` to request MTI `0100`.\n    * *Mux Key Configuration*:\n        Each row contains the key fields for a message type as per the *MTI* column, or for all\n        messages if the *MTI* column is empty.\n        \n        Example: Override default key to use fields 42, 41, 11 for all messages, \n        except *0800* messages for which fields 7 and 11 are used.\n\n        |MTI | Key Fields |\n        |----|------------|\n        |    | 42 41 11   |\n        |0800| 7 11       |\n- *Connection Selection* (since v1.2):\n    * Client mode: Ignored.\n    * Server mode: If there are multiple inbound socket connections (from the system under test to JMeter),\n     this determines which of these connections to select when sending a request.\n     \"Last connected\" (default) sends to the most recently connected socket.\n     \"Round robin\" cycles through the connections one after the other.\n     \"All connected\" sends to all of them.\n- *Request Listener* (since v1.2):\n    A Groovy *Script File* (before v1.3 BeanShell *BSH Script File*) can be specified that will be executed\n    for every **incoming** request.\n\n    It can be used to respond to network management (0800) messages from the system under test,\n    such as sign-on, key exchange etc.\n\n    The script will have access to the following variables:\n\n    |Name     |Meaning|Type|\n    |---------|-------|-----|\n    |`message`|The incoming message|[`org.jpos.iso.ISOMsg`](http://jpos.org/doc/javadoc/org/jpos/iso/ISOMsg.html)|\n    |`source` |The jPOS Channel that received the message and where the response should be sent back to|[`org.jpos.iso.ISOSource`](http://jpos.org/doc/javadoc/org/jpos/iso/ISOSource.html)|\n    |`log`    |The JMeter logger (for class `n.c.b.j.i.GroovyRequestListener`)|[`org.slf4j.Logger`](https://www.slf4j.org/api/org/slf4j/Logger.html)|\n    |`props`  |JMeter Properties|[`java.util.Properties`](https://docs.oracle.com/javase/8/docs/api/java/util/Properties.html)|\n\n    Example:\n    ```groovy\n    if (message.getMTI() == \"0800\") {                // ignore other message types\n        message.setResponseMTI();                    // turn it into 0810\n        message.set(39, \"00\");                       // successful\n        if (message.getString(70) == \"101\") {        // key change message\n            props.put(\"KEY\", message.getString(48)); // store message field in JMeter property\n        }\n        source.send(message);                        // send response back\n    }\n    ```\n\n    **Note:** Changed behaviour! For v1.2 this is a BeanShell script but as of v1.3 a Groovy script.\n\n##### Implementation Details\n\nThis component encapsulates a jPOS [Q2 container](https://github.com/jpos/jPOS/blob/v2_1_10/doc/src/asciidoc/master.adoc#q2)\nand [QBeans services](https://github.com/jpos/jPOS/blob/v2_1_10/doc/src/asciidoc/master.adoc#8-q2-jpos-services).\nIt manages either set of 3 components (depending on client or server mode):\n- ChannelAdaptor, Channel and QMUX\n- QServer, Channel and QMUX\n\nWhile normally those would be configured by placing corresponding XML files into a `deploy` folder,\nhere it is done dynamically via transforming configuration properties from the JMeter Test Plan\ninto in-memory deployment descriptor objects.\nThese descriptors are then used to create and deploy QBeans at the test start and destroy them at the end.\n\nFor even more advanced use cases, above XML files may still be used and copied to the Q2 deploy folder.\nIts location is configurable via JMeter property `jmeter.iso8583.q2DeployDir`.\n\n\n\u003ch3 id=\"sampler\"\u003eISO8583 Sampler\u003c/h3\u003e\n\nThe sampler needs an [*ISO8583 Connection Configuration*](#config) in its Scope.\nIf there are multiple configuration elements, the optional *Connection Reference*/*Identifier*\ncan be used to associate the sampler to a specific one (since v1.2).\n\n![ISO8583 Sampler](docs/sampler.png)\n\nEach row of the *Message Fields* table represents one data element of the message. The columns have the following meaning:\n- *Field*: Field number (decimal), with 0 being the Message Type Indicator (MTI).\n- *Content*: A string representation of the field's data content. This may be a text, numeric, or binary value. \nNote that the Packager configuration determines how this is interpreted.\nFor example, a binary field will expect a string of hexadecimal digits (without `0x` prefix).\nA text field's character encoding depends on the Packager configuration too (e.g. ASCII, EBCDIC).\n- *Tag* (hexadecimal): Used for tagged fields (e.g. ICC/EMV data fields), otherwise empty.\n- *Comment*: For documentation purposes.\n\nNote that Bitmaps will be generated automatically.\n\nOptional message header and trailers may be specified as hex digits.\n\n#### Binary Field Content\n\nIf the field's `class` attribute in the Packager configuration file is a subclass of \n[`ISOBinaryFieldPackager`](http://jpos.org/doc/javadoc/org/jpos/iso/ISOBinaryFieldPackager.html)\nthe field's *Content* is treated as binary and interpreted as hex digits (replacing incorrect digits with `F`).\n\nIf the Packager's field class is not binary or cannot be determined (e.g. if there are no subfields, as for\n[`BERTLVBinaryPackager`](http://jpos.org/doc/javadoc/org/jpos/tlv/packager/bertlv/BERTLVBinaryPackager.html),\nthe *Content* will be taken as-is and not be interpreted as hex digits.\nJMeter's function [`${__char()}`](https://jmeter.apache.org/usermanual/functions.html#__char)\ncan be used to enter binary values in that case.\n\nFor tagged fields, the tag value is also used to distinguish binary fields.\nThis works for well-known, standard EMV tags, but needs to be configured for proprietary tags.\nThe JMeter property `jmeter.iso8583.binaryFieldTags` can be used to define a comma-separated list of \nhexadecimal tag numbers. Note this will cause all fields with one of those tags to be interpreted as binary.\n\n\n#### Response Validation\n\nThe response code can be used to distinguish failed and successful samples \n(similar to JMeter's [HTTP Request](https://jmeter.apache.org/usermanual/component_reference.html#HTTP_Request)\nmarking 4xx and 5xx responses as failures).\n- *Timeout (ms)*: A response timeout in milliseconds can be defined individually for each sampler.\n  The value 0 can be used to send requests without expecting any response message \n  ([\"fire and forget\"](https://www.enterpriseintegrationpatterns.com/patterns/conversation/FireAndForget.html);\n  since v1.1).\n- *Response Code Field* (usually 39): Field number that is used to determine a sample success or failure.\n- *Success Response Codes* (usually 00): Expected value for successful responses. \n  This can be a comma-delimited list of valid values (since v1.1).\n\nIf either of the Response Code entries are empty, no validation will be performed.\n\n#### Subfields\n\nFor example, field 43 \"Card Acceptor Location\" contains 3 subfields that can be defined as follows:\n\n|Field|Content|Tag|Comment|\n|-----|-------|---|-------|\n|43.1 |JMeter |   |Name   |\n|43.2 |Nowhere|   |City   |\n|43.3 |NZ     |   |Country|\n\nThis has to be matched by a packager configuration like the below:\n\n```xml\n    \u003cisofieldpackager id=\"43\"\n            name=\"CARD ACCEPTOR LOCATION\"\n            length=\"40\"\n            class=\"org.jpos.iso.IFB_BINARY\"\n            packager=\"org.jpos.iso.packager.GenericSubFieldPackager\"\n            emitBitmap=\"false\"\n            firstField=\"1\"\n            maxValidField=\"3\"\u003e\n        \u003cisofield id=\"1\" name=\"NAME\"    length=\"25\" pad=\"false\" class=\"org.jpos.iso.IF_CHAR\"/\u003e\n        \u003cisofield id=\"2\" name=\"CITY\"    length=\"13\" pad=\"false\" class=\"org.jpos.iso.IF_CHAR\"/\u003e\n        \u003cisofield id=\"3\" name=\"COUNTRY\" length=\"2\"  pad=\"false\" class=\"org.jpos.iso.IF_CHAR\"/\u003e\n    \u003c/isofieldpackager\u003e\t\n```\n\n#### Tagged Fields\n\nFor example, field 55 with ICC/[EMV](https://en.wikipedia.org/wiki/EMV) data \nin [BER-TLV](https://en.wikipedia.org/wiki/Basic_Encoding_Rules) format can be defined as in the following example:\n\n|Field|Content|Tag|Comment|\n|-----|-------|---|-------|\n|55.1|000000000199|9F02|Amount, Authorised|\n|55.2|000000000000|9F03|Amount, Other|\n|55.3|0554|9F1A|Terminal Country Code|\n|55.4|0000000000|95|Terminal Verification Results|\n|55.5|0554|5F2A|Transaction Currency Code|\n|55.6|\u003ccode\u003e${__time(yyMMdd,)}\u003c/code\u003e|9A|Transaction Date|\n|55.7|01|9C|Transaction Type|\n|55.8|\u003ccode\u003e${__RandomString(8,0123456789ABCDEF,)}\u003c/code\u003e|9F37|Unpredictable Number|\n|55.9|5C00|82|Application Interchange Profile|\n|55.10|\u003ccode\u003e${ATC}\u003c/code\u003e|9F36|Application Transaction Counter|\n|55.11|\u003ccode\u003e${IAD}\u003c/code\u003e|9F10|Issuer Application Data|\n\nProvided a matching packager configuration like this:\n\n```xml\n      \u003cisofieldpackager\n          id=\"55\"\n          length=\"255\"\n          name=\"Integrated Circuit Card Related Data\"\n          class=\"org.jpos.iso.IFB_LLLHBINARY\"\n          packager=\"org.jpos.tlv.packager.bertlv.BERTLVBinaryPackager\"\n          emitBitmap=\"false\"/\u003e\n```\n\n\n\u003ch3 id=\"component\"\u003eISO8583 Message Component\u003c/h3\u003e\n\n![ISO8583 Message Component](docs/component.png)\n\nThis (optional) Configuration element may be used to define fields in the same way as for the *ISO8583 Sampler*.\nHowever, its fields will be applied to all samplers in scope, so it can be used for common data elements like dates and times.\n\n|Field|Content|Tag|Comment|\n|-----|-------|---|-------|\n|7|\u003ccode\u003e${__time(MMddHHmmss,)}\u003c/code\u003e| |Transmission date \u0026 time|\n|12|\u003ccode\u003e${__time(HHmmss,)}\u003c/code\u003e| |Local transaction time|\n|13|\u003ccode\u003e${__time(MMdd,)}\u003c/code\u003e| |Local transaction date|\n|15|\u003ccode\u003e${__time(MMdd,)}\u003c/code\u003e| |Settlement date|\n|16|\u003ccode\u003e${__time(MMdd,)}\u003c/code\u003e| |Currency conversion date|\n|17|\u003ccode\u003e${__time(MMdd,)}\u003c/code\u003e| |Capture date|\n\nIf any particular field number is present in the sampler as well as the Component, the one in the sampler takes precedence.\n\nIf a sampler has more than one Component in its scope, their fields will all be merged into the sampler, \nunless a field is already present in the sampler *or* a Component in a scope closer to the sampler.\n\nIn other words, inner fields take precedence over outer ones, \nwith the sampler's fields themselves being the innermost ones.\n\n\n\u003ch3 id=\"crypto\"\u003eISO8583 Crypto PreProcessor\u003c/h3\u003e\n\n![ISO8583 Crypto](docs/crypto.png)\n\nThis (optional) Preprocessor modifies a message, based on cryptographic calculations, \nbefore it is packaged and sent by the sampler.\n\nThis is necessary for some fields that can only be determined during runtime of the JMeter test,\nrather than being generated before the test, as they may depend on dynamic session keys or other, dynamic message fields.\n\nCurrently supported are the following operations:\n- *PIN Block Encryption*: Encrypts a clear PIN Block given a zone PIN key (ZPK) or base derivation key (BDK).\n- *MAC Generation*: Calculates the MAC (Message Authentication Code), given a session MAC key.\n- *ARQC Generation*: Calculates the Authorization Request Cryptogram (ARQC), given the ICC Master Key (IMKAC).\n\nAll keys need to be provided as clear (unencrypted) hex digits.\n\nAny subset of these operations may be performed by leaving some or all of the other ones' inputs blank.\nFor example, if no key is present for one of the operations, it will be skipped.\n\nAs the MAC depends on the entire message content, its calculation is the last to be done.\n\n#### PIN Block Encryption\n\n- *PIN Field Number* (usually 52): A clear PIN Block in this field will be replaced with the encrypted one.\n- *PIN Key (hex)*: Clear DES key to use as ZPK for zone PIN encryption (16, 32 or 48 hex digits), \nor Triple-DES key to use as BDK for DUKPT (32 hex digits).\n- *KSN Field Number* (usually 53): Empty for zone PIN encryption. Otherwise, for DUKPT encryption, \nthe 16 hex digits in this field will be interpreted as the Key Serial Number (KSN).\n\nThe KSN scheme can be configured by changing the JMeter property `jmeter.iso8583.ksnDescriptor`. \nFor example, its default \"6-5-5\" means `bbbbbbdddddccccc` will be partitioned into \nBDK ID `bbbbbb`, device ID `ddddd`, and transaction counter `ccccc`.\n\n#### MAC Generation\n\n- *MAC Algorithm*: Cipher algorithm name for EDE or CBC MAC calculation \n(refer [BouncyCastle specification](https://www.bouncycastle.org/specifications.html))\n- *MAC Key (hex)*: Clear Triple-DES key (32 or 48 hex digits), usually from a key exchange.\n- *MAC Field Number*: Can be used to force the MAC in a specific field. If left blank,  \nthe MAC field will be the next multiple of 64 from the last field in the message (e.g. 64, 128, 192).\n\n#### ARQC Generation\n\n- *EMV/ICC Data Field Number* (usually 55): The ARQC input fields will be taken from **subfields** of this field\n(unless *Transaction Data* is specified below),\nand the calculated ARQC value will be added as an additional subfield (tag `9F26`).\n- *IMKAC (hex)*: Clear ICC Master Key for Application Cryptogram calculation (Triple-DES key, 32 hex digits).\n- *Primary Account Number (PAN)*: Input parameter for session key derivation. \n  Must be provided unless the ICC data contains this in tag `5A`.\n- *Account Sequence Number (hex)*: Input parameter for session key derivation (2 hex digits).\n  Must be provided unless the ICC data contains this in tag `5F34`. \n- *Transaction Data (hex)*: Input data for ARQC calculation (as byte sequence). \n  If left blank, relevant fields will be automatically extracted from the ICC Data field.\n  Otherwise, for example, if non-standard tags are to be included in the cryptogram calculation, the raw input bytes\n  can be supplied in this field.\n\n    **Note:** Changed behaviour! For v1.0 the data in this field is *appended* to the automatically extracted fields,\n    whereas as of v1.1 data in this field overrides the extraction.\n\n**Note: Changed behaviour!**\n- Until v1.2 the input field\n  *Session Key Derivation Method* (how to derive the UDK from the Master Key) had to be set explicitly.\n  As of v1.3 this is obsolete as it will be determined automatically by evaluating the Issuer Application Data field (tag `9F10`). \n\n- Likewise, as of v1.3, the JMeter properties `jmeter.iso8583.arqcInputTags` and `jmeter.iso8583.arqcFromFullIADForCVNs` have been \n  removed as jPOS [handles](https://github.com/jpos/jPOS/pull/499) this cryptogram logic internally.\n\n- From v1.1 - v1.3 the field *Padding (hex)* would specify optional, additional padding bytes to append to transaction data \n  before ARQC calculation. As of v1.4 the padding will be [handled](https://github.com/jpos/jPOS/pull/577) automatically,\n  depending on the Issuer Application Data.\n\n\u003ch3 id=\"functions\"\u003eCrypto Functions (since v1.1)\u003c/h3\u003e\n\n#### __calculateCVV\n\nExample: `${__calculateCVV(${CVK}, ${PAN}, ${EXP}, 999, iCVV)}`\n\nArguments:\n1. Combined CVV Keys (hex digits)\n2. Primary Account Number (PAN)\n3. Expiry date (yyMM)\n4. Service Code (3 digits)\n5. Name of variable in which to store the result (optional)\n\n#### __calculateDESKeyCheckValue\n\nExample: `${__calculateDESKeyCheckValue(${ZPK}, KCV)}`\n\nArguments:\n1. Clear DES key for which to calculate the key check value (hex digits)\n2. Name of variable in which to store the result (optional)\n\n#### __calculatePINBlock\n\nExample: `${__calculatePINBlock(1234, 34, ${PAN}, PINBLOCK)}`\n\nArguments:\n1. PIN\n2. PIN Block Format (as per [jPOS API docs](http://jpos.org/doc/javadoc/org/jpos/security/SMAdapter.html#field.summary)):\n \n    |Format|Description|\n    |--|-|\n    | 1|adopted by ANSI (ANSI X9.8) and is one of two formats supported by the ISO (ISO 95641 - format 0).|\n    | 2|supports Douctel ATMs.|\n    | 3|Diebold Pin Block format.|\n    | 4|PIN block format adopted by the PLUS network.|\n    | 5|ISO 9564-1 Format 1 PIN Block.|\n    |34|standard EMV PIN block format.|\n    |35|required by Europay/MasterCard for their Pay Now \u0026 Pay Later products.|\n    |41|Visa format for PIN change without using the current PIN.|\n    |42|Visa format for PIN change using the current (old) PIN.\n\n3. Primary Account Number (PAN)\n4. Name of variable in which to store the result (optional)\n\n#### __encryptDESKey\n\nExample: `${__encryptDESKey(${ZPK}, ${KEK}, ZPK_under_KEK)}`\n\nArguments:\n1. Clear DES key to be encrypted (hex digits)\n2. DES key for encrypting the clear key (hex digits)\n3. Name of variable in which to store the encrypted key (optional)\n\n#### __generateDESKey\n\nExample: `${__generateDESKey(192, ZPK)}`\n\nArguments:\n1. Key length in bits (64, 128 or 192)\n2. Name of variable in which to store the result (optional)\n\n\nInstallation\n------------\n### Via [PluginsManager](https://jmeter-plugins.org/wiki/PluginsManager/)\n\nUnder tab \"Available Plugins\", select \"ISO8583 Sampler\", then click \"Apply Changes and Restart JMeter\".\n\n### Via Package from [JMeter-Plugins.org](https://jmeter-plugins.org/)\n\nExtract the [zip package](https://jmeter-plugins.org/files/packages/tilln-iso8583-1.4.zip) into JMeter's root directory, then restart JMeter.\n\n### Via Manual Download\n\n1. Copy the [jmeter-iso8583 jar file](https://github.com/tilln/jmeter-iso8583/releases/download/1.4/jmeter-iso8583-1.4.jar) into JMeter's `lib/ext` directory.\n2. Copy the following dependencies into JMeter's `lib` directory (and optionally remove older versions of any of those jar files):\n    * [org.jpos / jpos](https://search.maven.org/remotecontent?filepath=org/jpos/jpos/2.1.10/jpos-2.1.10.jar)\n    * [org.bouncycastle / bcprov-lts8on](https://search.maven.org/remotecontent?filepath=org/bouncycastle/bcprov-lts8on/2.73.6/bcprov-lts8on-2.73.6.jar)\n    * [org.bouncycastle / bcpg-lts8on](https://search.maven.org/remotecontent?filepath=org/bouncycastle/bcpg-lts8on/2.73.6/bcpg-lts8on-2.73.6.jar)\n    * [org.jdom / jdom2](https://search.maven.org/remotecontent?filepath=org/jdom/jdom2/2.0.6.1/jdom2-2.0.6.1.jar)\n    * [org.osgi / org.osgi.core](https://search.maven.org/remotecontent?filepath=org/osgi/org.osgi.core/6.0.0/org.osgi.core-6.0.0.jar)\n    * [commons-cli / commons-cli](https://search.maven.org/remotecontent?filepath=commons-cli/commons-cli/1.4/commons-cli-1.4.jar)\n    * [org.yaml / snakeyaml](https://search.maven.org/remotecontent?filepath=org/yaml/snakeyaml/2.0/snakeyaml-2.0.jar)\n    * [org.hdrhistogram / HdrHistogram](https://search.maven.org/remotecontent?filepath=org/hdrhistogram/HdrHistogram/2.1.12/HdrHistogram-2.1.12.jar)\n    * [org.javatuples / javatuples](https://search.maven.org/remotecontent?filepath=org/javatuples/javatuples/1.2/javatuples-1.2.jar)\n3. Restart JMeter.\n\n\nConfiguration\n-------------\n\n### JMeter Properties\n\nThe following properties control the plugin behaviour:\n\n- `jmeter.iso8583.q2DeployDir`: \n   Directory where Q2 looks for deployment files. Will be created if not there yet.\n   (default: `deploy` subfolder from where JMeter was started).\n- `jmeter.iso8583.q2StartupTimeout` (ms): \n   How long to wait until the Q2 component starts up (default: 2 seconds).\n- `jmeter.iso8583.q2PackagerLogging` (true/false; since v1.1):\n   Whether to include Packager log information to the JMeter log output. \n   This may be useful in DEBUG mode to troubleshoot Packager issues. (default: false). \n- `jmeter.iso8583.incomingConnectionTimeout` (ms): \n   How long to wait for incoming connections when running in server-mode (default: 1 minute).\n- `jmeter.iso8583.channelReconnectDelay` (ms): \n   May be used to override the Q2 Channel Adaptor default of 10 seconds.\n- `jmeter.iso8583.arqcInputTags` (until v1.2):\n   Comma-separated list of hexadecimal EMV tag numbers that will be included in the ARQC calculation.\n   This may be used to include additional (or exclude standard) tags\n   (default: `9F02,9F03,9F1A,95,5F2A,9A,9C,9F37,82,9F36,9F10`).\n   Note: As of v1.3 this will be handled automatically by the jPOS IAD parser.\n- `jmeter.iso8583.arqcFromFullIADForCVNs` (v1.2 only):\n   Comma-separated list of hexadecimal CVNs (Cryptogram Version Numbers) for which the ARQC calculation\n   includes the full content of tag `9F10` (Issuer Application Data)\n   instead of just the CVR (Card Verification Results) portion\n   (default: `12,16` = CVN18, CVN22).\n   Note: As of v1.3 this will be handled automatically by the jPOS IAD parser.\n- `jmeter.iso8583.binaryFieldTags`:\n   Comma-separated list of hexadecimal tag numbers that will be interpreted as binary fields,\n   in addition to binary EMV tags (default: none).\n- `jmeter.iso8583.ksnDescriptor`:\n   Defines the [Key Serial Number Scheme](https://en.wikipedia.org/wiki/Derived_unique_key_per_transaction#Practical_Matters_(KSN_scheme)),\n   i.e. the length (in hex digits) of the KSN parts: BDK ID (or KSI), Device ID (or TRSM ID), transaction counter\n   (default: \"6-5-5\").\n\nLimitations\n-----------\n\n- Minimum JMeter version 4.0\n\nTroubleshooting\n---------------\nInspect the JMeter log, after increasing the log level to DEBUG, e.g. `jmeter -Lnz.co.breakpoint.jmeter.iso8583=DEBUG`.\n\nFAQ\n---\n\n### Why am I getting timeouts?\n\nThe three common reasons for response timeouts are:\n1. The sampler does not receive any response.\n2. The sampler does receive a response but fails to unpack it.\n3. The sampler does receive a response and unpacks it but no request can be matched.\n\nThe debug log should contain Channel output similar to the following:   \n\n```\n2022-02-22 12:34:56,789 DEBUG n.c.b.j.i.Q2: (channel/HOSTNAME:PORT) [send] Out: 0800 000001\n2022-02-22 12:34:56,987 DEBUG n.c.b.j.i.Q2: (channel/HOSTNAME:PORT) [receive]  In: 0810 000001\n```\n\nIf only the first log line is present, no response was received (case 1 above).\n\nIt is possible that the Channel did not interpret the received byte sequence correctly, for example\nthe first bytes that contain the message lengths, and therefore does not recognise the end of the message.\nDouble-check that the *Channel Class* is appropriate!\nConsider using Wireshark or similar tools to confirm whether and what data arrives at the TCP port.\n\nIt is likely that the request is incorrectly formed and the remote system discarded it, \nso checking its logs/traces may be helpful.\nDouble-check the *Packager Configuration* file! \nThis defines how a request is packed (or response is unpacked) before (after) it goes over the wire.\n\nIf both lines are present, a response was in fact received (cases 2 and 3 above).\n\nIf the second log line instead contains an error like the following, then the response failed to unpack (case 2 above).\nDouble-check the *Packager Configuration* file!\n```\n2022-02-22 12:34:56,987 ERROR n.c.b.j.i.Q2: (channel/HOSTNAME:PORT) [receive] org.jpos.iso.SOMECLASSNAMEHERE: Problem unpacking field ...\n```\n\n\nIf the second log line contains no error then it is likely that the plugin did not find a matching request (case 3 above).\nDouble-check the *Mux Settings*!\nThese define MTI values and message fields that are used for matching, and the default settings may not work. \n\n### How do I define the Packager Configuration?\n\nThe two common sources are:\n1. A messaging/interface specification,\n2. Message logs/traces of an existing test (or production) system.\n\nEvery message field needs an appropriate jPOS Field Packager\n(a Java class that translates between the logical and binary value of the message field). \nUnfortunately, not all classes are well documented, however, their class names follow a quite consistent naming scheme.\n\nSometimes, an [existing configuration](https://github.com/jpos/jPOS/tree/v2_1_10/jpos/src/dist/cfg/packager)\ncan be a starting point or even be sufficient for performance testing purposes\n(as not all fields need to be correctly defined but only the ones used in the JMeter test). \n\nIf a specification is available, matching classes can be determined in a systematic way,\notherwise message traces may have to be inspected and interpreted.\n\nFor example, suppose the trace for an 0800 Network Management message starts with the bytes `30 38 30 30` (hexadecimal),\nwhich are the MTI's ASCII representation, then the Field Packager class should be \n[`org.jpos.iso.IFA_NUMERIC`](https://github.com/jpos/jPOS/blob/v2_1_10/jpos/src/main/java/org/jpos/iso/IFA_NUMERIC.java).\nOtherwise, if the trace starts with `08 00` (hex),\ni.e. the MTI in [BCD](https://en.wikipedia.org/wiki/Binary-coded_decimal), the class should be\n[`org.jpos.iso.IFB_NUMERIC`](https://github.com/jpos/jPOS/blob/v2_1_10/jpos/src/main/java/org/jpos/iso/IFB_NUMERIC.java).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftilln%2Fjmeter-iso8583","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftilln%2Fjmeter-iso8583","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftilln%2Fjmeter-iso8583/lists"}