本頁適用於 Apigee 和 Apigee Hybrid。
查看
Apigee Edge 說明文件。
什麼是 Java 呼叫?
如果您是 JavaCallouts 新手,建議您先參閱「如何建立 Java 呼叫」一文。
在 JavaCallout 政策中使用屬性
您可以在 JavaCallout 政策中指定屬性,以便在執行階段透過 Java 程式碼存取。您必須為每個屬性指定文字常值,且不得在這個元素中參照流程變數。
讓我們來看看一個使用屬性的簡單 JavaCallout 政策範例。在本例中,我們會建立包含 JavaCallout 政策的 Proxy。這項政策使用 <Properties>
元素指定名稱/值組合。在 Java 程式碼中,我們會擷取值,並使用該值設定回應標頭。
下載專案
為簡化操作,您可以從 GitHub 上的 Apigee api-platform-samples 存放區下載這個專案。
- 將 api-platform-samples 下載或複製到系統。
- 在您選擇的終端機或程式碼編輯器中,前往
api-platform-samples/doc-samples/java-properties
專案。
JavaCallout 政策
這項政策會使用 <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 程式碼說明如何擷取 JavaCallout 政策中指定的屬性。在範例專案中,您可以在 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
,我們也會提供範例。
- 請確認您已安裝 Maven:
mvn -version
- 執行指令碼
java-properties/buildsetup.sh
。這個指令碼會在本機 Maven 存放區中安裝必要的 JAR 依附元件。 - 使用 cd 指令切換至
java-properties/callout
目錄。 - 執行 Maven:
mvn clean package
- 如有需要,請確認 JAR 檔案
edge-custom-policy-java-properties.jar
已複製到java-properties/apiproxy/resources/java
。這是您要透過 Proxy 部署的 JAR 檔案的必要位置。
使用 javac 編譯 (選用)
如果您想使用 javac
編譯程式碼,可以執行類似以下的操作 (從 java-properties
目錄)。系統會在 java-properties/lib
目錄中提供必要的 JAR 檔案。
- cd 至
api-platform-samples/doc-samples/java-properties
。 - 請確認路徑中含有 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 檔案:
jar -cvf edge-custom-policy-java-properties.jar ./com/apigeesample/JavaProperties.class
- 將 JAR 檔案複製到 apiproxy/resources/java 目錄。這是您要透過 Proxy 部署的 JAR 檔案的必要位置。
cp edge-custom-policy-java-properties.jar apiproxy/resources/java
部署及呼叫 Proxy
./java-properties
目錄中提供部署指令碼。不過,您必須先快速設定,才能執行。
- cd 至
api-platform-samples/doc-samples/java-properties
- 部署 Proxy 最簡單的方法,就是將 Proxy 封裝在 ZIP 檔案中,然後將 Proxy 套件上傳至 Apigee 機構中的環境。請參閱「建立 API Proxy」。請務必使用「Upload Proxy Bundle」選項。另請參閱 Apigee 社群的 有關在 Proxy 套件中上傳 API Proxy 的訣竅。
- 在代理程式部署後,請嘗試呼叫:
curl https://$HOSTNAME/java-properties
Proxy 會傳回標頭:
X-PROPERTY-HELLO: WORLD!
。請注意,我們在政策中新增了屬性名稱/值組合"prop/WORLD!"
。JavaCallout 政策會擷取"WORLD!"
值,並將其設在名為X-PROPERTY-HELLO
的標頭中:messageContext.getMessage().setHeader("X-PROPERTY-HELLO", this.properties.get("prop"));