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