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 thông báo hoặc biến chuỗi được chỉ định trong phần tử <Source> của chính sách Chuyển đổi NDK là:

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

Ví dụ: lỗi này xảy ra nếu chính sách chuyển đổi NDK được cho là đượ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, biến này 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 Chuyển đổi NDK nơi lỗi xảy ra 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 XML của chính sách chuyển đổi NDK 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 NDK sau đây chỉ định biến có tên response trong phần tử <Source>, khớp với biến 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 NDK đang được thực thi hay không.

  4. Nếu biến đó là:

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

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

    Ví dụ: giả sử chính sách Chuyển đổi NDK 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 ví dụ. Biến response chỉ có trong quy trình 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 NDK 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.

Để chỉnh sửa ví dụ về chính sách Chuyển đổi NDK được hiển thị ở trên, bạn có thể sửa đổi phần tử <Source> để sử dụng biến request, vì phần tử 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 SHORTTransform không thành công/không thể chuyển đổi tệp XML đầu vào dựa trên quy tắc chuyển đổi được cung cấp trong tệp NDK. Có thể có nhiều nguyên nhân khác nhau khiến chính sách NDKTransform không thành công. Lý do không thành công 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 dẫn đến lỗi này – Tiền tố không hợp lệ – và được giải thích kèm theo ví dụ.
Nguyên nhân Nội dung 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 để trống.
XML đầu vào không đúng định dạng 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ó tiền tố chưa được xác định trong tệp NDK.

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

Lỗi này xảy ra nếu tải trọng XML đầu vào không được chuyển hoặc tải trọng XML được chuyển như một phần của yêu cầu API tới Proxy API có chính sách DNSKEYTransform 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 NDK không thể đánh giá được bằng chính sách chuyển đổi XML và lý do không thành công. Nếu tải trọng XML đầu vào không được truyền hoặc rỗng, lý do không thành công sẽ cho biết rằng có sự 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 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 trong 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 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à nội dung yêu cầu) do người dùng gửi đang 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 chuyển đến chính sách NDKTransform 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 mẫu NDKTransform, hãy chuyể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 dưới dạng một phần của yêu cầu API tới chính sách NDKTransform không đúng đị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 CIBIL mà chính sách chuyển đổi XML không thể đánh giá và lý do không thành công. Nếu tải trọng XML đầu vào không đúng định dạng, lý do lỗi sẽ cho biết là 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 NDK là XSL-Transform.xsl và lý do không thành công là Unexpected char while looking for open tag ('&lt;') character. Tức 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 chuyển đến chính sách NDKTransform 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ì đó chính 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à 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
    

    Trong trường hợp city.xml hiện diện:

    {
       "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 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 NDKTransform 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 mẫu NDKTransform, 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 ở định dạng XML như minh hoạ dưới đây:

    <?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 đến chính sách NDKTransform có một phần tử chưa được xác định là tiền tố trong tệp NDK đượ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 NDK không thể đánh giá bằng chính sách Chuyển đổi XML và lý do không thành công. 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 giải quyết 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 NDK là XSL-Transform.xsl và lý do không thành công 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 NDK (xác định trong bước 1 ở trên) và tải trọng XML đầu vào. 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 NDK, thì đó là nguyên nhân gây ra lỗi.

    Dưới đây là NDK 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 trong ví dụ minh hoạ ở trên chứa phần tử <Life:Books>. Lưu ý rằng NDK không có tiền tố này. Thay vào đó, mã 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 ZapierTransform có tất cả các định dạng phần tử được xác định là tiền tố trong tệp NDK được dùng trong chính sách.

Để sửa tệp XML ví dụ hiển thị ở trên, bạn có thể sửa đổi tệp như được hiển thị dưới đây:

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

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