Вы просматриваете документацию Apigee Edge .
Перейти к документации Apigee X. info
![]()
Что
Позволяет использовать Java для реализации пользовательского поведения, которое не входит в стандартные политики Apigee. В коде Java вы можете получить доступ к свойствам сообщений (заголовкам, параметрам запроса, содержимому) и переменным потока в прокси-потоке. Если вы только начинаете работать с этой политикой, см. статью «Как создать вызов Java» .
Поддерживаемые версии Java см. в разделе Поддерживаемое программное обеспечение и поддерживаемые версии .
Когда
Инструкции см. в разделе «Когда следует использовать выноску Java?» в статье «Как создать выноску Java» .
О
Политика Java Callout позволяет получать и задавать переменные потока, выполнять пользовательскую логику и обработку ошибок, извлекать данные из запросов и ответов и многое другое. Эта политика позволяет реализовать пользовательское поведение, не охватываемое другими стандартными политиками Edge.
Вы можете упаковать своё Java-приложение любыми необходимыми JAR-файлами. Обратите внимание, что существуют некоторые ограничения на действия, которые можно выполнять с помощью Java Callout. Они перечислены ниже в разделе «Ограничения» .Образцы
Простой пример
Как создать выноску JavaИзвлечение свойств из вашего кода Java
Элемент <Property> политики позволяет указать пару «имя/значение», которую можно получить во время выполнения кода Java. Рабочий пример, использующий свойства, см. в статье «Как использовать свойства в выноске Java» .
Используйте атрибут name элемента <Property>, чтобы указать имя, по которому будет осуществляться доступ к свойству из кода Java. Значение элемента <Property> (значение между открывающим и закрывающим тегами) — это значение, которое будет получено кодом Java. Значение должно быть строкой; для получения значения нельзя ссылаться на переменную потока.
- Настройте свойство. Здесь значением свойства является имя переменной
response.status.code.<JavaCallout async="false" continueOnError="false" enabled="true" name="JavaCallout"> <DisplayName>JavaCallout</DisplayName> <ClassName>com.example.mypolicy.MyJavaCallout</ClassName> <ResourceURL>java://MyJavaCallout.jar</ResourceURL> <Properties> <Property name="source">response.status.code</Property> </Properties> </Javascript>
- В коде Java реализуйте следующий конструктор в реализации класса Execution следующим образом:
public class MyJavaCallout implements Execution{ public MyJavaCallout(Map<string, string> props){ // Extract property values from map. } ... }
Установите переменные потока в вашем коде Java
Четкое описание того, как устанавливать переменные в контексте сообщения (переменные потока) в коде Java, см. в этой публикации сообщества Apigee .
Ссылка на элемент
Ссылка на элемент описывает элементы и атрибуты политики JavaCallout.
<JavaCallout name="MyJavaCalloutPolicy"> <ClassName>com.example.mypolicy.MyJavaCallout</ClassName> <ResourceURL>java://MyJavaCallout.jar</ResourceURL> </JavaCallout>
Атрибуты <JavaCallout>
<JavaCallout name="MyJavaCalloutPolicy" enabled="true" continueOnError="false" async="false" >
В следующей таблице описаны атрибуты, общие для всех родительских элементов политики:
| Атрибут | Описание | По умолчанию | Присутствие |
|---|---|---|---|
name | Внутреннее имя политики. Значение атрибута При необходимости используйте элемент | Н/Д | Необходимый |
continueOnError | Установите значение Установите значение | ЛОЖЬ | Необязательный |
enabled | Установите значение Установите значение | истинный | Необязательный |
async | Этот атрибут устарел. | ЛОЖЬ | Устарело |
Элемент <DisplayName>
Используйте в дополнение к атрибуту name , чтобы пометить политику в редакторе прокси-сервера пользовательского интерфейса управления другим именем на естественном языке.
<DisplayName>Policy Display Name</DisplayName>
| По умолчанию | Н/Д Если вы опустите этот элемент, будет использовано значение атрибута |
|---|---|
| Присутствие | Необязательный |
| Тип | Нить |
элемент <ClassName>
Указывает имя класса Java, который выполняется при запуске политики Java Callout. Класс должен быть включён в JAR-файл, указанный в параметре <ResourceURL> . См. также раздел «Как создать выноску Java» .
<JavaCallout name="MyJavaCalloutPolicy"> <ResourceURL>java://MyJavaCallout.jar</ResourceURL> <ClassName>com.example.mypolicy.MyJavaCallout</ClassName> </JavaCallout>
| По умолчанию: | Н/Д |
| Присутствие: | Необходимый |
| Тип: | Нить |
Элемент <Свойства>
Указывает свойство, к которому можно получить доступ из кода Java во время выполнения. Для каждого свойства необходимо указать строковое значение; в этом элементе нельзя ссылаться на переменные потока. Рабочий пример, использующий свойства, см. в разделе Использование свойств в выноске Java .
<Properties> <Property name="propName">propertyValue</Property> </Properties>
| По умолчанию: | Никто |
| Присутствие: | Необязательный |
| Тип: | Нить |
Атрибуты
| Атрибут | Описание | По умолчанию | Присутствие |
|---|---|---|---|
| имя | Указывает имя свойства. | Н/Д | Необходимый. |
Элемент <ResourceURL>
Этот элемент определяет JAR-файл Java, который будет выполнен при запуске политики вызовов Java.
Этот файл можно сохранить в области действия прокси API (в папке /apiproxy/resources/java в пакете прокси API или в разделе «Скрипты» на панели «Навигатор» редактора прокси API) или в области действия организации или среды для повторного использования в нескольких прокси API, как описано в разделе «Файлы ресурсов» .
<JavaCallout name="MyJavaCalloutPolicy"> <ResourceURL>java://MyJavaCallout.jar</ResourceURL> <ClassName>com.example.mypolicy.MyJavaCallout</ClassName> </JavaCallout>
| По умолчанию: | Никто |
| Присутствие: | Необходимый |
| Тип: | Нить |
Ссылка на ошибку
В этом разделе описаны коды ошибок и сообщения об ошибках, которые возвращаются, а также переменные ошибок, которые устанавливаются Edge, когда эта политика вызывает ошибку. Эту информацию важно знать, если вы разрабатываете правила обработки ошибок. Дополнительные сведения см. в разделах Что нужно знать об ошибках политики и Обработка ошибок .
Ошибки выполнения
Эти ошибки могут возникнуть при выполнении политики.
| Код неисправности | Статус HTTP | Причина | Исправить |
|---|---|---|---|
steps.javacallout.ExecutionError | 500 | Происходит, когда код Java генерирует исключение или возвращает значение NULL во время выполнения политики JavaCallout. | build |
Ошибки развертывания
Эти ошибки могут возникнуть при развертывании прокси-сервера, содержащего политику.
| Название ошибки | Строка неисправности | Статус HTTP | Происходит, когда |
|---|---|---|---|
ResourceDoesNotExist | Resource with name [name] and type [type] does not exist | Н/Д | Файл, указанный в элементе <ResourceURL> , не существует. |
JavaCalloutInstantiationFailed | Failed to instantiate the JavaCallout Class [classname] | Н/Д | Файл класса, указанный в элементе <ClassName> отсутствует в банке. |
IncompatibleJavaVersion | Failed to load java class [classname] definition due to - [reason] | Н/Д | См. строку ошибки. См. также Поддерживаемое программное обеспечение и поддерживаемые версии . |
JavaClassNotFoundInJavaResource | Failed to find the ClassName in java resource [jar_name] - [class_name] | Н/Д | См. строку ошибки. |
JavaClassDefinitionNotFound | Failed to load java class [class_name] definition due to - [reason] | Н/Д | См. строку ошибки. |
NoAppropriateConstructor | No appropriate constructor found in JavaCallout class [class_name] | Н/Д | См. строку ошибки. |
NoResourceForURL | Could not locate a resource with URL [string] | Н/Д | См. строку ошибки. |
Переменные неисправности
Эти переменные устанавливаются, когда эта политика вызывает ошибку. Дополнительные сведения см. в разделе Что нужно знать об ошибках политики .
| Переменные | Где | Пример |
|---|---|---|
fault.name=" fault_name " | fault_name — это имя ошибки, как указано в таблице ошибок времени выполнения выше. Имя неисправности — это последняя часть кода неисправности. | fault.name Matches "ExecutionError" |
javacallout. policy_name .failed | policy_name — указанное пользователем имя политики, вызвавшей ошибку. | javacallout.JC-GetUserData.failed = true |
Пример ответа об ошибке
{ "fault":{ "faultstring":"Failed to execute JavaCallout. [policy_name]", "detail":{ "errorcode":"javacallout.ExecutionError" } } }
Пример правила неисправности
<FaultRule name="JavaCalloutFailed"> <Step> <Name>AM-JavaCalloutError</Name> </Step> <Condition>(fault.name Matches "ExecutionError") </Condition> </FaultRule>
Схемы
Компиляция и развертывание
Подробную информацию о том, как скомпилировать пользовательский код Java и развернуть его с помощью прокси-сервера, см. в разделе Создание выноски Java .
Ограничения
Ниже приведены ограничения, которые необходимо учитывать при написании Java Callouts:
- Большинство системных вызовов запрещено. Например, нельзя выполнять чтение и запись во внутреннюю файловую систему.
- Доступ к сети через сокеты. Apigee ограничивает доступ к адресам sitelocal, anylocal, loopback и linklocal.
- Вызов не может получить информацию о текущем процессе, списке процессов или использовании ЦП/памяти на компьютере. Хотя некоторые такие вызовы могут быть функциональными, они не поддерживаются и могут быть отключены в любой момент. Для обеспечения прямой совместимости следует избегать таких вызовов в коде.
- Использование библиотек Java, входящих в состав Apigee Edge, не поддерживается. Эти библиотеки предназначены только для поддержки функциональности продукта Edge, и нет гарантии, что библиотека будет доступна от версии к версии.
- Не используйте
io.apigeeилиcom.apigeeв качестве имён пакетов в Java Callouts. Эти имена зарезервированы и используются другими модулями Apigee.
Упаковка
Поместите JAR-файл в прокси-сервер API в каталоге /resources/java . Если ваш вызов Java использует дополнительные сторонние библиотеки, упакованные как независимые JAR-файлы, поместите эти JAR-файлы в каталог /resources/java , чтобы обеспечить их корректную загрузку во время выполнения.
Если вы используете интерфейс управления для создания или изменения прокси-сервера, добавьте новый ресурс и укажите дополнительный зависимый JAR-файл. Если JAR-файлов несколько, просто добавьте их как дополнительные ресурсы. Вам не нужно изменять конфигурацию политики для ссылки на дополнительные JAR-файлы. Достаточно поместить их в /resources/java .
Информацию о загрузке файлов Java JAR см. в разделе Файлы ресурсов .
Подробный пример, демонстрирующий, как упаковать и развернуть вызов Java с помощью Maven или javac, см. в разделе Создание вызова Java .
Javadoc
Документация Javadoc по написанию кода Java Callout доступна здесь на GitHub . Вам нужно будет клонировать или загрузить HTML-код в свою систему, а затем просто открыть файл index.html в браузере.
Заметки об использовании
- Политика Java Callout не содержит фактического кода. Вместо этого политика Java Callout ссылается на ресурс Java и определяет шаг в потоке API, на котором выполняется код Java. Вы можете загрузить JAR-файл Java через редактор прокси-сервера Management UI или включить его в каталог
/resources/javaв прокси-серверах API, разрабатываемых локально. - Для лёгких операций, таких как вызовы API к удалённым сервисам, мы рекомендуем использовать политику ServiceCallout. См. раздел Политика Service Callout .
- Для относительно простых взаимодействий с содержимым сообщений, таких как изменение или извлечение HTTP-заголовков, параметров или содержимого сообщений, Apigee рекомендует использовать политику JavaScript.
Похожие темы
- Соответствующие примеры смотрите в репозитории java-cookbook .