Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Catalog · How the catalog works

Random project

ProRock

Schema-typed XML for Delphi: generate exact classes from XSD/WSDL, and when the schema changes, regenerate, don’t re-patch. Fast in-place parsing, no DOM.

View on GitHub

Anyone may press Interesting, signed in or not. It helps others find this project.

Member rating

No ratings yet.

Sign in to rate this project.

README

ProRock 🤟

Schema-typed XML for Delphi. Generate exact Delphi classes from XSD and WSDL, parse and write XML through them, call SOAP services with them.

When the schema changes, regenerate, don't re-patch.

A schema changes: a new e-invoicing version, an ISO 20022 release, a service adding fields. Hand-written or hand-patched mappings then have to be found and fixed one by one. With ProRock you regenerate the units, and the compiler shows exactly what changed.

Proven on real schemas:

  • HL7® FHIR® R4 - all 146 resource types from the official schemas: a Bundle of 1,000 Patients read in 0.1 s, narratives written back as they were (sample)
  • Excel workbooks - SpreadsheetML from ECMA-376: an invoice read, edited and written back with everything Excel put in it; Excel opens it and recalculates (sample)
  • SOAP services - the EU VIES VAT service, WS-Security, client certificates (quick start below)

ProRocket Lite with the FHIR R4 schemas generated, the FHIR sample reading a Bundle, and an invoice edited by the Excel sample, opened in Excel with its total recalculated

Two parts:

  • ProRock - the runtime library: open source (Apache 2.0), pure Delphi source, no dependencies beyond the RTL
    • Basite - the core: plain Delphi objects described once by their metadata (MetaBank) - nested objects created and freed with their parent, presence of every value; independent of any data format, the base for Xmlite and later Jsonite
    • Xmlite - XML parsing and serialization to and from plain Delphi objects, namespace- and schema-aware, without a DOM
    • Soapite - SOAP 1.1 / 1.2 clients on top of Xmlite, generated from WSDL
  • ProRocket Lite - the code generator: XSD/WSDL in, Delphi units out, in a GUI and from the command line - friendly to scripts and AI coding assistants. Free for any use, including commercial

Download ProRocket-Lite.zip (Windows 64-bit, always the newest release; SHA-256 in the release notes)

Documentation

The full documentation is at prorock.rocks (searchable):

Getting started from a WSDL to a working SOAP call in 5 minutes
Xmlite · Soapite XML through typed classes · SOAP clients, transport, authentication
ProRocket Lite the generator: GUI and command line
Samples nine samples, from an Excel workbook and FHIR resources to WS-Security
Design principles a cockpit, not an engine room: what ProRock is built on - and what it is not
XML concepts namespaces, XSD types, substitution groups - explained for Delphi developers

Quick start: a SOAP client from a WSDL

  1. Open ProRocket Lite, add the WSDL (here checkVatService.wsdl, the EU VIES VAT number service), click Generate - or from the command line: ProRocketCli.exe checkVatService.wsdl.
  2. You get two units: the types (ProRock.Xmlite.Schema.CheckVatService) and the client (ProRock.Soapite.CheckVatService).
  3. Call the service. Pass the endpoint: the default is the WSDL's soap:address, and VIES still declares http:// there.
pascal
uses ProRock.Soapite.CheckVatService;

var service := TCheckVatService.Create('https://ec.europa.eu/taxation_customs/vies/services/checkVatService');
try
  var request := TCheckVatE.Create;
  try
    request.CountryCode := 'IE';
    request.VatNumber := '6388047V';

    var response: TCheckVatResponseE;
    var error: TSoapiteError;
    if service.TryCheckVat(request, response, error) then // never raises for service or network failures
      try
        Writeln(response.Name, ' - valid: ', response.Valid);
      finally
        response.Free;
      end
    else
      Writeln('failed [', error.Code, ']: ', error.Message);
  finally
    request.Free;
  end;
finally
  service.Free;
end;

The same from an XSD, the project setup, timeouts, authentication and faults: getting started and Soapite.

Installation

ProRock is a pure source library: no installation, no design-time packages, no component registration. Clone or download the repository, add its Source folder to your project's search path (ProRock 1.4 and earlier: the repository folder itself), use the units you need.

Delphi 10.3 Rio to 13 Florence, Win64 and Win32; all units compile for Android (Delphi 13), running on a device is not verified yet. The Samples folder has one group project with nine samples - an Excel workbook, FHIR resources, Office document properties, EU VIES, WS-Security, client certificates and more.

Known limitations and notes

Coverage grows through real-world schemas. Reading and writing back are exact for what a schema describes, also for large schemas: FHIR R4 and the OOXML SpreadsheetML/DrawingML schemas generate units that compile and round-trip - Office's own extensions and FHIR's XHTML narratives included.

Not covered yet:

  • elements standing in for their substitution group head
  • xsi:nil
  • schemas without a target namespace
  • facets (patterns, lengths, ranges) are not validated

What comes next: ROADMAP. The full list, with notes on decimals, string types and server error texts: Limitations and notes.

Development

Changes are listed in the CHANGELOG, plans in the ROADMAP. Security issues: see SECURITY.md.

Since October 2026, development is assisted by Claude Code (Anthropic): it helps with implementation, tests and generator fixes. Design, decisions and verification remain the author's.

Feedback, real-world schemas that do not work yet, and contributions are welcome - see CONTRIBUTING.md.

If ProRock is useful to you, at least smash the ⭐ Star - it costs nothing and helps other Delphi developers find it. And if you'd like to do more, you can support the project. Thank you! 🤟

License

ProRock is licensed under the Apache License 2.0. ProRocket Lite is a free closed-source tool with its own license. The generated metamodels are derived from W3C, IBM and Microsoft schemas; their notices are in THIRD-PARTY-NOTICES.md.

Have fun, and let's ProRock! 🤟