TIM Validator Tool is a U.S. Department of Transportation (U.S. DOT) Intelligent Transportation Systems Joint Program Office (ITS JPO) project. Noblis provides systems engineering. Neaera Consulting developed this source code.
The software is a Java library and Spring Boot REST API for validating SAE J2735 Traveler Information Messages (TIMs). TIMs carry roadway and traveler information similar to road signs or dynamic message signs, including work-zone, speed, and event notices for connected and automated vehicle applications.
The purpose of this source code is to give ITS applications a reusable validator for TIM MessageFrame payloads in both JER JSON and UPER hex. Validation confirms that a message matches the generated J2735 structure, then applies a stricter Interoperability Technical Working Group (ITWG) TIM profile schema, ITIS advisory content checks, and additional TIM best-practice checks. Those practices follow Best Practices for TIM Deployment, developed by Justin Anderson. A public link will be added after that document is published. The library is the core product; the API is a thin HTTP wrapper over the same service so operators can validate messages without embedding the library.
This repository is a Maven aggregator with two modules that build together in reactor order:
timvalidator— Java library for validating TIM MessageFrames.timvalidator-api— Spring Boot REST API that depends ontimvalidator.
The library uses the native J2735 2024 ASN.1 codec. It is related to that codec
and to the packaged Civil GNIS deployment-area dataset used for packetID
checks. The public source repository is
https://github.com/neaeraconsulting/tim-validator.
Requires:
- Java 25 (or higher)
- Maven 3.9 or higher (3.9.11 is used in CI and Docker)
- Docker (optional, for the containerized API)
The Maven builds copy the native J2735 codec into each module's target/libs
directory:
| Platform | Native library |
|---|---|
| Windows | asnapplication.dll |
| Linux | libasnapplication.so |
If you run the packaged API jar from another directory, copy the matching native
file beside the jar or into a libs directory. The Spring Boot Maven plugin
passes --enable-native-access=ALL-UNNAMED, which the native codec needs on
modern Java.
From the repository root, install both modules:
mvn installOn Windows PowerShell the same command works:
mvn installBuild the API Docker image:
docker build -t timvalidator-api .Or build and start the API with Compose:
docker compose up --buildUnit tests and JaCoCo coverage checks run as part of the Maven build. From the repository root:
mvn -pl timvalidator-api -am clean testTo compile, test, and enforce coverage thresholds (80% line / 60% branch on the library):
mvn clean verifyLibrary tests inject in-memory fakes for roadway geometry. They never call the live Overpass service.
The library includes a Java JAR and depends on the FFM native library, both available from Maven Central. To consume the published JAR, add artifact the dependency:
<dependency>
<groupId>com.neaeraconsulting</groupId>
<artifactId>timvalidator</artifactId>
<version>1.0.0</version>
</dependency>and also add the following to build/plugins in the POM to copy the native libraries for Linux and Windows:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.6.1</version>
<executions>
<execution>
<id>copy-native-windows-x86_64</id>
<phase>process-resources</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>com.neaeraconsulting</groupId>
<artifactId>j2735-2024-ffm-lib</artifactId>
<version>3.0.0-beta1</version>
<classifier>windows-x86_64</classifier>
<type>dll</type>
<destFileName>asnapplication.dll</destFileName>
</artifactItem>
</artifactItems>
<outputDirectory>${project.build.directory}/libs</outputDirectory>
</configuration>
</execution>
<execution>
<id>copy-native-linux-x86_64</id>
<phase>process-resources</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>com.neaeraconsulting</groupId>
<artifactId>j2735-2024-ffm-lib</artifactId>
<version>3.0.0-beta1</version>
<classifier>linux-x86_64</classifier>
<type>so</type>
<destFileName>libasnapplication.so</destFileName>
</artifactItem>
</artifactItems>
<outputDirectory>${project.build.directory}/libs</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>import us.dot.its.jpo.timvalidator.config.ValidationOptions;
import us.dot.its.jpo.timvalidator.service.TimValidationService;
TimValidationService validator = new TimValidationService();
// Network-free: J2735 schema, ITWG schema, ITIS, and local best-practice checks.
validator.validateTimJer(jer, ValidationOptions.networkFree());To enable optional OpenStreetMap roadway-heading checks, supply an Overpass endpoint and a User-Agent that uniquely identifies your application. The library has no default endpoint or User-Agent. See the Overpass usage guidelines before choosing an endpoint:
TimValidationService validator = TimValidationService.withOverpassRoadGeometry(
"https://overpass-api.de/api/interpreter",
"my-app/1.0 (contact@example.com)");
validator.validateTimJer(jer, ValidationOptions.withRoadwayHeading());Run from source after installing the library:
cd timvalidator-api
mvn spring-boot:runRun the packaged jar (place the native library beside the jar or in libs/):
java --enable-native-access=ALL-UNNAMED -jar target/timvalidator-api-1.0.0.jarDefault base URL:
http://localhost:8080
Main endpoints:
POST /api/v1/tim/validate/jer
Content-Type: application/jsonPOST /api/v1/tim/validate/uper
Content-Type: text/plainJER requests send the TIM MessageFrame JSON body. UPER requests send the
UPER-encoded TIM MessageFrame as a hex string. Add ?roadwayHeading=true to
opt into the optional roadway-heading check for that request.
Example:
curl -sS -X POST http://localhost:8080/api/v1/tim/validate/jer \
-H "Content-Type: application/json" \
--data-binary @tim-messageframe.jsonSee timvalidator-api/README.md for endpoint details, response payloads, and native-library packaging notes.
Further documentation:
- Documentation index — recommended reading order and document catalog.
- Validation pipeline — end-to-end pipeline diagram, module architecture, severity model, and example payloads.
- ITWG requirement coverage — implemented, partial, missing, and deprecated checks.
- Validation checks — time, GNIS
packetID, geometry, and roadway-heading behavior, including library configuration examples. - J2735 vs ITWG schema — required fields, prohibited fields, choice narrowing, and region-shape rules.
- Civil GNIS deployment areas — how the packaged GNIS extract was produced.
- API README — REST request and response details.
- Best Practices for TIM Deployment — ITWG best-practices document used for this release’s traceability. A public link will be added after publication.
Roadway heading: The library constructor is network-free. The API defaults
to the public Overpass instance and a generic User-Agent when heading checks are
enabled; review timvalidator.roadway-heading.overpass-url and
timvalidator.roadway-heading.overpass-user-agent before production use.
Requests that omit ?roadwayHeading are network-free unless
timvalidator.roadway-heading.enabled-by-default is set to true.
Associated datasets: A reduced USGS Geographic Names Information System
(GNIS) Civil feature extract is bundled in the timvalidator JAR for offline
packetID deployment-area checks. Source data is the USGS Domestic Names
national file from the
GNIS download page.
GNIS Domestic Names data is a U.S. Government work. No GNIS network request,
SQLite dependency, or GDAL installation is required at runtime.
When optional roadway-heading validation is enabled, the tool queries OpenStreetMap through the Overpass API. OpenStreetMap data is © OpenStreetMap contributors and is available under the Open Data Commons Open Database License (ODbL). Public Overpass instances are shared, rate-limited infrastructure; follow the Overpass usage guidelines and identify your application with a unique User-Agent.
Known limitations: Some ITWG deployment-policy checks are intentionally out
of scope for this library. See
ITWG requirement coverage for the full
status list. Currently Missing items include multi-frame dependency,
UTC-only time semantics, vendor/deployment priority policy, msgCnt increment
across content changes, and agency-versus-commercial frameType policy.
Status: This project is in the release phase (1.0.0).
Release Frequency: This project is updated as needed.
Release History: See CHANGELOG.md.
Retention: This project will remain publicly accessible for a minimum of five years (until at least 09/08/2031).
This project is licensed under the Apache License, Version 2.0 — see LICENSE.md for the licensing status and full license text. Copyright 2026 U.S. Department of Transportation (U.S. DOT); see NOTICE.
Community pull requests are welcome. Please read CONTRIBUTING.md for details on our Code of Conduct, the process for submitting pull requests, and how contributions will be released.
Contact Name: Spain Niemer, Systems Engineer, Noblis
Contact Information: Spain.Niemer@noblis.org
Contact Name: Kellen Shain, Systems Engineer, Noblis
Contact Information: Kellen.Shain@noblis.org
If you build additional software using this code, please acknowledge the source repository in your software's README or documentation.
Published Maven artifact:
com.neaeraconsulting:timvalidator:1.0.0
To cite this code in a publication or report:
Noblis. (2026). TIM Validator Tool (1.0.0) [Source code]. Provided by ITS CodeHub through GitHub.com. Accessed YYYY-MM-DD from https://github.com/neaeraconsulting/tim-validator.
When you copy or adapt from this code, please include the original URL you copied the source code from and date of retrieval as a comment in your code. Additional information on how to cite can be found in the ITS CodeHub FAQ.
- Spain Niemer, Systems Engineer, Noblis
- Kellen Shain, Systems Engineer, Noblis
- Software development team, Neaera Consulting: Michael English, Drew Johnston, John Wiens, Ivan Yourshaw, Rishabh Kapoor, and Darren Weibler
Best Practices for TIM Deployment was developed by Justin Anderson. A public link will be added after the document is published.
This project is sponsored by the ITS Joint Program Office, U.S. Department of Transportation. Noblis provides systems engineering. Software implementation was performed by Neaera Consulting.