XSL Transform नीति के रनटाइम से जुड़ी गड़बड़ी की समस्या हल करना

आपको Apigee Edge दस्तावेज़ दिख रहा है.
Apigee X के दस्तावेज़ पर जाएं.
जानकारी

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 ट्रांसफ़ॉर्म नीति एक्सएमएल में, पुष्टि करें कि <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> एलिमेंट में सेट किया गया वैरिएबल, उस फ़्लो में मौजूद हो जहां नीति लागू होती है.

ऊपर दिए गए एक्सएमएल ट्रांसफ़ॉर्म की नीति के उदाहरण को ठीक करने के लिए, request वैरिएबल का इस्तेमाल करने के लिए <Source> एलिमेंट में बदलाव किया जा सकता है, क्योंकि यह अनुरोध फ़्लो में मौजूद है:

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

गड़बड़ी का कोड

steps.xsl.XSLEvaluationFailed

गड़बड़ी का जवाब

{
  "fault": {
      "faultstring": "Evaluation of XSL <var>XSL_file_name</var> failed with reason: \"<var>reason_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"
        }
    }
}

संभावित कारण

यह गड़बड़ी तब होती है, जब:

  • इनपुट एक्सएमएल पेलोड उपलब्ध नहीं है/गलत है.
  • XSLTransform नीति, इनपुट एक्सएमएल फ़ाइल को XSL फ़ाइल में दिए गए ट्रांसफ़ॉर्मेशन नियमों के आधार पर पूरी तरह नहीं बदल पाती. XSLTransform नीति के लागू न होने की कई वजहें हो सकती हैं. गड़बड़ी के मैसेज में, गड़बड़ी की वजह के बारे में ज़्यादा जानकारी मिलेगी. नीचे दी गई टेबल में, इस गड़बड़ी की एक वजह बताई गई है - अमान्य प्रीफ़िक्स. साथ ही, इसकी जानकारी एक उदाहरण के साथ दी गई है.
वजह ब्यौरा
इनपुट एक्सएमएल पेलोड उपलब्ध नहीं है इनपुट एक्सएमएल पेलोड को पास नहीं किया गया है या वह खाली है.
गलत फ़ॉर्मैट वाला इनपुट एक्सएमएल इनपुट एक्सएमएल पेलोड गलत है या अमान्य है.
अमान्य प्रीफ़िक्स इनपुट एक्सएमएल पेलोड में एक प्रीफ़िक्स है, जिसे XSL फ़ाइल में तय नहीं किया गया है.

वजह: इनपुट एक्सएमएल पेलोड उपलब्ध नहीं है

यह गड़बड़ी तब होती है, जब इनपुट एक्सएमएल पेलोड पास नहीं किया जाता है या 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. उस XSL फ़ाइल की पहचान करें जिसका आकलन एक्सएमएल बदलाव की नीति से नहीं किया जा सका और न होने की वजह क्या है. अगर इनपुट एक्सएमएल पेलोड को पास नहीं किया गया है या वह खाली है, तो गड़बड़ी की वजह से यह पता चलेगा कि पार्स करने के दौरान दस्तावेज़ का आखिरी हिस्सा नहीं मिला. आपको यह सारी जानकारी, गड़बड़ी के जवाब के faultstring एलिमेंट में मिल सकती है. उदाहरण के लिए, यहां दिए गए faultstring में, XSL फ़ाइल XSL-Transform.xsl है और गड़बड़ी की वजह Premature end of document while parsing at line 1 (possibly around char 0) है. इस गड़बड़ी का मतलब है कि एक्सएमएल पेलोड या तो पास नहीं हुआ है या खाली है.

        "faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Premature end of document while parsing at line 1(possibly  around char 0)\""
    
  2. यह पता लगाएं कि अनुरोध के हिस्से के तौर पर पास किया गया इनपुट एक्सएमएल पेलोड खाली है या नहीं. अगर इनपुट पेलोड पास नहीं किया गया है या वह खाली है, तो गड़बड़ी की वजह यही है.

    नीचे दिए गए अनुरोध के उदाहरण में, उपयोगकर्ता ने जो अनुरोध पेलोड (यानी अनुरोध का मुख्य हिस्सा) भेजा था वह खाली था.

    उदाहरण के लिए:

    curl -v "http://<org>-<env>.apigee.net/v1/xsltransform" -H "Content-Type: application/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 नीति को दिया गया इनपुट, मान्य एक्सएमएल पेलोड हो और वह खाली न हो.

XSLTransform नीति के सैंपल से जुड़ी समस्या ठीक करने के लिए, मान्य एक्सएमएल पेलोड पास करें. उदाहरण के लिए:

  1. city.xml नाम की फ़ाइल बनाएं और उसमें यह कॉन्टेंट शामिल करें:

    <?xml version="1.0" encoding="UTF-8"?>
    <root>
       <City>Bengaluru</City>
       <Name>Apigee</Name>
       <Pincode>560016</Pincode>
    </root>
    
  2. cURL निर्देश का इस्तेमाल करके, इस तरह एपीआई कॉल करें:

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

वजह: गलत फ़ॉर्मैट वाला इनपुट एक्सएमएल

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. उस XSL फ़ाइल की पहचान करें जिसका आकलन, एक्सएमएल ट्रांसफ़ॉर्म नीति की मदद से नहीं किया जा सका और इसकी वजह बताएं. अगर इनपुट एक्सएमएल पेलोड गलत है, तो फ़ेल होने की वजह से यह पता चलेगा कि कोई वर्ण मौजूद नहीं है. आपको यह सारी जानकारी, गड़बड़ी के जवाब के faultstring एलिमेंट में मिल सकती है. उदाहरण के लिए, यहां दिए गए faultstring में, XSL फ़ाइल XSL-Transform.xsl है और गड़बड़ी की वजह Unexpected char while looking for open tag ('&lt;') character है. इसका मतलब है कि एक्सएमएल पेलोड में "<" मौजूद नहीं है.

    "faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Unexpected char while looking for open tag ('&lt;') character\""
    
  2. XSLTransform नीति को पास किए गए इनपुट एक्सएमएल पेलोड की जांच करें और देखें कि उसमें मान्य एक्सएमएल कॉन्टेंट है या नहीं. अगर इनपुट पेलोड मान्य एक्सएमएल नहीं है, तो गड़बड़ी की यही वजह है.

    नीचे दिए गए अनुरोध के उदाहरण में, उपयोगकर्ता ने जो इनपुट पेलोड (यानी अनुरोध का मुख्य हिस्सा) भेजा था वह अमान्य था.

    उदाहरण के लिए:

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

    जहां city.xml:

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

    इनपुट पेलोड, JSON है और मान्य एक्सएमएल नहीं है. इसलिए, आपको गड़बड़ी का यह मैसेज मिलता है:

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

रिज़ॉल्यूशन

पक्का करें कि XSLTransform नीति में दिया गया इनपुट मान्य एक्सएमएल पेलोड है और खाली नहीं है.

सैंपल XSLTransform नीति से जुड़ी समस्या को ठीक करने के लिए, कोई मान्य एक्सएमएल पेलोड पास करें. उदाहरण के लिए:

  1. city.xml फ़ाइल में बदलाव करके, कॉन्टेंट को एक्सएमएल में सेव करें, जैसा कि यहां दिखाया गया है:

    <?xml version="1.0" encoding="UTF-8"?>
    <root>
       <City>Bengaluru</City>
       <Name>Apigee</Name>
       <Pincode>560016</Pincode>
    </root>
    
  2. cURL कमांड का इस्तेमाल करके, एपीआई कॉल करने के लिए यह तरीका अपनाएं:

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

वजह: अमान्य प्रीफ़िक्स

XSLTransform नीति को पास किए गए इनपुट एक्सएमएल पेलोड में एक एलिमेंट है, जिसे नीति में बताई गई एक्सएमएल फ़ाइल में प्रीफ़िक्स के तौर पर नहीं बताया गया है.

गड़बड़ी के मैसेज का उदाहरण

{
    "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. उस एक्सएमएल फ़ाइल की पहचान करें जिसका आकलन, एक्सएमएल ट्रांसफ़ॉर्म नीति की मदद से नहीं किया जा सका और इसकी वजह बताएं. इस मामले में, गड़बड़ी की वजह से यह पता चलता है कि इनपुट एक्सएमएल पेलोड में किसी खास लाइन नंबर पर, ऐसा प्रीफ़िक्स है जिसे हल नहीं किया गया है. आपको यह सारी जानकारी, गड़बड़ी के जवाब के 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 में पहचानी गई) में इस्तेमाल किया गया प्रीफ़िक्स, एक्सएसएल फ़ाइल में मौजूद नहीं है, तो गड़बड़ी की वजह यही है.

    यहां एक्सएमएल स्टाइलशीट का सैंपल और उससे जुड़ा एक्सएमएल पेलोड दिया गया है, जिसकी वजह से गड़बड़ी हुई है:

    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>
    

    एक्सएमएल पेलोड डालें

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

    ऊपर दिखाए गए एक्सएमएल पेलोड के उदाहरण में एक एलिमेंट <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 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>