5.44.0 — 12 Jan 2024
Features
- Added support for zero response messages in server streaming record/replay gRPC
Fixes
Changes
5.43.2 — 17 Dec 2023
Features
- Added support for editing gRPC response delays in the UI
- Added support for editing HTTP/gRPC response delays with uniform min/max distribution in the UI
- Added support for connecting to IBM® MQ with an unspecified or null username/password
Fixes
- Library upgrades to fix OWASP issues
- Timeout shutdown if tray icon takes too long to close
Changes
- Upgraded protoc from 3.24.4 to 3.25.1
- Upgraded gRPC from 1.58.0 to 1.60.0
- Upgraded bundled JRE from 8u382 to 8u392
- Increased shutdown logging verbosity
- Windows executable metadata was updated
- The default virtual service CA certificate was renewed
- Amazon SQS HTTP plugin retired, please contact support@trafficparrot.com if you need extended support
5.42.3 — 01 Nov 2023
Fixes
- Library upgrades to fix OWASP issues
5.42.2 — 19 Oct 2023
Features
Fixes
- Library upgrades to fix OWASP issues
- Upgrade script now migrates any previous logback configuration
- Fixed an issue where {{ dataSource }} errors would shadow all other context variables
- Improved internal error reporting when an expected Handlebars variable is not found or of the wrong type
- Validate that mapping queue name is not empty when saving a mapping and when starting replay mode
- Improved performance when using custom request matchers for requests that do not match the standard matcher checks
Changes
- Upgraded WireMock from 2.35.0 to 2.35.1
- Upgraded protoc from 3.23.4 to 3.24.4
- Upgraded gRPC from 1.56.1 to 1.58.0
- Upgraded bundled JRE from 8u372 to 8u382
5.41.7 — 26 Aug 2023
Fixes
Changes
5.41.0 — 10 Aug 2023
Features
Fixes
- Library upgrades to fix OWASP issues
- {{ evaluate 'variable' }} now recognizes a variable that was set using {{#assign 'variable'}}value{{/assign}}
- Fixed an issue with the default permissions of the lib/external folder on Linux
- Fixed an issue with saving very large XML body mappings in the UI
Changes
- Upgraded protoc from 3.21.9 to 3.23.4
- Upgraded gRPC from 1.51.0 to 1.56.1
5.40.2 — 01 Jun 2023
Features
- Added Couchbase data source support:
{{ dataSource 'couchbase.db' 'INSERT INTO PERSON(KEY, VALUE) VALUES ("$id", {"id" : $id,"name" : $name})' id=1000 name='some-name' syntax='N1QL' }}
{{ dataSource 'couchbase.db' 'SELECT name FROM PERSON USE KEYS "$id"' id=1000 single=true syntax='N1QL' }}
{{ dataSource 'couchbase.db' 'INSERT INTO PERSON(KEY, VALUE) VALUES ("$id", $object)' id=1000 object=example syntax='N1QL' }}
- New helper to iterate a certain number of times:
{{#times 10}}{{@index}}{{#unless @last}},{{/unless}}{{/times}}
- New HTTP mapping bulk delete API:
DELETE http://localhost:8080/api/http/mappings/bulk/UUID1,UUID2,UUID3
- New gRPC mapping bulk delete API:
DELETE http://localhost:8080/api/grpc/mappings/bulk/UUID1,UUID2,UUID3
Fixes
- Library upgrades to fix OWASP issues
Changes
- Upgraded bundled JRE from 8u362 to 8u372
- Helper {{#equal a b }}true{{else}}false{{/equal} can now be written inline as {{ equal a b }}
- When using Handlebars partial files, it is now possible to use a different file extension than .hbs for example {{>example.txt}} will read from file example.txt
5.39.5 — 05 May 2023
Features
Fixes
- JMS advanced request and response types are now retained in the UI form when starting/stopping recording
- Improved HTTP recording UI error message when there is a problem fetching recording status in the UI
- Increase HTTP recording UI status timeout to cope better with slow browser connections
- If there is a problem decoding a recorded JMS message, fall back on a raw bytes recording representation
- Mention which actual connection ids were present when a JMS connection id is not found
- Removed deprecated "matches script" option from the request body matcher dropdown (replaced by dedicated fields)
Changes
- Upgraded bundled JRE from 8u352 to 8u362
- When matching JMS requests, mappings for Java object Serializable requests now must have the bodyType specified
- The default UI HTTPS certificate user-interface-https.jks was renewed
5.38.1 — 09 Apr 2023
Features
- Add request/response recording Protobuf type fields to JMS UI
5.38.0 — 03 Apr 2023
Features
- RabbitMQ JMS now supports record/replay of Protobuf messages using their JSON representation
- Added new dedicated endpoints that can be used for Docker and OpenShift health check probes:
- http://localhost:8080/api/health
- http://localhost:8081/__admin/health
- The trafficparrot.license comment line is now printed in the logs to help clarify which license is being used
Fixes
- If we can't import an OpenAPI YAML file example due to a schema mismatch exception, skip that one example and log why it was not imported
- Library upgrades to fix OWASP issues
5.37.8 — 27 Mar 2023
Fixes
- Added support for protoc on Apple ARM based M1/M2 processors running inside of Docker
5.37.7 — 20 Mar 2023
Features
- New HTTP request matching script can be used to e.g. match a request header using a regular expression
- New {{evaluate}} helper to evaluate a JavaScript command
- JMS recording now supports requests that use JMSReplyTo
- JMS IBM MQ new toggle in connection to enable copying request JMSMessageID to response JMSMessageID
-
RabbitMQ JMS improvements including:
- RabbitMQ RPC support
- RabbitMQ replyTo support
- RabbitMQ virtual host support
- Declare queue if it does not already exist in the broker on record/replay start using the arguments specified in the connection e.g. x-max-length
-
Object store improvements including:
- All operations are now thread safe within a single Traffic Parrot instance
- A default value can be specified to return if an object is not found
- trafficparrot.virtualservice.handlebars.select.indexAndCacheCsvFiles property is now also taken into account for {{ dataSource }} CSV file access
Fixes
- Allow API requests to set the Accept header with multiple content types, so long as the first one listed is application/json
- Fixed an issue with the scenario dropdown when no default port specified
- If there is an exception when starting, e.g. due to a missing property, startup fails immediately instead of waiting the full timeout duration to fail
- If the trafficparrot.license does not exist on startup, a relevant message is now displayed in the UI
- Improved compatibility with OpenShift 4 when using a TLS passthrough route to the license server
Changes
- gRPC matching now returns the closest match if multiple candidate responses match and warns in the logs about multiple matches
- Bundle third-party-licenses.zip instead of many small license text files, which were slow to extract on Windows
5.36.4 — 30 Jan 2023
Features
- New upgrade script supporting Linux/Mac/Windows
- The tray icon now displays the installation location and has a link to the latest Traffic Parrot documentation
- The default implementation of {{now}} can be toggled using trafficparrot.properties
-
Alternatively, you can add the provider parameter per call to dynamically switch between them, otherwise the default implementation specified in trafficparrot.properties will be used
- To enable this set in trafficparrot.properties:
trafficparrot.virtualservice.handlebars.now.dynamic=true
- To use the WireMock implementation:
{{now offset='2 years' format='epoch' provider='WIREMOCK'}}
- To use the Handlebars.java implementation:
{{now format='short' provider='HANDLEBARS'}}
Fixes
- Fixed a bug when parsing single quotes in OpenAPI specifications
Changes
- Upgraded bundled JRE from 8u345 to 8u352
- This release is compatible with the MQ com.ibm.mq.allclient JAR up to version 9.3.1.0
- Mention both tp.out and trafficparrot.log when there is a problem starting
5.35.8 — 19 Dec 2022
Features
- Added new "does not contain" request matcher support to the UI
Fixes
- API now allows cross-origin requests
- Trim whitespace from JSONPath request matcher to avoid confusing not matched issues
- Fixed an issue exporting/importing HTTP mappings ZIP between different scenarios
- Fixed a UI issue where gRPC mappings were saved with empty webhooks
- Library upgrades to fix OWASP issues
Changes
- UI now makes it clear that HTTP record/proxy/passthrough is not supported in a non default scenario yet
- Upgraded gRPC from 1.50.2 to 1.51.0
5.35.6 — 07 Dec 2022
Fixes
- Library upgrades to fix OWASP issues
Changes
- HTTP mapping ZIP export now includes data directory
5.35.5 — 10 Nov 2022
Features
- Added support for Apache Thrift service simulation, see a demo video
- Added ability to configure HTTP basic authentication for the Traffic Parrot user interface
Fixes
- Fixed a UI issue with mappings edited multiple times during the same UI session
- Added support for protoc on Apple ARM based M1/M2 processors
- Library upgrades to fix OWASP issues
Changes
- Upgraded bundled JRE from 8u332 to 8u345
- Upgraded WireMock from 2.33.2 to 2.35.0
- Upgraded gRPC from 1.46.0 to 1.50.2
- Upgraded protoc from 3.20.1 to 3.21.9
5.34.7 — 14 Oct 2022
Fixes
- Fixed an issue with the enabled script for HTTP webhook callbacks
- Fixed an issue with XLS data stores when storing and retrieving values with leading zeros
- Library upgrades to fix OWASP issues
5.34.3 — 16 Sep 2022
Features
Fixes
- Library upgrades to fix OWASP issues
5.34.0 — 02 Aug 2022
Features
Fixes
- Library upgrades to fix OWASP issues
Changes
-
The HTTP passthrough will be removed in a future release.
Please use the proxy response feature instead.
5.33.11 — 03 Jun 2022
Features
- Added access logging for UI interactions, written to logs/http-ui-access/http-ui-access-yyyy_mm_dd.log
Changes
- Upgraded bundled JRE from 8u282 to 8u332
- Upgraded gRPC from 1.43.1 to 1.46.0
- Upgraded protoc from 3.19.1 to 3.20.1
- Upgraded WireMock from 2.31.0 to 2.33.2
- HTTP VS access logs are now written to logs/http-vs-access/http-vs-access-yyyy_mm_dd.log
- Upgraded Gradle version in examples project from 4.10.1 to 7.4.2
- Logs file listing in UI is now ordered by last modified date
Fixes
- Library upgrades to fix OWASP issues
5.33.5 — 09 May 2022
Features
-
Added new trafficparrot.properties to allow sending custom headers to the on premise license server:
trafficparrot.license.usage.custom.headers=ExampleA:ValueA,ExampleB:ValueB
Changes
- Pressing the Cancel button on the Add mapping form now clears the form fields
Fixes
- Library upgrades to fix OWASP issues
5.33.2 — 14 Mar 2022
Features
-
Native IBM® MQ mapping multiple response messages
now support zero response messages. This allows for consuming request messages without sending any response message.
-
Added new trafficparrot.properties to allow starting JMS queue replay on startup:
- trafficparrot.jms.start.queue.replay.on.startup=false
- trafficparrot.jms.start.queue.replay.on.startup.consumeRequestsFromConnectionId=1
- trafficparrot.jms.start.queue.replay.on.startup.replayResponsesToConnectionId=1
-
Extended virtual service support for using multiple JMS virtual services linked to separate mappings:
-
The scenarios/VirtualServiceName/service.properties now allows for configuring:
- jms.queue.replay.on.startup=true
- jms.queue.replay.request.connection.id=1
- jms.queue.replay.response.connection.id=1
- The scenarios/VirtualServiceName/jms-connections.json file is used to specify the queue manager connections per virtual service
- The scenarios/VirtualServiceName/jms-mappings directory contains the mappings files per virtual service
- The UI allows starting JMS replay for multiple virtual services at a time
-
RabbitMQ JMS queue declare arguments can now be specified in the mapping JSON.
Please note that the UI does not yet support this feature.
- RabbitMQ JMS queue names may now be specified in the format exchange/routingKey instead of a direct queue name
Changes
- Upgraded bundled JRE from 8u292 to 8u322
- RabbitMQ JMS with AMQP compatibility mode enabled does not support topics and will now fail with an error message
Fixes
-
Fix for too long error message with {{ dataSource }} when template
parameters values incorrectly contain further template parameter keys
- Fix to support using RabbitMQ AMQP replyTo to send a message to a temporary response queue as indicated in the request message replyTo property
- Library upgrades to fix OWASP issues
5.32.0 — 17 Feb 2022
Features
- Added support for using a proxy server with path based routing between Traffic Parrot and the license server
5.31.2 — 30 Jan 2022
Features
-
Added ability to import and export IBM MQ mappings in ZIP file format
-
JMS response messages now populate the response JMSCorrelationID using the
JMSCorrelationID from the request message if it is present or else the
JMSMessageID from the request
-
JMS response messages are now sent to the JMSReplyTo destination if present or
else the mapping destination is used
Changes
- Updated VS HTTPS certificates with new 3 year validity period
5.30.1 — 07 Jan 2022
Features
- Added support for connecting to an internal or external ActiveMQ broker via JMS AMQP 1.0
- Added support for username/password when connecting to external ActiveMQ broker
Changes
- Include ActiveMQ sample JMS AMQP 1.0 connection
Fixes
- Library upgrades to fix OWASP issues
- Fixed an issue with the {{ regex }} helper when using an {{ xPath }} result as a parameter
5.29.7 — 31 Dec 2021
Features
-
Added new trafficparrot.properties to allow configuring separate HTTP and HTTPS ports for the UI:
- trafficparrot.gui.http.port=8080
- trafficparrot.gui.http.port.enabled=true
- trafficparrot.gui.https.port=8079
- trafficparrot.gui.https.port.enabled=true
- trafficparrot.gui.https.jks.resource=certificates/user-interface-https.jks
- trafficparrot.gui.https.jks.password=trafficparrot
- Added support for connecting to an external RabbitMQ 3 broker via JMS
- Added support for HTTP webhooks including:
- UI to configure callback on the HTTP Add/Edit mapping page
- Send request callback after a fixed delay
- Use data from the original request and response body in the callback request template
- Enable callback to be sent or not based on script
- Added support for uploading data directory when uploading an HTTP mappings zip file
- Added support for DOTALL option in {{ regexExtract }} helper
Changes
-
Upgraded WireMock from 2.29.1 to 2.31.0
- WireMock removed support for parameter normalizing in response templates
- To restore parameter normalizing behaviour, please set:
trafficparrot.virtualservice.handlebars.normalizeHelperParameters=true
- Upgraded gRPC from 1.39.0 to 1.43.1
- Upgraded protoc from 3.17.3 to 3.19.1
- Include RabbitMQ sample JMS connection
Fixes
- Fixed a bug with indexed {{ dataSource }} parameters
- Fixed a bug with mixed type XLS columns
- Fixed a bug with the tray icon on Windows
- Library upgrades to fix OWASP issues
5.28.2 — 09 Sep 2021
Features
-
Added a new property that allows to skip starting the web user interface trafficparrot.gui.enabled.
By default, the user interface is enabled, but it can be disabled for example in CI/CD builds or pipelines to allow TP to use less resources.
-
Added a new property to allow skipping MQ RFH headers when matching the body of an MQ request message
trafficparrot.ibmmq.skipHeadersInRequestMessageBodyWhenMatching=true
-
Added UI for viewing archived log files. Note that this currently supports only plain text archived log files without compression,
as used in the default trafficparrotserver.log4j.properties configuration
- Improve list of gRPC skeletons when multiple oneof or optional fields used in response
Changes
- Upgraded WireMock from 2.29.0 to 2.29.1
5.27.3 — 22 Jul 2021
Features
-
Added a new helper to convert between data types
in responses, which can be useful when combining helpers that require specific data types e.g.
{{ randomInteger 0 (cast (xPath request.body '/Node/Max/text()') type='int') }}
-
Added a new helper to use an existing XLS/CSV/JDBC as a data source in responses, which can be used to lookup or update data e.g.
{{ dataSource 'name.db' 'SELECT name FROM person WHERE id = :id' id=(cast (xPath request '//data/id/text()') type='string') single=true }}
-
Added a new helper to allow modifying the HTTP response code
e.g. {{ modifyResponse 'statusCode' 404 }}
- Added negate and round operations to the arithmetic operations helper
-
Added a new helper to manage a simple JSON object store
that can be used to help implement simple stateful mocks (beta)
- Line breaks are now supported in helper string arguments
-
Added a minimal configuration file editor to the configuration page to allow
files that do not have dedicated UI elements to be edited via the UI as plain
text files
Fixes
- Fixed a bug where directory structure was not properly created when importing a zip of proto files
- Fixed a UI memory leak that occurred when the Add/Edit page was left open for too long
- Fixed support for HTTP state machine transitions
Changes
- Change SDK workspace examples to use non-deprecated SDK methods
- Upgraded bundled JRE from 8u282 to 8u292
- Upgraded WireMock from 2.27.2 to 2.29.0
- Upgraded gRPC from 1.36.0 to 1.39.0
- Upgraded protoc from 3.15.5 to 3.17.3
5.26.3 — 14 Jun 2021
Features
-
Added a new helper to allow calculating and formatting date offsets in responses e.g.
{{ dateOffset (jsonPath request.body '$.date_field') add=true format='yyyy-MM-dd' days=1 }}
-
Added support for accessing a standard set of runtime properties
in plugins so that e.g. plugins can be supplied with configuration files at
runtime that are placed in virtual service specific or global shared directories
Fixes
-
Improved support for handlebars partial template files:
- The root for partials now takes into account the directory specified in trafficparrot.virtualservice.trafficFilesRootUrl=file:.
- The root for partials when using virtual services is the named directory scenarios/ScenarioName/*.hbs
5.25.0 — 10 May 2021
Features
5.24.11 — 16 Apr 2021
Features
-
Properties not defined in trafficparrot.properties will now fall
back on default values. The settings UI page and log file will display which
properties are using default values not taken from the properties file.
Fixes
- Improved diagnostic logging when ports are already in use at startup time
- Maven MQ examples project now includes MQCSP parameter
Changes
- This release is compatible with the MQ com.ibm.mq.allclient JAR up to version 9.2.2.0
5.24.9 — 25 Mar 2021
Features
-
Extended virtual service support for using multiple native IBM® MQ virtual services (beta) linked to separate mappings:
-
The scenarios/VirtualServiceName/service.properties now allows for configuring:
- ibm.mq.queue.replay.on.startup=false
- ibm.mq.queue.replay.request.queue.manager=REQ.QM
- ibm.mq.queue.replay.response.queue.manager=RSP.QM
- The scenarios/VirtualServiceName/ibm-mq-connections.json file is used to specify the queue manager connections per virtual service
- The scenarios/VirtualServiceName/ibm-mq-mappings directory contains the mappings files per virtual service
- The UI allows starting MQ replay for multiple virtual services at a time
-
The configuration points database-connections.json,
data and ibm-mq-connections.json are now configured per
virtual service relative to the virtual service directory rather than globally
- The service.properties file is now sorted by key when changes are made via the UI
- The logs now contain the virtual service name to help determine which log lines correspond to which virtual services
Fixes
- Improved OpenAPI import examples compatibility
-
Fixed an issue where the total number of MQ writeConnectionsToOpen
specified in ibm-mq-connections.json was incorrectly being read
from the readConnectionsToOpen field
-
Fixed a race condition where a scenario change could result in HTTP mapping
file bodies being momentarily loaded from the incorrect directory
-
Fixed an issue where some temporary directories were not being cleaned up
properly on shutdown
-
Fixed an issue where refreshing the page after stopping replay mode would result
in attempting a form resubmission
-
Fixed an issue where the UI log pages would sometimes be incorrectly detected
as binary files by the browser and downloaded instead of displayed
Changes
-
The xPath helper now allows iteration over specific extracted nodes as an alternative
to using the xPathList helper, which iterates over all of the child nodes
-
The equal helper now additionally considers the arguments to be equal if they
convert to the same string representation when rendered (e.g. XML nodes)
- Upgraded bundled JRE from 8u262 to 8u282
- Upgraded WireMock from 2.27.1 to 2.27.2
- Upgraded gRPC from 1.31.1 to 1.36.0
- Upgraded protoc from 3.12.0 to 3.15.5
- This release is compatible with the MQ com.ibm.mq.allclient JAR up to version 9.2.1.0
5.23.0 — 01 Feb 2021
Features
-
Initial release of Traffic Parrot workstation client (beta):
- The workstation (beta) is part of a new client-server product offering for customers
- Traffic Parrot workstation clients create virtual services and save configuration files
- Traffic Parrot servers run virtual services using the configuration files created by the clients
- Configuration files can be stored and retrieved from version control systems or artifact repositories
-
Initial support for using multiple HTTP/HTTPS ports linked to separate mappings (beta):
- New virtual services (beta) page to view/add/edit/delete virtual services
- A distinct HTTP/HTTPS port may be assigned per virtual service
- Only one virtual service can be edited at a time by selecting from the dropdown
- The home page now lists all virtual service names and ports
- Configuration is currently stored in scenarios/VirtualServiceName/service.properties directory structure
- Increasing the number of virtual services will have a direct impact on memory usage of the server
- Consider increasing your jvm.args configuration heap size -Xmx128m if you plan to use multiple virtual services per Traffic Parrot instance
- New arithmetic operations in dynamic responses
Fixes
- Fixed an issue where the navigation bar overlapped the main content on some smaller screen sizes
- Fixed an issue where transformer names would be duplicated in mapping files on save
5.22.3 — 11 Nov 2020
Fixes
- Minor fixes to UI text
- Ensure mapping name when edited via the UI ends in .json
5.22.0 — 19 Oct 2020
Features
- Made mapping name editable in the UI for all mapping types
Fixes
- Ensure internal server errors log the full stack trace
Changes
-
Native IBM® MQ connections will now warn once in the logs the first time that a connection is shared between multiple threads, which can degrade performance.
The mapping fields receiveThreads and sendThreads control the number of threads per queue.
The ibm-mq-connections.json configuration controls the total readConnectionsToOpen and writeConnectionsToOpen per queue manager.
5.21.6 — 12 Oct 2020
Features
Fixes
- Fixed support for OpenAPI array examples specified as a comma separated string
- Ensure startup error causes are recorded in the logs
Changes
- Upgraded bundled JRE from 8u262 to 8u265
- Display system tray in a background thread to improve startup times on some systems
- Valid JSON bodies in mapping files will be persisted as inline JSON rather than an escaped string
5.20.2 — 25 Sep 2020
Features
-
Mappings list user interface improvements for all protocols:
-
Added support for customizing which columns are displayed in the mappings list
in the UI. The selected settings are stored in the browser to allow different
Traffic Parrot users to set different preferences.
- Display mapping file name when editing a mapping
-
Mappings list user interface improvements for HTTP protocol:
- Edit mapping tags that can be used to organize and search mappings
- Added new tags column which is hidden by default
- Added mapping file name to the logs when reporting request match status for MQ/JMS/Files mappings
Fixes
- Switching scenario with mappings caches enabled now resets the caches
- Traffic Parrot now shuts down gracefully on Windows when the stop script is run
- Fixed an issue where the HTTP virtual service would not respond if a mapping file was deleted while the request was being served
5.19.4 — 14 Sep 2020
Features
- Added support for configuring gRPC delays via fixedDelayMilliseconds or distributionDelay in the mapping files
-
Exposed new properties for tuning gRPC performance:
- trafficparrot.virtualservice.grpc.server.receiveThreads=DOUBLE_NUMBER_OF_PROCESSORS
- trafficparrot.virtualservice.grpc.server.sendThreads=DOUBLE_NUMBER_OF_PROCESSORS
- trafficparrot.virtualservice.grpc.server.replay.maxMessagesWaitingToBeSent=1000
Fixes
- Traffic Parrot now shuts down gracefully when the launcher process is killed (e.g. during a docker stop)
Changes
- Only consider TCP ports when printing diagnostic information when there is a port clash on startup
5.18.0 — 05 Sep 2020
Features
Fixes
- Fixes to the gRPC mappings list editing and search mechanism
- Fixed a bug where the edit modal would incorrectly close automatically if closed and reopened too quickly
- Fixed a bug where the edit modal would show the previous flash message if closed and reopened too quickly
- Fixes for JMS java.io.Serializable object support
- Fixes for port in use diagnostic message when multiple PIDs are involved
Changes
- The property trafficparrotserver.log4j.properties.filename
has been replaced by trafficparrotserver.logging.properties.filename.
-
Logging properties file names indicate which type of logging configuration to use:
- Names like *.log4j.* are assumed to be Log4j version 1 configuration
- Names like *.log4j2.* are assumed to be Log4j version 2 configuration
- The MQ message putDateTime log line now has a millisecond (instead of second)
resolution to help investigate performance issues when working with Native IBM MQ
5.17.0 — 25 Aug 2020
Features
- Internal release that was used for training purposes
5.16.0 — 10 Aug 2020
Features
-
Select handlebars helper CSV file caching. When you set
trafficparrot.virtualservice.handlebars.select.indexAndCacheCsvFiles=true
the CSV file loading performance will be significantly improved.
-
Supporting large number of CPU cores. When you run Traffic Parrot on many cores (40 or more) it would fail to start and report an error
javax.servlet.ServletException: java.lang.IllegalStateException: Insufficient configured threads: required=212 < max=200 for QueuedThreadPool[qtp318353283]@12f9af83{STARTED,8<=168<=200,i=0,r=20,q=0}[ReservedThreadExecutor@71b3bc45{s=0/20,p=0}]
The fix is to increase the number of threads Jetty can spin up. This was done by exposing two properties to configure HTTP Jetty server thread queues:
trafficparrot.gui.http.queuedThreadPool.maxThreads=200
trafficparrot.gui.http.queuedThreadPool.minThreads=8
Changes
- Performance improvements to dynamic responses
- Upgraded bundled JRE from 8u222 to 8u262
- Upgraded WireMock from 2.25.1 to 2.27.1
5.15.0 — 16 Jul 2020
Features
-
Traffic Parrot can now connect to IBM MQ queue managers via SSL channels. You can do this via Native IBM MQ.
We have added two new ibm-mq-connections.json properties to support Native IBM MQ SSL connections:
"sslCipherSuite": "TLS_RSA_WITH_AES_128_CBC_SHA",
"sslPeerName": "OU=TP IBM MQ"
To provide the server and client certificates you can add the following config to jvm.args:
-Djavax.net.ssl.trustStore=certificates/ca-chain.jks
-Djavax.net.ssl.trustStorePassword=trafficparrot
-Djavax.net.ssl.keyStore=certificates/mq-client.jks
-Djavax.net.ssl.keyStorePassword=trafficparrot
-Dcom.ibm.mq.cfg.useIBMCipherMappings=false
For more details see Connect to the queue manager via SSL/TLS channels
5.14.1 — 10 Jul 2020
Features
Fixes
- The Native IBM MQ messages can now contain UTF-8 characters, for example Arabic text
- The Native IBM MQ logs are now correctly displaying UTF-8 characters, for example Arabic text
- The JMS IBM MQ tutorial example fruit ordering system now supports UTF8 characters, for example Arabic text
5.13.0 — 07 Jul 2020
Features
- New environment variable that allows configuring how long the startup scripts will wait for TP to start up use TP_STARTUP_WAIT_MILLIS, for example:
test@test-pcs:~/Downloads/trafficparrot-no-jre-5.x.y$ export TP_STARTUP_WAIT_MILLIS=180000
test@test-pcs:~/Downloads/trafficparrot-no-jre-5.x.y$ ./start.sh
/optf/programs/jdk1.8.0_181/bin/java
Picked up environment startup timeout in milliseconds 180000
- A new property that allows to specify a replay Native IBM MQ script that will be run on startup
trafficparrot.ibmmq.start.queue.replay.on.startup.script=classpath:start-ibmmq-queue-replay-on-startup.txt
Changes
- The SDK Workspace allows now for Native IBM MQ message transformers to specify an MQMessage directly. This allows for creating transforming proxies of messages.
A sample has been provided in the SDK workspace.
Fixes
- Users were unable to update Native IBM MQ mappings in renamed files.
5.12.0 — 26 May 2020
Features
- New property that allows configuring how IBM® MQ queues will be accessed
trafficparrot.ibmmq.connect.options.accessQueue.output=MQOO_OUTPUT|MQOO_FAIL_IF_QUIESCING
- New property that allows to skip logging message body for native IBM® MQ
trafficparrot.ibmmq.logger.logMessageBody=true
- Native IBM® MQ now respects the existing properties that allow for caching mappings in memory
trafficparrot.virtualservice.mapping.cache.milliseconds=0
trafficparrot.virtualservice.mapping.cache.populate.on.startup=false
- You can now configure per connection to an IBM® MQ broker how many read and how many write connections to open.
You do it in the ibm-mq-connections.json. For example:
"readConnectionsToOpen": 5,
"writeConnectionsToOpen": 5
- The Native IBM® MQ mapping allows for configuring how many threads should be used to access the queue, for example:
"receiveThreads" : 5,
"sendThreads" : 1
- You can define in the mapping how many messages the Native IBM® MQ connector will be keeping in memory at once, which will be relevant for scenarios when sending delayd messages, for example:
"maxMessagesInProgress": 1000000
- You can start the Native IBM® MQ replay with a script, for example:
#
# This is a sample comment 1
#
RequestQueueManager:'Request QM1'
ResponseQueueManager:'Response QM1'
RequestQueueNames:'REQ_1_A','REQ_1_B'
#
# This is a sample comment 2
#
RequestQueueManager:'Request QM2'
ResponseQueueManager:'Response QM2'
RequestQueueNames:'REQ_2_A','REQ_2_B'
- Handlebar templates are cached allowing for better performance
Changes
- There has been performance improvements made to the Native IBM® MQ connector.
See the performance benchmarks for more details.
- Native IBM® MQ response messages during a replay have the replyToQueueEmpty and replyToQueueManager
set to the connected queue manager if they did not have any of these attributes set on the request message
- Native IBM® MQ sends the queue manager name along with queue name when sending a message.
This is applicable in scenarios with multiple queue managers set up in a cluster without the cluster sender and cluster receiver channels
- Logging more runtime information on startup
- Additional logging when connections to IBM® MQ fail
5.11.1 — 06 Apr 2020
Changes
- Updated VS HTTPS certificates with new 3 year validity period
5.10.0 — 17 Jan 2020
Features
Fixes
- Ensure IBM®MQ channel connections are always released after use
5.9.0 — 16 Dec 2019
Features
-
Improvements to gRPC mappings list user interface:
- Edit mapping tags that can be used to organize and search mappings
- Added new tags column which is hidden by default
Fixes
-
WireMock compatible HTTP APIs are now hosted on both:
- http://localhost:8080/api/http/__admin/*
- http://localhost:8080/api/http/*
This means that the standard WireMock client libraries can be used when connecting to
the API port e.g. when using WireMock.configureFor("localhost", 8080, "/api/http");
Custom HTTP clients or a browser may continue to drop the /__admin section
of the path so that API calls such as http://localhost:8080/api/http/mappings
can be made
5.8.0 — 02 Dec 2019
Features
-
Improvements to gRPC mappings list user interface:
- Added sorting to columns
- Added a button to pause auto reload
- Added a button to select which columns to display
- Added two new columns which are hidden by default: id and name
Fixes
-
Pause gRPC mappings list auto reload when highlighting text so that it is
possible to highlight and copy text without the auto reload clearing the highlight
- Allow spaces in gRPC mapping file name template
5.7.3 — 25 Nov 2019
Features
5.6.0 — 11 Nov 2019
Features
Fixes
- Fixed support for reserved fields in gRPC proto files
- Errors when compiling proto files are now reported in the logs
- Swagger/OpenAPI example dates are now considered when performing an import
Changes
-
New toggle trafficparrot.virtualservice.grpc.check.mapping.schema.allow.missing.fields
that can be set to true to allow gRPC mapping files to have fields
missing when compared to the proto schema. This is to allow for usages where
there are fields that are intentionally omitted to pick up on the default.
5.5.3 — 25 Oct 2019
Fixes
- Fixed support for gRPC error mappings in the new static analysis check
- Fixed support for gRPC dynamic response mappings in the new static analysis check
- Fixed support for gRPC mappings with repeated fields in the new static analysis check
- More consistent error reporting format for errors in dynamic responses, to make it clear which helper had a problem
- Always print log file in the Maven/Gradle plugin console if Traffic Parrot fails to start
Features
5.5.1 — 14 Oct 2019
Features
-
Traffic Parrot can now check that gRPC mapping files match proto schema on
startup. You can enable this check to prevent startup if mapping files are
out of date when compared to the proto schema.
- The following property enables the feature: trafficparrot.virtualservice.grpc.check.mapping.schema.on.startup=true
- Currently supports checking gRPC mapping equalToJson request matchers
- Currently supports checking gRPC mapping response
- This feature is currently in public beta and is subject to change
- Please let us know your feedback feedback@trafficparrot.com and help us improve this feature
Changes
-
Traffic Parrot now only requires a single port for the UI:
- trafficparrot.gui.http.port=8080
The following ports are no longer used by the UI:
- trafficparrot.virtualservice.http.management.port=8083
- trafficparrot.virtualservice.jms.management.port=9093
- trafficparrot.virtualservice.http.port=8081
Please note that these ports are still required by the Traffic Parrot backend.
5.4.5 — 07 Oct 2019
Fixes
-
gRPC mapping files will now be written with the correct status code of 0 to
represent a successful response status. gRPC mapping files with status code 200
will continue to be interpreted as status code 0 to preserve backwards compatibility.
5.4.4 — 09 Sep 2019
Changes
-
The HTTPS client used for making outbound HTTPS connections now trusts all
server certificates by default. This means that it is no longer necessary to
specify a javax.net.ssl.trustStore when connecting to HTTPS servers
that are not already trusted by the system during recording or proxying.
Fixes
-
Using the javax.net.ssl.keyStore system property will now
completely override the HTTPS client key store used for making
outbound HTTPS connections
for mutual authentication scenarios during recording or proxying.
5.4.0 — 16 Aug 2019
Features
-
Added JMS REST API to count the number of requests made that match the given
criteria using POST /api/jms/requests/count and reset the count
using DELETE /api/jms/requests
-
See the OpenAPI documentation or import
the Postman workspace for more information.
Fixes
- Fixed usage of {{ anyNumber }} to match numbers within JSON string fields
5.3.2 — 07 Aug 2019
Fixes
- Fixed a memory leak in the user interface
5.3.1 — 05 Aug 2019
Features
-
New operating system specific release with bundled JRE:
- Any operating system with no bundled JRE: trafficparrot-no-jre-5.3.1.zip
- 64-bit Linux with bundled JRE: trafficparrot-linux-x64-jre-5.3.1.zip
- 64-bit Mac with bundled JRE: trafficparrot-mac-x64-jre-5.3.1.zip
- 64-bit Windows with bundled JRE: trafficparrot-windows-x64-jre-5.3.1.zip
- 32-bit Windows with bundled JRE: trafficparrot-windows-x86-32-jre-5.3.1.zip
-
New state management REST API for global state:
- Create or update state using PUT /api/state/global/{name}
- Get state using GET /api/state/global/{name}
- Reset all state using DELETE /api/state
-
See the OpenAPI documentation or import
the Postman workspace for more
information on the API usage
- {{ manageState 'example' 'set' 1234 }} to set a variable in a response template
- {{ manageState 'example' 'get' }} to get a variable in a response template
5.2.0 — 19 Jul 2019
Features
-
WireMock 2.10.1 compatible REST API is now mounted on /api/http/*
on the Traffic Parrot UI/API port (default 8080) for example POST /api/http/requests/count
can be used to count requests
-
Added gRPC REST API to count the number of requests made that match the given
criteria using POST /api/grpc/requests/count and reset the count
using DELETE /api/grpc/requests
-
See the OpenAPI documentation or import
the Postman workspace for more information.
Fixes
- Fix scenarios dropdown UI on Windows browsers
Changes
- Rename "request body" to "request message payload" in the gRPC UI
5.1.1 — 15 Jul 2019
Fixes
- Fixed support gRPC status details. We now support using both the status key and proto key header conventions.
- Fixed support for well known gRPC error details types
Changes
- Additional logging when a gRPC request fails to match any mappings
- Specify text representation of month in license logs to make it more clear when the start date is
5.1.0 — 08 Jul 2019
Features
-
gRPC improvements
- Import gRPC proto files using the import button on the gRPC Add/Edit page
- Convert OpenAPI files to gRPC proto files with openapi2proto using the import button on the gRPC Add/Edit page
-
Use the trafficparrot.virtualservice.grpc.openapi2proto.plugin.location property to configure the openapi2proto binary location,
which can be either AUTO_DETECT (which searches the system environment path, go/bin directory and Traffic Parrot plugins directory) or a specific location
- Configure HTTP proxy mappings on the HTTP Add/Edit page to allow routing some calls to the virtual service and some calls to real services
-
Added support for database queries in responses
- New {{ databaseQuery }} helper
- Configure JDBC connections in the database-connections.json file
- Provide the JDBC driver JAR files for your database in the lib/external folder
- Added support for default value when using {{ select }} to look up values in CSV files
- Added support for the IBM®MQ Message ID as Correlation ID pattern
Fixes
- When a property is missing from trafficparrot.properties we now report which key is missing in the logs
- PDF files can now be correctly recorded and replayed as HTTP multipart/related attachments
Changes
- Removed equal to matcher from gRPC edit mapping form (equal to JSON always makes more sense to use than equal to)
- New toggle trafficparrot.virtualservice.grpc.message.field.naming to choose whether to define gRPC mappings using CAMEL_CASE field names or using the ORIGINAL field name case used in the proto files
- Binary (non plain text) HTTP responses are now recorded in .bin files
5.0.3 — 17 Jun 2019
Fixes
-
Added support for google.protobuf.Any fields when working with gRPC
skeletons. For more details on how this field is serialized see here.
5.0.2 — 14 Jun 2019
Fixes
- Correct links to latest documentation pages
5.0.1 — 12 Jun 2019
Changes
-
Added a new property trafficparrot.openapi.import.mode that acts as
a toggle for the different ways Traffic Parrot supports for importing OpenAPI
files. The default MATCHING_RESPONSE_CODE will use the response
status in request matchers convention and SKELETON will template
the mapping with the request and response structure.
5.0.0 — 10 Jun 2019
Features
-
New HTTP skeletons feature:
-
OpenAPI specifications
are used to generate a list of HTTP skeletons
that can be used to help design HTTP mappings in the Traffic Parrot user interface
-
Place OpenAPI specifications in the openapi configuration
directory to populate the dropdown menu or use the upload button on the
HTTP Add/Edit page next to the dropdown
-
This replaces the old scenarios.js dropdown, which has been
removed (see changes section below for migration instructions)
-
Maven plugin improvements:
-
New trafficparrot:check-environment goal to run in the
pre-clean phase to check nothing is preventing a successful
start of Traffic Parrot
-
Check that there is not an existing Traffic Parrot instance running
-
Check for locked files or directories that are unable to be cleaned on
Windows (typically this is because a file is open in a text editor or
command prompt)
-
Improved speed when cacheDownload is enabled by also
caching the extracted zip file
-
Accept either file:/// or file:// syntax when
specifying file URLs
-
Remember to upgrade your plugin version to 5.0.0
Fixes
-
The randomInteger and randomDouble helpers
now return a number type instead of a string, so that they can be combined with
other helpers that require a number. For example when combined with the
stringFormat helper: {{stringFormat '%02d:%02d' (randomInteger 0 59) (randomInteger 0 59)}}
Changes
-
The scenarios.js HTTP dropdown has been removed.
-
We recommend migrating to an OpenAPI specification file which can be used to
produce a similar dropdown via the new HTTP skeletons functionality
-
Please email support@trafficparrot.com
with your scenarios.js file and we will translate it to
an OpenAPI file for you
- Removed unused property trafficparrot.gui.scenarios.resource.name
-
Improved reporting of port clashes and how to change ports in trafficparrot.properties
4.7.2 — 13 May 2019
Features
-
gRPC improvements
-
Support specifying a status details object in exception responses
-
Support for matching by simple key: value request headers.
The property trafficparrot.virtualservice.grpc.exclude.request.headers.from.matching=content-type,user-agent,grpc-accept-encoding
can be used to choose which headers are considered for matching during replay.
-
New properties for performance tuning:
- trafficparrot.virtualservice.grpc.server.replay.proto.cache.populate.on.startup will populate the proto cache when starting up
- trafficparrot.virtualservice.grpc.server.warmup.on.startup will warm up the JVM to improve gRPC performance when starting up
- trafficparrot.virtualservice.mapping.cache.milliseconds will cache mapping files for both gRPC and HTTP for the specified duration
- trafficparrot.virtualservice.mapping.cache.populate.on.startup will populate the mapping file cache for both gRPC and HTTP when starting up
- New constant NUMBER_OF_PROCESSORS can be used in the existing trafficparrot.virtualservice.grpc.server.boss.threads and trafficparrot.virtualservice.grpc.server.worker.threads properties
- Use proto cache settings when loading gRPC skeletons
-
Amazon SQS virtualization improvements:
- Added support for the PurgeQueue command
- Added a user interface to view outstanding messages and receipt handles
Fixes
- gRPC performance improved by approximately 80%
- Trim extra empty lines from jvm.args file to avoid a start issue
- Amazon SQS ReceiveMessage now correctly only peeks a message rather than deleting it; deleting is done via the receipt handle to DeleteMessage
Changes
-
Amazon SQS virtualization changes:
-
Support is now enabled via the
trafficparrot.virtualservice.amazon.sqs.enabled=true property
instead of the trafficparrot.http.responsetransformers property
-
The virtual service is now hosted under the URL path
/aws/sqs instead of directly under the root path
- Removed unused property trafficparrot.virtualservice.inMemoryFileSystemBackedStubMappings
4.6.1 — 07 May 2019
Fixes
-
Search %PATH% and %JAVA_HOME% on Windows as possible
locations to find a Java installation. This is in addition to checking the
standard registry entries that are populated when using the official Java
installer. The standard registry entries take precedence over other locations.
4.6.0 — 19 Apr 2019
Features
-
Added support for mapping priority to distinguish between many matching mappings.
The default priority is 5 and 1 is the highest.
4.5.4 — 16 Apr 2019
Features
- New tray icon is displayed when running in a non-headless environment (e.g. on your laptop)
- New jvm.args file allows setting JVM arguments for the main Traffic Parrot process (e.g. to tune memory options)
- New configuration property trafficparrot.virtualservice.http.no.mapping.found.code to allow changing the no mappping found HTTP response code
- New start.exe and stop.exe launchers for Windows users
- Support JMS connections to an external Azure AMQP Service Bus broker in jms-connections.json
- Support Amazon SQS queue simulation and verification over the SQS HTTP REST APIs via the com.trafficparrot.virtualservice.extensions.responsetransformer.AmazonSQSTransformer which can be enabled via the trafficparrot.http.responsetransformers property
- Additional diagnostic information is printed when starting up and shutting down
-
Maven and Gradle plugin improvements:
-
Allow specifying a trafficparrot.properties file location
in the propertiesFile plugin property; this file is
combined with the default properties file and any plugin overrides
-
Store a copy of the traffic files root in the build directory so that
mappings imported dynamically e.g. from OpenAPI specifications do not
pollute the source traffic files root
-
Print the startup and shutdown logs inline to make the build output
easier to navigate
-
Remember to upgrade your plugin version to 4.5.4
Fixes
-
The default gRPC ports have changed to
trafficparrot.virtualservice.grpc.tls.port=5551
and trafficparrot.virtualservice.grpc.non.tls.port=5552
so that they no longer overlap with the typical Windows ephemeral port range
Changes
- When starting and stopping, the console output is appended to the tp.out file
- When running in the background, only file appenders in trafficparrotserver.log4j.properties are used; any console appenders are switched off
- When running in the foreground, both file and console appenders are used
4.4.2 — 24 Mar 2019
Fixes
-
New trafficparrot.properties properties to help with gRPC server performance tuning:
-
Configure how long to cache the proto files during replay using the
trafficparrot.virtualservice.grpc.server.replay.proto.cache.milliseconds
property.
A value of 0 means do not cache at all.
-
Configure the number of boss and worker threads of the gRPC server using the
trafficparrot.virtualservice.grpc.server.boss.threads and
trafficparrot.virtualservice.grpc.server.worker.threads
properties.
The special value DOUBLE_NUMBER_OF_PROCESSORS means
use double the number of processors.
4.4.1 — 08 Mar 2019
Fixes
-
Added gRPC message skeleton support for:
- Self referential types e.g. google.protobuf.Struct
- Messages that use the oneof feature
4.4.0 — 25 Jan 2019
Features
Fixes
- Adding a new JMS mapping now correctly saves the properties
Changes
- Always use DeliveryMode.PERSISTENT when sending JMS messages
- The Maven/Gradle plugin properties printLogs and deleteAfterStop are now also respected if Traffic Parrot fails to start up
- The jms-mappings, ibm-mq-mappings and file-mappings directories will be created on start up if they do not exist
4.3.3 — 15 Jan 2019
Features
- Support for importing a ZIP file of HTTP mappings
- More verbose logging when there are port binding issues
- More verbose logging of start up configuration
- Pretty print JSON responses when importing Swagger/OpenAPI
Fixes
- Take into account basePath when importing Swagger/OpenAPI
Changes
- Consider only the name of the mapping file when setting the HTTP mapping name, not the entire path
4.2.10 — 23 Sep 2018
Features
- Added support for gRPC StatusRuntimeException
- New page to download HTTP mappings
- New Gradle plugin for teams that prefer to use Gradle over Maven
- New examples added including Gradle examples
- New Postman workspace file that you can import to demonstrate some of the common Traffic Parrot management APIs
- Import mappings using Swagger/OpenAPI definitions using the Maven or Gradle plugin
- Better diagnostic logging if Traffic Parrot fails to start up due to e.g. an existing port already in use
- New {{randomInteger min max}} helper to generate random numbers in a range
Fixes
- Fix various unclosed file handles
- Stopping Traffic Parrot now properly waits for gRPC proxy server shutdown
- Cache busting strategy implemented to cope with browsers that like to e.g. cache JavaScript files forever
- The data directory is now considered to be under the trafficparrot.virtualservice.trafficFilesRootUrl
4.1.6 — 07 Sep 2018
Features
- New matchesJson matcher
- Import mappings using Swagger/OpenAPI definitions
- Record multiple HTTP URLs at the same time
- Enable redirect handling during HTTP recording using property trafficparrot.virtualservice.enableRedirectHandling=true
- Initial support for Java 9 and 10 in the start scripts
Changes
- HTTP mappings are now sorted by last modified date in the UI
Fixes
- Improve file extension detection for recorded HTTP body files
- Windows start script now correctly passes on system properties
4.0.7 — 09 Jul 2018
Features
- Support for mocking and virtualizing gRPC APIs and services
- Visual XML editor
- Extended support for SOAP - matching on request body SOAP values
- New matchesXml matcher
- HTTP(S) stateful scenarios available via the Web UI
- Signing SOAP messages
- Duplicate mapping button for HTTP
Changes
- Traffic Parrot 4.x now requires Java 8 (Java 7 is supported by 3.13.x)
- gRPC support requires a 64bit JVM
- Virtual service runs in the same process at the Web UI
- These properties have been removed:
- trafficparrot.gui.virtualservice.classpath
- trafficparrot.virtualservice.jvm.Xmx
- trafficparrot.virtualservice.virtualServerLog4jPropertiesFilename
Fixes
- Configuration files now have Windows style line endings
3.13.0 — 23 Apr 2018
Features
- Support native IBM®MQ ReplyToQMgr during recording
- Importing RAML v0.8 into HTTP mappings
- The Maven plugin has a new cacheDownload property which can be used to choose whether to cache the download in the java.io.tmpdir or not
- New HTTP Management API that can be used to remotely start/stop the record/replay of IBM®MQ, JMS and File Message protocols
3.12.6 — 12 Feb 2018
Features
- Recording and replaying native IBM®MQ RFH headers with message format MQFMT_RF_HEADER_1 or MQFMT_RF_HEADER_2
- Support MQFMT_NONE MQ message format
- Recording and replaying native IBM®MQ responses using dynamic MQ model queues
- Support native IBM®MQ ReplyToQ during record and replay
- Support configuring the IBM®MQ MQCSP authentication mode
Fixes
- When you connect to a wrong IBM MQ channel or with wrong IBM MQ username/password you do not see it in the logs
- Spaces in the path to the Traffic Parrot installation directory are now supported
3.11.3 — 26 Jan 2018
Features
- Recording and editing JMS Properties
- During File mocking, request files are now deleted after processing
- More user friendly (easier to read and follow) logs for JMS and File stubbing
Fixes
- Windows start script start.cmd now works even if system32 directory is not on the %PATH%
- The dynamic HTTPS Proxy does not spin up so many threads any more and does not consume so much RAM
- Better error messages in failure scenarios when using several Handlebars
- More rigid stopping
Changes
- Default selection on replay page is now based on the type of mappings that are present (e.g. Queue will be ticked if there are any Queue mappings)
3.10.0 — 10 Dec 2017
Features
- Support for virtualizing services that read and write files (currently in beta)
- Support JMS byte messages (any bytes message, with special support for java.io.Serializable objects)
- Upgraded WireMock to 2.10.1
- New handlebar helpers xPath, xPathList, jsonPath, jsonPathList, regex, equal, ifEven, size
- JMS is not in beta any more
- IBM®MQ native MQ support is not in alpha any more
- New Maven plugin for replaying HTTP/JMS/MQ traffic during integration tests
Fixes
- Fixed missing pages in community edition
- Fixed links on help page
Changes
- Do not escape characters < > " ' ` & if they are produced by handlebars helpers
- Handlebars each helper now only iterates over iterable arguments
- Recorded cookies format has changed
- com.trafficparrot.sdk.jms.Equal moved to com.trafficparrot.sdk.handlebars.Equal
- com.trafficparrot.sdk.jms.MissingHelper moved to com.trafficparrot.sdk.handlebars.MissingHelper
3.9.1 — 11 Nov 2017
Features
Earlier versions
Available on request.
Old version warning!
This documentation is for an old version of Traffic Parrot. There is a more recent Traffic Parrot version available for download at trafficparrot.com
Browse documentation for recent version