您目前正在查看 Apigee 和 Apigee Hybrid 說明文件。
查看
Apigee Edge 說明文件。
ResourceDoesNotExist
錯誤訊息
透過 Apigee UI 或 API 部署 API Proxy 時失敗,並顯示以下錯誤訊息:
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 Proxy 或環境層級,API Proxy 的部署作業就會失敗。
診斷
找出環境和資源名稱。您可以在錯誤訊息中找到這項資訊。舉例來說,在下列錯誤中,環境為
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 Proxy,還是上傳至環境層級。如果不是,這就是錯誤原因。
前往 API Proxy 編輯器的「Navigator」窗格,然後點選「Resources」分頁,即可查看在 API Proxy 層級上傳的所有資源。在本例中,API Proxy 沒有上傳任何資源。
資源可在環境層級使用。詳情請參閱「資源檔案」。
如要判斷資源是否存在於環境層級,請使用 curl 發出下列 API 呼叫:
curl \ "https://apigee.googleapis.com/v1/organizations/$ORG/environments/$ENV/resourcefiles/java/myresource.jar" \ -H "Authorization: Bearer $TOKEN"
其中
$TOKEN
會設為您的 OAuth 2.0 存取權杖,如「取得 OAuth 2.0 存取權杖」一文所述。如要瞭解本範例使用的curl
選項,請參閱「使用 curl」。如要瞭解可使用的環境變數,請參閱為 Apigee API 要求設定環境變數。
如果這些 API 的回應是 404 狀態碼,表示環境層級缺少資源。
如果 API Proxy 和環境層級沒有可用資源,系統會傳回部署錯誤:
Resource with name myresource.jar and type java does not exist. ```
解決方法
請確認 <ResourceURL>
元素中指定的資源確實存在於 API 代理項目或環境層級。詳情請參閱「管理資源」。
如要修正上述 JavaCallout 政策範例,請在適當層級 (API 代理或環境層級) 上傳 JAR 檔案。
NoResourceForURL
錯誤訊息
透過 Apigee UI 或 API 部署 API Proxy 時失敗,並顯示以下錯誤訊息:
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 Proxy 層級上傳。資源可在環境層級使用。詳情請參閱「資源檔案」。
如要判斷資源是否存在於環境層級,請使用 curl 發出下列 API 呼叫:
curl \ "https://apigee.googleapis.com/v1/organizations/$ORG/environments/$ENV/resourcefiles/java/myresource.jar" \ -H "Authorization: Bearer $TOKEN"
其中
$TOKEN
會設為您的 OAuth 2.0 存取權杖,如「取得 OAuth 2.0 存取權杖」一文所述。如要瞭解本範例中使用的curl
選項,請參閱「使用 curl」。如果這些 API 的回應是 404 狀態碼,表示環境層級缺少資源。
解決方法
- 如果判斷資源存在於 API 代理或環境層級,請刪除資源並重新上傳,如步驟 2 所述。如果您只有一個網域,請跳到步驟 3。
如要在 API Proxy 層級刪除資源,請前往 API Proxy 編輯器的「Navigator」窗格,然後按一下資源旁邊的「X」按鈕,如下所示。
如要刪除環境中的資源,請在先前用於診斷步驟的 API 呼叫中使用 DELETE 動詞。舉例來說,如要刪除環境層級的資源,請輸入下列指令:
curl -X DELETE \ "https://apigee.googleapis.com/v1/organizations/$ORG/environments/$ENV/resourcefiles/java/myresource.jar" \ -H "Authorization: Bearer $TOKEN"
其中
$TOKEN
會設為您的 OAuth 2.0 存取權杖,如「取得 OAuth 2.0 存取權杖」一文所述。如要瞭解本範例中使用的curl
選項,請參閱「使用 curl」。上傳 JAR 檔案至適當層級 (API 代理或環境層級)。
如果重新上傳資源無法解決問題,請與 Apigee 支援團隊聯絡。
JavaCalloutInstantiationFailed
錯誤訊息
透過 Apigee UI 或 API 部署 API Proxy 時失敗,並顯示以下錯誤訊息:
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 檔案已損毀/部分上傳。 |
缺少 Class 檔案 | 錯誤中識別的 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 Proxy 或環境層級上傳特定 JAR 檔案。如果 JAR 檔案未上傳至任何層級,請前往「解決方法」。
- 如果已上傳 JAR 檔案,請參閱「原因:JAR 檔案毀損」。
解決方法
- 如果 JAR 檔案已損毀或部分上傳,請重建 JAR,然後在適當層級 (API 代理或環境層級) 上傳 JAR 檔案。
- 重新部署 API Proxy。
原因:JAR 檔案毀損
診斷
- 找出應包含無法例項化的類別 (如上述步驟 1 所述) 的 JAR 檔案。
- 檢查特定 JAR 檔案是否已毀損。舉例來說,如果檔案已毀損或部分上傳,您就無法將檔案解壓縮。如果損毀,請前往「解決方法」。
- 如果 JAR 檔案未損毀,請參閱「原因:缺少類別檔案」。
解決方法
- 重建損毀的 JAR 檔案,並在適當層級 (API 代理或環境層級) 上傳 JAR 檔案。
- 重新部署 API Proxy。
原因:缺少類別檔案
診斷
- 檢查特定 Java 類別檔案 (如上述步驟 1 所述) 是否屬於 >ResourceURL< 中指定的 JAR 檔案,或任何相依的 JAR 檔案。
- 如果任何 JAR 檔案中都沒有類別檔案,您就已找出錯誤原因。前往「解決方案」。
- 如果類別檔案存在於 JavaCallout 政策中指定的其中一個 JAR 檔案,則 Java 程式碼或相關類別一定有問題,才會導致這個錯誤。如需協助,請與 Apigee 支援團隊聯絡。
解決方法
- 使用缺少的類別檔案重建 JAR,然後在適當層級 (API Proxy 或環境層級) 上傳 JAR 檔案。
- 重新部署 API Proxy。
上傳 JAR 檔案
請確認 API Proxy 或環境層級中,存在具有所有必要類別的資源元素。詳情請參閱「資源檔案」。
如要在 API Proxy 層級上傳資源,請按一下「Resources」分頁中的「+」 (加號),然後選取「Import file」並從本機上傳檔案。檔案名稱應與 >ResourceURL< 元素相符,但不含
java://
前置字元。如要讓資源在同一環境中供多個 API Proxy 使用,請將資源上傳至該環境。您必須使用 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"
其中
$TOKEN
會設為您的 OAuth 2.0 存取權杖,如「取得 OAuth 2.0 存取權杖」一文所述。如要瞭解本範例中使用的curl
選項,請參閱「使用 curl」。從檔案所在的目錄發出 API 呼叫。
如要讓檔案可供機構中所有環境內的所有 API Proxy 使用,可以在 basepath 中省略環境詳細資料。例如:
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"
其中
$TOKEN
會設為您的 OAuth 2.0 存取權杖,如「取得 OAuth 2.0 存取權杖」一文所述。如要瞭解本範例中使用的curl
選項,請參閱「使用 curl」。