Khắc phục sự cố thời gian chạy của chính sách Chuyển đổi SAML

Bạn đang xem tài liệu về Apigee Edge.
Truy cập vào tài liệu Apigee X.
thông tin

XSLSourceMessageNotAvailable

Mã lỗi

steps.xsl.XSLSourceMessageNotAvailable

Nội dung phản hồi lỗi

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

Thông báo lỗi mẫu

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

Nguyên nhân

Lỗi này xảy ra nếu thông báo hoặc biến chuỗi được chỉ định trong phần tử <Source> của chính sách Biến đổi XSL là:

  • Ngoài phạm vi (không có trong quy trình cụ thể nơi chính sách đang được thực thi)
  • Không thể phân giải (chưa được xác định)

Ví dụ: lỗi này xảy ra nếu chính sách Biến đổi XSL được giả định sẽ thực thi trong luồng yêu cầu, nhưng phần tử <Source> được đặt thành biến phản hồi, không tồn tại trong luồng yêu cầu.

Chẩn đoán

  1. Xác định chính sách Biến đổi XSL nơi xảy ra lỗi và tên của biến không có sẵn. Bạn có thể tìm thấy cả hai mục này trong phần tử faultstring của phản hồi lỗi. Ví dụ: trong faultstring sau đây, tên chính sách là xslt và biến là response:

    faultstring": "response message is not available for XSL: xslt
    
  2. Trong tệp XML chính sách XSL Transform không thành công, hãy xác minh rằng tên của biến được đặt trong phần tử <Source> khớp với tên biến được xác định trong chuỗi lỗi (bước 1 ở trên). Ví dụ: chính sách Biến đổi XSL sau đây chỉ định một biến có tên là response trong phần tử <Source>, khớp với nội dung trong chuỗi lỗi:

    <?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. Xác định xem biến được dùng trong phần tử <Source> có được xác định và có sẵn trong luồng mà chính sách Biến đổi XSL đang được thực thi hay không.

  4. Nếu biến là một trong hai trường hợp sau:

    • Ngoài phạm vi (không có trong quy trình cụ thể nơi chính sách đang được thực thi) hoặc
    • Không thể phân giải (chưa được xác định)

    thì đó là nguyên nhân gây ra lỗi.

    Ví dụ: giả sử chính sách Biến đổi XSL nêu trên sẽ thực thi trong luồng yêu cầu. Hãy nhớ rằng biến response được dùng trong phần tử <Source> của chính sách mẫu. Biến response chỉ có trong luồng phản hồi.

    Vì biến response không tồn tại trong luồng yêu cầu, nên bạn sẽ nhận được mã lỗi:

    steps.xsl.XSLSourceMessageNotAvailable
    

Độ phân giải

Đảm bảo rằng biến được đặt trong phần tử <Source> của chính sách XSL Transform không thành công được xác định và tồn tại trong luồng mà chính sách thực thi.

Để sửa chính sách Biến đổi XSL trong ví dụ nêu trên, bạn có thể sửa đổi phần tử <Source> để sử dụng biến request, vì biến này tồn tại trong luồng yêu cầu:

<?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>request</Source>
    <Parameters ignoreUnresolvedVariables="false"/>
   <OutputVariable/>
</XSL>

XSLEvaluationFailed

Mã lỗi

steps.xsl.XSLEvaluationFailed

Nội dung phản hồi lỗi

{
  "fault": {
      "faultstring": "Evaluation of XSL <var>XSL_file_name</var> failed with reason: \"<var>reason_for_failure</var>",
      "detail": {
          "errorcode": "steps.xsl.XSLEvaluationFailed"
      }
  }
}

Thông báo lỗi mẫu

{
    "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"
        }
    }
}

Các nguyên nhân có thể

Lỗi này xảy ra nếu:

  • Tải trọng XML đầu vào không có sẵn/không đúng định dạng.
  • Chính sách XSLTransform không thành công/không thể chuyển đổi tệp XML đầu vào dựa trên các quy tắc chuyển đổi được cung cấp trong tệp XSL. Có thể có nhiều nguyên nhân khiến chính sách XSLTransform không thành công. Lý do thất bại trong thông báo lỗi sẽ cung cấp thêm thông tin về nguyên nhân. Bảng sau đây liệt kê một nguyên nhân như vậy gây ra lỗi này – Tiền tố không hợp lệ – và được giải thích bằng một ví dụ.
Nguyên nhân Mô tả
Không có tải trọng XML đầu vào Tải trọng XML đầu vào không được truyền hoặc bị bỏ trống.
XML đầu vào không hợp lệ Tải trọng XML đầu vào không đúng định dạng hoặc không hợp lệ.
Tiền tố không hợp lệ Tải trọng XML đầu vào có một tiền tố không được xác định trong tệp XSL.

Nguyên nhân: Không có trọng tải XML đầu vào

Lỗi này xảy ra nếu tải trọng XML đầu vào không được truyền hoặc tải trọng XML được truyền dưới dạng một phần của yêu cầu API đến API Proxy có chính sách XSLTransform bị trống.

Thông báo lỗi mẫu

{
    "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"
        }
    }
}

Chẩn đoán

  1. Xác định tệp XSL mà chính sách Biến đổi XML không đánh giá được và lý do thất bại. Nếu tải trọng XML đầu vào không được truyền hoặc bị trống, lý do thất bại sẽ cho biết rằng có một Kết thúc sớm của tài liệu trong khi phân tích cú pháp. Bạn có thể tìm thấy tất cả thông tin này trong phần tử faultstring của phản hồi lỗi. Ví dụ: trong faultstring sau đây, tệp XSL là XSL-Transform.xsl và lý do thất bại là Premature end of document while parsing at line 1 (possibly around char 0). Lỗi đó có nghĩa là tải trọng XML không được truyền hoặc bị trống.

        "faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Premature end of document while parsing at line 1(possibly  around char 0)\""
    
  2. Xác định xem tải trọng XML đầu vào đã được truyền dưới dạng một phần của yêu cầu có trống hay không. Nếu tải trọng đầu vào không được truyền hoặc bị trống, thì đó là nguyên nhân gây ra lỗi.

    Trong yêu cầu ví dụ bên dưới, tải trọng yêu cầu (tức là phần nội dung yêu cầu) do người dùng gửi là trống.

    Ví dụ:

    curl -v "http://<org>-<env>.apigee.net/v1/xsltransform" -H "Content-Type: application/xml"
    

    Vì tải trọng đầu vào XML trống, nên bạn sẽ gặp lỗi:

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

Độ phân giải

Đảm bảo rằng dữ liệu đầu vào được truyền đến chính sách XSLTransform là một tải trọng XML hợp lệ và không trống.

Để khắc phục vấn đề với chính sách XSLTransform mẫu, hãy truyền một tải trọng XML hợp lệ. Ví dụ:

  1. Tạo một tệp có tên là city.xml với nội dung sau:

    <?xml version="1.0" encoding="UTF-8"?>
    <root>
       <City>Bengaluru</City>
       <Name>Apigee</Name>
       <Pincode>560016</Pincode>
    </root>
    
  2. Thực hiện lệnh gọi API bằng lệnh cURL như sau:

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

Nguyên nhân: XML đầu vào không đúng định dạng

Tải trọng XML đầu vào được truyền dưới dạng một phần của yêu cầu API đến chính sách XSLTransform bị sai định dạng hoặc không hợp lệ.

Thông báo lỗi mẫu

{
    "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"
        }
    }
}

Chẩn đoán

  1. Xác định tệp XSL mà chính sách Biến đổi XML không đánh giá được và lý do dẫn đến lỗi. Nếu tải trọng XML đầu vào không đúng định dạng, thì lý do khiến yêu cầu không thành công sẽ cho biết có một ký tự không mong muốn. Bạn có thể tìm thấy tất cả thông tin này trong phần tử faultstring của phản hồi lỗi. Ví dụ: trong faultstring sau đây, tệp XSL là XSL-Transform.xsl và lý do thất bại là Unexpected char while looking for open tag ('&lt;') character. Tức là thiếu "<" trong tải trọng XML.

    "faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Unexpected char while looking for open tag ('&lt;') character\""
    
  2. Kiểm tra tải trọng XML đầu vào được truyền đến chính sách XSLTransform và xem tải trọng đó có nội dung XML hợp lệ hay không. Nếu tải trọng đầu vào không phải là XML hợp lệ, thì đó là nguyên nhân gây ra lỗi.

    Trong yêu cầu ví dụ bên dưới, tải trọng đầu vào (tức là phần nội dung yêu cầu) do người dùng gửi là không hợp lệ.

    Ví dụ:

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

    Những nơi có city.xml:

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

    Vì tải trọng đầu vào là JSON chứ không phải XML hợp lệ, nên bạn sẽ nhận được lỗi:

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

Độ phân giải

Đảm bảo rằng dữ liệu đầu vào được truyền đến chính sách XSLTransform là một tải trọng XML hợp lệ và không trống.

Để khắc phục vấn đề với chính sách XSLTransform mẫu, hãy truyền một tải trọng XML hợp lệ. Ví dụ:

  1. Sửa đổi tệp city.xml để có nội dung trong XML như minh hoạ bên dưới:

    <?xml version="1.0" encoding="UTF-8"?>
    <root>
       <City>Bengaluru</City>
       <Name>Apigee</Name>
       <Pincode>560016</Pincode>
    </root>
    
  2. Thực hiện lệnh gọi API bằng lệnh cURL như sau:

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

Nguyên nhân: Tiền tố không hợp lệ

Tải trọng XML đầu vào được truyền đến chính sách XSLTransform có một phần tử không được xác định là tiền tố trong tệp XSL được chỉ định trong chính sách.

Thông báo lỗi mẫu

{
    "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"
        }
    }
}

Chẩn đoán

  1. Xác định tệp XSL mà chính sách Biến đổi XML không thể đánh giá và lý do dẫn đến lỗi. Trong trường hợp này, lý do khiến yêu cầu không thành công sẽ cho biết rằng có một tiền tố chưa được phân giải tại một số dòng cụ thể trong tải trọng XML đầu vào. Bạn có thể tìm thấy tất cả thông tin này trong phần tử faultstring của phản hồi lỗi. Ví dụ: trong faultstring sau đây, tệp XSL là XSL-Transform.xsl, lý do thất bại là Unresolved Prefix và số dòng là 1.

    "faultstring":"Evaluation of XSL XSL-Transform.xsl failed with reason: \"Unresolved Prefix at line 1(possibly  around char 270)\""
    
  2. Kiểm tra nội dung của tệp XSL (được xác định ở bước 1 ở trên) và tải trọng XML đầu vào. Nếu tiền tố được dùng trong số dòng (được xác định ở bước 1 nêu trên) của tải trọng XML đầu vào không có trong tệp XSL, thì đó là nguyên nhân gây ra lỗi.

    Sau đây là XSL mẫu và tải trọng XML tương ứng dẫn đến lỗi:

    XSL-Transform.xsl
    
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
      <xsl:output method="text"/>
      <xsl:variable name="newline">
       <xsl:text>
       </xsl:text>
      </xsl:variable>
      <xsl:template match="/">
      <xsl:text>&lt;Life&gt;</xsl:text>
        <xsl:value-of select="$newline"/>
        <xsl:text>Here are the odd-numbered items from the list:</xsl:text>
        <xsl:value-of select="$newline"/>
        <xsl:for-each select="list/listitem">
          <xsl:if test="(position() mod 2) = 1">
            <xsl:number format="1. "/>
            <xsl:value-of select="."/>
            <xsl:value-of select="$newline"/>
          </xsl:if>
        </xsl:for-each>
      <xsl:text>&lt;/Life&gt;</xsl:text>
    </xsl:template>
    </xsl:stylesheet>
    

    Tải trọng XML đầu vào

    <?xml version="1.0"?>
    <Life:Books>
      <title>A few of my favorite albums</title>
      <listitem>Beat Crazy</listitem>
      <listitem>Here Come the Warm Jets</listitem>
      <listitem>Kind of Blue</listitem>
      <listitem>London Calling</listitem>
    </Life:Books>
    

    Tải trọng XML mẫu minh hoạ ở trên chứa một phần tử <Life:Books>. Lưu ý rằng XSL không có tiền tố này. Thay vào đó, tiền tố của tệp này là <xsl:text>&lt;Life&gt;</xsl:text>. Do đó, bạn sẽ gặp lỗi:

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

Độ phân giải

Đảm bảo rằng tải trọng XML đầu vào được truyền đến chính sách XSLTransform có tất cả các định dạng phần tử được xác định là tiền tố trong tệp XSL được dùng trong chính sách.

Để khắc phục tệp XML mẫu nêu trên, bạn có thể sửa đổi tệp như minh hoạ dưới đây:

Tải trọng XML đầu vào đã cập nhật

<?xml version="1.0"?>
<Life>
  <title>A few of my favorite albums</title>
  <listitem>Beat Crazy</listitem>
  <listitem>Here Come the Warm Jets</listitem>
  <listitem>Kind of Blue</listitem>
  <listitem>London Calling</listitem>
</Life>