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 Transform नीति एक्सएमएल में, पुष्टि करें कि <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 Transform नीति को लागू किया जा रहा है.

  4. अगर वैरिएबल इनमें से कोई एक है:

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

    तो यही गड़बड़ी की वजह है.

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

    response वैरिएबल, अनुरोध के फ़्लो में मौजूद नहीं है. इसलिए, आपको यह गड़बड़ी कोड मिलता है:

    steps.xsl.XSLSourceMessageNotAvailable
    

रिज़ॉल्यूशन

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

ऊपर दी गई XSL Transform नीति के उदाहरण को ठीक करने के लिए, आपके पास <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"
        }
    }
}

संभावित कारण

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

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

    यहां 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>