您目前查看的是 Apigee Edge 說明文件。
前往 Apigee X 說明文件。 info
如果您是第一次嘗試 Java 呼叫,建議先參閱「如何建立 Java 呼叫」。
這個食譜範例示範如何建立簡易的 JavaCallout 政策,在 Proxy 流程的環境中執行自訂 Java 程式碼。
程式碼範例會執行哪些作業?
本範例中的 API Proxy 會呼叫目標服務,並傳回簡單的 JSON 回應。Java Callout 政策會放在目標回應流程中。Java 程式碼會將回應的標頭和內容轉換為大寫字母。這是一個簡單的範例,但說明如何在 Edge 的 API Proxy 環境中,讓自訂 Java 程式碼正常運作。
試用範例
下載專案
為簡化作業,您可以從 GitHub 上的 Apigee api-platform-samples 存放區下載這個專案。
- 將 api-platform-samples 下載或複製到您的系統。
- 在所選的終端機或程式碼編輯器中,前往
api-platform-samples/doc-samples/java-cookbook專案。
使用 Maven 編譯程式碼
專案已設定完成,因此您可以使用 Maven 進行編譯。如果您想使用 javac,我們也會在 Maven 範例後提供範例。
- 請確認已安裝 Maven:
mvn -version
- 執行指令碼
java-cookbook/buildsetup.sh。這段指令碼會在您的本機 Maven 存放區中安裝必要的 JAR 依附元件。 - cd 至
java-cookbool/callout目錄。 - 執行 Maven:
mvn clean package
- 如要確認 JAR 檔案
edge-custom-policy-java-cookbook.jar是否已複製到java-cookbook/apiproxy/resources/java,這是要透過 Proxy 部署的 JAR 檔案必要位置。
使用 javac 編譯
如要使用 javac 編譯程式碼,可以執行類似下列的動作 (從 java-cookbook 目錄)。系統會在 java-cookbook/lib 目錄中提供必要的 JAR 檔案。
- cd 到
api-platform-samples/doc-samples/java-cookbook。 - 請確認路徑中含有 javac。
javac -version
- 執行下列 javac 指令:
javac -d . -classpath ./lib/expressions-1.0.0.jar:./lib/message-flow-1.0.0.jar:. callout/src/main/java/ResponseUppercase.java
- 將 JAR 檔案複製到 apiproxy/resources/java 目錄。這是要透過 Proxy 部署的 JAR 檔案必要位置。
cp com/apigeesample/ResponseUppercase.class apiproxy/resources/java
部署及呼叫 Proxy
./java-cookbook 目錄中提供部署指令碼。但執行前,您需要快速設定。
- cd 至
api-platform-samples/doc-samples/java-cookbook - 如果尚未開啟檔案
../../setup/setenv.sh並編輯,請按照指示使用 Apigee 帳戶資訊編輯檔案:使用者名稱 (與帳戶相關聯的電子郵件地址)、機構名稱,以及用於發出 API 管理呼叫的網域。舉例來說,Edge Cloud 的網域是https://api.enterprise.apigee.com,但如果您使用 Edge Private Cloud,網域可能會有所不同。 - 儲存
setenv.sh檔案。 - 執行部署指令碼:
./deploy.sh
- 如果部署成功,請執行叫用指令碼:
./invoke.sh
叫用指令碼會呼叫類似下列的 cURL 指令:
curl http://$org-$env.$api_domain/java-cookbook/json
回覆內容應如下所示:
< HTTP/1.1 200 OK < Date: Tue, 09 May 2017 20:31:08 GMT < Content-Type: APPLICATION/JSON; CHARSET=UTF-8 < Content-Length: 68 < Connection: keep-alive < Access-Control-Allow-Origin: * < ETag: W/"44-RA5ERT/MMLIK54NVBWBSZG" < X-Powered-By: APIGEE < Server: Apigee Router < * Curl_http_done: called premature == 0 * Connection #0 to host willwitman-test.apigee.net left intact {"FIRSTNAME":"JOHN","LASTNAME":"DOE","CITY":"SAN JOSE","STATE":"CA"}
Proxy 流程
這是追蹤工具的畫面,顯示 Proxy 的流程:

Proxy 結構
這是 Proxy 的結構。請注意,其中包含 apiproxy/resources/java 目錄中的 JAR 檔案。必須提供 JAR。我們會在範例中提供這項檔案,但如果您要進行自訂作業,就必須自行建構檔案,並複製到這個位置。如需編譯及部署 Java 呼叫的指南,請參閱「如何建立 Java 呼叫」。
java-cookbook apiproxy java-cookbook.xml policies responseUppercase.xml proxies default.xml resources java ResponseUppercase.jar targets default.xml
關於 Java 程式碼
Java Callout 政策會執行下列 Java 程式碼,將回應標頭和回應主體轉換為大寫。請注意,這個程式會使用 Apigee 專屬套件。這些套件提供物件和方法,可直接與 Proxy 流程互動。您可以使用這些方法取得及設定流程變數、標頭、郵件內容等。
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.Set; public class ResponseUppercase implements Execution{ public ExecutionResult execute(MessageContext messageContext, ExecutionContext executionContext) { try { Set headers = messageContext.getMessage().getHeaderNames(); for (String header : headers) { String h = messageContext.getMessage().getHeader(header).toUpperCase(); messageContext.getMessage().setHeader(header, h); } String content = messageContext.getMessage().getContent(); messageContext.getMessage().setContent(content.toUpperCase()); return ExecutionResult.SUCCESS; } catch (Exception e) { return ExecutionResult.ABORT; } } }
檢查範例 Proxy
請自行開啟 Proxy 並檢查檔案。以下是 Java Callout 政策。 請注意,這個檔案如何參照回呼執行的類別和 JAR 檔案。所有 Java Callout 政策都遵循這個模式。另請參閱 Java Callout 政策。
<JavaCallout name="responseUppercase"> <ClassName>com.apigeesample.ResponseUppercase</ClassName> <ResourceURL>java://ResponseUppercase.jar</ResourceURL> </JavaCallout>