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