您正在查看 Apigee 和 Apigee Hybrid 文档。
查看 Apigee Edge 文档。
ResourceDoesNotExist
错误消息
通过 Apigee 界面或 API 部署 API 代理失败并显示以下错误消息:
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.
错误屏幕截图示例
原因
如果在 JavaCallout 政策的 <ResourceURL>
元素中指定的资源在 API 代理或环境级别不存在,则 API 代理的部署将失败。
诊断
标识环境和资源名称。您可以在错误消息中找到此信息。例如,在以下错误中,环境为
test
,ResourceURL>
元素中使用的资源名称为myresource.jar
。Error Deploying Revision 1 to test Resource with name myresource.jar and type java does not exist.
确定使用上述第 1 步中标识的资源的 JavaCallout 政策。
例如,以下政策将
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 代理未上传任何资源。
资源在环境级别可用。如需了解详情,请参阅资源文件。
如需确定环境级别是否存在资源,请使用 curl 发出以下 API 调用:
curl \ "https://apigee.googleapis.com/v1/organizations/$ORG/environments/$ENV/resourcefiles/java/myresource.jar" \ -H "Authorization: Bearer $TOKEN"
按照获取 OAuth 2.0 访问令牌中的说明,将
$TOKEN
设置为您的 OAuth 2.0 访问令牌。如需了解此示例中使用的curl
选项,请参阅使用 curl。如需了解所使用的环境变量,请参阅为 Apigee API 请求设置环境变量。
如果您收到 404 状态代码作为这些 API 的响应,那么环境级别缺少资源。
如果资源在 API 代理和环境级别不可用,系统将返回部署错误:
Resource with name myresource.jar and type java does not exist. ```
解决方法
确保在 <ResourceURL>
元素中指定的资源在 API 代理或环境级别存在。如需了解详情,请参阅管理资源。
如需更正上面所示的 JavaCallout 政策示例,请在适当的级别(API 代理或环境级别)上传 JAR 文件。
NoResourceForURL
错误消息
通过 Apigee 界面或 API 部署 API 代理失败并显示以下错误消息:
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 代理或环境级别上传了资源。在以下示例中,您可以看到在 API 代理级别上传了资源
myresource.jar
。资源在环境级别可用。如需了解详情,请参阅资源文件。
如需确定环境级别是否存在资源,请使用 curl 发出以下 API 调用:
curl \ "https://apigee.googleapis.com/v1/organizations/$ORG/environments/$ENV/resourcefiles/java/myresource.jar" \ -H "Authorization: Bearer $TOKEN"
按照获取 OAuth 2.0 访问令牌中的说明,将
$TOKEN
设置为您的 OAuth 2.0 访问令牌。 如需了解此示例中使用的curl
选项,请参阅使用 curl。如果您收到 404 状态代码作为这些 API 的响应,那么环境级别缺少资源。
解决方法
- 如果您确定 API 代理或环境级别存在资源,则删除资源并按照第 2 步中的说明重新上传资源。否则,跳到第 3 步。
如需删除 API 代理级别的资源,请导航到 API 代理编辑器导航窗格中的“资源”标签页,然后点击资源旁边的“X”按钮(如下所示)。
如需删除环境中的资源,请对先前在诊断步骤中使用的 API 调用使用 DELETE 动词。例如,如需删除环境级别的资源,请输入以下命令:
curl -X DELETE \ "https://apigee.googleapis.com/v1/organizations/$ORG/environments/$ENV/resourcefiles/java/myresource.jar" \ -H "Authorization: Bearer $TOKEN"
按照获取 OAuth 2.0 访问令牌中的说明,将
$TOKEN
设置为您的 OAuth 2.0 访问令牌。 如需了解此示例中使用的curl
选项,请参阅使用 curl。在相应级别(API 代理或环境级别)上传 JAR 文件。
如果重新上传资源不起作用,请联系 Apigee 支持团队。
JavaCalloutInstantiationFailed
错误消息
通过 Apigee 界面或 API 部署 API 代理失败并显示以下错误消息:
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 文件 | 系统不会上传包含错误中所标识的 Java 类的 JAR 文件。 |
JAR 文件已损坏 | 包含错误中所标识的 Java 类的 JAR 文件已损坏/部分上传。 |
缺少类文件 | 错误消息中标识的 Java 类文件不属于 >ResourceURL< 或相关 JAR 文件中指定的 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 文件
诊断
- 确定应包含类(在上述第 1 步中标识)且不能实例化的 JAR 文件。
- 检查是否在 API 代理或环境级别上传了特定 JAR 文件。如果 JAR 文件未上传到任何级别,请转到“解决方法”。
- 如果 JAR 文件已上传,请转到原因:JAR 文件损坏。
解决方法
- 如果 JAR 文件已损坏或部分上传,则在相应级别(API 代理或环境级别)重新构建 JAR 并上传 JAR 文件。
- 重新部署 API 代理。
原因:JAR 文件损坏
诊断
- 确定应包含类(在上述第 1 步中标识)且不能实例化的 JAR 文件。
- 检查特定 JAR 文件是否已损坏。例如,如果您由于文件已损坏或部分上传而无法解压缩文件。如果已损坏,请转到“解决方法”。
- 如果 JAR 文件未损坏,请转到原因:缺少类文件。
解决方法
- 在相应级别(API 代理或环境级别)重新构建已损坏的 JAR 文件并上传 JAR 文件。
- 重新部署 API 代理。
原因:缺少类文件
诊断
- 检查特定的 Java 类文件(上面第 1 步中标识)是否属于在 >ResourceURL< 或任何相关 JAR 文件中指定的 JAR 文件。
- 如果任何 JAR 文件中都不存在类文件,则表示您已确定错误原因。转到“解决方法”。
- 如果类文件存在于在 JavaCallout 政策中指定的一个 JAR 文件中,则是 Java 代码或依赖类引发此错误。如需帮助,请与 Apigee 支持团队联系。
解决方法
- 在相应级别(API 代理或环境级别)使用缺少的类文件重新构建 JAR 并上传 JAR 文件。
- 重新部署 API 代理。
上传 JAR 文件
确保 API 代理或环境级别存在包含所有必要类的资源元素。如需了解详情,请参阅资源文件。
如需在 API 代理级别上传资源,请点击“资源”标签页上的 +(加号),选择导入文件,然后从本地机器上传文件。文件名应与 >ResourceURL< 元素匹配,但不含
java://
前缀。如果您希望某个资源可用于同一环境中的多个 API 代理,请将相应资源上传到该环境中。您需要使用 Apigee API,如资源文件中所述。
例如,从本地机器输入以下 API 调用,以在环境级别上传指定的文件:
curl -H "Content-Type: application/octet-stream" \ -X POST -H "Authorization: Bearer $TOKEN" --data-binary @{classes.jar} \ "https://apigee.googleapis.com/v1/organizations/$ORG/environments/$ENV/resourcefiles?name=myresouce.jar&type=java"
按照获取 OAuth 2.0 访问令牌中的说明,将
$TOKEN
设置为您的 OAuth 2.0 访问令牌。 如需了解此示例中使用的curl
选项,请参阅使用 curl。从文件所在的目录中发出 API 调用。
如需使文件可用于组织的所有环境内的所有 API 代理,您可以省略基本路径中的环境详细信息。例如:
curl -H "Content-Type: application/octet-stream" \ -X POST -H "Authorization: Bearer $TOKEN" --data-binary @{classes.jar} \ "https://apigee.googleapis.com/v1/organizations/$ORG/resourcefiles?name=myresouce.jar&type=java"
按照获取 OAuth 2.0 访问令牌中的说明,将
$TOKEN
设置为您的 OAuth 2.0 访问令牌。 如需了解此示例中使用的curl
选项,请参阅使用 curl。