使用 Java 呼叫將回應轉換為大寫

您正在查看 Apigee Edge 說明文件。
查看 Apigee X 說明文件
資訊

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

這個教戰手冊範例示範如何建立簡單的 Java callout 政策,以便在 Proxy 流程環境內執行自訂 Java 程式碼。

程式碼範例的用途?

這個範例中的 API Proxy 會呼叫傳回簡單 JSON 回應的目標服務。Java 呼叫政策會置於目標回應流程中。Java 程式碼會將回應的標頭和內容轉換為大寫字母。這只是一個簡單的範例,但會說明如何在 Edge 的 API Proxy 環境中取得自訂 Java 程式碼。

試用範例

下載專案

為簡化流程,您可以從 GitHub 的 Apigee api-platform-samples 存放區下載這項專案。

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

使用 Maven 編譯程式碼

專案設定完畢,方便您使用 Maven 進行編譯。如要使用 javac,我們也會加入範例,並附上 Maven 範例。

  1. 確認已安裝 Maven:
    mvn -version
    
  2. 執行 java-cookbook/buildsetup.sh 指令碼。這個指令碼會在本機 Maven 存放區中安裝必要的 JAR 依附元件。
  3. cd 寫入 java-cookbool/callout 目錄。
  4. 執行 Maven:
    mvn clean package
    
  5. 如要確認 JAR 檔案 edge-custom-policy-java-cookbook.jar 是否已複製到 java-cookbook/apiproxy/resources/java,這是您要透過 Proxy 部署的 JAR 檔案必要位置。

使用 Javac 編譯

如果您想使用 javac 編譯程式碼,可以執行類似下方的操作 (從 java-cookbook 目錄)。java-cookbook/lib 目錄中會為您提供所需的 JAR 檔案。

  1. cd 重新命名為 api-platform-samples/doc-samples/java-cookbook
  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/ResponseUppercase.java
    
  4. 將 JAR 檔案複製到 apiproxy/resources/java 目錄。這是您要透過 Proxy 部署的 JAR 檔案必要位置。

    cp com/apigeesample/ResponseUppercase.class apiproxy/resources/java
    

部署及呼叫 Proxy

./java-cookbook 目錄中會提供部署指令碼。但在執行前,您必須先快速設定。

  1. CD 至 api-platform-samples/doc-samples/java-cookbook
  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-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 呼叫政策會執行下列 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 呼叫政策。請留意它如何參照呼叫執行的類別和 JAR 檔案。所有 Java 呼叫政策都遵循這個模式。另請參閱 Java 呼叫政策

<JavaCallout name="responseUppercase">         
    <ClassName>com.apigeesample.ResponseUppercase</ClassName>         
    <ResourceURL>java://ResponseUppercase.jar</ResourceURL> 
</JavaCallout>