Jak radzić sobie z błędami dotyczącymi kodu Java

Wyświetlasz dokumentację Apigee Edge.
Przejdź do dokumentacji Apigee X.
info

Co to jest wywołanie Java?

Jeśli nie masz doświadczenia z wywołaniami Java, zacznij od artykułu Tworzenie wywołania Java callout.

Obsługa błędów w wywołaniu Java

Podczas pisania wywołania Java możesz chcieć zaimplementować niestandardową obsługę błędów w kodzie Java. Możesz na przykład chcieć zwracać niestandardowe komunikaty o błędach i nagłówki lub ustawiać zmienne przepływu z informacjami o błędach w przepływie proxy w Edge.

Przyjrzyjmy się prostemu przykładowi wywołania Java, który ilustruje podstawowe wzorce niestandardowej obsługi błędów. Gdy wystąpi wyjątek, przykład zwraca niestandardowy komunikat o błędzie. Umieszcza też ślad stosu błędu w zmiennej przepływu, co może być przydatną techniką debugowania.

Pobieranie projektu

Aby uprościć sprawę, możesz pobrać ten projekt z repozytorium Apigee api-platform-samples w GitHub.

  1. Pobierz lub sklonuj api-platform-samples na swój komputer.
  2. W terminalu lub wybranym edytorze kodu przejdź do projektu api-platform-samples/doc-samples/java-error.

Przykładowy kod Java

Wzorce obsługi błędów są proste. Zmienne przepływu możesz ustawić w bieżącym kontekście przepływu Edge za pomocą metody messageContext.setVariable(). Aby zwrócić niestandardowe informacje o błędzie, utwórz instancję ExecutionResult i wywołaj jej metody, aby ustawić odpowiedź i nagłówki błędu.

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;
        }
    }
}


Kompilowanie kodu za pomocą Maven

Projekt jest skonfigurowany tak, aby można go było skompilować za pomocą Maven. Jeśli chcesz użyć javac, podamy też przykład.

  1. Upewnij się, że masz zainstalowany Maven:
    mvn -version
  2. Uruchom skrypt java-error/buildsetup.sh. Ten skrypt instaluje wymagane zależności JAR w lokalnym repozytorium Maven.
  3. Przejdź do katalogu java-error/callout.
  4. Uruchom Maven:
    mvn clean package
  5. Jeśli chcesz, sprawdź, czy plik JAR edge-custom-policy-java-error.jar został skopiowany do java-error/apiproxy/resources/java. Jest to wymagana lokalizacja dla plików JAR, które chcesz wdrożyć za pomocą proxy.

Kompilowanie za pomocą javac

Jeśli chcesz skompilować kod za pomocą javac, możesz zrobić coś podobnego do tego (z katalogu java-error). Wymagane pliki JAR są dostępne dla Ciebie w katalogu java-error/lib.

  1. Przejdź do api-platform-samples/doc-samples/java-error.
  2. Upewnij się, że masz javac w ścieżce.

    javac -version
  3. Uruchom to polecenie javac:

    javac -d . -classpath ./lib/expressions-1.0.0.jar:./lib/message-flow-1.0.0.jar:. callout/src/main/java/JavaProperties.java
  4. Skopiuj plik JAR do katalogu apiproxy/resources/java. Jest to wymagana lokalizacja dla plików JAR, które chcesz wdrożyć za pomocą proxy.

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

Wdrażanie i wywoływanie proxy

W katalogu ./java-error znajduje się skrypt wdrożenia. Zanim go uruchomisz, musisz przeprowadzić szybką konfigurację.

  1. Przejdź do api-platform-samples/doc-samples/java-error.
  2. Jeśli jeszcze tego nie zrobisz, otwórz plik ../../setup/setenv.sh i edytuj go zgodnie z informacjami o koncie Apigee: nazwą użytkownika (adresem e-mail powiązanym z kontem), nazwą organizacji i domeną, której używasz do wykonywania wywołań zarządzania interfejsami API. Na przykład w przypadku chmury Edge domena to https://api.enterprise.apigee.com. Jeśli jednak używasz Edge Private Cloud, domena może być inna.
  3. Zapisz plik setenv.sh.
  4. Uruchom skrypt wdrożenia:
    ./deploy.sh
  5. Jeśli wdrożenie się powiedzie, uruchom skrypt wywołania:
    ./invoke.sh

    Skrypt wywołania wywołuje polecenie cURL, które wygląda tak:

    curl  http://$org-$env.$api_domain/java-error

    Ponieważ wywołanie nie zawiera parametru zapytania „name”, kod Java zgłasza błąd wykonania. Proxy zwraca ten komunikat i nagłówek:

  • Komunikat o błędzie: Please specify a name parameter!
  • Nagłówek: ExceptionClass: java.lang.RuntimeException