Skip to content

Releases: VitalyPopov/ProRock

ProRock 1.4.1

Choose a tag to compare

@VitalyPopov VitalyPopov released this 17 Oct 20:36

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:boolean 1 and 0 - valid XML Schema, written by Excel and in SOAP headers - were read as the default value; now True and False, like true and false.
  • Unions (xs:union, a value of any of several types) crashed ProRocket Lite when their members were named only in memberTypes (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 span in a span - raised an access violation at program start.
  • An xs:unsignedLong default above High(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

Choose a tag to compare

@VitalyPopov VitalyPopov released this 16 Oct 18:39

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:created is a dc:date is a dc:any), text-only mixed content is text, and SetXsiType writes the xsi:type="dcterms:W3CDTF" OPC requires. A new sample, ProRock.Xmlite.DocumentProperties, opens any .docx, .xlsx or .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-unit now 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 gets XmlValue for its text. <xs:any maxOccurs="0"/> no longer marks a type as accepting any element, and a group with maxOccurs="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

Choose a tag to compare

@VitalyPopov VitalyPopov released this 13 Oct 22:41

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-timestamp makes an unchanged schema give a byte-identical unit. CLI.md in 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:any content. 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: ClientCertificate and ClientCertificatePassword (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 - now Orders2, 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

Choose a tag to compare

@VitalyPopov VitalyPopov released this 12 Oct 09:27

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, SetBearerToken and any header (API keys) on the transport, sent with every call; UserName/Password answer a server's challenge (Basic, Digest, NTLM, Negotiate). Credentials never reach the logging events or error texts.
  • SOAP headers - OnRequestHeader / OnResponseHeader for 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:double are generated as Double (was Extended), xs:unsignedLong as UInt64 (was Int64): regenerate your units.
  • A custom THttpTransport overrides Send instead of Execute.
  • TBasite.AutoInitMaxDepth defaults to 1 (was 2): a self-nested object is nil until 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

Choose a tag to compare

@VitalyPopov VitalyPopov released this 07 Oct 21:36

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) and TryMethod (no exceptions: False and the reason in TSoapiteError). 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, the xml: prefix, xs:any content 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.