Вы просматриваете документацию по Apigee Edge.
Перейдите к документации по Apigee X. Информация
Если вы впервые используете вызов Java, рекомендуем начать с раздела Как создать вызов Java.
В этом примере из сборника рецептов показано, как создать простое правило JavaCallout, которое выполняет собственный код Java в контексте потока прокси.
Что делает образец кода?
Прокси-сервер API в этом примере вызывает целевой сервис, который возвращает простой ответ JSON. Правило Java Callout применяется к целевому потоку ответов. Код на Java преобразует заголовки и содержимое ответа в прописные буквы. Это простой пример, но он показывает, как заставить пользовательский код Java работать в контексте прокси-сервера API в Edge.
Попробовать пример
Как скачать проект
Чтобы упростить задачу, вы можете скачать этот проект из репозитория api-platform-samples на GitHub.
- Скачайте или клонируйте api-platform-samples в свою систему.
- В терминале или редакторе кода перейдите в проект
api-platform-samples/doc-samples/java-cookbook.
Как скомпилировать код с помощью Maven
Проект настроен так, что его можно скомпилировать с помощью Maven. Если вы хотите использовать javac, мы также приведем пример для него после примера для Maven.
- Убедитесь, что у вас установлен Maven:
mvn -version
- Выполните скрипт
java-cookbook/buildsetup.sh. Этот скрипт устанавливает необходимые зависимости JAR в локальном репозитории Maven. - Перейдите в каталог
java-cookbool/callout. - Выполнить Maven:
mvn clean package
- При необходимости убедитесь, что JAR-файл
edge-custom-policy-java-cookbook.jarбыл скопирован в папкуjava-cookbook/apiproxy/resources/java. Это обязательное местоположение для JAR-файлов, которые вы хотите развернуть с помощью прокси-сервера.
Компиляция с помощью javac
Если вы хотите использовать javac для компиляции кода, вы можете сделать что-то похожее на следующее (из каталога java-cookbook). Необходимые JAR-файлы находятся в каталоге java-cookbook/lib.
- Перейдите в каталог
api-platform-samples/doc-samples/java-cookbook. - Убедитесь, что в пути есть javac.
javac -version
- Выполните следующую команду javac:
javac -d . -classpath ./lib/expressions-1.0.0.jar:./lib/message-flow-1.0.0.jar:. callout/src/main/java/ResponseUppercase.java
- Скопируйте JAR-файл в каталог apiproxy/resources/java. Это обязательное местоположение для JAR-файлов, которые вы хотите развернуть с помощью прокси-сервера.
cp com/apigeesample/ResponseUppercase.class apiproxy/resources/java
Как развернуть и вызвать прокси-сервер
Скрипт развертывания находится в каталоге ./java-cookbook. Но перед этим нужно выполнить быструю настройку.
- cd
api-platform-samples/doc-samples/java-cookbook - Если вы ещё этого не сделали, откройте файл
../../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-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"}
Прокси-сервер
На снимке экрана показан инструмент трассировки с потоком прокси-сервера:

Структура прокси-сервера
Это структура прокси-сервера. Обратите внимание, что в каталоге apiproxy/resources/java есть JAR-файл. Файл JAR обязателен. Мы предоставляем его для примера, но если вы выполняете индивидуальную работу, вам нужно создать его самостоятельно и скопировать в это место. Инструкции по компиляции и развертыванию выноски Java приведены в статье Как создать выноску Java.
java-cookbook apiproxy java-cookbook.xml policies responseUppercase.xml proxies default.xml resources java ResponseUppercase.jar targets default.xml
О коде Java
Правило Java Callout выполняет следующий код Java, который преобразует заголовки ответа и текст ответа в верхний регистр. Обратите внимание, что в программе используются пакеты, предназначенные для Apigee. Эти пакеты содержат объекты и методы, которые можно использовать для прямого взаимодействия с потоком прокси. Существуют методы, позволяющие получать и задавать переменные потока, заголовки, контент сообщений и т. д.
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; } } }
Изучение примера прокси
Вы можете открыть прокси-файл и изучить его. Ниже приведены правила в отношении выносок Java. Обратите внимание, как он ссылается на класс, который выполняет выноску, и на JAR-файл. Все правила Java Callout следуют этому шаблону. Также ознакомьтесь с правилами в отношении выносок Java.
<JavaCallout name="responseUppercase"> <ClassName>com.apigeesample.ResponseUppercase</ClassName> <ResourceURL>java://ResponseUppercase.jar</ResourceURL> </JavaCallout>