Repository navigation
Releases: VitalyPopov/ProRock
Release list
ProRock 1.4.1
Fixes found by testing against OOXML and FHIR.
When the schema changes, regenerate, don't re-patch.
Download
ProRocket Lite 1.4.1 (code generator, Windows 64-bit): ProRocket-Lite.zip below - the GUI and ProRocketCli.exe.
- Free for any use, including commercial. The generated code is yours.
- SHA-256 of the zip:
ec0a4c568e1170009d6a86293beee493d647a6b400634c0f433cfb714054d1ac - SHA-256 of
ProRocketCli.exe(to check a copy that is already unpacked):a51fd77966372895de8639c830b7d1ffcc8ecd888213b4deec699dc7d3117e3b - The executables are not code-signed yet, so Windows SmartScreen may warn on the first start: More info → Run anyway.
ProRock (the runtime library) is the source code of this release, Apache 2.0. ProRocket Lite is a free closed-source tool with its own license (LICENSE.txt in the zip).
Update if your schema has default values
A class with a default value on a built-in type - in generated units every xs:boolean, xs:int or xs:double attribute or element with default= - raised EVariantTypeCastError on every ToXml, also of an object never touched. The units wrote such a default as text ([TDefault('false')]). ProRock 1.4.1 converts it into the property's type, so units you generated with earlier versions work without regenerating; ProRocket Lite 1.4.1 writes it in its type ([TDefault(False)]).
Fixes
xs:boolean1and0- valid XML Schema, written by Excel and in SOAP headers - were read as the default value; nowTrueandFalse, liketrueandfalse.- Unions (
xs:union, a value of any of several types) crashed ProRocket Lite when their members were named only inmemberTypes(OOXML), resolved to themselves when a member had the union's own name (an endless loop with a default value), and were left out when all members were inline. A union now always declares its type: its only named member's type, otherwise the value as written (string). - XHTML, and with it every FHIR resource (its narrative is XHTML): a type whose content holds elements derived from itself - a
spanin aspan- raised an access violation at program start. - An
xs:unsignedLongdefault aboveHigh(Int64)lost its digits.
What we learned, and what comes next
Generating the OOXML schemas (SpreadsheetML, DrawingML) and FHIR R4 found these bugs - and more that needs design rather than a fix: writing a document you have read back is not yet exact (an optional value equal to its default is not written - in FHIR a patient's gender value="male"), enumeration values come back from the Delphi names, unknown elements are dropped, and a few generator details keep these large units from compiling unchanged. They are listed in the known limitations and are the first items on the roadmap.
Compatibility verified - all tests (214, and 218 on Delphi 12+) on Delphi 10.3, 10.4, 11, 12 and 13.1, Win32 and Win64 (10.4 Win32: compile check).
Full list of changes: CHANGELOG.
Development of this release was assisted by Claude Code (Anthropic); design, decisions and verification are the author's.
ProRock 1.4.0
Office documents, and non-ASCII text that stays itself.
When the schema changes, regenerate, don't re-patch.
Download
ProRocket Lite 1.4.0 (code generator, Windows 64-bit): ProRocket-Lite.zip below - the GUI and ProRocketCli.exe.
- Free for any use, including commercial. The generated code is yours.
- SHA-256 of the zip:
13a1f7191f2c8de8034369cd53dfc476e6eae5fd730914f560927d5ebfc72586 - SHA-256 of
ProRocketCli.exe(to check a copy that is already unpacked):d01d015dd701a8c1d734f1a356ea2674eb13ef2a0c81707eedc6fecdc1aae50c - The executables are not code-signed yet, so Windows SmartScreen may warn on the first start: More info → Run anyway.
ProRock (the runtime library) is the source code of this release, Apache 2.0. ProRocket Lite is a free closed-source tool with its own license (LICENSE.txt in the zip).
Update if you send non-ASCII text on Windows
On Windows, text written to a string - ToXml, TXmlite.ObjectToXml, and so every Soapite request body - came out garbled when it held non-ASCII characters (Ё as РЃ, ü, €...): the UTF-8 bytes were read back with the ANSI code page. Fixed. Writing to a stream or a file was not affected, nor were other platforms.
Highlights
- Office documents - Dublin Core and the OOXML core properties (
docProps/core.xml) generate clean from the official schemas: substitution group members take their head's type (dcterms:createdis adc:dateis adc:any), text-only mixed content is text, andSetXsiTypewrites thexsi:type="dcterms:W3CDTF"OPC requires. A new sample,ProRock.Xmlite.DocumentProperties, opens any.docx,.xlsxor.pptx, edits its title, author, keywords and the rest, and saves it - every other part of the file kept byte for byte. Verified with Excel: the file opens without a repair prompt and shows the new values in File > Info. - Client certificate from memory -
ClientCertificateData: the bytes of a PFX/P12 from a database, a resource or a key vault, next to the file path (Delphi 12 or later). Requested in issue #1. - Problems explained - ProRocket Lite shows a plain-words hint for every problem line (what it means, what to do) with the full path of the file; copy the lines for an issue with one click or Ctrl+C.
duplicate-unitnow names the clashing namespaces and files, so every problem line says where it comes from. - Round trips - a document read and written back keeps foreign attributes valid (their prefixes declared) and the text of mixed content.
- Compatibility verified - all tests (209, and 213 on Delphi 12+) on Delphi 10.3, 10.4, 11, 12 and 13.1, Win32 and Win64 (10.4 Win32: compile check); the sample built on 10.3 and 13.
Behavior changes
- Regenerate units of schemas with substitution groups or mixed content (Dublin Core, schemas built on it): members now derive from their head (
TTitleE = class(TAnyE)instead of an empty element class), and a mixed type that allows no child elements getsXmlValuefor its text.<xs:any maxOccurs="0"/>no longer marks a type as accepting any element, and a group withmaxOccurs="0"brings no elements. - ProRocket Lite writes nothing when two units would go to one file (
duplicate-unit), like the CLI - before, the last one overwrote the other.
Full list of changes: CHANGELOG.
Development of this release was assisted by Claude Code (Anthropic); design, decisions and verification are the author's.
ProRock 1.3.0
The command line, and every element in its namespace.
When the schema changes, regenerate, don't re-patch.
Download
ProRocket Lite 1.3.0 (code generator, Windows 64-bit): ProRocket-Lite.zip below - now with ProRocketCli.exe, the
generator from the command line.
- Free for any use, including commercial. The generated code is yours.
- SHA-256 of the zip:
400737f6425a03a4367fc1234efa88b2f02224125ea83a81e428808498d5cabb - SHA-256 of
ProRocketCli.exe(to check a copy that is already unpacked):5a4026b3b345fb669576eda82ce35f747105b1252c99aacbea25bccf58c41dc4 - The executables are not code-signed yet, so Windows SmartScreen may warn on the first start: More info → Run anyway.
ProRock (the runtime library) is the source code of this release, Apache 2.0. ProRocket Lite is a free closed-source tool with its own license (LICENSE.txt in the zip).
Highlights
- ProRocket CLI -
ProRocketCli.exe [-o <folder>] [--strict] [--no-timestamp] <file.xsd|file.wsdl> ...for scripts, build steps and AI coding assistants. Problems are reported instead of passing silently - missing imported schemas and includes, names that resolve to nothing - as machine-readable lines, also in the GUI;--no-timestampmakes an unchanged schema give a byte-identical unit.CLI.mdin the zip is written for people and for AI assistants; in a blind test, an AI agent built a working VIES client app from the zip and the documentation alone. - Namespaces done right - the Xmlite writer puts every element and attribute in its namespace: content of another namespace's type, references to global elements and attributes (
wsu:Id,env:mustUnderstand),xs:anycontent. Verified with the OASIS WS-Security and ebMS 3.0 (AS4 header) schemas: the output validates against them. Documents written by earlier versions still read. - Client certificates - mutual TLS on the transport:
ClientCertificateandClientCertificatePassword(Delphi 12 or later, System.Net's support). - Samples - a WS-Security UsernameToken (PasswordDigest, Nonce, Timestamp) in the SOAP header, generated from the OASIS schemas; client certificates against a public test server.
- Compatibility verified - all 180 tests on Delphi 10.3, 10.4, 11, 12 and 13.1, Win32 and Win64 (10.4 Win32: compile and round trip); samples run against live services.
Behavior changes
- Elements now land in their namespace where earlier versions put them in the parent's (see above) - documents written by 1.2 and earlier still read. Regenerate your units with 1.3.0: generated references no longer carry
[TNamespace]/[TQualified], the type says it. - A hand-written class that uses an element class as the type of a member puts that member in the element's namespace.
- Unit names: two versioned namespaces of one vendor (
urn:acme:orders:2,urn:acme:common:2) used to share one unit name - nowOrders2,Common2; a namespace ending in a file name gets a readable name.
Full list of changes: CHANGELOG.
Development of this release was assisted by Claude Code (Anthropic); design, decisions and verification are the author's.
ProRock 1.2.0
Authentication, SOAP headers and solid foundations.
When the schema changes, regenerate, don't re-patch.
Download
ProRocket Lite 1.2.0 (code generator, Windows 64-bit): ProRocket-Lite.zip below.
- Free for any use, including commercial. The generated code is yours.
- SHA-256:
b19cdae2872270ce1f10ce8b7e540152f1b4cbfbc4c20e67abb95e1cad4b8ff5 - The executable is not code-signed yet, so Windows SmartScreen may warn on the first start: More info → Run anyway.
ProRock (the runtime library) is the source code of this release, Apache 2.0. ProRocket Lite is a free closed-source tool with its own license (LICENSE.txt in the zip).
Highlights
- Authentication -
SetBasicAuth,SetBearerTokenand any header (API keys) on the transport, sent with every call;UserName/Passwordanswer a server's challenge (Basic, Digest, NTLM, Negotiate). Credentials never reach the logging events or error texts. - SOAP headers -
OnRequestHeader/OnResponseHeaderfor header blocks: WS-Addressing, WS-Security tokens, a service's own headers. - Basite - every number type is read and written by its own size (hand-written classes with
Byte,Word,Single,Currency, ... could get wrong values and overwritten neighbouring fields); self-nested data of any depth is read;TBasite.AutoInitMaxDepth. - Portability - no Windows-only code left: all units compile for Android 32/64-bit (not yet run on a device).
- Compatibility verified - all 167 tests on Delphi 10.3, 10.4, 11, 12 and 13.1, Win32 and Win64 (10.4 Win32: compile and round trip); samples run against live services.
Breaking changes
xs:decimal/xs:float/xs:doubleare generated asDouble(wasExtended),xs:unsignedLongasUInt64(wasInt64): regenerate your units.- A custom
THttpTransportoverridesSendinstead ofExecute. TBasite.AutoInitMaxDepthdefaults to 1 (was 2): a self-nested object isniluntil set or read.
Full list of changes: CHANGELOG.
Development of this release was assisted by Claude Code (Anthropic); design, decisions and verification are the author's.
ProRock 1.1.0
The SOAP release: WSDL in, a typed client out, verified against live services.
When the schema changes, regenerate, don't re-patch.
Download
ProRocket Lite 1.1.0 (code generator, Windows 64-bit): ProRocket-Lite.zip below.
- Free for any use, including commercial. The generated code is yours.
- SHA-256:
98975ad9412f9cc39268f80d1064c6030cd67a1de9607aee998236cc327c6362 - The executable is not code-signed yet, so Windows SmartScreen may warn on the first start: More info → Run anyway.
ProRock (the runtime library) is the source code of this release, Apache 2.0. ProRocket Lite is a free closed-source tool with its own license (LICENSE.txt in the zip).
Highlights
- Soapite - SOAP 1.1 and 1.2 clients generated from WSDL. Every operation comes as
Method(raises) andTryMethod(no exceptions:Falseand the reason inTSoapiteError). SOAP Faults of both versions are mapped, also when a service answers a fault with HTTP 200. See the EU VIES and calculator samples. - Xmlite - XSD simpleContent,
[TRequired]values, thexml:prefix,xs:anycontent of other namespaces, unqualified local elements. - ProRocket Lite - WSDL support, inline complex types, deterministic output (an unchanged schema gives an unchanged unit).
- Compatibility verified - tests, samples and every unit built and run on Delphi 10.3, 10.4, 11, 12 and 13.1, Win64 and Win32.
Known limitations (mixed content, absent vs default values, unqualified elements on write) are listed in the README.
Full list of changes: CHANGELOG.
Development of this release was assisted by Claude Code (Anthropic); design, decisions and verification are the author's.