Вы просматриваете документацию по Apigee Edge.
Перейдите к документации по Apigee X. Информация
Что такое вызов Java?
Если вы только начинаете работать с выносками Java, рекомендуем сначала ознакомиться со статьей Как создать выноску Java.
Обработка ошибок в Java Callout
При написании вызова Java вы можете реализовать в коде Java собственную обработку ошибок. Например, вы можете возвращать специальные сообщения об ошибках и заголовки и/или задавать переменные потока с информацией об ошибках в потоке прокси на платформе Edge.
Рассмотрим простой пример вызова Java, который иллюстрирует основные шаблоны обработки ошибок. При возникновении исключения образец возвращает специальное сообщение об ошибке. Кроме того, он помещает трассировку стека ошибок в переменную потока, что может быть полезно при отладке.
Как скачать проект
Чтобы упростить задачу, вы можете скачать этот проект из репозитория api-platform-samples на GitHub.
- Скачайте или клонируйте api-platform-samples в свою систему.
- В терминале или редакторе кода перейдите в проект
api-platform-samples/doc-samples/java-error.
Пример кода на Java
Шаблоны обработки ошибок простые. Вы можете задать переменные потока в текущем контексте потока Edge с помощью метода 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. Этот скрипт устанавливает необходимые зависимости JAR в локальном репозитории Maven. - Перейдите в каталог
java-error/callout. - Выполнить Maven:
mvn clean package
- При необходимости убедитесь, что JAR-файл
edge-custom-policy-java-error.jarбыл скопирован в папкуjava-error/apiproxy/resources/java. Это обязательное местоположение для JAR-файлов, которые вы хотите развернуть с помощью прокси-сервера.
Компиляция с помощью javac
Если вы хотите использовать javac для компиляции кода, вы можете сделать что-то похожее на следующее (из каталога java-error). Необходимые JAR-файлы находятся в каталоге java-error/lib.
- Перейдите в каталог
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. Это обязательное местоположение для JAR-файлов, которые вы хотите развернуть с помощью прокси-сервера.
cp com/apigeesample/JavaProperties.class apiproxy/resources/java
Как развернуть и вызвать прокси-сервер
Скрипт развертывания находится в каталоге ./java-error. Но перед этим нужно выполнить быструю настройку.
- cd
api-platform-samples/doc-samples/java-error - Если вы ещё этого не сделали, откройте файл
../../setup/setenv.shи измените его, указав информацию о своем аккаунте Apigee: имя пользователя (адрес электронной почты, связанный с аккаунтом), название организации и домен, который вы используете для вызовов API управления. Например, для облака Edge домен будет выглядеть так:https://api.enterprise.apigee.com. Однако если вы используете частное облако Edge, домен может быть другим. - Сохраните файл
setenv.sh. - Выполните скрипт развертывания:
./deploy.sh
- Если развертывание прошло успешно, выполните скрипт вызова:
./invoke.sh
Скрипт invoke вызывает команду cURL, которая выглядит следующим образом:
curl http://$org-$env.$api_domain/java-error
Поскольку вызов не содержит параметр запроса "name", код Java выдает ошибку времени выполнения. Прокси-сервер возвращает следующее сообщение и заголовок:
- Сообщение об ошибке:
Please specify a name parameter! - Заголовок:
ExceptionClass: java.lang.RuntimeException