{"id":39107705,"url":"https://github.com/ideacrew/atp_validator","last_synced_at":"2026-01-17T19:34:16.470Z","repository":{"id":99225084,"uuid":"369607386","full_name":"ideacrew/atp_validator","owner":"ideacrew","description":"Validates ATP payloads against CMS business rules.","archived":false,"fork":false,"pushed_at":"2024-08-22T14:17:24.000Z","size":37590,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":15,"default_branch":"trunk","last_synced_at":"2024-08-22T16:07:46.668Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"XSLT","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ideacrew.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-05-21T17:24:27.000Z","updated_at":"2024-08-22T14:17:29.000Z","dependencies_parsed_at":null,"dependency_job_id":"839cea00-69eb-48a3-8a00-d9b3564fc3f3","html_url":"https://github.com/ideacrew/atp_validator","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ideacrew/atp_validator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ideacrew%2Fatp_validator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ideacrew%2Fatp_validator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ideacrew%2Fatp_validator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ideacrew%2Fatp_validator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ideacrew","download_url":"https://codeload.github.com/ideacrew/atp_validator/tar.gz/refs/heads/trunk","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ideacrew%2Fatp_validator/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28517172,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-17T18:55:29.170Z","status":"ssl_error","status_checked_at":"2026-01-17T18:55:03.375Z","response_time":85,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-01-17T19:34:15.803Z","updated_at":"2026-01-17T19:34:16.462Z","avatar_url":"https://github.com/ideacrew.png","language":"XSLT","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ATPValidator\n\nExecutes XML business rules to validate ATP payloads for OpenHBX.\n\n## Building\n\nThis project is built for deployment into a stand-alone jar.  This compiles all the JRuby resources into a single jar that can be run by itself.\n```\nant dist\n```\n\n## Running\n\nThis application runs in two modes:\n1. packet port mode: the application stays alive indefinitely receiving and sending messages using the port protocol, with packet size of 4.  This is the default.\n2. oneshot mode: the application reads the XML file from standard in and prints the results on standard out, then exits.  Run with `--oneshot` to activate this mode.  Example: `cat example.xml | java -jar atp_validator-0.2.0-jar-with-dependencies.jar --oneshot`\n\n## Port Protocol\n\nThe port protocol is a simple, language-agnostic interoperability method that comes from Erlang.\n\nBasically how it works is processes talk to each other by sending messages over standard in and standard out to each other.\n\nInvoking a port works like this:\n1. Encode the size of the message you are going to send to the application as a big-endian four-byte integer.\n2. Send that four-byte specifier to the STDIN of the child process, followed by the message itself.\n3. Wait to read back in, from the STDOUT of the child process, four bytes.  These bytes are a big-endian value specifying the value of the response message.\n4. Read the specified number of bytes back in from the STDOUT of the child process - this is your response message.\n\n## Research\n\nPrior to choosing to undertake this task in java, we considered multiple ruby libraries and frameworks.\n\nThe primary drivers are:\n1. The schematron file (schematron/AccountTransfer-runtime.sch) is encoded in a XSLT 2.0 specific syntax, and requires support of that standard to work.\n2. Limited support of XSLT 2.0\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fideacrew%2Fatp_validator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fideacrew%2Fatp_validator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fideacrew%2Fatp_validator/lists"}