準拠のエラー
これらのエントリは、NextPDF\Compliance\Exception
名前空間の 2 つの例外を扱います。どちらも準拠サブシステムによって送出されます。すなわち標準的な条項ハッシュパイプラインと、準拠ライフサイクル(Document Compliance
Evidence キャッシュ、audited-to-terminal プロモーター、クールダウンオブザーバー)です。
どちらのクラスも final であり、NextPdfException を継承します。それ自体は \RuntimeException を継承して ContextAwareExceptionInterface を実装します。どちらのサブクラスも getContext() をオーバーライドしないため、両方とも基底の実装を継承し、
空の配列を返します。診断の詳細は例外メッセージに保持され、getContext() には保持されません。いずれの型も
NextPdfException として捕捉するか、既存のハンドラーがある場合は \RuntimeException として捕捉してください。
条項ハッシュのランタイム要件
「条項ハッシュのランタイム要件」という見出しのセクションClauseHashRequirementException
「ClauseHashRequirementException」という見出しのセクション- 送出される条件。 ホストの PHP ランタイムが、標準的な条項ハッシュパイプラインのハード要件を欠いている場合に、
ClauseHash::compute()から送出されます。 現在、そのような要件はext-intlのみであり、Unicode Normalization Form KC(NFKC)正規化に使用されます。単一の送出箇所は、 メッセージClauseHash requires ext-intl for NFKC normalisationを送出します。 - なぜフェイルクローズするか。
composer.jsonはext-intlを必須とするため、これは intl なしで NextPDF をパッケージングする誤設定された下流でのみ発火します。 パイプラインは、他のすべての条項ハッシュ消費者と互換性のないハッシュをサイレントに出力するのではなく、NFKC 正規化されていないダイジェストの計算を拒否します。 - コンテキスト。
getContext()は空の配列を返します。原因はメッセージに記述されます。 - 復旧。 オペレーターアクション: ホストに PHP の
intl拡張モジュールをインストールして有効化してから、 再試行してください。コード内の回避策はありません。それなしには正規化されたダイジェストを生成できません。
準拠ライフサイクルの失敗
「準拠ライフサイクルの失敗」という見出しのセクションComplianceLifecycleException
「ComplianceLifecycleException」という見出しのセクション- 送出される条件。
claims.jsonまたはその永続化パイプラインに対する構造的不変条件が実行時に違反された場合に、準拠ライフサイクルサブシステムから送出されます。送出箇所は、audited-to-terminal プロモーター、クールダウンオブザーバー、そして Document Compliance Evidence の差分キャッシュにまたがります。 具体的なトリガーは次のとおりです。- 不正なルートドキュメント —
claims.jsonがオブジェクトにデコードされない、 またはclaims.standardsが JSON オブジェクトでない(例:claims.json must decode to an object、claims.standards must be a JSON object、claims.json invalid JSON: <detail>)。 - 読み取りの失敗 —
claims.jsonが欠落または読み取り不能(例:claims.json not found at: <path>、claims.json unreadable at <path>)。 - 永続化パイプラインにおけるアトミック書き込みの I/O 失敗 — temp open、
flock、short write、fflush、アトミックなrename、そしてサイドカー書き込み(例: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>)。 - エンコーダー側の失敗 —
json_encode()が送出ペイロードを拒否する (例:claims.json encode failed: <detail>)。 - エビデンスキャッシュのブートストラップの失敗 — 差分キャッシュがそのルートディレクトリを作成または書き込みできない(例:
IncrementalEvidenceCache: cannot create rootDir <path>、IncrementalEvidenceCache: write failed for <path>、IncrementalEvidenceCache: rename failed for <path>)。 - 内部不変条件の破り — 例えば
gmdate produced empty timestampやfqClauseId: empty clauseKey。
- 不正なルートドキュメント —
- なぜ存在するか。 これは、ライフサイクルおよびキャッシュのコードにおける従来の
\RuntimeExceptionの使用に対するドメイン型の置き換えです。NextPdfExceptionがすでに\RuntimeExceptionを継承しているため、ランタイムコントラクトを変更しません。既存のcatch (\RuntimeException $e)句は引き続き機能します。 - コンテキスト。
getContext()は空の配列を返します。問題のパスと具体的な失敗はメッセージに記載されます。JSON のデコードおよびエンコードの失敗は、 基盤となる\JsonExceptionも previous の例外としてチェーンするため、それらについてはgetPrevious()を読み取ってください。 - 復旧。
- shape および読み取りのエラーについては、これはオペレーターアクションです。メッセージに記載されたパスの
claims.jsonを検査し、それがルートとstandardsメンバーがオブジェクトである整形式の JSON であることを確認し、 そして存在し読み取り可能であることを確認してください。 - アトミック書き込みおよびキャッシュのブートストラップのエラーについては、対象ディレクトリの存在、権限、空き容量を確認してから、再試行してください。
- エンコーダー側の失敗については、これは開発者アクションです。
json_encode()に渡されたペイロードがエンコード不能です。不具合レポートのために、チェーンされた previous の例外とメッセージを捕捉してください。
- shape および読み取りのエラーについては、これはオペレーターアクションです。メッセージに記載されたパスの