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.
Chuyển đến tài liệu về 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 tin nhắn biến hoặc chuỗi được chỉ định trong phần tử <Source> của chính sách Chuyển đổi PPID là:

  • Không thuộc phạm vi (không có trong luồng cụ thể mà chính sách đang được thực thi)
  • Không thể giải quyết (không xác định)

Ví dụ: lỗi này xảy ra nếu chính sách Chuyển đổi BII được cho là sẽ được 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 có trong luồng yêu cầu.

Chẩn đoán

  1. Xác định chính sách Chuyển đổi BII trong trường hợp 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 các trường hợp sau faultstring, 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 Chuyển đổi XSL 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 Chuyển đổi PPID sau chỉ định một biến có tên là response trong phần tử <Source>. Biến này 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 sử dụng trong phần tử <Source> có được xác định và có sẵn trong luồng mà chính sách Chuyển đổi XSL đang được thực thi hay không.

  4. Nếu biến là:

    • Ngoài phạm vi (không có trong luồng cụ thể mà 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 Chuyển đổi BII được hiển thị ở trên được cho là 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 Chuyển đổi XSL 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 Chuyển đổi XSL mẫ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:

  • Không có/không đúng định dạng tải trọng XML đầu vào.
  • 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ó rất nhiều các nguyên nhân khác nhau khiến chính sách PPIDTransform không thành công. Lý do lỗi trong thông báo lỗi sẽ cung cấp thêm thông tin về nguyên nhân. Nội dung sau đây bảng liệt kê một nguyên nhân gây ra lỗi này – Tiền tố không hợp lệ – và được giải thích với ví dụ.
Nguyên nhân Mô tả
Không thể tải dữ liệu XML đầu vào Tải trọng XML đầu vào không được truyền hoặc bị trống.
Tệp XML đầu vào có định dạng không đúng Trọng tải 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ó tiền tố không được xác định trong tệp {8/}.

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 trong yêu cầu API đến Proxy API có chính sách XSLTransform 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 Chuyển đổi XML không thể đánh giá và lý do không đánh giá được. Nếu tải trọng XML đầu vào không được truyền hoặc trống, thì lý do không thành công 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 faultstring của phản hồi lỗi. Ví dụ: trong faultstring sau, thuộc tính Tệp PPID là XSL-Transform.xsl và lý do không thành công 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 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 như một phần của yêu cầu hay chưa là trống. Nếu tải trọng đầu vào không được truyền hoặc trống, thì đó là nguyên nhân gây ra lỗi.

    Trong yêu cầu mẫu bên dưới, tải trọng yêu cầu (tức là nội dung yêu cầu) mà 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 bị 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à 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 tải trọng XML hợp lệ. Ví dụ:

  1. Tạo một tệp có tên 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 như một phần của yêu cầu API vào chính sách VASTTransform không đúng định dạng hoặc không hợp lệ.

Ví dụ về thông báo lỗi

{
    "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 {8/} không thể đánh giá được bằng chính sách Chuyển đổi XML và lý do thất bại. Nếu tải trọng XML đầu vào có định dạng không đúng, thì lý do lỗi 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 PPID là XSL-Transform.xsl, và lý do cho lỗi là Unexpected char while looking for open tag ('&lt;') character. Đó chính là "<" bị 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 liệu 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 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
    

    Trong đó city.xml là:

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

    Vì tải trọng đầu vào là JSON và không phải XML hợp lệ nên bạn sẽ gặp 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 VASTTransform mẫu, hãy chuyển 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 chuyển vào chính sách {8/}Transform có một phần tử không được được xác định là tiền tố trong tệp {8/} đượ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 Chuyển đổi XML không thể đánh giá và lý do không đánh giá được. Trong trường hợp này, lý do 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, tệp ABI là XSL-Transform.xsl và lý do không thành công là Unresolved Prefix và dòng số điện thoại 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 PPID (được xác định trong bước #1 ở trên) và dữ liệu đầu vào tải trọng XML. Nếu tiền tố được sử dụng trong số dòng (xác định ở bước 1 ở trên) của tải trọng XML đầu vào không tồn tại trong tệp XSL, thì đó là nguyên nhân gây ra lỗi.

    Dưới đây là BII 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>
    

    Nhập trọng tải XML

    <?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 hiển thị ở trên chứa phần tử <Life:Books>. Lưu ý rằng XSL không có tiền tố này. Thay vào đó, lớp này có tiền tố 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ả đị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 ở trên, bạn có thể sửa đổi tệp như sau:

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

<?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>