Вы просматриваете документацию Apigee Edge .
Перейдите в документацию Apigee X.info
РесурсНеСуществует
Сообщение об ошибке
Развертывание API-прокси через пользовательский интерфейс Edge или API управления Edge завершается с ошибкой, о которой сообщается ниже:
Error Deploying Revision <var>revision_number</var> to <var>environment</var>
Resource with name <var>ResourceURL</var> and type java does not exist.
Пример сообщения об ошибке
Error Deploying Revision 1 to test
Resource with name myresource.jar and type java does not exist.
Пример скриншота ошибки

Причина
Если ресурс, указанный в элементе <ResourceURL> в политике JavaCallout, не существует на уровне API-прокси, среды или организации, то развертывание API-прокси завершится неудачей.
Диагноз
Укажите имя среды и ресурса. Эту информацию можно найти в сообщении об ошибке. Например, в следующем сообщении об ошибке среда —
test, а имя ресурса, используемое в элементеResourceURL>—myresource.jar.Error Deploying Revision 1 to test Resource with name myresource.jar and type java does not exist.Определите политику JavaCallout , которая использует ресурс, указанный на шаге №1 выше.
Например, следующая политика указывает значение
ResourceURL>какmyresource.jar, что совпадает со значением в сообщении об ошибке:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <JavaCallout name="hello-java"> <ClassName>com.apigeesample.HelloJava</ClassName> <ResourceURL>java://myresource.jar</ResourceURL> </JavaCallout>Определите, является ли ресурс частью API-прокси, вызывающего ошибку, или загружен на уровне среды или организации. Если нет, то это и есть причина ошибки.
Перейдите на вкладку «Ресурсы» в панели «Навигатор» редактора API-прокси, чтобы просмотреть все ресурсы, загруженные на уровне API-прокси. В этом примере API-прокси не имеет загруженных ресурсов.

Ресурсы могут быть доступны на уровне среды или организации. Для получения дополнительной информации см. раздел «Файлы ресурсов» .
Чтобы определить, существует ли ресурс на уровне среды, выполните следующий вызов API с помощью curl:
curl -v -u <strong>email </strong>"https://api.enterprise.apigee.com/v1/organizations/myorg/environments/myenv/resourcefiles/java/myresource.jar"Чтобы определить, существует ли ресурс на уровне организации, выполните следующий вызов API с помощью curl, опустив сведения об окружении:
curl -v -u email "https://api.enterprise.apigee.com/v1/organizations/myorg/resourcefiles/java/myresource.jar"
Если в ответ на запросы к этим API вы получаете код состояния 404, это означает, что ресурс отсутствует как на уровне организации, так и на уровне среды.
Если ресурс недоступен на уровне API-прокси, организации или среды, возвращается ошибка развертывания:
Resource with name myresource.jar and type java does not exist. ```
Разрешение
Убедитесь, что ресурс, указанный в элементе <ResourceURL> , существует на уровне API-прокси, среды или организации. Для получения дополнительной информации см. раздел «Файлы ресурсов» .
Для исправления приведенной выше политики JavaCallout загрузите JAR-файл на соответствующем уровне (API-прокси, уровень организации или уровень среды).
NoResourceForURL
Сообщение об ошибке
Развертывание API-прокси через пользовательский интерфейс Edge или API управления Edge завершается с ошибкой, о которой сообщается ниже:
Error in deployment for environment <var>environment</var>
The revision is deployed, but traffic cannot flow. Could not locate a resource with URL <var>ResourceURL</var>
Пример сообщения об ошибке
Error in deployment for environment test
The revision is deployed, but traffic cannot flow. Could not locate a resource with URL java://myresource.jar
Пример скриншота ошибки

Причина
Эта ошибка может возникнуть, если файл ресурсов поврежден или загружен частично, даже если на уровне API-прокси, среды или организации он, казалось бы, существует.
Диагноз
Укажите имя среды и имя ресурса. Эту информацию можно найти в сообщении об ошибке. Например, в следующем сообщении об ошибке имя среды —
test, а имя ресурса, используемое в элементеResourceURL>—myresource.jar.Error in deployment for environment test The revision is deployed, but traffic cannot flow. Could not locate a resource with URL java://myresource.jarУбедитесь, что ресурс загружен на уровне API-прокси, среды или организации. В приведенном ниже примере видно, что ресурс
myresource.jarзагружен на уровне API-прокси.
Ресурсы могут быть доступны на уровне среды или организации. Для получения дополнительной информации см. раздел «Файлы ресурсов» .
Чтобы определить, существует ли ресурс на уровне среды, выполните следующий вызов API с помощью curl:
curl -v -u <strong>email </strong>"https://api.enterprise.apigee.com/v1/organizations/myorg/environments/myenv/resourcefiles/java/myresource.jar"Чтобы определить, существует ли ресурс на уровне организации, выполните следующий вызов API с помощью curl, опустив сведения об окружении:
curl -v -u email "https://api.enterprise.apigee.com/v1/organizations/myorg/resourcefiles/java/myresource.jar"Если в ответ на запросы к этим API вы получаете код состояния 404, это означает, что ресурс отсутствует как на уровне организации, так и на уровне среды.
Разрешение
- Если вы определите, что ресурс существует на уровне API-прокси, организации или среды, удалите ресурс и загрузите его заново, как описано в шаге 2. В противном случае перейдите к шагу 3.
Чтобы удалить ресурс на уровне API-прокси, перейдите на вкладку «Ресурсы» в панели «Навигатор» редактора API-прокси и нажмите кнопку «X» рядом с ресурсом, как показано ниже.

Для удаления ресурса на уровне среды или организации используйте команду DELETE в вызовах API, которые использовались ранее на этапах диагностики. Например, чтобы удалить ресурс на уровне среды, введите следующую команду:
curl -X DELETE -v -u <strong>email </strong>"https://api.enterprise.apigee.com/v1/organizations/myorg/environments/myenv/resourcefiles/java/myresource.jar"Загрузите JAR-файл на соответствующем уровне (API-прокси, уровень организации или уровень среды).
Если повторная загрузка ресурса не помогает, необходимо перезапустить затронутые обработчики сообщений. Если вы используете Apigee Edge в облаке, обратитесь в службу поддержки Apigee . Если вы используете частное облако, см. раздел «Запуск, остановка, перезапуск и проверка состояния Apigee Edge» .
JavaCalloutInstantiationFailed
Сообщение об ошибке
Развертывание API-прокси через пользовательский интерфейс Edge или API управления Edge завершается с ошибкой, о которой сообщается ниже:
Error in deployment for environment <var>environment</var>
The revision is deployed, but traffic cannot flow. Failed to instantiate the JavaCallout Class <var>class_name</var>
Или
Error in deployment for environment <var>environment</var>.
The revision is deployed and traffic can flow, but flow may be impaired. Failed to instantiate the JavaCallout Class <var>class_name</var>
Пример сообщения об ошибке
Error in deployment for environment test
The revision is deployed, but traffic cannot flow. Failed to instantiate the JavaCallout Class my.class
Пример скриншота ошибки

Причина
Вот типичные причины этой ошибки.
| Причина | Описание |
| Отсутствует JAR-файл | JAR-файл, содержащий Java-класс, указанный в сообщении об ошибке, не загружен. |
| Поврежденный JAR-файл | JAR-файл, содержащий Java-класс, указанный в сообщении об ошибке, поврежден/загружен частично. |
| Отсутствует файл класса. | Файл Java-класса, указанный в сообщении об ошибке, не является частью JAR-файла, указанного в >ResourceURL<, или зависимых JAR-файлов. |
| Проблема с Java-кодом | В коде обнаружена ошибка, например, отсутствует конструктор, возникла проблема с зависимостями или другая проблема. |
Общий этап диагностики
Определите имя среды и класса, импорт которого не удалось выполнить. Например, в следующем сообщении об ошибке имя среды —
test, а имя класса —my.class:Error in deployment for environment test The revision is deployed, but traffic cannot flow. Failed to instantiate the JavaCallout Class my.classПричина: Отсутствует JAR-файл
Диагноз
- Определите JAR-файл, который должен содержать класс (указанный на шаге №1 выше), но который не удалось создать.
- Проверьте, загружен ли конкретный JAR-файл на уровне API-прокси, организации или среды. Если JAR-файл не загружен ни на одном из уровней, перейдите в раздел «Решение».
- Если JAR-файл загружен, перейдите по ссылке «Причина: Поврежденный JAR-файл» .
Разрешение
- Если JAR-файл поврежден или загружен частично, пересоберите JAR-файл и загрузите его на соответствующем уровне (API-прокси, уровень организации или уровень среды).
- Переразверните API-прокси.
Причина: Поврежденный JAR-файл
Диагноз
- Определите JAR-файл, который должен содержать класс (указанный на шаге №1 выше), но который не удалось создать.
- Проверьте, не поврежден ли конкретный JAR-файл. Например, если вы не можете распаковать файл из-за его повреждения или неполной загрузки, перейдите в раздел «Решение проблемы».
- Если JAR-файл не поврежден, перейдите к разделу «Причина: Отсутствует файл класса» .
Разрешение
- Восстановите поврежденные JAR-файлы и загрузите их на соответствующем уровне (API-прокси, уровень организации или уровень среды).
- Переразверните API-прокси.
Причина: Отсутствует файл класса.
Диагноз
- Проверьте, является ли конкретный файл класса Java (определенный на шаге №1 выше) частью JAR-файла, указанного в >ResourceURL<, или любого из зависимых JAR-файлов.
- Если файл класса отсутствует в любом из JAR-файлов, вы определили причину ошибки. Перейдите к разделу «Решение».
- Если файл класса находится в одном из JAR-файлов, указанных в политике JavaCallout, то, вероятно, проблема связана с Java-кодом или зависимым классом, что приводит к этой ошибке. a. Если вы используете публичное облако, обратитесь в службу поддержки Apigee . b. Если вы используете частное облако, перейдите к разделу «Причина: проблема с Java-кодом» .
Разрешение
- Пересоберите JAR-файл, добавив недостающие файлы классов, и загрузите JAR-файл на соответствующем уровне (API-прокси, уровень организации или уровень среды).
- Повторно разверните API-прокси.
Причина: ошибка в Java-коде.
Диагностические шаги предназначены только для пользователей частного облака.
Диагноз
- Проверьте журналы обработчика сообщений (
/opt/apigee/var/log/edge-message-processor/system.logи/opt/apigee/var/log/edge-message-processor/configurations.log). Возможно, вы увидите исключение, похожее на приведенный ниже пример:
2019-07-05 05:40:13,240 org:myorg env:staging target:/organizations/myorg/apiproxies/MyAPI/revisions/5 action:add context-id: mode: Apigee-Main-53 ERROR CONFIG-CHANGE - AbstractConfigurator.add() : Add null to Step failed, reason: {} com.apigee.kernel.exceptions.spi.UncheckedException: Failed to instantiate the JavaCallout Class <class name> at com.apigee.steps.javacallout.JavaCalloutStepDefinition.newInstance(JavaCalloutStepDefinition.java:116) at com.apigee.messaging.runtime.StepDefinition.getStepDefinitionExecution(StepDefinition.java:218) …<snipped> Caused by: java.lang.reflect.InvocationTargetException: null at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at com.apigee.steps.javacallout.JavaCalloutStepDefinition.access$100(JavaCalloutStepDefinition.java:41) at com.apigee.steps.javacallout.JavaCalloutStepDefinition$CallOutWrapper.initialize(JavaCalloutStepDefinition.java:131) at com.apigee.steps.javacallout.JavaCalloutStepDefinition$CallOutWrapper.<init>(JavaCalloutStepDefinition.java:126) ... 42 common frames omitted Caused by: <Reason> ...<snipped>Внимательно изучите сообщение об исключении, чтобы понять причину сбоя. Как правило, это может указывать на проблему в вашем Java-коде.
Разрешение
- В зависимости от причины сбоя, возможно, вам придётся исправить проблему в вашем Java-коде.
- Пересоберите JAR-файл, добавив недостающие файлы классов, и загрузите JAR-файл на соответствующем уровне (API-прокси, уровень организации или уровень среды).
- Повторно разверните API-прокси.
Загрузите JAR-файл
Убедитесь, что элемент ресурса со всеми необходимыми классами существует на уровне API-прокси, среды или организации. Для получения дополнительной информации см. раздел «Файлы ресурсов» .
Чтобы загрузить ресурс на уровне API-прокси, нажмите + (знак плюс) на вкладке «Ресурсы», затем выберите «Импорт файла» и загрузите файл с локального компьютера. Имя файла должно совпадать с элементом >ResourceURL<, но без префикса
java://.
Если вы хотите, чтобы ресурс был доступен для нескольких API-прокси в одной и той же среде, загрузите ресурс в эту среду. Вам потребуется использовать Edge API, как описано в разделе «Файлы ресурсов» .
Например, для загрузки указанного файла на уровне среды выполните следующий вызов API с локального компьютера:
curl -v -u email -H "Content-Type: application/octet-stream" \ -X POST --data-binary @{classes.jar} \ "http://{mgmt_server}:{port}/v1/organizations/myorg/environments/myenv/resourcefiles?name=myresouce.jar&type=java"Выполните вызов API из той же директории, что и файл.
Чтобы сделать файл доступным для всех API-прокси во всех средах организации, вы можете опустить сведения о среде в базовом пути. Например:
curl -v -u email -H "Content-Type: application/octet-stream" \ -X POST --data-binary @{classes.jar} \ "http://{mgmt_server}:{port}/v1/organizations/myorg/resourcefiles?name=myresouce.jar&type=java"