本頁適用於 Apigee 和 Apigee Hybrid。
查看
Apigee Edge 說明文件。
什麼是 Java 呼叫?
如果您是 Java 呼叫的新手,建議您先參閱「如何建立 Java 呼叫」一文。
處理 Java 呼叫中的錯誤
編寫 Java 呼叫時,您可能會想在 Java 程式碼中進行自訂錯誤處理。舉例來說,您可能會想在 Apigee 的 Proxy 流程中傳回自訂錯誤訊息和標頭,以及/或者設定流程變數,以便顯示錯誤資訊。
讓我們逐步操作一個簡單的 Java 呼叫範例,說明基本自訂錯誤處理模式。當例外狀況發生時,這個範例會傳回自訂錯誤訊息。它也會將錯誤堆疊追蹤放入流程變數,這可做為方便的偵錯技巧。
下載專案
為簡化操作,您可以從 GitHub 上的 Apigee api-platform-samples 存放區下載這個專案。
- 將 api-platform-samples 下載或複製到系統。
- 在您選擇的終端機或程式碼編輯器中,前往
api-platform-samples/doc-samples/java-error
專案。
Java 程式碼範例
錯誤處理模式相當簡單。您可以使用 messageContext.setVariable()
方法,在目前的 Apigee 流程結構定義中設定流程變數。如要傳回自訂錯誤資訊,請建構 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 檔案的必要位置。
部署及呼叫 Proxy
./java-error
目錄中提供部署指令碼。不過,您必須先快速設定,才能執行。
- cd 至
api-platform-samples/doc-samples/java-error
- 部署 Proxy 最簡單的方法,就是將 Proxy 封裝在 ZIP 檔案中,然後將 Proxy 套件上傳至 Apigee 機構中的環境。請參閱「建立 API Proxy」。請務必使用「Upload Proxy Bundle」選項。另請參閱 Apigee 社群的 有關在 Proxy 套件中上傳 API Proxy 的訣竅。
- 在代理程式部署後,請嘗試呼叫:
curl https://$HOSTNAME/java-error
由於呼叫不含「name」查詢參數,因此 Java 程式碼會擲回執行階段錯誤。Proxy 會傳回以下訊息和標頭:
- 錯誤訊息:
Please specify a name parameter!
- 標題:
ExceptionClass: java.lang.RuntimeException