Java コールアウトのプロパティの使用方法

Java Callout とは

Java Callout を初めて使用する場合は、Java Callout の作成方法から始めることをおすすめします。

Java Callout でのプロパティの使用

プロパティを使用すると、ランタイムに Java コードからアクセスできる Java Callout ポリシーに name / value ペアを指定できます。各プロパティにリテラル文字列値を指定する必要があります。この要素ではフロー変数を参照できません。

プロパティを使用する簡単な Java Callout について考えてみましょう。この例では、Java Callout ポリシーを含むプロキシを作成します。このポリシーでは、<Properties> 要素を使用して name / value ペアを指定します。Java コードで値を取得し、レスポンス ヘッダーに設定します。

プロジェクトをダウンロードする

手順を簡易化するために、GitHub にある Apigee の api-platform-samples リポジトリから次のプロジェクトをダウンロードできます。

  1. api-platform-samples をシステムにダウンロードするか、クローンを作成します。
  2. 選択したデバイスまたはコードエディタで、api-platform-samples/doc-samples/java-properties プロジェクトに移動します。

Java Callout ポリシー

このポリシーでは、<Properties> 要素を使用します。この要素を使用して name / value ペアを指定します。ランタイムに、Java コードがポリシーで指定された値にアクセスします。

    <JavaCallout name="java-callout">
        <ClassName>com.apigeesample.JavaProperties</ClassName>
        <ResourceURL>java://edge-custom-policy-java-properties.jar</ResourceURL>
        <Properties>
            <Property name="prop">WORLD!</Property>
        </Properties>
    </JavaCallout>
    

サンプル Java コード

このサンプルの Java コードは、Java Callout ポリシーで指定されたプロパティを取得します。このサンプル プロジェクトのソースコードは java-properties/callout/src/main/java/JavaProperties.java にあります。以下では、次のコードをコンパイルしてデプロイする方法を説明します。

    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 java.util.Map;

    public class JavaProperties implements Execution {

    	private Map <String,String> properties; // read-only

    	public JavaProperties(Map <String,String> properties) {
    	        this.properties = properties;
    	}

    	public ExecutionResult execute(MessageContext messageContext, ExecutionContext executionContext) {

    		try {

    		    messageContext.getMessage().setHeader("X-PROPERTY-HELLO", this.properties.get("prop"));

                return ExecutionResult.SUCCESS;

    		} catch (Exception e) {
    			return ExecutionResult.ABORT;
    		}
    	}
    }
    

Maven でコードをコンパイルする

Maven でコンパイルできるようにプロジェクトが設定されています。javac を使用する場合のサンプルも後で紹介します。

  1. Maven がインストールされていることを確認してください。
        mvn -version
        
  2. java-properties/buildsetup.sh スクリプトを実行します。このスクリプトにより、必要な JAR 依存関係がローカルの Maven リポジトリにインストールされます。
  3. cd で java-properties/callout ディレクトリに移動します。
  4. Maven を実行します。
        mvn clean package
        
  5. 必要であれば、JAR ファイル edge-custom-policy-java-properties.jarjava-properties/apiproxy/resources/java にコピーされていることを確認します。これは、プロキシでデプロイする JAR ファイルに必要な場所です。

javac でのコンパイル(任意)

javac でコードをコンパイルする場合は、java-properties ディレクトリから次の操作を行います。必要な JAR ファイルは、java-properties/lib ディレクトリに用意されています。

  1. cd で api-platform-samples/doc-samples/java-properties に移動します。
  2. javac がパスに含まれていることを確認します。

        javac -version
        
  3. 次の javac コマンドを実行します。

        javac -d . -classpath ./lib/expressions-1.0.0.jar:./lib/message-flow-1.0.0.jar:. callout/src/main/java/JavaProperties.java
        
  4. JAR ファイルを作成します。

    jar -cvf edge-custom-policy-java-properties.jar ./com/apigeesample/JavaProperties.class
  5. apiproxy/resources/java ディレクトリに JAR ファイルをコピーします。これは、プロキシでデプロイする JAR ファイル用に必要な場所です。
        cp edge-custom-policy-java-properties.jar apiproxy/resources/java
        

プロキシをデプロイして呼び出す

deploy スクリプトは ./java-properties ディレクトリにあります。ただし、スクリプトを実行する前に、クイック設定を行う必要があります。

  1. cd で api-platform-samples/doc-samples/java-properties に移動します。
  2. ../../setup/setenv.sh をまだ編集していない場合はこのファイルを開いて、ユーザー名(アカウントに関連付けられたメールアドレス)、組織名、API 管理呼び出しを行うために使用するドメインを、Apigee アカウント情報に従って編集します。たとえば、Edge クラウドの場合、ドメインは https://api.enterprise.apigee.com です。ただし、Edge Private Cloud を使用している場合は、ドメインが異なる場合があります。
  3. setenv.sh ファイルを保存します。
  4. deploy スクリプトを実行します。
        ./deploy.sh
        
  5. デプロイが成功したら、invoke スクリプトを実行します。
        ./invoke.sh
        

    invoke スクリプトによって、次のような cURL コマンドが呼び出されます。

        curl  http://$org-$env.$api_domain/java-properties
        

    プロキシが X-PROPERTY-HELLO: WORLD! というヘッダーを返します。ポリシーで、プロパティに name / value ペア "prop/WORLD!" を追加しています。Java Callout が値 "WORLD!" を取得し、X-PROPERTY-HELLO というヘッダーに設定します。

        messageContext.getMessage().setHeader("X-PROPERTY-HELLO", this.properties.get("prop"));