Latest commit

History

102 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

datex4j

A modular Java SDK for the European DATEX II standard.

datex4j reads, writes, validates, and converts DATEX II publications without exposing JAXB through its public facades. The SDK bundles generated models for DATEX II 2.0–2.3 and 3.0–3.7, provides helpers for common user domains, and has no application-framework dependency.

  • Java 21+, JPMS-compatible, and framework-free.
  • Generated DATEX II models built reproducibly from vendored official XML Schemas.
  • Small public facades for XML, JSON, and structured validation.
  • Optional domain modules for traffic, SRTI, parking, EV charging, and UVAR.
  • Apache-2.0 licensed and versioned as a multi-module SDK.

Project status: 0.1.0. The architecture and public facades are in place, while domain convenience APIs and DATEX II profile support continue to grow.

Quick start

datex4j publishes several artifacts with the same project version. Import the BOM, then add the facade and model dependencies that your application needs.

<dependencyManagement>
<dependencies>
<dependency>
<groupId>dev.juherr.datex4j</groupId>
<artifactId>datex4j-bom</artifactId>
<version>0.1.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>dev.juherr.datex4j</groupId>
<artifactId>datex4j-xml</artifactId>
</dependency>
<dependency>
<groupId>dev.juherr.datex4j</groupId>
<artifactId>datex4j-model-v3_7</artifactId>
</dependency>
</dependencies>

Use datex4j-model instead of datex4j-model-v3_7 when one application must handle every bundled DATEX II version. A missing version module produces an explicit error when the facade discovers the available models through ServiceLoader.

importdev.juherr.datex4j.model.v3_7.situation.SituationPublication;
importdev.juherr.datex4j.xml.DatexMarshaller;
importdev.juherr.datex4j.xml.DatexXml;
DatexMarshallermarshaller = DatexXml.builder().validating(true).build();
SituationPublicationpublication = newSituationPublication();
publication.setLang("en");
publication.setModelBaseVersion("3");
byte[] xml = marshaller.write(publication);
SituationPublicationrestored = marshaller.read(xml, SituationPublication.class);

The runnable XML example builds a complete publication. The documentation index links to examples for JSON, validation, domain builders, location helpers, and OCPI mapping.

Version and model selection

DATEX II familyBundled versionsJava package patternNotes
2.x2.0, 2.1, 2.2, 2.3dev.juherr.datex4j.model.v2_X.*Legacy d2LogicalModel publications
3.x3.0–3.7dev.juherr.datex4j.model.v3_X.*Default: 3.7

Each version lives in a separate datex4j-model-vX_Y artifact. The datex4j-model aggregate pulls in every version transitively. The AFIR-specific AfirEnergyInfrastructure and AfirFacilities packages are part of the 3.7 model; earlier versions expose only the modules defined by their own root schema.

Domain builders currently target DATEX II 3.7. The XML and validation facades can target any bundled version when the corresponding model artifact is present. Conformant JSON fixtures cover DATEX II 3.6 and 3.7.

See Models and versions for dependency choices, version selection, and the differences between DATEX II 2.x and 3.x.

Modules

AreaModulesPurpose
Modeldatex4j-model-spi, datex4j-model-vX_Y, datex4j-modelVersion-neutral SPI, generated per-version models, and the all-version aggregate
Facadesdatex4j-xml, datex4j-json, datex4j-validationXML/JSON conversion and structured XSD validation
Helpersdatex4j-builders, datex4j-locationShared publication builders and location helpers
Domainsdatex4j-domain-traffic, -srti, -parking, -evcharging, -uvarConvenience APIs for official DATEX II user domains
Integrationdatex4j-ocpiGenerated OCPI 2.3.0 model and OCPI ↔ DATEX II mapping
Dependency managementdatex4j-bomOne version for every published datex4j artifact
Verificationexamples, datex4j-integration-testsRunnable examples and real/synthetic feed tests; not published

The architecture guide documents the dependency direction, generated-code boundaries, SPI discovery, and JPMS strategy.

Documentation

Upstream standards and profiles

Build from source

The project requires Java 21 or newer. The committed Maven wrapper pins Maven, while mise provisions the JDK.

mise install
./mvnw verify

Run the documented examples with:

./mvnw -pl examples -am test
./mvnw -q -pl examples -am install -DskipTests
./mvnw -q -pl examples exec:java

Roadmap

The current roadmap focuses on richer domain builders, multi-version domain helpers, DATEX II profiles and extensions, and deeper AFIR/OCPI conformance coverage. See CHANGELOG.md for delivered and unreleased changes.

Contributing

CONTRIBUTING.md explains generated-code boundaries, model regeneration, testing, documentation ownership, and the release workflow.

License

Apache License 2.0 — see LICENSE.

DATEX II schemas are © the DATEX II programme and are redistributed for code generation and validation; see https://datex2.eu.

About

Modern Java toolkit for DATEX II (v2/v3): parsing, serialization, validation, and model APIs.

Topics

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

102 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

datex4j

A modular Java SDK for the European DATEX II standard.

datex4j reads, writes, validates, and converts DATEX II publications without exposing JAXB through its public facades. The SDK bundles generated models for DATEX II 2.0–2.3 and 3.0–3.7, provides helpers for common user domains, and has no application-framework dependency.

  • Java 21+, JPMS-compatible, and framework-free.
  • Generated DATEX II models built reproducibly from vendored official XML Schemas.
  • Small public facades for XML, JSON, and structured validation.
  • Optional domain modules for traffic, SRTI, parking, EV charging, and UVAR.
  • Apache-2.0 licensed and versioned as a multi-module SDK.

Project status: 0.1.0. The architecture and public facades are in place, while domain convenience APIs and DATEX II profile support continue to grow.

Quick start

datex4j publishes several artifacts with the same project version. Import the BOM, then add the facade and model dependencies that your application needs.

<dependencyManagement>
<dependencies>
<dependency>
<groupId>dev.juherr.datex4j</groupId>
<artifactId>datex4j-bom</artifactId>
<version>0.1.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>dev.juherr.datex4j</groupId>
<artifactId>datex4j-xml</artifactId>
</dependency>
<dependency>
<groupId>dev.juherr.datex4j</groupId>
<artifactId>datex4j-model-v3_7</artifactId>
</dependency>
</dependencies>

Use datex4j-model instead of datex4j-model-v3_7 when one application must handle every bundled DATEX II version. A missing version module produces an explicit error when the facade discovers the available models through ServiceLoader.

importdev.juherr.datex4j.model.v3_7.situation.SituationPublication;
importdev.juherr.datex4j.xml.DatexMarshaller;
importdev.juherr.datex4j.xml.DatexXml;
DatexMarshallermarshaller = DatexXml.builder().validating(true).build();
SituationPublicationpublication = newSituationPublication();
publication.setLang("en");
publication.setModelBaseVersion("3");
byte[] xml = marshaller.write(publication);
SituationPublicationrestored = marshaller.read(xml, SituationPublication.class);

The runnable XML example builds a complete publication. The documentation index links to examples for JSON, validation, domain builders, location helpers, and OCPI mapping.

Version and model selection

DATEX II familyBundled versionsJava package patternNotes
2.x2.0, 2.1, 2.2, 2.3dev.juherr.datex4j.model.v2_X.*Legacy d2LogicalModel publications
3.x3.0–3.7dev.juherr.datex4j.model.v3_X.*Default: 3.7

Each version lives in a separate datex4j-model-vX_Y artifact. The datex4j-model aggregate pulls in every version transitively. The AFIR-specific AfirEnergyInfrastructure and AfirFacilities packages are part of the 3.7 model; earlier versions expose only the modules defined by their own root schema.

Domain builders currently target DATEX II 3.7. The XML and validation facades can target any bundled version when the corresponding model artifact is present. Conformant JSON fixtures cover DATEX II 3.6 and 3.7.

See Models and versions for dependency choices, version selection, and the differences between DATEX II 2.x and 3.x.

Modules

AreaModulesPurpose
Modeldatex4j-model-spi, datex4j-model-vX_Y, datex4j-modelVersion-neutral SPI, generated per-version models, and the all-version aggregate
Facadesdatex4j-xml, datex4j-json, datex4j-validationXML/JSON conversion and structured XSD validation
Helpersdatex4j-builders, datex4j-locationShared publication builders and location helpers
Domainsdatex4j-domain-traffic, -srti, -parking, -evcharging, -uvarConvenience APIs for official DATEX II user domains
Integrationdatex4j-ocpiGenerated OCPI 2.3.0 model and OCPI ↔ DATEX II mapping
Dependency managementdatex4j-bomOne version for every published datex4j artifact
Verificationexamples, datex4j-integration-testsRunnable examples and real/synthetic feed tests; not published

The architecture guide documents the dependency direction, generated-code boundaries, SPI discovery, and JPMS strategy.

Documentation

Upstream standards and profiles

Build from source

The project requires Java 21 or newer. The committed Maven wrapper pins Maven, while mise provisions the JDK.

mise install
./mvnw verify

Run the documented examples with:

./mvnw -pl examples -am test
./mvnw -q -pl examples -am install -DskipTests
./mvnw -q -pl examples exec:java

Roadmap

The current roadmap focuses on richer domain builders, multi-version domain helpers, DATEX II profiles and extensions, and deeper AFIR/OCPI conformance coverage. See CHANGELOG.md for delivered and unreleased changes.

Contributing

CONTRIBUTING.md explains generated-code boundaries, model regeneration, testing, documentation ownership, and the release workflow.

License

Apache License 2.0 — see LICENSE.

DATEX II schemas are © the DATEX II programme and are redistributed for code generation and validation; see https://datex2.eu.

About

Modern Java toolkit for DATEX II (v2/v3): parsing, serialization, validation, and model APIs.

Topics

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

102 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

datex4j

A modular Java SDK for the European DATEX II standard.

datex4j reads, writes, validates, and converts DATEX II publications without exposing JAXB through its public facades. The SDK bundles generated models for DATEX II 2.0–2.3 and 3.0–3.7, provides helpers for common user domains, and has no application-framework dependency.

  • Java 21+, JPMS-compatible, and framework-free.
  • Generated DATEX II models built reproducibly from vendored official XML Schemas.
  • Small public facades for XML, JSON, and structured validation.
  • Optional domain modules for traffic, SRTI, parking, EV charging, and UVAR.
  • Apache-2.0 licensed and versioned as a multi-module SDK.

Project status: 0.1.0. The architecture and public facades are in place, while domain convenience APIs and DATEX II profile support continue to grow.

Quick start

datex4j publishes several artifacts with the same project version. Import the BOM, then add the facade and model dependencies that your application needs.

<dependencyManagement>
<dependencies>
<dependency>
<groupId>dev.juherr.datex4j</groupId>
<artifactId>datex4j-bom</artifactId>
<version>0.1.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>dev.juherr.datex4j</groupId>
<artifactId>datex4j-xml</artifactId>
</dependency>
<dependency>
<groupId>dev.juherr.datex4j</groupId>
<artifactId>datex4j-model-v3_7</artifactId>
</dependency>
</dependencies>

Use datex4j-model instead of datex4j-model-v3_7 when one application must handle every bundled DATEX II version. A missing version module produces an explicit error when the facade discovers the available models through ServiceLoader.

importdev.juherr.datex4j.model.v3_7.situation.SituationPublication;
importdev.juherr.datex4j.xml.DatexMarshaller;
importdev.juherr.datex4j.xml.DatexXml;
DatexMarshallermarshaller = DatexXml.builder().validating(true).build();
SituationPublicationpublication = newSituationPublication();
publication.setLang("en");
publication.setModelBaseVersion("3");
byte[] xml = marshaller.write(publication);
SituationPublicationrestored = marshaller.read(xml, SituationPublication.class);

The runnable XML example builds a complete publication. The documentation index links to examples for JSON, validation, domain builders, location helpers, and OCPI mapping.

Version and model selection

DATEX II familyBundled versionsJava package patternNotes
2.x2.0, 2.1, 2.2, 2.3dev.juherr.datex4j.model.v2_X.*Legacy d2LogicalModel publications
3.x3.0–3.7dev.juherr.datex4j.model.v3_X.*Default: 3.7

Each version lives in a separate datex4j-model-vX_Y artifact. The datex4j-model aggregate pulls in every version transitively. The AFIR-specific AfirEnergyInfrastructure and AfirFacilities packages are part of the 3.7 model; earlier versions expose only the modules defined by their own root schema.

Domain builders currently target DATEX II 3.7. The XML and validation facades can target any bundled version when the corresponding model artifact is present. Conformant JSON fixtures cover DATEX II 3.6 and 3.7.

See Models and versions for dependency choices, version selection, and the differences between DATEX II 2.x and 3.x.

Modules

AreaModulesPurpose
Modeldatex4j-model-spi, datex4j-model-vX_Y, datex4j-modelVersion-neutral SPI, generated per-version models, and the all-version aggregate
Facadesdatex4j-xml, datex4j-json, datex4j-validationXML/JSON conversion and structured XSD validation
Helpersdatex4j-builders, datex4j-locationShared publication builders and location helpers
Domainsdatex4j-domain-traffic, -srti, -parking, -evcharging, -uvarConvenience APIs for official DATEX II user domains
Integrationdatex4j-ocpiGenerated OCPI 2.3.0 model and OCPI ↔ DATEX II mapping
Dependency managementdatex4j-bomOne version for every published datex4j artifact
Verificationexamples, datex4j-integration-testsRunnable examples and real/synthetic feed tests; not published

The architecture guide documents the dependency direction, generated-code boundaries, SPI discovery, and JPMS strategy.

Documentation

Upstream standards and profiles

Build from source

The project requires Java 21 or newer. The committed Maven wrapper pins Maven, while mise provisions the JDK.

mise install
./mvnw verify

Run the documented examples with:

./mvnw -pl examples -am test
./mvnw -q -pl examples -am install -DskipTests
./mvnw -q -pl examples exec:java

Roadmap

The current roadmap focuses on richer domain builders, multi-version domain helpers, DATEX II profiles and extensions, and deeper AFIR/OCPI conformance coverage. See CHANGELOG.md for delivered and unreleased changes.

Contributing

CONTRIBUTING.md explains generated-code boundaries, model regeneration, testing, documentation ownership, and the release workflow.

License

Apache License 2.0 — see LICENSE.

DATEX II schemas are © the DATEX II programme and are redistributed for code generation and validation; see https://datex2.eu.

About

Modern Java toolkit for DATEX II (v2/v3): parsing, serialization, validation, and model APIs.

Topics

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

102 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

datex4j

A modular Java SDK for the European DATEX II standard.

datex4j reads, writes, validates, and converts DATEX II publications without exposing JAXB through its public facades. The SDK bundles generated models for DATEX II 2.0–2.3 and 3.0–3.7, provides helpers for common user domains, and has no application-framework dependency.

  • Java 21+, JPMS-compatible, and framework-free.
  • Generated DATEX II models built reproducibly from vendored official XML Schemas.
  • Small public facades for XML, JSON, and structured validation.
  • Optional domain modules for traffic, SRTI, parking, EV charging, and UVAR.
  • Apache-2.0 licensed and versioned as a multi-module SDK.

Project status: 0.1.0. The architecture and public facades are in place, while domain convenience APIs and DATEX II profile support continue to grow.

Quick start

datex4j publishes several artifacts with the same project version. Import the BOM, then add the facade and model dependencies that your application needs.

<dependencyManagement>
<dependencies>
<dependency>
<groupId>dev.juherr.datex4j</groupId>
<artifactId>datex4j-bom</artifactId>
<version>0.1.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>dev.juherr.datex4j</groupId>
<artifactId>datex4j-xml</artifactId>
</dependency>
<dependency>
<groupId>dev.juherr.datex4j</groupId>
<artifactId>datex4j-model-v3_7</artifactId>
</dependency>
</dependencies>

Use datex4j-model instead of datex4j-model-v3_7 when one application must handle every bundled DATEX II version. A missing version module produces an explicit error when the facade discovers the available models through ServiceLoader.

importdev.juherr.datex4j.model.v3_7.situation.SituationPublication;
importdev.juherr.datex4j.xml.DatexMarshaller;
importdev.juherr.datex4j.xml.DatexXml;
DatexMarshallermarshaller = DatexXml.builder().validating(true).build();
SituationPublicationpublication = newSituationPublication();
publication.setLang("en");
publication.setModelBaseVersion("3");
byte[] xml = marshaller.write(publication);
SituationPublicationrestored = marshaller.read(xml, SituationPublication.class);

The runnable XML example builds a complete publication. The documentation index links to examples for JSON, validation, domain builders, location helpers, and OCPI mapping.

Version and model selection

DATEX II familyBundled versionsJava package patternNotes
2.x2.0, 2.1, 2.2, 2.3dev.juherr.datex4j.model.v2_X.*Legacy d2LogicalModel publications
3.x3.0–3.7dev.juherr.datex4j.model.v3_X.*Default: 3.7

Each version lives in a separate datex4j-model-vX_Y artifact. The datex4j-model aggregate pulls in every version transitively. The AFIR-specific AfirEnergyInfrastructure and AfirFacilities packages are part of the 3.7 model; earlier versions expose only the modules defined by their own root schema.

Domain builders currently target DATEX II 3.7. The XML and validation facades can target any bundled version when the corresponding model artifact is present. Conformant JSON fixtures cover DATEX II 3.6 and 3.7.

See Models and versions for dependency choices, version selection, and the differences between DATEX II 2.x and 3.x.

Modules

AreaModulesPurpose
Modeldatex4j-model-spi, datex4j-model-vX_Y, datex4j-modelVersion-neutral SPI, generated per-version models, and the all-version aggregate
Facadesdatex4j-xml, datex4j-json, datex4j-validationXML/JSON conversion and structured XSD validation
Helpersdatex4j-builders, datex4j-locationShared publication builders and location helpers
Domainsdatex4j-domain-traffic, -srti, -parking, -evcharging, -uvarConvenience APIs for official DATEX II user domains
Integrationdatex4j-ocpiGenerated OCPI 2.3.0 model and OCPI ↔ DATEX II mapping
Dependency managementdatex4j-bomOne version for every published datex4j artifact
Verificationexamples, datex4j-integration-testsRunnable examples and real/synthetic feed tests; not published

The architecture guide documents the dependency direction, generated-code boundaries, SPI discovery, and JPMS strategy.

Documentation

Upstream standards and profiles

Build from source

The project requires Java 21 or newer. The committed Maven wrapper pins Maven, while mise provisions the JDK.

mise install
./mvnw verify

Run the documented examples with:

./mvnw -pl examples -am test
./mvnw -q -pl examples -am install -DskipTests
./mvnw -q -pl examples exec:java

Roadmap

The current roadmap focuses on richer domain builders, multi-version domain helpers, DATEX II profiles and extensions, and deeper AFIR/OCPI conformance coverage. See CHANGELOG.md for delivered and unreleased changes.

Contributing

CONTRIBUTING.md explains generated-code boundaries, model regeneration, testing, documentation ownership, and the release workflow.

License

Apache License 2.0 — see LICENSE.

DATEX II schemas are © the DATEX II programme and are redistributed for code generation and validation; see https://datex2.eu.

About

Modern Java toolkit for DATEX II (v2/v3): parsing, serialization, validation, and model APIs.

Topics

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

102 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

datex4j

A modular Java SDK for the European DATEX II standard.

datex4j reads, writes, validates, and converts DATEX II publications without exposing JAXB through its public facades. The SDK bundles generated models for DATEX II 2.0–2.3 and 3.0–3.7, provides helpers for common user domains, and has no application-framework dependency.

  • Java 21+, JPMS-compatible, and framework-free.
  • Generated DATEX II models built reproducibly from vendored official XML Schemas.
  • Small public facades for XML, JSON, and structured validation.
  • Optional domain modules for traffic, SRTI, parking, EV charging, and UVAR.
  • Apache-2.0 licensed and versioned as a multi-module SDK.

Project status: 0.1.0. The architecture and public facades are in place, while domain convenience APIs and DATEX II profile support continue to grow.

Quick start

datex4j publishes several artifacts with the same project version. Import the BOM, then add the facade and model dependencies that your application needs.

<dependencyManagement>
<dependencies>
<dependency>
<groupId>dev.juherr.datex4j</groupId>
<artifactId>datex4j-bom</artifactId>
<version>0.1.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>dev.juherr.datex4j</groupId>
<artifactId>datex4j-xml</artifactId>
</dependency>
<dependency>
<groupId>dev.juherr.datex4j</groupId>
<artifactId>datex4j-model-v3_7</artifactId>
</dependency>
</dependencies>

Use datex4j-model instead of datex4j-model-v3_7 when one application must handle every bundled DATEX II version. A missing version module produces an explicit error when the facade discovers the available models through ServiceLoader.

importdev.juherr.datex4j.model.v3_7.situation.SituationPublication;
importdev.juherr.datex4j.xml.DatexMarshaller;
importdev.juherr.datex4j.xml.DatexXml;
DatexMarshallermarshaller = DatexXml.builder().validating(true).build();
SituationPublicationpublication = newSituationPublication();
publication.setLang("en");
publication.setModelBaseVersion("3");
byte[] xml = marshaller.write(publication);
SituationPublicationrestored = marshaller.read(xml, SituationPublication.class);

The runnable XML example builds a complete publication. The documentation index links to examples for JSON, validation, domain builders, location helpers, and OCPI mapping.

Version and model selection

DATEX II familyBundled versionsJava package patternNotes
2.x2.0, 2.1, 2.2, 2.3dev.juherr.datex4j.model.v2_X.*Legacy d2LogicalModel publications
3.x3.0–3.7dev.juherr.datex4j.model.v3_X.*Default: 3.7

Each version lives in a separate datex4j-model-vX_Y artifact. The datex4j-model aggregate pulls in every version transitively. The AFIR-specific AfirEnergyInfrastructure and AfirFacilities packages are part of the 3.7 model; earlier versions expose only the modules defined by their own root schema.

Domain builders currently target DATEX II 3.7. The XML and validation facades can target any bundled version when the corresponding model artifact is present. Conformant JSON fixtures cover DATEX II 3.6 and 3.7.

See Models and versions for dependency choices, version selection, and the differences between DATEX II 2.x and 3.x.

Modules

AreaModulesPurpose
Modeldatex4j-model-spi, datex4j-model-vX_Y, datex4j-modelVersion-neutral SPI, generated per-version models, and the all-version aggregate
Facadesdatex4j-xml, datex4j-json, datex4j-validationXML/JSON conversion and structured XSD validation
Helpersdatex4j-builders, datex4j-locationShared publication builders and location helpers
Domainsdatex4j-domain-traffic, -srti, -parking, -evcharging, -uvarConvenience APIs for official DATEX II user domains
Integrationdatex4j-ocpiGenerated OCPI 2.3.0 model and OCPI ↔ DATEX II mapping
Dependency managementdatex4j-bomOne version for every published datex4j artifact
Verificationexamples, datex4j-integration-testsRunnable examples and real/synthetic feed tests; not published

The architecture guide documents the dependency direction, generated-code boundaries, SPI discovery, and JPMS strategy.

Documentation

Upstream standards and profiles

Build from source

The project requires Java 21 or newer. The committed Maven wrapper pins Maven, while mise provisions the JDK.

mise install
./mvnw verify

Run the documented examples with:

./mvnw -pl examples -am test
./mvnw -q -pl examples -am install -DskipTests
./mvnw -q -pl examples exec:java

Roadmap

The current roadmap focuses on richer domain builders, multi-version domain helpers, DATEX II profiles and extensions, and deeper AFIR/OCPI conformance coverage. See CHANGELOG.md for delivered and unreleased changes.

Contributing

CONTRIBUTING.md explains generated-code boundaries, model regeneration, testing, documentation ownership, and the release workflow.

License

Apache License 2.0 — see LICENSE.

DATEX II schemas are © the DATEX II programme and are redistributed for code generation and validation; see https://datex2.eu.

About

Modern Java toolkit for DATEX II (v2/v3): parsing, serialization, validation, and model APIs.

Topics

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

102 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

datex4j

A modular Java SDK for the European DATEX II standard.

datex4j reads, writes, validates, and converts DATEX II publications without exposing JAXB through its public facades. The SDK bundles generated models for DATEX II 2.0–2.3 and 3.0–3.7, provides helpers for common user domains, and has no application-framework dependency.

  • Java 21+, JPMS-compatible, and framework-free.
  • Generated DATEX II models built reproducibly from vendored official XML Schemas.
  • Small public facades for XML, JSON, and structured validation.
  • Optional domain modules for traffic, SRTI, parking, EV charging, and UVAR.
  • Apache-2.0 licensed and versioned as a multi-module SDK.

Project status: 0.1.0. The architecture and public facades are in place, while domain convenience APIs and DATEX II profile support continue to grow.

Quick start

datex4j publishes several artifacts with the same project version. Import the BOM, then add the facade and model dependencies that your application needs.

<dependencyManagement>
<dependencies>
<dependency>
<groupId>dev.juherr.datex4j</groupId>
<artifactId>datex4j-bom</artifactId>
<version>0.1.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>dev.juherr.datex4j</groupId>
<artifactId>datex4j-xml</artifactId>
</dependency>
<dependency>
<groupId>dev.juherr.datex4j</groupId>
<artifactId>datex4j-model-v3_7</artifactId>
</dependency>
</dependencies>

Use datex4j-model instead of datex4j-model-v3_7 when one application must handle every bundled DATEX II version. A missing version module produces an explicit error when the facade discovers the available models through ServiceLoader.

importdev.juherr.datex4j.model.v3_7.situation.SituationPublication;
importdev.juherr.datex4j.xml.DatexMarshaller;
importdev.juherr.datex4j.xml.DatexXml;
DatexMarshallermarshaller = DatexXml.builder().validating(true).build();
SituationPublicationpublication = newSituationPublication();
publication.setLang("en");
publication.setModelBaseVersion("3");
byte[] xml = marshaller.write(publication);
SituationPublicationrestored = marshaller.read(xml, SituationPublication.class);

The runnable XML example builds a complete publication. The documentation index links to examples for JSON, validation, domain builders, location helpers, and OCPI mapping.

Version and model selection

DATEX II familyBundled versionsJava package patternNotes
2.x2.0, 2.1, 2.2, 2.3dev.juherr.datex4j.model.v2_X.*Legacy d2LogicalModel publications
3.x3.0–3.7dev.juherr.datex4j.model.v3_X.*Default: 3.7

Each version lives in a separate datex4j-model-vX_Y artifact. The datex4j-model aggregate pulls in every version transitively. The AFIR-specific AfirEnergyInfrastructure and AfirFacilities packages are part of the 3.7 model; earlier versions expose only the modules defined by their own root schema.

Domain builders currently target DATEX II 3.7. The XML and validation facades can target any bundled version when the corresponding model artifact is present. Conformant JSON fixtures cover DATEX II 3.6 and 3.7.

See Models and versions for dependency choices, version selection, and the differences between DATEX II 2.x and 3.x.

Modules

AreaModulesPurpose
Modeldatex4j-model-spi, datex4j-model-vX_Y, datex4j-modelVersion-neutral SPI, generated per-version models, and the all-version aggregate
Facadesdatex4j-xml, datex4j-json, datex4j-validationXML/JSON conversion and structured XSD validation
Helpersdatex4j-builders, datex4j-locationShared publication builders and location helpers
Domainsdatex4j-domain-traffic, -srti, -parking, -evcharging, -uvarConvenience APIs for official DATEX II user domains
Integrationdatex4j-ocpiGenerated OCPI 2.3.0 model and OCPI ↔ DATEX II mapping
Dependency managementdatex4j-bomOne version for every published datex4j artifact
Verificationexamples, datex4j-integration-testsRunnable examples and real/synthetic feed tests; not published

The architecture guide documents the dependency direction, generated-code boundaries, SPI discovery, and JPMS strategy.

Documentation

Upstream standards and profiles

Build from source

The project requires Java 21 or newer. The committed Maven wrapper pins Maven, while mise provisions the JDK.

mise install
./mvnw verify

Run the documented examples with:

./mvnw -pl examples -am test
./mvnw -q -pl examples -am install -DskipTests
./mvnw -q -pl examples exec:java

Roadmap

The current roadmap focuses on richer domain builders, multi-version domain helpers, DATEX II profiles and extensions, and deeper AFIR/OCPI conformance coverage. See CHANGELOG.md for delivered and unreleased changes.

Contributing

CONTRIBUTING.md explains generated-code boundaries, model regeneration, testing, documentation ownership, and the release workflow.

License

Apache License 2.0 — see LICENSE.

DATEX II schemas are © the DATEX II programme and are redistributed for code generation and validation; see https://datex2.eu.

About

Modern Java toolkit for DATEX II (v2/v3): parsing, serialization, validation, and model APIs.

Topics

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

102 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

datex4j

A modular Java SDK for the European DATEX II standard.

datex4j reads, writes, validates, and converts DATEX II publications without exposing JAXB through its public facades. The SDK bundles generated models for DATEX II 2.0–2.3 and 3.0–3.7, provides helpers for common user domains, and has no application-framework dependency.

  • Java 21+, JPMS-compatible, and framework-free.
  • Generated DATEX II models built reproducibly from vendored official XML Schemas.
  • Small public facades for XML, JSON, and structured validation.
  • Optional domain modules for traffic, SRTI, parking, EV charging, and UVAR.
  • Apache-2.0 licensed and versioned as a multi-module SDK.

Project status: 0.1.0. The architecture and public facades are in place, while domain convenience APIs and DATEX II profile support continue to grow.

Quick start

datex4j publishes several artifacts with the same project version. Import the BOM, then add the facade and model dependencies that your application needs.

<dependencyManagement>
<dependencies>
<dependency>
<groupId>dev.juherr.datex4j</groupId>
<artifactId>datex4j-bom</artifactId>
<version>0.1.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>dev.juherr.datex4j</groupId>
<artifactId>datex4j-xml</artifactId>
</dependency>
<dependency>
<groupId>dev.juherr.datex4j</groupId>
<artifactId>datex4j-model-v3_7</artifactId>
</dependency>
</dependencies>

Use datex4j-model instead of datex4j-model-v3_7 when one application must handle every bundled DATEX II version. A missing version module produces an explicit error when the facade discovers the available models through ServiceLoader.

importdev.juherr.datex4j.model.v3_7.situation.SituationPublication;
importdev.juherr.datex4j.xml.DatexMarshaller;
importdev.juherr.datex4j.xml.DatexXml;
DatexMarshallermarshaller = DatexXml.builder().validating(true).build();
SituationPublicationpublication = newSituationPublication();
publication.setLang("en");
publication.setModelBaseVersion("3");
byte[] xml = marshaller.write(publication);
SituationPublicationrestored = marshaller.read(xml, SituationPublication.class);

The runnable XML example builds a complete publication. The documentation index links to examples for JSON, validation, domain builders, location helpers, and OCPI mapping.

Version and model selection

DATEX II familyBundled versionsJava package patternNotes
2.x2.0, 2.1, 2.2, 2.3dev.juherr.datex4j.model.v2_X.*Legacy d2LogicalModel publications
3.x3.0–3.7dev.juherr.datex4j.model.v3_X.*Default: 3.7

Each version lives in a separate datex4j-model-vX_Y artifact. The datex4j-model aggregate pulls in every version transitively. The AFIR-specific AfirEnergyInfrastructure and AfirFacilities packages are part of the 3.7 model; earlier versions expose only the modules defined by their own root schema.

Domain builders currently target DATEX II 3.7. The XML and validation facades can target any bundled version when the corresponding model artifact is present. Conformant JSON fixtures cover DATEX II 3.6 and 3.7.

See Models and versions for dependency choices, version selection, and the differences between DATEX II 2.x and 3.x.

Modules

AreaModulesPurpose
Modeldatex4j-model-spi, datex4j-model-vX_Y, datex4j-modelVersion-neutral SPI, generated per-version models, and the all-version aggregate
Facadesdatex4j-xml, datex4j-json, datex4j-validationXML/JSON conversion and structured XSD validation
Helpersdatex4j-builders, datex4j-locationShared publication builders and location helpers
Domainsdatex4j-domain-traffic, -srti, -parking, -evcharging, -uvarConvenience APIs for official DATEX II user domains
Integrationdatex4j-ocpiGenerated OCPI 2.3.0 model and OCPI ↔ DATEX II mapping
Dependency managementdatex4j-bomOne version for every published datex4j artifact
Verificationexamples, datex4j-integration-testsRunnable examples and real/synthetic feed tests; not published

The architecture guide documents the dependency direction, generated-code boundaries, SPI discovery, and JPMS strategy.

Documentation

Upstream standards and profiles

Build from source

The project requires Java 21 or newer. The committed Maven wrapper pins Maven, while mise provisions the JDK.

mise install
./mvnw verify

Run the documented examples with:

./mvnw -pl examples -am test
./mvnw -q -pl examples -am install -DskipTests
./mvnw -q -pl examples exec:java

Roadmap

The current roadmap focuses on richer domain builders, multi-version domain helpers, DATEX II profiles and extensions, and deeper AFIR/OCPI conformance coverage. See CHANGELOG.md for delivered and unreleased changes.

Contributing

CONTRIBUTING.md explains generated-code boundaries, model regeneration, testing, documentation ownership, and the release workflow.

License

Apache License 2.0 — see LICENSE.

DATEX II schemas are © the DATEX II programme and are redistributed for code generation and validation; see https://datex2.eu.

About

Modern Java toolkit for DATEX II (v2/v3): parsing, serialization, validation, and model APIs.

Topics

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

102 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

datex4j

A modular Java SDK for the European DATEX II standard.

datex4j reads, writes, validates, and converts DATEX II publications without exposing JAXB through its public facades. The SDK bundles generated models for DATEX II 2.0–2.3 and 3.0–3.7, provides helpers for common user domains, and has no application-framework dependency.

  • Java 21+, JPMS-compatible, and framework-free.
  • Generated DATEX II models built reproducibly from vendored official XML Schemas.
  • Small public facades for XML, JSON, and structured validation.
  • Optional domain modules for traffic, SRTI, parking, EV charging, and UVAR.
  • Apache-2.0 licensed and versioned as a multi-module SDK.

Project status: 0.1.0. The architecture and public facades are in place, while domain convenience APIs and DATEX II profile support continue to grow.

Quick start

datex4j publishes several artifacts with the same project version. Import the BOM, then add the facade and model dependencies that your application needs.

<dependencyManagement>
<dependencies>
<dependency>
<groupId>dev.juherr.datex4j</groupId>
<artifactId>datex4j-bom</artifactId>
<version>0.1.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>dev.juherr.datex4j</groupId>
<artifactId>datex4j-xml</artifactId>
</dependency>
<dependency>
<groupId>dev.juherr.datex4j</groupId>
<artifactId>datex4j-model-v3_7</artifactId>
</dependency>
</dependencies>

Use datex4j-model instead of datex4j-model-v3_7 when one application must handle every bundled DATEX II version. A missing version module produces an explicit error when the facade discovers the available models through ServiceLoader.

importdev.juherr.datex4j.model.v3_7.situation.SituationPublication;
importdev.juherr.datex4j.xml.DatexMarshaller;
importdev.juherr.datex4j.xml.DatexXml;
DatexMarshallermarshaller = DatexXml.builder().validating(true).build();
SituationPublicationpublication = newSituationPublication();
publication.setLang("en");
publication.setModelBaseVersion("3");
byte[] xml = marshaller.write(publication);
SituationPublicationrestored = marshaller.read(xml, SituationPublication.class);

The runnable XML example builds a complete publication. The documentation index links to examples for JSON, validation, domain builders, location helpers, and OCPI mapping.

Version and model selection

DATEX II familyBundled versionsJava package patternNotes
2.x2.0, 2.1, 2.2, 2.3dev.juherr.datex4j.model.v2_X.*Legacy d2LogicalModel publications
3.x3.0–3.7dev.juherr.datex4j.model.v3_X.*Default: 3.7

Each version lives in a separate datex4j-model-vX_Y artifact. The datex4j-model aggregate pulls in every version transitively. The AFIR-specific AfirEnergyInfrastructure and AfirFacilities packages are part of the 3.7 model; earlier versions expose only the modules defined by their own root schema.

Domain builders currently target DATEX II 3.7. The XML and validation facades can target any bundled version when the corresponding model artifact is present. Conformant JSON fixtures cover DATEX II 3.6 and 3.7.

See Models and versions for dependency choices, version selection, and the differences between DATEX II 2.x and 3.x.

Modules

AreaModulesPurpose
Modeldatex4j-model-spi, datex4j-model-vX_Y, datex4j-modelVersion-neutral SPI, generated per-version models, and the all-version aggregate
Facadesdatex4j-xml, datex4j-json, datex4j-validationXML/JSON conversion and structured XSD validation
Helpersdatex4j-builders, datex4j-locationShared publication builders and location helpers
Domainsdatex4j-domain-traffic, -srti, -parking, -evcharging, -uvarConvenience APIs for official DATEX II user domains
Integrationdatex4j-ocpiGenerated OCPI 2.3.0 model and OCPI ↔ DATEX II mapping
Dependency managementdatex4j-bomOne version for every published datex4j artifact
Verificationexamples, datex4j-integration-testsRunnable examples and real/synthetic feed tests; not published

The architecture guide documents the dependency direction, generated-code boundaries, SPI discovery, and JPMS strategy.

Documentation

Upstream standards and profiles

Build from source

The project requires Java 21 or newer. The committed Maven wrapper pins Maven, while mise provisions the JDK.

mise install
./mvnw verify

Run the documented examples with:

./mvnw -pl examples -am test
./mvnw -q -pl examples -am install -DskipTests
./mvnw -q -pl examples exec:java

Roadmap

The current roadmap focuses on richer domain builders, multi-version domain helpers, DATEX II profiles and extensions, and deeper AFIR/OCPI conformance coverage. See CHANGELOG.md for delivered and unreleased changes.

Contributing

CONTRIBUTING.md explains generated-code boundaries, model regeneration, testing, documentation ownership, and the release workflow.

License

Apache License 2.0 — see LICENSE.

DATEX II schemas are © the DATEX II programme and are redistributed for code generation and validation; see https://datex2.eu.

About

Modern Java toolkit for DATEX II (v2/v3): parsing, serialization, validation, and model APIs.

Topics

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages