コンテンツにスキップ
getnextpdf.com

準拠のエラー

これらのエントリは、NextPDF\Compliance\Exception 名前空間の 2 つの例外を扱います。どちらも準拠サブシステムによって送出されます。すなわち標準的な条項ハッシュパイプラインと、準拠ライフサイクル(Document Compliance Evidence キャッシュ、audited-to-terminal プロモーター、クールダウンオブザーバー)です。

どちらのクラスも final であり、NextPdfException を継承します。それ自体は \RuntimeException を継承して ContextAwareExceptionInterface を実装します。どちらのサブクラスも getContext() をオーバーライドしないため、両方とも基底の実装を継承し、 空の配列を返します。診断の詳細は例外メッセージに保持され、getContext() には保持されません。いずれの型も NextPdfException として捕捉するか、既存のハンドラーがある場合は \RuntimeException として捕捉してください。

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