JavaCallout ポリシー ランタイム エラーのトラブルシューティング

Apigee Edge のドキュメントを表示しています。
Apigee X のドキュメント
詳細

ExecutionError

エラーコード

steps.javacallout.ExecutionError

エラー レスポンスの本文

{
  "fault": {
    "faultstring": "Execution returned an error result",
    "detail": {
      "errorcode": "flow.execution.ExecutionReturnedFailure"
    }
  }
}

原因

このエラーは、JavaCallout ポリシーの実行中に Java コードが例外を出力する、または null を返す場合に発生します。

診断

  1. トレース セッションを開始してエラーをキャプチャし、失敗した JavaCallout ポリシーを特定します。

  2. JavaCallout ポリシーと、使用されているリソースを確認します。上の例では、次のように、JavaCallout ポリシーhello.jar という名前のリソースが使用されています。

    <JavaCallout name="hello-java">
       <ClassName>com.apigeesample.HelloJava</ClassName>
       <ResourceURL>java://hello.jar</ResourceURL>
    </JavaCallout>
    
    
  3. Java コールアウトのエラー処理の説明に沿ってソースコードを変更することで、Java 例外をキャプチャしてフロー変数に格納します。

  4. 影響を受けるリソース(JAR ファイル)をコンパイルして、更新された Java アーティファクトに置き換えます。

  5. API プロキシを新しいリビジョンとしてデプロイし、API 呼び出しを行います。

  6. 別のトレース セッションを開始します。

  7. JAVA_STACKTRACE 変数でスタック トレースを使用できることに注意してください。スタック トレースには、実際の例外と、エラーがスローされた Java ソースファイルと行番号が表示されます。

  8. この情報を使用して、Java コードの問題を修正します。

  9. この例では、JavaError.java ファイルの 25 行目の ArithmeticException(ゼロ除算)が原因で JavaCallout ポリシーが失敗しました。

解決策

  1. スローされた例外に応じて、関連する Java ソースファイルの問題を修正します。a. 上記の例では、算術エラー(ゼロ除算)が問題の原因でした。スタック トレースで示されている特定のソースファイルと行番号に移動します。

    b. ゼロによる除算は実行できないため、問題のあるコード行が含まれている else ブロック全体を削除してください。

  2. 変更済みのファイルを含めて関連する JAR ファイルを、以前に存在していた適切なレベル(API プロキシ、環境、または組織)に置き換えます。

  3. API プロキシを保存して新しいリビジョンとしてデプロイします。