Вы просматриваете документацию по Apigee Edge.
Перейдите к документации по Apigee X. Информация
ResourceDoesNotExist
Сообщение об ошибке
Развертывание прокси-сервера 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, перейдите на вкладку Resources (Ресурсы) на панели навигации редактора прокси-сервера 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, перейдите на вкладку Resources (Ресурсы) в панели Navigator (Навигатор) редактора прокси-сервера 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
Пример скриншота с ошибкой

Причина
Ниже перечислены распространенные причины, по которым возникает эта ошибка.
| Cause | Описание |
| Отсутствует 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 не поврежден, перейдите к разделу Причина: отсутствует файл класса.
Разрешение
- Восстановите поврежденные JAR-файлы и загрузите их на нужном уровне (прокси-сервер API, организации или среды).
- Повторно разверните прокси-сервер API.
Причина: отсутствует файл класса
диагностика;
- Проверьте, входит ли определенный файл класса Java (указанный на шаге 1 выше) в JAR-файл, заданный в >ResourceURL<, или в любой из зависимых JAR-файлов.
- Если файла класса нет ни в одном из JAR-файлов, вы определили причину ошибки. Перейдите к разделу "Разрешение".
- Если файл класса существует в одном из JAR-файлов, указанных в правиле JavaCallout, то проблема связана с кодом Java или зависимым классом. а. Если вы используете общедоступное облако, обратитесь в службу поддержки Apigee. б. Если вы используете частное облако, перейдите к разделу Причина: проблема с кодом Java.
Разрешение
- Пересоберите JAR-файл с отсутствующими файлами классов и загрузите JAR-файл на нужном уровне (прокси-сервер API, организации или среды).
- Повторно разверните прокси API.
Причина: проблема с кодом Java
Диагностические шаги только для пользователей частного облака
диагностика;
- Проверьте журналы Message Processor (
/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, нажмите + (знак плюса) на вкладке Resources (Ресурсы), выберите Import file (Импортировать файл) и загрузите файл с локального компьютера. Название файла должно совпадать с элементом >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"