Java Callout とは
Java Callout を初めて使用する場合は、Java Callout の作成方法から始めることをおすすめします。
Java コールアウトのエラー処理
Java コールアウトを作成すると、Java コードでカスタムエラー処理を行うことができます。たとえば、カスタムのエラー メッセージとヘッダーを返すことができます。また、エラー情報を含むフロー変数を Edge のプロキシフローに設定することもできます。
基本的なカスタムエラー処理のパターンを示す単純な Java コールアウトの例を見てみましょう。このサンプルは、例外が発生すると、カスタムのエラー メッセージを返します。また、手軽なデバッグの方法として、エラー スタックトレースをフロー変数に格納します。
プロジェクトをダウンロードする
このプロジェクトは、GitHub の Apigee api-platform-samples リポジトリからダウンロードできます。
- システムに api-platform-samples をダウンロードするか、クローンを作成します。
- ターミナルまたは任意のコードエディタで
api-platform-samples/doc-samples/java-error
プロジェクトに移動します。
サンプル Java コード
このエラー処理パターンは単純明快です。現在の Edge フロー コンテキストで messageContext.setVariable()
メソッドを使用してフロー変数を設定できます。カスタムエラー情報を返すには、ExecutionResult
インスタンスを作成し、そのインスタンスでメソッドを呼び出してエラーのレスポンスとヘッダーを設定します。
package com.apigeesample; import com.apigee.flow.execution.ExecutionContext; import com.apigee.flow.execution.ExecutionResult; import com.apigee.flow.execution.spi.Execution; import com.apigee.flow.message.MessageContext; import com.apigee.flow.execution.Action; import org.apache.commons.lang.exception.ExceptionUtils; public class JavaError implements Execution { public ExecutionResult execute(MessageContext messageContext, ExecutionContext executionContext) { try { String name = messageContext.getMessage().getHeader("username"); if (name != null && name.length()>0) { messageContext.getMessage().setContent("Hello, " + name + "!"); messageContext.getMessage().removeHeader("username"); } else { throw new RuntimeException("Please specify a name parameter!"); } return ExecutionResult.SUCCESS; } catch (RuntimeException ex) { ExecutionResult executionResult = new ExecutionResult(false, Action.ABORT); //--Returns custom error message and header executionResult.setErrorResponse(ex.getMessage()); executionResult.addErrorResponseHeader("ExceptionClass", ex.getClass().getName()); //--Set flow variables -- may be useful for debugging. messageContext.setVariable("JAVA_ERROR", ex.getMessage()); messageContext.setVariable("JAVA_STACKTRACE", ExceptionUtils.getStackTrace(ex)); return executionResult; } } }
Maven でコードをコンパイルする
このプロジェクトは Maven でコンパイルできるように設定されています。javac
を使用する場合は、この後の例をご覧ください。
- Maven がインストールされていることを確認します。
mvn -version
java-error/buildsetup.sh
スクリプトを実行します。このスクリプトにより、必要な JAR 依存関係がローカルの Maven リポジトリにインストールされます。- cd で
java-error/callout
ディレクトリに移動します。 - Maven を実行します。
mvn clean package
- 必要であれば、JAR ファイル
edge-custom-policy-java-error.jar
がjava-error/apiproxy/resources/java
にコピーされていることも確認してください。これは、プロキシでデプロイする JAR ファイルに必要な場所です。
javac でコンパイルする
javac
でコードをコンパイルする場合は、java-error
ディレクトリから次の操作を行います。必要な JAR ファイルは、java-error/lib
ディレクトリに用意されています。
- cd で
api-platform-samples/doc-samples/java-error
に移動します。 - javac がパスに含まれていることを確認します。
javac -version
- 次の javac コマンドを実行します。
javac -d . -classpath ./lib/expressions-1.0.0.jar:./lib/message-flow-1.0.0.jar:. callout/src/main/java/JavaProperties.java
- JAR ファイルを apiproxy/resources/java ディレクトリにコピーします。これは、プロキシでデプロイする JAR ファイル用に必要な場所です。
cp com/apigeesample/JavaProperties.class apiproxy/resources/java
プロキシをデプロイして呼び出す
デプロイ スクリプトは ./java-error
ディレクトリにあります。ただし、スクリプトを実行する前に、クイック設定を行う必要があります。
- cd で
api-platform-samples/doc-samples/java-error
に移動します。 ../../setup/setenv.sh
ファイルをまだ編集していない場合は、このファイルを開いて、Apigee アカウント情報に合わせてユーザー名(アカウントに関連付けられたメールアドレス)、組織名、API 管理呼び出しを行うために使用するドメインを編集します。たとえば、Edge Cloud の場合、ドメインはhttps://api.enterprise.apigee.com
ですが、Edge Private Cloud を使用している場合はドメインが異なる可能性があります。setenv.sh
ファイルを保存します。- deploy スクリプトを実行します。
./deploy.sh
- デプロイが成功したら、invoke スクリプトを実行します。
./invoke.sh
invoke スクリプトは、次のような cURL コマンドを呼び出します。
curl http://$org-$env.$api_domain/java-error
この呼び出しには "name" クエリ パラメータが含まれていないため、Java コードは実行時エラーをスローします。プロキシは次のメッセージとヘッダーを返します。
- エラー メッセージ:
Please specify a name parameter!
- ヘッダー:
ExceptionClass: java.lang.RuntimeException