Вы просматриваете документацию Apigee Edge .
Перейдите к документации Apigee X. информация
Если вы впервые пробуете выноску Java, мы рекомендуем начать с раздела «Как создать выноску Java» .
В этом образце кулинарной книги показано, как создать простую политику JavaCallout , которая выполняет пользовательский код Java в контексте потока прокси.
Что делает пример кода?
Прокси-сервер API в этом примере вызывает целевую службу, которая возвращает простой ответ JSON. Политика Java Callout размещается в целевом потоке ответов. Код Java преобразует заголовки и содержимое ответа в прописные буквы. Это простой пример; однако он иллюстрирует, как заставить пользовательский код Java работать в контексте прокси-сервера API в Edge.
Попробуйте образец
Скачать проект
Для простоты вы можете скачать этот проект из репозитория Apigee api-platform-samples на GitHub.
- Загрузите или клонируйте образцы API-платформы в свою систему.
- В терминале или редакторе кода по вашему выбору перейдите к проекту
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
. Но прежде чем запускать его, необходимо выполнить быструю настройку.
- перейдите
api-platform-samples/doc-samples/java-cookbook
- Если вы еще этого не сделали, откройте файл
../../setup/setenv.sh
и отредактируйте его, как указано, указав информацию вашей учетной записи Apigee: ваше имя пользователя (адрес электронной почты, связанный с вашей учетной записью), название вашей организации, и домен, который вы используете для вызовов управления API. Например, для облака Edge домен —https://api.enterprise.apigee.com
; однако ваш домен может быть другим, если вы используете Edge Private Cloud. - Сохраните файл
setenv.sh
. - Выполните сценарий развертывания:
./deploy.sh
- Если развертывание прошло успешно, выполните сценарий вызова:
./invoke.sh
Скрипт вызова вызывает команду 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"}
Прокси-поток
Это снимок инструмента трассировки, показывающий поток прокси-сервера:
Структура прокси
Это структура прокси. Обратите внимание, что он включает файл JAR в каталоге apiproxy/resources/java
. 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 Callout. Обратите внимание, как он ссылается на класс, который выполняет выноска, и на файл JAR. Все политики Java Callout следуют этому шаблону. См. также политику Java Callout .
<JavaCallout name="responseUppercase"> <ClassName>com.apigeesample.ResponseUppercase</ClassName> <ResourceURL>java://ResponseUppercase.jar</ResourceURL> </JavaCallout>