排解 JavaScript 政策部署錯誤

您正在查看 ApigeeApigee Hybrid 說明文件。
查看 Apigee Edge 說明文件。

InvalidResourceUrlFormat

錯誤訊息

透過 Apigee UI 或 API 部署 API Proxy 失敗,並顯示以下錯誤訊息:

Error Deploying Revision revision_number to environment
Invalid resource url format. Resource url is invalid_URL.

錯誤訊息示例

Error Deploying Revision 1 to test
Invalid resource url format. Resource url is jsc:add_variables.js.

螢幕截圖範例

部署修訂版本 1 至測試環境時發生錯誤。

原因

如果 <ResourceURL> 或 JavaScript 政策的 <IncludeURL> 元素中指定的資源網址格式無效,API 代理程式就無法部署。

指定資源網址的正確格式如下:

<ResourceURL>jsc://<file_name>.js</ResourceURL>
<IncludeURL>jsc://<file_name>.js</IncludeURL>

舉例來說,如果 <ResourceURL> 元素的指定方式如下所示,則 API 代理程式無法部署,因為它不符合規定的模式:

<ResourceURL>jsc:add_variables.js</ResourceURL>

診斷

  1. 找出 JavaScript 政策中使用的無效資源網址格式。您可以在錯誤訊息中找到這項資訊。例如,在以下錯誤中,無效的資源網址格式為 jsc:add_variables.js

      Error Deploying Revision 1 to test
        Invalid resource url format. Resource url is jsc:add_variables.js.
    
  2. 檢查發生失敗的特定 API Proxy 中的所有 JavaScript 政策。如果有任何 JavaScript 政策,其中 <ResourceURL><IncludeURL> 元素中指定的資源網址與上述步驟 1 中所述的無效項目相符,那麼這就是錯誤的原因。

    舉例來說,下列政策會將資源網址指定為 jsc:add_variables.js,這與錯誤訊息中的網址相符:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <Javascript async="false" continueOnError="false" enabled="true" timeLimit="200" name="js-TotalVariable">
        <DisplayName>js-TotalVariable</DisplayName>
        <Properties/>
        <ResourceURL>jsc:add_variables.js</ResourceURL>
    </Javascript>
    

    由於資源網址指定為無效的 jsc:add_variables.js,因此 API Proxy 的部署作業會失敗,並顯示以下錯誤訊息:

    Invalid resource url format. Resource url is jsc:add_variables.js.
    

解決方法

請確認 JavaScript 政策的 <ResourceURL><IncludeURL> 元素中指定的資源網址格式有效。例如:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Javascript async="false" continueOnError="false" enabled="true" timeLimit="200" name="js-TotalVariable">
    <DisplayName>js-TotalVariable</DisplayName>
    <Properties/>
    <ResourceURL>jsc://add_variables.js</ResourceURL>
</Javascript>

InvalidResourceUrlReference

錯誤訊息

透過 Apigee UI 或 API 部署 API Proxy 失敗,並顯示以下錯誤訊息:

Error Deploying Revision revision_number to environment
Invalid resource url ref invalid_reference in policy policy_name in org_name

錯誤訊息示例

Error Deploying Revision 8 to test
Invalid resource url ref jsc://dependent_js.js in policy js-TotalVariable in aprabhashankar-eval

螢幕截圖範例

部署修訂版本 8 至測試時發生錯誤。

原因

如果 <ResourceURL><IncludeURL> 元素參照的 JavaScript 檔案不存在,API 代理程式就會部署失敗。

如果您要從本機電腦部署 Proxy 套件,JavaScript 來源檔案必須儲存在 /apiproxy/resources/jsc 下。在這種情況下,來源檔案的範圍會限定為 API Proxy。

在 Apigee UI 中,JavaScript 來源檔案會顯示在 API 代理程式編輯器導覽窗格「指令碼」部分的 jsc 下方。您也可以將資源檔案儲存在環境層級存放區中 (例如讓 JavaScript 程式碼可供機構或環境中的所有 Proxy 使用)。

如果在任何可用範圍 (proxy 或環境) 中找不到政策中指定的任何資源檔案,就會發生這個錯誤。

診斷

  1. 找出發生錯誤的 JavaScript 政策,並確認該政策是否含有無效的資源網址參照。您可以在錯誤訊息中找到這項資訊。舉例來說,在以下錯誤中,政策名稱為 js-TotalVariable,而無效的資源網址參照為 jsc://dependent_js.js

    Invalid resource url ref jsc://dependent_js.js in policy js-TotalVariable in aprabhashankar-eval
    
  2. 請確認在失敗的 JavaScript 政策中指定的資源網址參照,是否與錯誤訊息中指出的值相符 (請參閱上述步驟 1)。舉例來說,下列政策會將資源網址參照指定為 jsc://dependent_js.js,與錯誤訊息中的內容相符:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
      <Javascript async="false" continueOnError="false" enabled="true" timeLimit="200" name="js-TotalVariable">
      <DisplayName>js-TotalVariable</DisplayName>
      <Properties/>
      <ResourceURL>jsc://add_variables.js</ResourceURL>
      <IncludeURL>jsc://dependent_js.js</IncludeURL>
    </Javascript>
    
  3. 檢查步驟 1 檔案中指出的原始檔案,是否屬於特定 API Proxy 套件,或是存在於環境範圍內。

    1. 如要檢查檔案是否屬於特定 API Proxy 套件,請按照下列任一步驟操作:
      1. 在 Apigee UI 中,檢查這個檔案是否位於 API Proxy 的「Scripts」部分。
      2. 下載 API Proxy 套件,並搜尋檔案是否存在。
    2. 如果檔案並非特定 API Proxy 套件的一部分,請檢查環境層級是否有該檔案。您可以使用 Resource Files API 進行調查。

    如果檔案不存在於 API Proxy 或環境層級,則是錯誤的原因。

    在上述範例中,無效的 JavaScript 檔案名稱是 dependent_js.js。請注意,在下方螢幕截圖中,政策中指定為資源網址的檔案並未顯示在「指令碼」部分。因此,它並非 API Proxy 的一部分。如果環境層級也沒有該檔案,API Proxy 的部署作業會失敗,並顯示以下錯誤訊息:

    Invalid resource url ref jsc://dependent_js.js in policy js-TotalVariable in aprabhashankar-eval
    

    無效的資源網址錯誤。

解決方法

請確認 <ResourceURL><IncludeURL> 元素中指定的 JavaScript 檔案,是指向 API Proxy 或環境層級的有效檔案。

如要修正上述 JavaScript 政策範例,請將 dependent_js.js 檔案新增至 API Proxy 套件。在下方螢幕截圖中,您可以看到 <ResourceURL><IncludeURL> 元素中指定的 JavaScript 檔案,會顯示在 API Proxy 套件的「Scripts」部分。

修正後的示例。

WrongResourceType

錯誤訊息

透過 Apigee UI 或 API 部署 API Proxy 失敗,並顯示以下錯誤訊息:

Error Deploying Revision revision_number to environment
Resource JavaScript_file is the wrong type. It is invalid_type: but JavaScript steps use type jsc:.

錯誤訊息示例

Error Deploying Revision 2 to test
Resource js_checkType.js is the wrong type. It is node: but JavaScript steps use type jsc:.

螢幕截圖範例

部署修訂版本 2 至測試時發生錯誤。

原因

如果 JavaScript 政策的 <ResourceURL><IncludeURL> 元素參照的資源類型不是 jsc (JavaScript 檔案),就會在部署期間發生這個錯誤。

舉例來說,如果 <IncludeURL> 元素的宣告方式如下所示,API Proxy 的部署作業就會失敗:

<IncludeURL>node://javascript-dependency.js</IncludeURL>

這是因為它參照的 node 資源類型不正確。

診斷

  1. 找出 JavaScript 政策中使用的無效資源類型。您可以在錯誤訊息中找到這項資訊。舉例來說,在以下錯誤中,無效的資源類型為 node

    Resource js_checkType.js is the wrong type. It is node: but JavaScript steps use type jsc:.
    
  2. 檢查發生失敗的特定 API Proxy 中的所有 JavaScript 政策。如果有任何 JavaScript 政策,其中 <ResourceURL><IncludeURL> 元素中指定的資源與上述步驟 1 中指出的無效資源類型相符,那就是錯誤的原因。

    舉例來說,下列政策會將資源類型指定為 node,這與錯誤訊息中的內容相符:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <Javascript async="false" continueOnError="false" enabled="true" timeLimit="200" name="js-TotalVariable">
        <DisplayName>js-TotalVariable</DisplayName>
        <Properties/>
        <ResourceURL>node://js_checkType.js</ResourceURL>
        <IncludeURL>jsc://javascript-dependency.js</IncludeURL>
    </Javascript>
    

    由於資源類型指定為無效的 node,因此 API Proxy 的部署作業會失敗,並顯示以下錯誤訊息:

    Resource js_checkType.js is the wrong type. It is node: but JavaScript steps use type jsc:.
    

解決方法

請確認 JavaScript 政策中的 <ResourceURL><IncludeURL> 元素一律參照 jsc 資源類型。

如要修正上述範例,請修改 <ResourceURL> 元素,使其具有 jsc 資源類型。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <Javascript async="false" continueOnError="false" enabled="true" timeLimit="200" name="js-TotalVariable">
    <DisplayName>js-TotalVariable</DisplayName>
    <Properties/>
    <ResourceURL>jsc://js_checkType.js</ResourceURL>
    <IncludeURL>jsc://javascript-dependency.js</IncludeURL>
</Javascript>

NoResourceURLOrSource

錯誤訊息

透過 Apigee UI 或 API 部署 API Proxy 失敗,並顯示以下錯誤訊息:

Error Saving Revision revision_number
Bundle is invalid. Errors:[Entity : Policy-policy_name, No ResourceURL or Source;].

錯誤訊息示例

Error Saving Revision 10
Bundle is invalid. Errors:[Entity : Policy-js-example, No ResourceURL or Source;].

螢幕截圖範例

儲存修訂版本 10 時發生錯誤。

原因

在下列情況下,JavaScript 政策的部署作業可能會失敗並顯示此錯誤訊息:

  1. 如果未宣告 <ResourceURL> 元素,或未在該元素中定義資源網址。<ResourceURL> 元素為必要元素。
  2. 已宣告 <IncludeURL> 元素,但未在該元素中定義資源網址。<IncludeURL> 元素為選用元素,但如果已宣告,則必須在 <IncludeURL> 元素中指定資源網址。

舉例來說,如果 <IncludeURL> 元素的宣告方式如下所示,API Proxy 的部署作業就會失敗:

<IncludeURL></IncludeURL>

診斷

  1. 找出發生錯誤的 JavaScript 政策。您可以在錯誤訊息中找到這項資訊。舉例來說,在以下錯誤中,政策名稱為 Policy-js-example

    Bundle is invalid. Errors:[Entity : Policy-js-example, No ResourceURL or Source;].
    
  2. 在失敗的 JavaScript 政策 XML 檔案中,執行下列檢查:

    1. 必須宣告 <ResourceURL> 元素,且該元素必須定義資源網址。
    2. 如果已宣告 <IncludeURL> 元素,您必須在其中指定資源網址。宣告 <IncludeURL> 元素為選用項目。

    如果上述任何檢查失敗,就是錯誤的原因。

    範例 1:下列政策未宣告 <ResourceURL> 元素:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <Javascript async="false" continueOnError="false" enabled="true" timeLimit="200" name="js-example">
        <DisplayName>js-example</DisplayName>
        <Properties/>
    </Javascript>
    

    由於未宣告 <ResourceURL> 元素,API Proxy 的部署作業會失敗,並顯示以下錯誤訊息:

    Bundle is invalid. Errors:[Entity : Policy-js-example, No ResourceURL or Source;].
    

    範例 2:下列政策含有空白的 <IncludeURL> 元素。

  <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  <Javascript async="false" continueOnError="false" enabled="true" timeLimit="200" name="js-example">
      <DisplayName>js-example</DisplayName>
      <Properties/>
      <ResourceURL>jsc://check_var.js</ResourceURL>
      <IncludeURL></IncludeURL>
  </Javascript>

由於 <IncludeURL> 元素沒有資源網址,因此 API Proxy 的部署作業會失敗,並顯示以下錯誤訊息:

  Bundle is invalid. Errors:[Entity : Policy-js-example, No ResourceURL or Source;].

解決方法

請確認 JavaScript 政策符合下列規定:

  1. 系統會宣告 <ResourceURL> 元素,並在該元素中定義資源網址。<ResourceURL> 元素為必要元素。
  2. 如果已宣告 <IncludeURL> 元素,則必須在該元素中定義包含資源的網址。<IncludeURL> 元素為選用元素,但如果已宣告,則必須在 <IncludeURL> 元素中指定資源網址。

    如要修正上述範例 1,請在有效的 JavaScript 檔案中加入 <ResourceURL> 元素:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <Javascript async="false" continueOnError="false" enabled="true" timeLimit="200" name="js-example">
        <DisplayName>js-example</DisplayName>
        <Properties/>
        <ResourceURL>jsc://check_var.js</ResourceURL>
    </Javascript>
    

    如要修正上述範例 2,請在 <IncludeURL> 元素中加入有效的 JavaScript 檔案

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <Javascript async="false" continueOnError="false" enabled="true" timeLimit="200" name="js-example">
        <DisplayName>js-example</DisplayName>
        <Properties/>
        <ResourceURL>jsc://check_var.js</ResourceURL>
        <IncludeURL>jsc://js_dependency.js</IncludeURL>
    </Javascript>