如何在 Java 呼叫中使用屬性

您目前查看的是 Apigee Edge 說明文件。
前往 Apigee X 說明文件
info

什麼是 Java 呼叫?

如果您是第一次使用 Java 呼叫,建議先參閱「如何建立 Java 呼叫」。

在 Java 呼叫中使用屬性

您可以在 Java 呼叫政策中指定名稱/值組,並在執行階段透過 Java 程式碼存取這些屬性。您必須為每個屬性指定字串常值,無法在這個元素中參照流程變數。

我們來看看使用屬性的簡單 Java 呼叫範例。在本範例中,我們會建立包含 Java 呼叫政策的 Proxy。這項政策會使用 <Properties> 元素指定名稱/值組合。在 Java 程式碼中,我們會擷取值並用來設定回應標頭。

下載專案

為簡化作業,您可以從 GitHub 上的 Apigee api-platform-samples 存放區下載這個專案。

  1. api-platform-samples 下載或複製到您的系統。
  2. 在所選的終端機或程式碼編輯器中,前往 api-platform-samples/doc-samples/java-properties 專案。

Java 呼叫政策

這項政策使用 <Properties> 元素。這個元素可讓您指定名稱/值組合。在執行階段,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 呼叫政策中指定的屬性。在範例專案中,您可以在 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。這段指令碼會在您的本機 Maven 存放區中安裝必要的 JAR 依附元件。
  3. cd 至 java-properties/callout 目錄。
  4. 執行 Maven:
    mvn clean package
  5. 如要確認,請檢查 JAR 檔案 edge-custom-policy-java-properties.jar 是否已複製到 java-properties/apiproxy/resources/java。這是要透過 Proxy 部署的 JAR 檔案必要位置。

使用 javac 編譯 (選用)

如要使用 javac 編譯程式碼,可以執行類似下列的動作 (從 java-properties 目錄)。系統會在 java-properties/lib 目錄中提供必要的 JAR 檔案。

  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. 將 JAR 檔案複製到 apiproxy/resources/java 目錄。這是要透過 Proxy 部署的 JAR 檔案必要位置。
    cp edge-custom-policy-java-properties.jar apiproxy/resources/java

部署及呼叫 Proxy

./java-properties 目錄中提供部署指令碼。但執行前,請先完成快速設定。

  1. cd 至 api-platform-samples/doc-samples/java-properties
  2. 如果尚未開啟檔案 ../../setup/setenv.sh 並編輯,請按照指示使用 Apigee 帳戶資訊編輯檔案:使用者名稱 (與帳戶相關聯的電子郵件地址)、機構名稱,以及用於發出 API 管理呼叫的網域。舉例來說,Edge Cloud 的網域是 https://api.enterprise.apigee.com,但如果您使用 Edge Private Cloud,網域可能會有所不同。
  3. 儲存 setenv.sh 檔案。
  4. 執行部署指令碼:
    ./deploy.sh
  5. 如果部署成功,請執行叫用指令碼:
    ./invoke.sh

    叫用指令碼會呼叫類似下列的 cURL 指令:

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

    Proxy 會傳回標頭:X-PROPERTY-HELLO: WORLD!。請注意,在政策中,我們新增了屬性名稱/值組合 "prop/WORLD!"。Java 呼叫會擷取 "WORLD!" 值,並在名為 X-PROPERTY-HELLO 的標頭中設定該值:

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