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 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ể 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 Chuyển đổi XSL đượ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 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, 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 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 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 Biến đổi XSL hiển thị ở trên sẽ thực thi trong luồng yêu cầu. Hãy nhớ rằng biến response được sử 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"
      }
  }
}

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

{
    "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 BIITransform 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 {8/}. Có thể có nhiều nguyên nhân khiến chính sách XSLTransform 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. Bảng sau đây 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 bằng 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 trống.
Tệp XML đầu vào có định dạng không đú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 {8/}.

Nguyên nhân: Không có 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 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.

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

{
    "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 phần tử faultstring của phản hồi lỗi. Ví dụ: trong faultstring sau, 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 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 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 bị 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à 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. 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 chuyển dưới dạng một phần của yêu cầu API tới chính sách {8/}Transform 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 không đánh giá được. 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, tệp XSL là XSL-Transform.xsl và lý do lỗi 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 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 mẫu bên dưới, tải trọng đầu vào (tức là nội dung yêu cầu) mà 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 chứ 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 XSLTransform mẫu, hãy truyề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ạ 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ệ

Trọng tải 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.

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

{
    "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 {8/} không thể đánh giá được bằng Chính sách chuyển đổi XML 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 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 XSL là XSL-Transform.xsl, 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 {8/} (được 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 XSL, thì đó là nguyên nhân gây ra lỗi.

    Dưới đâ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>
    

    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>
    

    Gói dữ liệu XML mẫu ở 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 đó, thuộc tính 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 vào chính sách {8/}Transform có tất cả các định dạng phần tử được xác định là tiền tố trong tệp {8/} được dùng trong chính sách.

Để khắc phục tệp XML mẫu hiển thị ở trên, bạn có thể sửa đổi tệp như sau:

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>