RXS Changelog


  • Corrected an issue where an empty LICP file would result in an incorrectly thrown KTE0002 message instead of KTE0001 as intended
  • Corrected an issue with RXS_ParseDomToDom where the returned RXS_ParseDomDS_t data structure would not be properly initialized if any error occured during the call to RXS_ParseDomToDom
  • Corrected an issue with WRKRXSRTRE where the environment library being displayed was incorrectly truncated
  • Corrected an issue with WRKRXSRTRE which could prevent modifying or adding routing entry records
  • Corrected an issue with RXS_Transmit where a response with charset ISO-8859-1 could be improperly handled in certain circumstances


  • Enhanced RXS Router to allow up to 250 libraries to be specified for -liblst or -dftliblst
  • Enhanced WRKRXSRTRE to show the current active mode when displaying, modifying, or deleting a routing entry record
  • Enhanced WRKRXSRTRE to no longer attempt validation for routing entry records for records with DEBUG as the routing ID
  • Corrected an issue with library list handling in RXS Router that prevented libraries specified in -liblst or -dftliblst from being added to the library list in certain circumstances
  • Corrected an issue where RXS Router's debugmode page would truncate routing entry record data for large routing entry records


  • The product name has been formally changed to RPG API Express. This change is purely cosmetic, impacting descriptive text, help panel text, and some message text. This change has no functional impact on the usage of the product.
  • The minimum supported operating system version is now IBM i 7.3

Code Generation Tools

  • New feature: BLDCMP is a new code generation command that can be passed an IFS JSON file and will generate the appropriate RPG source code which would allow for composing identical JSON using the RXS JSON composition APIs
  • New feature: Added a new optional parameter INCCRTCMD to command CRTRPGTPL which allows a user to omit the section of a generated template that contains the creation command information
  • Enhanced BLDTPL to preserve namespace attributes when generating templates, rather than converting them to variable placeholders
  • Enhanced CRTRPGTPL to support whitespace in front of section delimiters
  • Enhanced CRTRPGTPL to better handle escaping single quotation marks when wrapping lines
  • Corrected an issue where CRTRPGTPL would generate creation command information where the IFS filepath was truncated
  • Corrected an issue where CRTRPGTPL would retain a lock on a source member provided as input

HTTP Communication - RXS_Transmit and RXS_getURI()

  • New feature: Added new subfields HeaderAuthScheme and HeaderAuthCredentials to RXS_TransmitDS_t to allow RXS_Transmit to more broadly support a variety of authentication mechanisms without needing to set custom HTTP headers. This support allows for credentials/tokens up to 8kb in length to better support complex/large JWT tokens when used as part of a Bearer authentication scheme.
  • New feature: Added new subfield HeaderAcceptEncoding to RXS_TransmitDS_t to allow RXS_Transmit to request that the remote server provide gzip encoded response data via the Accept-Encoding HTTP header, and RXS_Transmit will automatically handle decoding. This should result in an overall performance increase when calling any web APIs which support gzip encoding. Requesting that the remote server provide the response via gzip encoding is now the default behavior
  • New feature: Added a new constant RXS_TIMEOUT_UNLIMITED to allow setting an unlimited timeout when calling RXS_Transmit
  • Enhanced RXS_Transmit to allow output to be directed both to a response field as well as to a response IFS file
  • Enhanced RXS_Transmit IFS log file output to properly display the response when the remote server provided the response using chunked encoding. Previously, the IFS log file would display the response split into chunks along with the chunk encoding length bytes
  • Corrected a rare issue where RXS_Transmit ending in error with an IFS log file specified could attempt to generate an IFS log file on a subsequent successful RXS_Transmit call which did not request a log file
  • Corrected an issue with RXS_getURI preventing zero length POST requests

Encryption and Hashing APIs

  • New feature: Added RXS_HMAC to perform HMAC calculation utilizing the SHA1, SHA256, SHA384, SHA512, and MD5 algorithms

Offering Web Services/APIs

  • New feature: Added -aspgrp flag to RXS Router to allow for swapping the ASP Group prior to any library list changes or program calls
  • Enhanced the CRTRXSSVR command to support 5-digit port numbers up to 65535
  • Enhanced the CRTRXSSVR command with new *HTTP and *HTTPS options for setting the port number which will cause port 80 and port 443 to be used
  • Corrected an issue with the HTTP command where a validation message was not properly displayed when attempting to use parameter HTTPSVR(*ALL) with an OPTION other than *WRK, or when attempting to use HTTPSVR(*ADMIN) with an option other than *WRK, *START, *END, or *RESTART

JSON Composition APIs

  • Corrected an issue where RXS_GetJsonString could enter a looping condition if certain hexadecimal characters were present in composed JSON data

JSON Parsing APIs

  • Enhanced RXS_ParseJson to check input JSON for possible truncation before attempting to parse, and added specific error output to differentiate truncation as a cause of parsing failure from malformed JSON

XML Parsing APIs

  • Corrected an issue where RXS_XPath was incorrectly escaping @ symbols that were part of a formatted XPath
  • Corrected a potential memory leak present in RXS_Parse when parsing XML stored in an IFS file

Conversion APIs

  • Enhanced RXS_Convert Base64 and Base64URL decoding to ignore whitespace characters including space, tab, CR, LF, and NL
  • Corrected an issue with RXS_Convert Base64URL decoding where it would fail on certain string lengths that could not be accurately internally padded
  • Corrected an issue with RXS_Convert Base64 and Base64URL decoding where line break characters could cause a failed conversion loop

Example Programs

  • Included example programs are now provided in two forms - fully free format RPG as well as traditional/fixed format RPG
  • Included example programs have been updated to reflect our team's latest recommended standards for calling and using various RXS APIs
  • To provide clarity and work within the 10 character object name limit, existing example programs have been renamed - see table below:

Other Changes

  • New constants have been added to the RXSCB copybook for commonly used HTTP status codes
  • Display file CONFIRMD has been renamed to RXSCFMD based on a user-reported conflict with a display file named CONFIRMD present in another vendor's product. The existing CONFIRMD may be safely deleted
  • Enhanced the DSPMCHINF command to now show the partition UUID in preparation for future licensing enhancements
  • Enhanced the APYLIC command to no longer interactively prompt for license key replacement when the APYLIC command is run as part of a batch job
  • Enhanced internal licensing code to reduce unnecessary LICP database file access and reduce necessity of using UPDPROD(*YES) in some situations
  • Corrected an issue where WRKRXSRTRE would display an incorrect date when run from a long-running job


Code Generation Tools

  • Enhanced BLDPRS to allow a base envelope value to be specified when generating XML parsing handlers, allowing for shorter XPaths within the handler subprocedure
  • Corrected an issue in BLDPRS where code for XML content events would sometimes fail to be generated if some event options were disabled
  • Corrected an issue preventing errors triggered within CRTRPGTPL from properly propagating to the user, causing cryptic error messaging when the template creation process failed


  • Corrected an issue with the RXS_CreateJson() TrimVariables option incorrectly handling leading whitespace
  • Corrected an issue where RXS_GetJsonStringLen() was occasionally returning an incorrect and larger value

Other Changes

  • The QRPGLECPY,RXSCB copybook is now provided in fully free format RPG. We now also provide a traditional/fixed format RPG equivalent which can be found in QRPGLECPY,RXSCB_FX for RPG developers who are more comfortable with the older RPG code format. Going forward, any changes made to RXSCB will be reflected in RXSCB_FX to the degree that the RPG language allows. RXSCB_FX is intended primarily for reference purposes for developers unfamiliar with fully free format RPG. We don't recommend changing your existing programs to use RXSCB_FX instead of RXSCB, and we don't recommend using RXSCB_FX to write new programs
  • Corrected an issue that occasionally caused inconsistent Base64 encoding with RXS_Convert() when the provided input field was not a 4-byte varying field
  • Enhanced RXS_XPath() with better error messaging for when string replacements are specified but there are insufficient provided input parameter values to fill them
  • Updated RXSURI to be consistent with RXS_Transmit() with regards to trimming input parameters


Conversion APIs

  • Added RXS_ConvertBase64UrlDS_t as option to RXS_Convert() to allow for Base64Url encoding/decoding

HTTP Communication - RXS_Transmit()

  • Corrected issue with RXS_Transmit() treating HTTP response headers as if they were UTF-8 data instead of ISO-8859-1 as per RFC 5987 and RFC 8187
  • Corrected issue using custom HTTP headers with RXSURI which could result in the custom headers not being sent


  • Corrected issue with RXS_GetUrlVar() that could cause a retrieved URL variable to be truncated instead of retrieved fully

Code Generation

  • Corrected issue with CRTRPGTPL resulting in a 3029 error when attempting to use a source member for the input instead of an IFS file

Other Changes

  • Corrected issues with internal licensing code which could cause errors when running on partitions with an LPAR ID above 100



  • Corrected issue with RXS_ComposeJsonNumber() handling of decimal values that failed to include zeros before the decimal point
  • Added new error message KTA120C to RXS_ComposeJsonNumber() to more clearly indicate when a provided input value was unable to be parsed as a valid JSON number


  • Corrected issue with RXS_PutStdOut() that could cause a "Pointer not set for location referenced" error to occur when providing the optional data structure parameter. This issue was introduced as part of changes made in RXS 3.4.3

Other Changes

  • Removed internal license checks from commonly used subprocedures RXS_STR(), RXS_GetJobCCSID(), and RXS_JobLog() to improve overall performance



  • Corrected issue with using TrimVariables where values composed to child objects/arrays would not be properly trimmed


  • Corrected issue with RXS_Crypt() silently failing when not provided with an algorithm when performing SHA hashing. Error KTA0308 will now be thrown


HTTP Communication - RXS_Transmit()

  • Enhanced RXS_TransmitDS_t data structure subfield array CustomHeaderValue to increase the size from 1KB to 4KB to allow for longer custom headers when calling RXS_Transmit()
  • Enhanced RXS_HTTPResponseDS_t data structure subfield array HeaderValue to increase the size from 1KB to 4KB to allow retrieving longer headers from the response
  • Updated RXS_TransmitDS_t data structure subfield array HeaderCookieFiles to decrease the number of array elements from 50 to 10. This change was based on customer feedback and should help reduce total memory usage


  • Updated RXS_ComposeJsonBoolean() to properly treat values other than RXS_JSON_TRUE or RXS_JSON_FALSE as invalid input rather than treating anything other than RXS_JSON_TRUE as 'false'. A KTA120B error will now be thrown when invalid input is provided to RXS_ComposeJsonBoolean()

Template Variables and Constants

  • Added new RXS_Var4K_t varying 4KB template variable to RXSCB
  • Added new RXS_Var1M_t non-varying 1MB template variable to RXSCB

Other Changes

  • Modified RXS_ResetDS() to increase parameter size to allow for larger data structures
  • Corrected text description of -prdlib flag in WRKRXSRTRE help text


HTTP Communication - RXS_Transmit()

  • Enhanced RXS_TransmitDS_t data structure with new subfield FollowRedirects to control if RXS_Transmit() will automatically follow HTTP 3XX status code redirects. The default value is RXS_YES to maintain compatibility with prior releases
  • Enhanced RXS_Transmit() logfile output to indicate that SSLCertStore will use the *SYSTEM certificate store by default


  • Enhanced RXS_CreateJsonDS_t with new subfield TrimVariables to control if RXS_ComposeJsonString() will trim excess whitespace from composed JSON values. The default value is RXS_NO to maintain compatibility with prior releases
  • Corrected issues that could occur when passing JSON names as fields instead of literals when composing JSON
  • Corrected issue with RXS_CreateJson() that could cause an KTA120A: RXS_CreateJson() was provided an invalid data structure parameter error when using /DEFINE RXSV6R1


  • Corrected issue with RXS_PutStmf() silently failing when not provided with a filepath

XML Composition APIs

  • Added RXS_GetComposeBufferLen() API based on customer feedback. This API can be used to retrieve the current length of the compose buffer similar to the functionality of RXS_GetJsonStringLen()

Other Changes

  • Corrected text description of PORT parameter on CRTRXSSVR command


RXS Router

  • Corrected issues preventing RXS Router -passwd flag from working correctly when the QPWDLVL system value was set to 2 or 3
  • Enhanced RXS Router -passwd flag to support passwords up to 128 characters and removed character restrictions
  • Enhanced -passwd flag for RXS Router to support *NOPWD, *NOPWDSTS, and *NOPWDCHK to allow profile swapping to IBM i user profiles with their password set to *NONE
  • Enhanced RXS Router to send a message to the CGI joblog on start to show which version of RPG-XML Suite is being used
  • Enhanced RXS Router debug report page to show which version of RPG-XML Suite is being used

HTTP Communication - RXS_Transmit() and RXS_getUri()

  • Updated RXSURI command to internally call RXS_Transmit() instead of RXS_getUri(). The log file generated by RXSURI now reflects the RXS_Transmit() log format as a result
  • Updated default values specified in the RXSURIP file used by the RXSURI command. Requests will now use HTTP 1.1 and CCSID 1208 by default. These values replace the defaults of HTTP 1.0 and CCSID 819 used in previous versions
  • Corrected issue which could cause intermittent SSL timeout errors to appear in the RXS_Transmit() log file in rare cases


  • Added support for AES-128, AES-192, and AES-256 encryption to RXS_Crypt()


  • Corrected issue with unexpected output when using RXS_Convert() to perform URL percent encoding where multibyte characters were present
  • Enhanced RXS_ConvertURLPercentDS_t with two new subfields, InputCCSID and OutputCCSID, both of which are defaulted to the CCSID of the current job
  • Corrected issue which could occur rarely when using RXS_Convert() to perform CCSID conversion with empty input


  • Corrected issue with how the JSON compose APIs handle CCSID conversion of some non-printable characters to UTF-8, which could result in incorrect output of multibyte characters after conversion

XML Composition APIs

  • Corrected issue introduced in 3.4.0 which could cause RXS_GetComposeBuffer() to retain previously retrieved composed data

XML DOM Parsing APIs

  • Corrected issue with the RXS3 DOM APIs which could prevent loading XML documents larger than 4MB

XML Event Parsing APIs

  • Corrected issue introduced in 3.4.0 which caused RXS2 RXS_parse() error messages to be partially returned in an incorrect CCSID


  • The minimum supported operating system version is now IBM i 7.1
  • RPG-XML Suite's version number now uses the format MAJOR.MINOR.PATCH to be more in line with commonly used semantic versioning standards
  • The RXS 2 and RXS 3 APIs are no longer separately versioned as they were in previous releases. Output provided by the DSPVER and DSPMCHINF commands as well as the VERRXSBASE program will now only report a single version number

Example Programs

  • Example source code for the RXS 2 APIs is no longer provided in the included EXAMPLE source physical file. We recommend all new applications are written using the RXS 3 APIs. Example code for the RXS 3 APIs has been moved to the EXAMPLE source physical file
  • Example programs are no longer provided in a compiled state during the installation. This change was made based on customer feedback

RXS 2 Copybook

  • The RXSCP copybook containing the RXS 2 API prototypes, data structures, and constants which was previously located in the included RXS source physical file has been moved to the included QRPGLECPY source physical file. Existing programs using the RXS 2 APIs will continue to work without modifications, but before any future recompilation you will need to change the /copy RXS,RXSCP line in your programs to be /copy QRPGLECPY,RXSCP

HTTP Communication - RXS_Transmit() and RXS_getUri()

  • Changed RXS_Transmit() and RXS_getUri() to use the IBM GSKit SSL APIs for SSL/TLS communication. This allows for SNI support and other improved capabilities. Note that this may cause RXS_TransmitDS_t.SSLVerifyPeer and RXS_TransmitDS_t.SSLVerifyHost subfields to no longer ignore missing/invalid SSL certificates in all circumstances, and you may begin receiving errors as a result after upgrading. If you do, you should install the SSL certificates for the endpoint you are calling
  • Corrected issues with RXS_Transmit() which could cause a generated log file to be empty
  • Enhanced the RXS_TransmitDS_t data structure to include a new LocalInterface subfield. LocalInterface can be set to an IP address. When set to an IP address, RXS_Transmit() will use this value to determine the proper network interface to use.
  • Enhanced the RXS_TransmitDS_t data structure to include a new EnableIPv6 subfield. EnableIPv6 can be set to RXS_YES or RXS_NO (default: RXS_NO). When set to RXS_YES this option will allow RXS_Transmit() to resolve a host name to either the IPv4 or IPv6 address instead of being limited to only resolving to the IPv4 address.
  • Corrected issue with RXS_Transmit() when performing a HTTP DELETE operation
  • Corrected issue preventing RXSURI command from properly sending custom HTTP headers in some circumstances


  • Enhanced JSON parsing and composing API internal code, which corrects a number of issues with memory usage and CCSID handling as well as JVM conflicts. Any existing programs that are parsing or composing JSON should perform substantially better
  • Previously, the JSON APIs relied on files in the IFS stored in a /krengeltech directory. This directory is no longer required starting with RXS 3.4.0 and can be safely removed
  • Calling RXS_DestroyJson() is no longer required after RXS_ParseJson(). RXS_DestroyJson() now only needs to be called on the RXS_CreateJsonDS_t that was originally used in a call to RXS_CreateJson(). Existing code which calls RXS_DestroyJson() after RXS_ParseJson() will continue to function without any changes or recompilation required, but we recommend reviewing your code to remove any unnecessary RXS_DestroyJson() calls
  • Added RXS_FormatJson() API based on customer feedback. This API can be used to format a JSON document or STMF to either minify the document, or to expand it and control indentation and whitespace
  • Added RXS_GetJsonStringLen() API based on customer feedback. This API will return the length of character field needed to store the JSON document composed in the provided RXS_CreateJsonDS_t
  • Enhanced JSON APIs to support duplicate keys within objects per JSON RFC 7159
  • Enhanced RXS_ComposeJsonString() to allow *Omit for parameter 2. *Omit is treated as equivalent to passing a 0 length empty string
  • Enhanced error messages for all RXS JSON composition and parsing APIs to provide more detail
  • Enhanced validation for RXS_ParseJson() settings. As a result, programs that are calling RXS_ParseJson() without specifying a parsing handler will throw a new error message
  • Corrected issue when using RXS_ParseJson() to parse a JSON document which contained empty child JSON objects

XML Composition APIs

  • Enhanced the RXS_ComposeDS_t data structure to include a new TrimVariables subfield. TrimVariables can be set to RXS_YES or RXS_NO (default: RXS_NO). When set to RXS_YES this option will cause RXS_ComposeVariable() to remove all leading and trailing whitespace from the passed value equivalent to if the value had been wrapped by the RPG %Trim() built-in function
  • Enhanced the RXS_ComposeDS_t data structure to include a new EncodeVariables subfield. EncodeVariables can be set to RXS_YES or RXS_NO (default: RXS_NO). When set to RXS_YES this option will cause RXS_ComposeVariable() to encode all XML reserved characters (& ' " > <) with the appropriate entities (& ' " > <) in the passed value
  • Enhanced RXS_ComposeVariable() to allow *Omit to be passed for parameter 2. *Omit is treated as equivalent to passing a 0 length empty string
  • Corrected issue preventing RXS_ComposeVariable(), RXS_ComposeSection(), and RXS_GetComposeBuffer() from throwing an error when RXS_StartComposeEngine() had not previously been called


  • Corrected issue when using RXS_Convert() to encode XML entities that could lead to a memory leak in certain scenarios
  • Corrected issue causing RXS_Convert() to throw an error when provided with an empty character field for input


  • Corrected issue preventing *Omit from being used as the first parameter for RXS_Crypt()
  • Corrected issue with RXS_Crypt() MD5 and SHA hashing memory usage and IFS file access

Code Generation

  • Enhanced the BLDPRS command to support generating RXS 2 XML parsing code, RXS 3 XML parsing code, or JSON parsing code. BLDPRS can now also generate either mixed or column-limited full free format RPG. As part of this update, the names of some existing parameters were changed and new parameters were added
  • Enhanced the BLDTPL command to provide better CCSID handling and performance. As part of this update, the names for some parameters have been changed
  • Enhanced the BLDTPL command to no longer remove the XML prolog during template generation based on customer feedback
  • Enhanced the CRTRPGTPL command to write a comment section in the generated template member that contains the full command used to generate the template for future reference

Other Changes

  • Added RXS_RenameStmfDS_t as option to RXS_ProcessStmf() to allow for easier IFS file renaming
  • Corrected intermittent error message caused by RXSRTR appearing in Apache job log
  • Corrected issue preventing RXS_GetUrlVar() from handling empty URL variables properly
  • All included commands now provide help via included *PNLGRP objects


  • Internal changes to allow initial SNI support.


  • Corrected an issue with ScriptAliasMatch directives when building a new httpd.conf file.


  • RXS_Convert() now works properly when URL encoding/decoding strings over 64K


  • RXS_GetJsonString() now works properly in all situations with JSON prettification disabled.
  • RXS_RESETDS() now works correctly with RXS_CreateJsonDS_t, RXS_JsonStructureDS_t, RXS_ParseJsonDS_t
  • RXS_GetEnvVar() now correctly returns an empty string for variables which do not exist
  • RXS_Parse() no longer requires programs compiled under v3.31 or earlier to be recompiled to avoid a decimal data error. This affected only programs running under v3.32 after last being compiled with v3.31 or earlier.


  • RXS_GetStdIn() now properly handles binary output to a stream file
  • Performance enhancements to RXS_Parse()
  • Performance enhancements to RXS_ComposeVariable() and RXS_ComposeSection()
  • Improvements to RXS_OpenDom() to prevent XML declarations from conflicting with the DOM parser's internal character set handling
  • Improvements to error handling in RXS_Throw() and RXS_Catch()
  • Improved memory handling and performance in RXS_Convert()
  • Improvements to error reporting in RXS_OpenDom(), RXS_Parse() and RXS_Convert()
  • Improvements to RXS_GetUrlVar() and RXS_GetStdIn() when processing URL encoded content
  • Improved BLDTPL to output variable names that conform to RPG's naming rules
  • Performance enhancements to speed licensing functions
  • RXS_ParseJson() prototype changed to use Const instead of Value. All programs parsing JSON will need to be updated and recompiled.


  • Improved error reporting when parsing a JSON string with incorrect syntax
  • Improved error reporting when processing JSON without authority to required IFS objects
  • Correction to RXS_ComposeJsonBoolean() so that composed values are correct
  • Improved memory handling when composing very large XML strings
  • Improved performance when parsing large stream files
  • Improved support for calling non-CGI programs from RXSRTR function



  • Corrected a problem with multi-byte characters in request data causing a false timeout condition when calling RXS_Transmit()
  • Corrected a problem with multi-byte characters in XML data causing RXS_Validate() to fail when it should have been successful
  • Changes to the Compose engine to correctly handle repeating data when using the OmitUncomposedLines option with multiple calls to RXS_ComposeSection()
  • Improvement to RXS_ComposeVariable() to allow *BLANKS to be passed on the second parameter, without composing 16MB's of blanks/spaces and instead the composed content will be the same as if a zero length value had been passed


  • Corrected an issue that required programs using RXS_Transmit() to be recompiled. Recompiling is no longer needed
  • Improvements to CRTRPGTPL to better handle templates that have invalid formatting or characters that are not allowed in RPG variables names


  • RESTful HTTP Methods such as PUT, DELETE, HEAD, OPTIONS and PATCH (POST and GET continue to be available)
  • Easy parsing of content from RESTful URI’s such as http://www.example.com/customer/53874
  • Support for dynamic as well as compiled templates
  • Extended length templates up to 256K
  • Automatic compression of whitespace when composing from templates
  • Automatic omission of uncomposed template content
  • New function RXS_ResetDS() for easily initializing data structures used by the RXS3 API
  • Enhanced RXS_GetStmf() to allow easy reading of stream file content in “chunks” within a loop
  • Enhanced RXS_PutStdOut() for easy output of HTTP Status, Content Type and other HTTP headers
  • Extended support for very large XML stream files when using the event based parser
  • Improvements to CRTRPGTPL command
  • Read STDIN over 16MB directly to a stream file
  • Output large stream files over 16MB in size to STDOUT
  • Improved logging from RXS_Transmit()
  • Improved RXS_Transmit() when using Basic Authority so that only one request is made to the remote server
  • Improved STMF handling to inherit authority from the host directory when creating new STMFs




  • The minimum supported operating system is now IBM i 6.1
  • Completely new RXS3 API introduced. This API has been redesigned from the ground up and hands the RPG developer an even more powerful tool.
  • Full support for 16 MB in-memory variables
  • Base 64 encoding
  • Full UTF-8 support and improved CCSID handling
  • Enhanced data security


  • Improved compatability with proxy configuration in previous versions.
  • Improved availability of joblog messages in CGI jobs running via RXSRTR and also using activation groups


  • Expanded number of variables allowed in one section of a template
  • Allowing only IPv4 when using RXS_getUri(). IPv6 will require use of RXS_Transmit()


  • Resumed support for LocalIP and LocalPort settings when calling RXS_getUri()
  • Improved backwards compatability when using RXS_getUri() with HTTP Get method


  • Improved support for conversion of XML entities during parsing


  • Improved parsing of content that contains XML entities in combination with multi-byte character sets such as UTF-8
  • New options for RXS_getUri() that allow host and peer verification to be turned off


  • Improved STMF handling to inherit authority from the host directory when creating new STMF's
  • Improved RXS_getUri() to handle URI's that do not start with http or https
  • Improved RXS_getUri() when using Basic Authority so that only one request is made to the remote server


  • Improvements to CCSID handling when outputting to existing stream files with multi-byte character sets


  • Correction to template engine when outputing stream files encoded as UTF-8 or other multi-byte character sets


  • Enhancements to BLDPRS command
  • Ignore default namespaces in DOM parser unless DOM_INCNSATR set as an option
  • Updates to HTTP client to correct output to debug files when multiple communications are transmitted
  • Created RXSMENU, DSPVER, DSPLIC and APYLIC commands for menu driven version and licensing tasks
  • Seperate licensing library KTLIC no longer required


  • Enhancement to allow multiple members in RXSCFG to allow member names to reflect RXSRTR environment names when desired. (The RXSCFG member is the default when RXSRTR is not in use or a member matching the environment name is not found.)
  • When creating Apache instances, changed logs directory authority to *RWX
  • Licensing updates for certain IBM serial numbers and for BLDTPL and BLDPRS commands


  • The minimum supported operating system is now IBM i V5R4
  • Enhancements to RXS Router allowing single library installation for simplified configuration and streamlined upgrades.
  • Improved CCSID handling to support character sets outside of North America
  • Various performance improvements and bug fixes
  • New licensing system
  • New RXS_getUri() communications client


  • Correction to allow case insensitive XPath's when using the DOM parser


  • Enhancements to RXS Router allowing single library installation for simplified configuration and streamlined upgrades. Improved CCSID handling to support character sets outside of North America


  • Fixed bug in DOM parser to intialize storage used in previous parses
  • Improved limits in DOM parser allowing increased element count in parsed XML
  • Enhanced RXS Router to allow mixed case for RXSRTRCTL option switches
  • Fixed bug in RXS_getUrlVar() to allow encoded ampersands to be decoded correctly (%26)
  • Enhancement to RXS_getUrlVar() to decode percent encoded characters correctly when CGIConvMode is set to MIXED
  • Fixed parser bug to allow UTF-8 double-byte characters in attribute data


  • Fixed bug in RXS_getUrlVar() when the last variable's value in QUERY_STRING was a single character.
  • Fixed bug where RXS_getUrlVar() was returning the & char in the event of an empty QUERY_STRING variable.


  • Enhancement: Options used when calling RXS_DOMSetOpt() or RXS_DOMBuild() have been simplified.
  • Fixed bug: Modified the template engine to ignore other forms of whitespace at the end of sections names. Previously, if invisible characters existed due to copying template code from Word or PDF documents, the section name would not be detected properly and would require the template to be modified.
  • Modified RXS Router added in v2.10 to exist in base RXS library, rather than a separate library.
  • Modified RXS Router command INZRXSRTR to be executable by users with authority to RXSRTRCTL and INZRXSRTR.
  • Modified RXS Router httpd.conf to allow multiple types of CGI invocations. This allows you to configure URLs which bypass the router if needed.
  • Fixed bug where DOM Parser functions RXS_DOMGetData() and RXS_DOMGetDataCount() would return incorrect values when using repeating elements.
  • Fixed bug where sometimes during install, data area RXSBASE was not being given appropriate authority, and would falsely report that an RPG-XML Suite license key was invalid immediately after installation.


  • NEW FEATURE: Added new "RPG-XML Suite Router" functionality. This will ease the offering of web services as it takes care of altering the library list and user profile before your web service is invoked.
  • NEW FEATURE: RXS HTTP Command to make it easier, and safer, to end, start, and configure your Apache server instances.
  • Enhancement: When processing template files (i.e. IFS .tpl files), the section names will have *Blanks trimmed from the end of their name. Previously, if blanks existed, the template engine wouldn't consider the name and the .tpl would have to be modified.
  • Enhancement: Allow RXS_getEnvVar() to be called multiple times. Normally in the case of GET based web services there has been a single URL parameter named "xml" that would contain the inbound XML. With RESTFul web services making a mark in the web services world we have expanded the RXS_getEnvVar() API to facilitate multiple calls for differently named variables.
  • Enhancement: Traditionally when there were unmatched delimiters in a template file (i.e. IFS .tpl files) it would throw a MCH0603 error. Now a more informative message will be relayed to the job log.
  • Enhancement: Speed improvements have been made in the RXS_DOM* based parsing API's.



  • Fixed bug where RXSCFG was being read for each call to RXS_getUri() or RXS_initTplEng() and now it is just called the first time in each job and then the data is cached to better performance.
  • Fixed bug that was causing issues when RXS was used in conjunction with DDM files or RPG being front ended by stored procedures. This was a bug that affected few customers in very specific usage scenarios.


  • Modified RXS_getUri() to use 65535 VARYING vs. 65535 without VARYING. This addresses issues when trying to pass by reference and not having the exact same string type.
  • RXSCP fields RXS_getUriOut, RXS_getUriHead, and RXS_getUriData have been deprecated and commented out. They will be physically removed from RXSCP in v1.5. If you had version 1.4 installed you will need to recompile your programs to use this latest version.
  • Modified RXS_getUri() to default to port 443 if port is 0 and SSL=RXS_YES was specified.


  • NEW FEATURE: RXS_setParseEnc()
  • NEW FEATURE: RXS_ignElemNamSpc()
  • Modified commands BLDPRS and BLDTPL to better handle long XPaths
  • Modified default delimiters to be :: for section names and .:var:. for variable names. In previous versions they were /$ for section names and /%var%/ for variable names. This was changed for variety of reasons with the biggest being usage in foreign countries. By using colons and periods the code can be typed faster for manual modification of templates. If you are upgrading you should do an UPDDTA RXSCFG and change the defaults to /$ for section begin delimiter, /% for var begin delimiter and %/ for var end delimiter.


  • NEW FEATURE: Added RXS_addLibLE()
  • NEW FEATURE: Added RXS_libLEExists()
  • NEW FEATURE: Added RXS_rmvLibLE()
  • NEW FEATURE: Added RXS_getBuffLen() to get a count of bytes in the Template Engine buffer to know if it is over 65535 and thus to big to retrieve with RXS_getBuffData().
  • NEW FEATURE: Added RXS_getBuffData() to get the Template Engine data that is currently buffered so it can be put into a 65535 VARYING field and used on RXS_getUri().
  • Changed HTTPD.txt to not use $ signs (also changed NEWENV command)
  • Fixed bugs in BLDPRS that were making it not work right with long xPaths.
  • Added delim fields to RXSCFG
  • Changed RXS_initTplEng() to operate off of default delimiters in RXSCFG and change default delimiters in program to not be constants.
  • Changed RXS_updVar() to be able to do 65535 varying, was set at 1024 at an inner level of code.
  • Enhancing RXS_soapDecode() for speed and accuracy.
  • Adding code to BLDPRSR and BLDTPLR to not delete user index unless it exists. It was putting messages in job log uncessarily
  • Added DftTransDir to RXS_readToFile() if no path was specified.
  • Added DftTransDir to RXS_outFromFile() if no path was specified.
  • Added DftTransDir to RXS_deleteFile() if no path was specified.
  • When using RXS_readToFile() extra spaces were sometimes added to the end of the files contents. This has been addressed to not have additional spaces.
  • Change error text in RXS_cmpTransFile() to be RXSCFG instead of CONFIG.
  • Added defaults for RXS_getUri():
    • ds.ReqType=RXS_POST
    • ds.SprHead=RXS_YES
    • ds.Debug=RXS_NO
    • ds.RspType=RXS_VAR
    • ds.ReqType=RXS_VAR
    • ds.ContType='text/xml'
    This will save typing when using RXS_getUri() as not as many data structure fields will need to be filled.
  • When a POST with zero content is sent and RXS_readToFile() is used an error was inappropriately thrown. Now no error is thrown.
  • Changed RXS_readToFile() to truncate content on IFS open.
  • Changed RXS_getUriOut and RXS_getUriHead from 32767 to 65535 in RXSCP (main RXS copybook)
  • Added field RXS_getUriData to RXSCP in relation to new RXS_getUri() functionality
  • Changed RXS_getUri() to be able to send and receive 65535 bytes of data if not using IFS files. Previous limitation was 2048.
  • Added new OutType of RXS_VAR to RXS_initTplEng(). This should be used in conjunction with RXS_getBuffData().
  • !!RECOMPILE!! Changed RXS_getUri() to have the second, third and newly added forth parms as OPTIONS(*OMIT) for ease of use (so you don't have to specify them if you aren't using them)
  • Added example TPLENG3 to show how to use RXS_getBuffData().
  • The field RXS_GetUriHead (i.e. response HTTP Headers) will always be returned when a variable is specified vs. only being returned when SprHead (Seperate Headers) is specified. This pertains to RXS_getUri().
  • Modified client app Web Service Tester to save responses to a stream file and retain URLs that have been accessed.


  • Renamed RPG-XML Suite config PF, MYRXS/CONFIG, to MYRXS/RXSCFG.
  • Changed RXS_parse() to %TRIM input file name
  • Changed RXS_parse() to throw an error if file to parse doesn't exist.
  • Added RXS_soapDecode()
  • Increased RXS_updVar() input to 65535.
  • Changed RXS_initTplEng() to %TRIM out file name
  • Added example GETURI4 to show Template Engine overriding of sections/variables and also ability to override event handler type values.
  • Added RXS_charToTimestamp()
  • Added RXS_timestampToChar()
  • Added RXS_charToBln()
  • Modified RXS_charToNbr() to have default value parameter.
  • Added parsing code generator BLDPRS(Build RPG Parsing Subprocedure)
  • Added template generator BLDTPL (Build Template)
  • Added RXS_getUri() PUser and PPW (Proxy User and Proxy Password)
  • Added DSPMCHINF for ease of displaying machine information.


  • Changed RXS_loadTpl() to allow overriding abilities for section and variable delimiters. For internationalization purposes.
  • Changed RXS_parse() to allow the passing of handler event type value overrides (i.e. ELEMBEGIN, ELEMCONTENT, ELEMEND, ATTR). For internationalization purposes.
  • Added example RXS6 to show Template Engine overriding of sections/variables and also ability to override event handler type values.
  • Modified install *SAVF to be V5R1 instead of V5R3


  • Initial release.