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

Apigee Edge का दस्तावेज़ देखा जा रहा है.
Apigee X के दस्तावेज़ पर जाएं.
info

पर क्लिक करें.

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> एलिमेंट में दिया गया message या स्ट्रिंग वैरिएबल इनमें से कोई एक हो:

  • स्कोप से बाहर है (उस फ़्लो में उपलब्ध नहीं है जहां नीति लागू की जा रही है)
  • हल नहीं किया जा सकता (तय नहीं किया गया है)

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

संक्रमण की जांच

  1. उस XSL ट्रांसफ़ॉर्मेशन नीति की पहचान करें जिसमें गड़बड़ी हुई है. साथ ही, उस वैरिएबल का नाम बताएं जो उपलब्ध नहीं है. आपको ये दोनों आइटम, गड़बड़ी के जवाब के faultstring एलिमेंट में मिलेंगे. उदाहरण के लिए, यहां दिए गए faultstring में, नीति का नाम xslt है और वैरिएबल response है:

    faultstring": "response message is not available for XSL: xslt
    
  2. XSL ट्रांसफ़ॉर्म नीति की जिस एक्सएमएल फ़ाइल में गड़बड़ी हुई है उसमें यह पुष्टि करें कि <Source> एलिमेंट में सेट किए गए वैरिएबल का नाम, गड़बड़ी की स्ट्रिंग (ऊपर दिया गया पहला चरण) में पहचाने गए वैरिएबल के नाम से मेल खाता हो. उदाहरण के लिए, नीचे दी गई 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> एलिमेंट में सेट किया गया वैरिएबल, उस फ़्लो में तय किया गया हो जहां नीति लागू होती है.

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

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

संभावित कारण

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

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

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

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

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

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

ऊपर दिखाई गई एक्सएमएल फ़ाइल के उदाहरण को ठीक करने के लिए, फ़ाइल में इस तरह बदलाव किया जा सकता है:

अपडेट किया गया इनपुट एक्सएमएल पेलोड

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