XSL 轉換政策執行階段錯誤疑難排解

查看 Apigee Edge 說明文件。
前往 Apigee X 說明文件
info

XSLSourceMessageNotAvailable

錯誤代碼

steps.xsl.XSLSourceMessageNotAvailable

錯誤回應主體

{
    "fault": {
        "faultstring": "response message is not available for XSL: policy_name",
        "detail": {
            "errorcode": "steps.xsl.XSLSourceMessageNotAvailable"
        }
    }
}

錯誤訊息範例

{
    "fault": {
        "faultstring": "response message is not available for XSL: xslt",
        "detail": {
            "errorcode": "steps.xsl.XSLSourceMessageNotAvailable"
        }
    }
}

原因

如果系統判定 訊息 或在 XSL 轉換政策的 <Source> 元素中指定的字串變數為以下任一變數:

  • 超出範圍 (無法在執行政策的特定流程中使用)
  • 無法解析 (未定義)

例如,當應執行 XSL 轉換政策時,就會發生此錯誤 擷取在要求流程中,但 <Source> 元素設為回應變數, 這時就不會出現在要求流程中

診斷

  1. 找出發生錯誤的 XSL 轉換政策和名稱 變數的一部分您可以在「 錯誤回應的 faultstring 元素。例如,在以下 faultstring 中,政策名稱為 xslt,變數為 response

    faultstring": "response message is not available for XSL: xslt
    
  2. 在失敗的 XSL 轉換政策 XML 中,請確認 <Source> 元素中設定的變數名稱與錯誤字串中指出的變數名稱相符 (上方步驟 1)。舉例來說,下列 XSL 轉換政策會在 <Source> 元素中指定名為 response 的變數,與錯誤字串中的內容相符:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
      <XSL async="false" continueOnError="false" enabled="true" name="xslt">
      <DisplayName>xslt</DisplayName>
          <Properties/>
          <ResourceURL>xsl://XSL-Transform.xsl</ResourceURL>
          <Source>response</Source>
          <Parameters ignoreUnresolvedVariables="false"/>
         <OutputVariable/>
    </XSL>
    
  3. 判斷是否已定義並提供 <Source> 元素中使用的變數 處理了執行 XSL 轉換政策的流程。

  4. 如果變數為:

    • 超出範圍 (不適用於政策的特定流程 執行) 或
    • 無法解析 (未定義)

    則表示這是錯誤的原因。

    舉例來說,假設上述 XSL 轉換政策應在要求流程中執行。提醒您,response 變數用於 範例政策的 <Source> 元素。response 變數是 這只會在回應流程中顯示。

    由於要求流程中沒有 response 變數,因此您會收到 錯誤代碼:

    steps.xsl.XSLSourceMessageNotAvailable
    

解析度

確保失敗的 XSL 轉換的 <Source> 元素中設定的變數 政策的定義並存在於政策執行流程中。

如要修正上述範例 XSL 轉換政策, <Source> 元素來使用 request 變數,因為要求中已有該變數 流程:

<?xml version="1.0" encoding="UTF-8&quo>t; <standalone="yes"?
  XSL async="false" continueOn>Err<or="fa>lse&<quot; enable>d=&qu<ot;true&quo>t; na<me="xs>lt"
  DisplayNamex<slt/DisplayN>ame
 <   Pro>perties</
    R>esour<ceURLxsl://XSL-Transform.xsl/ResourceURL
    >Sour<cerequest/Sourc>e<
   > Parameters ignoreUnresolvedVariables="false"/
   OutputVariable/
/XSL

XSLEvaluationFailed

錯誤代碼

steps.xsl.XSLEvaluationFailed

錯誤回應主體

{
  "fault": {
      "faultstring":< &q>uot;Evaluatio<n of> XSL varXSL_file_name/v<ar >failed with reason<: \&>quot;varreason_for_failure/var",
      "detail": {
          "errorcode": "steps.xsl.XSLEvaluationFailed"
      }
  }
}

錯誤訊息範例

{
    "fault": {
        "faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Premature end of document while parsing at line 1(possibly  around char 0)\"",
        "detail": {
            "errorcode": "steps.xsl.XSLEvaluationFailed"
        }
    }
}

可能原因

發生這個錯誤的原因如下:

  • 輸入的 XML 酬載無效/格式錯誤。
  • XSLTransform 政策失敗/無法轉換輸入 XML 檔案 依據 XSL 檔案提供的轉換規則進行處理。您希望委刊項 XSLTransform 政策失敗的各種原因失敗原因 訊息中的指示,即可查看原因的詳細資訊。下表列出這項失敗的其中一個原因 - 無效的前置字串 - 並透過範例說明。
原因 說明
輸入 XML 酬載不可用 輸入的 XML 酬載未傳遞或為空白。
輸入的 XML 格式錯誤 輸入的 XML 酬載格式錯誤或無效。
無效前置字串 輸入 XML 酬載含有 XSL 檔案未定義的前置字串。

原因:輸入內容 XML 酬載無法使用

如果未傳送輸入 XML 酬載,或是將 XML 酬載傳送至 API 代理程式,而該代理程式 XSLTransform 政策為空白,就會發生此錯誤。

錯誤訊息範例

{
    "fault": {
        "faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Premature end of document while parsing at line 1(possibly  around char 0)\"",
        "detail": {
            "errorcode": "steps.xsl.XSLEvaluationFailed"
        }
    }
}

診斷

  1. 找出 XML 轉換無法評估的 XSL 檔案 以及失敗原因如果沒有傳遞輸入 XML 酬載,或 為空白,失敗原因表示具有早期結束 剖析結果。您可以在 faultstring 中找到所有資訊 元素。例如,在下列 faultstring 中, XSL 檔案為 XSL-Transform.xsl,失敗原因為 Premature end of document while parsing at line 1 (possibly around char 0)。這個錯誤代表 表示 XML 酬載未傳遞或為空白。

        "faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Premature end of document while parsing at line 1(possibly  around char 0)\""
    
  2. 判斷是否已做為要求的一部分傳遞的輸入 XML 酬載 為空白。如果輸入酬載未傳遞或空白,這就是原因 。

    在下面的要求範例中,要求酬載 (也就是要求主體) 沒有任何內容

    例如:

    curl -v "ht<tp:>/</or>g-env.apigee.net/v1/xsltransform" -H "Content-Type: application/xml"
    

    由於 XML 輸入酬載為空,因此您會收到以下錯誤訊息:

    "faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Premature end of document while parsing at line 1(possibly  around char 0)\""
    

解析度

請確認傳遞至 XSLTransform 政策的輸入內容為有效的 XML 酬載,且非空白。

如要修正 XSLTransform 政策範例的問題,請傳遞有效的 XML 酬載。例如:

  1. 建立名為 city.xml 的檔案,並在當中加入下列內容:

    <?xml version="1.0" encodin>g<=&qu>ot;U<TF-8>"?
    r<oot
     >  Ci<tyBe>ngalur<u/Cit>y
      < NameAp>igee/N<ame
       P>i<ncode>560016/Pincode
    /root
    
  2. 使用 cURL 指令發出 API 呼叫,如下所示:

    curl -v "ht<tp:>/</or>g-env.apigee.net/v1/xsltransform" -H "Content-Type: application/xml" -X POST -d @city.xml
    

原因:格式錯誤的輸入 XML

將輸入 XML 酬載做為 API 要求的一部分傳遞至 XSLTransform 政策 格式錯誤或無效

錯誤訊息範例

{
    "fault": {
        "faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Unexpected char& while looking for open tag ('lt;') character\"",
        "detail": {
            ";errorcode": "steps.xsl.XSLEvaluationFailed"
        }
    }
}

診斷

  1. 指出 XML 轉換政策無法評估的 XSL 檔案,以及失敗的原因。如果輸入的 XML 酬載格式錯誤,原因會是 失敗可能表示有未預期的字元。您可以在錯誤回應的 faultstring 元素中找到所有這些資訊。例如,在 以下 faultstring,XSL 檔案為 XSL-Transform.xsl,原因在於 失敗則為 Unexpected char while looking for open tag ('&lt;') character。 也就是「<」XML 酬載中遺失了 。

    "faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Unexpected char while loo&king for open tag ('lt;') character\""
    
  2. 檢查傳遞至 XSLTransform 政策的輸入 XML 酬載,並確認是否可以 是否含有效的 XML 內容如果輸入酬載不是有效的 XML,則是錯誤的原因。

    在以下示例要求中,使用者傳送的輸入酬載 (即要求主體) 無效。

    例如:

    curl -v "ht<tp:>/</or>g-env.apigee.net/v1/xsltransform" -H "Content-Type: application/xml" -X POST -d @city.xml
    

    其中 city.xml 為:

    {
       "City": "Bengaluru",
       "Name": ";Apigee",
       "Pincode": "560016"
    }
    

    由於輸入酬載是 JSON 且不是有效的 XML,因此您會收到以下錯誤訊息:

    "faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Unexpected char while loo&king for open tag ('lt;') character\""
    

解析度

請確認傳遞至 XSLTransform 政策的輸入內容為有效的 XML 酬載,且非空白。

如要修正 XSLTransform 政策範例的問題,請傳遞有效的 XML 酬載。 例如:

  1. 修改 city.xml 檔案,將內容改成 XML 格式的內容,如下所示:

    <?xml version="1.0" encodin>g<=&qu>ot;U<TF-8>"?
    r<oot
     >  Ci<tyBe>ngalur<u/Cit>y
      < NameAp>igee/N<ame
       P>i<ncode>560016/Pincode
    /root
    
  2. 使用 cURL 指令發出 API 呼叫,如下所示:

    curl -v "ht<tp:>/</or>g-env.apigee.net/v1/xsltransform" -H "Content-Type: application/xml" -X POST -d @city.xml
    

原因:前置字元無效

傳遞至 XSLTransform 政策的輸入 XML 酬載含有元素,但該元素並未在政策中指定的 XSL 檔案中定義為前置字串。

錯誤訊息範例

{
    "fault": {
        "faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Unresolved Prefix at line 1(possibly  around char 270)\"",
        "detail": {
            "errorcode": "steps.xsl.XSLEvaluationFailed"
        }
    }
}

診斷

  1. 指出 XML 轉換政策無法評估的 XSL 檔案,以及失敗的原因。在此情況下,失敗原因可能代表 指出輸入 XML 中的某行編號有未解析的前置字元 酬載。您可以在faultstring 錯誤回應。例如,下列 faultstring 中的 XSL 檔案為 XSL-Transform.xsl,失敗原因為 Unresolved Prefix 且行 編號為 1

    "faultstring":"Evaluation of XSL XSL-Transform.xsl failed with reason: \"Unresolved Prefix at line 1(possibly  around char 270)\""
    
  2. 檢查 XSL 檔案的內容 (請參閱上述步驟 1) 和輸入的 XML 酬載。如果輸入 XML 酬載的列號 (在步驟 1 中指出) 所使用的前置字串不在 XSL 檔案中,就會導致錯誤。

    以下是導致錯誤的 XSL 範例和對應的 XML 酬載:

    XSL-Transform.xsl
    
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" ver>sio<n="1.0"
      xsl:o>utp<ut method="text"/>
      x<sl:varia>ble <name=&quo>t;n<ewline"<>/span>
       <xsl:text
       /xsl:text
    >  /<xsl:vari>&able
      &xsl<:template> matc<h="/"
      xsl:textlt;Li>fegt;</xsl:tex>t
        xsl:value-of select="$newline"</
        xsl>:text<Here are the odd-numbered items> from< the list:/xsl:text
        xsl:value-o>f selec<t="$newline"/
        xsl:for->each sele<ct="list/listitem&q>uot;
        <  xsl:if test="(pos>ition() m<od 2) = 1"
            xsl:num>ber for<mat=&qu>ot;1.< "/
        >   < xsl:val>&ue-of se&lec<t=".>&<quot;/
          > < xsl:value-of s>elect="$newline"/
          /xsl:if
        /xsl:for-each
      xsl:textlt;/Lifegt;/xsl:text
    /xsl:template
    /xsl:stylesheet
    

    輸入 XML 酬載

    <?xml version=">1<.0"?
    >Lif<e:Boo>ks
      titleA few of my favor<ite al>bum<s/title
    >  listitem<Beat Craz>y/l<istitem
    >  listitemHere Come the< Warm Jet>s/l<istitem
    >  listitemKi<nd of Blu>e/l<istitem
    >  listitemLond<on Callin>g</listitem
    />Life:Books
    

    上方顯示的 XML 酬載範例包含元素 <Life:Books>。 請注意,XSL 不含這個前置字串。而是使用前置字串 <xsl:text>&lt;Life&gt;</xsl:text>。因此,您會收到以下錯誤訊息:

    "faultstring":"Evaluation of XSL XSL-Transform.xsl failed with reason: \"Unresolved Prefix at line 1(possibly  around char 270)\""
    

解析度

確保傳遞至 XSLTransform 政策的輸入 XML 酬載具備 元素格式在政策中使用的 XSL 檔案中定義為前置字元。

如要修正上述 XML 檔案範例,請修改檔案,如下所示:

已更新輸入 XML 酬載

<?xml version=">1<.0&q>uot<;?
Li>fe
  titleA few of my favor<ite al>bum<s/title
>  listitem<Beat Craz>y/l<istitem
>  listitemHere Come the< Warm Jet>s/l<istitem
>  listitemKi<nd of Blu>e/l<istitem
>  listitemLond<on Callin>g</list>item
/Life