Ga naar inhoud
getnextpdf.com

Compliance-fouten

Deze vermeldingen behandelen de twee uitzonderingen in de namespace NextPDF\Compliance\Exception. Beide worden opgeworpen door het compliance-subsysteem: de canonieke clause-hash-pipeline en de compliance-levenscyclus (de Document Compliance Evidence-cache, de audited-to-terminal-promoter, en de cooldown-observer).

Beide klassen zijn final en breiden NextPdfException uit, die zelf \RuntimeException uitbreidt en ContextAwareExceptionInterface implementeert. Geen van beide subklassen overschrijft getContext(), dus beide erven de basisimplementatie, die een lege array teruggeeft. Het diagnostische detail wordt meegedragen in het uitzonderings- bericht, niet in getContext(). Vang beide types op als NextPdfException, of als \RuntimeException als je bestaande handlers hebt.

  • Wanneer hij wordt opgeworpen. Vanuit ClauseHash::compute() wanneer de host-PHP-runtime een harde vereiste van de canonieke clause-hash-pipeline mist. Momenteel is de enige zulke vereiste ext-intl, gebruikt voor Unicode Normalization Form KC (NFKC)-normalisatie. De enkele throw-site werpt het bericht ClauseHash requires ext-intl for NFKC normalisation op.
  • Waarom hij fail-closed gaat. composer.json vereist ext-intl, dus dit vuurt alleen af in een verkeerd geconfigureerde downstream die NextPDF zonder intl pakketteert. De pipeline weigert een niet-NFKC-genormaliseerde digest te berekenen in plaats van stilletjes een hash uit te voeren die incompatibel is met elke andere clause-hash-consumer.
  • Context. getContext() geeft een lege array terug. De oorzaak wordt vermeld in het bericht.
  • Herstel. Operator-actie: installeer en schakel de PHP-intl-extensie in op de host, en probeer dan opnieuw. Er is geen in-code-workaround; de genormaliseerde digest kan niet zonder worden geproduceerd.
  • Wanneer hij wordt opgeworpen. Vanuit het compliance-levenscyclussubsysteem wanneer een structurele invariant op claims.json of zijn persistentie-pipeline tijdens runtime wordt overtreden. Throw-sites omspannen de audited-to-terminal-promoter, de cooldown- observer, en de Document Compliance Evidence incremental cache. De concrete triggers zijn:
    • Misvormd root-documentclaims.json decodeert niet naar een object, of claims.standards is geen JSON-object (bijvoorbeeld, claims.json must decode to an object, claims.standards must be a JSON object, claims.json invalid JSON: <detail>).
    • Leesstoringenclaims.json ontbreekt of is onleesbaar (bijvoorbeeld, claims.json not found at: <path>, claims.json unreadable at <path>).
    • Atomic-write-I/O-storingen in de persistentie-pipeline — temp open, flock, short write, fflush, atomic rename, en sidecar write (bijvoorbeeld, tmp open failed at <path>, tmp flock failed at <path>, tmp write short for <path>, tmp fflush failed at <path>, atomic rename failed for <path>, sha256 sidecar write failed at <path>).
    • Encoder-zijde-storingenjson_encode() wijst de uitgaande payload af (bijvoorbeeld, claims.json encode failed: <detail>).
    • Evidence-cache-bootstrap-storingen — de incremental cache kan zijn root-directory niet aanmaken of beschrijven (bijvoorbeeld, IncrementalEvidenceCache: cannot create rootDir <path>, IncrementalEvidenceCache: write failed for <path>, IncrementalEvidenceCache: rename failed for <path>).
    • Interne invariant-overtredingen — bijvoorbeeld een gmdate produced empty timestamp of fqClauseId: empty clauseKey.
  • Waarom hij bestaat. Dit is een domein-getypeerde vervanging voor het eerdere gebruik van \RuntimeException in de levenscyclus- en cache-code. Het verandert het runtime-contract niet, omdat NextPdfException \RuntimeException al uitbreidt; bestaande catch (\RuntimeException $e)-clausules blijven werken.
  • Context. getContext() geeft een lege array terug. Het overtredende pad en de specifieke storing worden genoemd in het bericht; JSON-decode- en encode-storingen ketenen ook de onderliggende \JsonException als de vorige uitzondering, dus lees getPrevious() voor die.
  • Herstel.
    • Voor vorm- en leesfouten is dit een operator-actie: inspecteer claims.json op het pad dat in het bericht wordt genoemd, bevestig dat het welgevormde JSON is waarvan de root en het standards-lid objecten zijn, en bevestig dat het aanwezig en leesbaar is.
    • Voor atomic-write- en cache-bootstrap-fouten, controleer het bestaan, de machtigingen en de vrije ruimte van de doeldirectory, en probeer dan opnieuw.
    • Voor encoder-zijde-storingen is dit een ontwikkelaars-actie: de payload die aan json_encode() wordt overhandigd is niet encodeerbaar. Leg de geketende vorige uitzondering en het bericht vast voor een defect-rapport.