查看 Apigee Edge 說明文件。
前往
Apigee X說明文件。 資訊
什麼是 Java 呼叫?
如果您是 Java 呼叫新手,建議先參閱「如何建立 Java 的 摘要。
處理 Java 呼叫中的錯誤
編寫 Java 呼叫時,建議您在 Java 程式碼中執行自訂錯誤處理。適用對象 例如,您想要傳回自訂錯誤訊息和標頭,及/或使用 錯誤資訊
讓我們透過一個簡單的 Java 呼叫範例,說明基本的自訂錯誤處理方式 例如模式範例會在發生例外狀況時傳回自訂錯誤訊息。且會在 做為流程變數中的錯誤堆疊追蹤,這是一項便利的偵錯技巧。
下載專案
為簡化相關作業,您可以從 Apigee api-platform-samples 存放區下載此專案: GitHub。
- 下載 api-platform-samples 或複製到您的系統。
- 使用慣用的終端機或程式碼編輯器前往
api-platform-samples/doc-samples/java-error
項專案。
Java 程式碼範例
錯誤處理模式相當簡單明瞭。您可以在目前的
使用 messageContext.setVariable()
方法的邊緣流程情境。恢復為自訂狀態
請建構 ExecutionResult
例項,並對其呼叫方法,
設定錯誤回應和標頭。
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 com.apigee.flow.execution.Action; import org.apache.commons.lang.exception.ExceptionUtils; public class JavaError implements Execution { public ExecutionResult execute(MessageContext messageContext, ExecutionContext executionContext) { try { String name = messageContext.getMessage().getHeader("username"); if (name != null && name.length()>0) { messageContext.getMessage().setContent("Hello, " + name + "!"); messageContext.getMessage().removeHeader("username"); } else { throw new RuntimeException("Please specify a name parameter!"); } return ExecutionResult.SUCCESS; } catch (RuntimeException ex) { ExecutionResult executionResult = new ExecutionResult(false, Action.ABORT); //--Returns custom error message and header executionResult.setErrorResponse(ex.getMessage()); executionResult.addErrorResponseHeader("ExceptionClass", ex.getClass().getName()); //--Set flow variables -- may be useful for debugging. messageContext.setVariable("JAVA_ERROR", ex.getMessage()); messageContext.setVariable("JAVA_STACKTRACE", ExceptionUtils.getStackTrace(ex)); return executionResult; } } }
使用 Maven 編譯程式碼
專案已設定完成,方便您使用 Maven 編譯。如要使用
javac
,我們也會加入範例。
- 確認您已安裝 Maven:
mvn -version
- 執行
java-error/buildsetup.sh
指令碼。這個指令碼會將 本機 Maven 存放區中的 JAR 依附元件。 - cd 到
java-error/callout
目錄。 - 執行 Maven:
mvn clean package
- 您可以驗證 JAR 檔案
edge-custom-policy-java-error.jar
是否 已複製到java-error/apiproxy/resources/java
。此為必要位置 您想要透過 Proxy 部署的 JAR 檔案。
使用 javac 編譯
如果想使用 javac
編譯程式碼,可以執行類似於
下方的內容 (從 java-error
目錄)。所需 JAR 檔案
位於 java-error/lib
目錄中。
- cd 至
api-platform-samples/doc-samples/java-error
。 - 確認路徑中包含 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 檔案複製到 apiproxy/resources/java 目錄。這是必要的位置
。
cp com/apigeesample/JavaProperties.class apiproxy/resources/java
部署並呼叫 Proxy
部署指令碼會在 ./java-error
目錄中提供。但在執行之前
快速設定
- cd 至
api-platform-samples/doc-samples/java-error
- 如果您尚未編輯,請開啟
../../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-error
因為呼叫中並未包含「name」查詢參數,Java 程式碼會擲回執行階段 錯誤。Proxy 會傳回下列訊息和標頭:
- 錯誤訊息:
Please specify a name parameter!
- 標題:
ExceptionClass: java.lang.RuntimeException