RPG-XML Suite Changelog


  • 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 STMF's




  • 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
  • Minimum operating system supported is now IBM i 6.1


  • 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


  • 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.