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

查看 Apigee Edge 說明文件。
前往 Apigee X說明文件
資訊

如果您是第一次試用 Java 呼叫,建議先從如何建立 Java 呼叫 摘要

本教戰手冊範例說明如何建立簡單的 JavaCALL 政策來執行 而是在 Proxy 流程環境中進行自訂 Java 程式碼。

程式碼範例的用途

這個範例中的 API Proxy 會呼叫傳回簡易 JSON 回應的目標服務。 您需要在目標回應流程中設置 Java 呼叫政策。Java 程式碼會將標頭和 回覆內容。這是一個簡單的範例然而,這個範例說明 ,讓自訂 Java 程式碼在 Edge 上的 API Proxy 環境中運作。

試用範例

下載專案

為簡化相關作業,您可以從 Apigee api-platform-samples 存放區下載此專案: GitHub。

  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 目錄)。已提供所需的 JAR 檔案 位於 java-cookbook/lib 目錄。

  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 目錄。這是必要的位置 。

    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。我們負責 不過,如果您要自訂工作,就必須自行建構內容,並複製到 或 HTTP/HTTPS 位置如需編譯及部署 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>