एक्सएमएल से JSON नीति के रनटाइम में गड़बड़ी की समस्या हल करना

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

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

SourceUnavailable

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

steps.xml2json.SourceUnavailable

गड़बड़ी के जवाब का मुख्य हिस्सा

{
    "fault": {
        "faultstring": "XMLToJSON[policy_name]: Source [source_variable] is not available",
        "detail": {
            "errorcode": "steps.xmltojson.SourceUnavailable"
        }
    }
}

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

{
    "fault": {
        "faultstring": "XMLToJSON[Convert-XMLToJSON]: Source response is not available",
        "detail": {
            "errorcode": "steps.xml2json.SourceUnavailable"
        }
    }
}

वजह

यह गड़बड़ी तब होती है, जब XML से JSON फ़ाइल में बदलने की नीति के <Source> एलिमेंट में तय किया गया message या स्ट्रिंग वैरिएबल इनमें से कोई एक हो:

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

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

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

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

    "faultstring": "XMLToJSON[Convert-XMLToJSON]: Source response is not available"
    
  2. एक्सएमएल से JSON में बदलने की नीति के तहत, एक्सएमएल फ़ाइल में यह पुष्टि करें कि <Source> एलिमेंट में सेट किए गए वैरिएबल का नाम, गड़बड़ी की स्ट्रिंग (ऊपर दिया गया पहला चरण) में पहचाने गए वैरिएबल के नाम से मेल खाता हो. उदाहरण के लिए, XML से JSON में बदलने की यह नीति, <Source> एलिमेंट में response नाम का एक वैरिएबल तय करती है. यह वैरिएबल, faultstring में मौजूद वैरिएबल से मेल खाता है:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <XMLToJSON async="false" continueOnError="false" enabled="true" name="Convert-XMLToJSON">
        <DisplayName>Convert-XMLToJSON</DisplayName>
        <Properties/>
        <Format>google</Format>
        <OutputVariable>response</OutputVariable>
        <Source>response</Source>
    </XMLToJSON>
    
  3. यह तय करें कि <Source> एलिमेंट में इस्तेमाल किया गया वैरिएबल, उस फ़्लो में तय किया गया है या नहीं जिसमें XML से JSON में बदलने की नीति लागू की जा रही है.

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

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

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

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

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

    steps.xml2json.SourceUnavailable
    

रिज़ॉल्यूशन

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

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

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<XMLToJSON async="false" continueOnError="false" enabled="true" name="Convert-XMLToJSON">
    <DisplayName>Convert-XMLToJSON</DisplayName>
    <Properties/>
    <Format>google</Format>
    <OutputVariable>response</OutputVariable>
    <Source>request</Source>
</XMLToJSON>

ExecutionFailed

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

steps.xml2json.ExecutionFailed

गड़बड़ी के जवाब का मुख्य हिस्सा

{
    "fault": {
        "faultstring": "XMLToJSON[policy_name]: Execution failed. reason: Premature end of document while parsing at line [line_number](possibly  around char [character_number])",
        "detail": {
            "errorcode": "steps.xml2json.ExecutionFailed"
        }
    }
}

संभावित कारण

इस गड़बड़ी की ये वजहें हो सकती हैं:

Cause ब्यौरा
इनपुट पेलोड मौजूद नहीं है इनपुट पेलोड (एक्सएमएल) खाली है.
अमान्य या गलत तरीके से बनाया गया इनपुट एक्सएमएल से JSON फ़ॉर्मैट में बदलने की नीति में पास किया गया इनपुट (एक्सएमएल) अमान्य है या इसमें कोई बदलाव किया गया है.

वजह: इनपुट पेलोड मौजूद नहीं है

अगर एक्सएमएल से JSON में बदलने की नीति के तहत, <Source> एलिमेंट में तय किए गए वैरिएबल का कॉन्टेंट (पेलोड) खाली है, तो यह गड़बड़ी होती है.

उदाहरण के लिए, अगर एक्सएमएल से JSON में बदलने की नीति में <Source> एलिमेंट को request या response वैरिएबल के तौर पर सेट किया गया है और इसमें एक्सएमएल पेलोड शामिल होना चाहिए, तो पेलोड खाली होने पर यह गड़बड़ी होती है.

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

  1. उस एक्सएमएल से JSON फ़ाइल बनाने की नीति का पता लगाएं जिसमें गड़बड़ी हुई है. यह जानकारी, गड़बड़ी के जवाब के faultstring एलिमेंट में देखी जा सकती है. उदाहरण के लिए, यहां दिए गए faultstring में, नीति का नाम Convert-XMLToJSON है:

    "faultstring": "XMLToJSON[Convert-XMLToJSON]: Execution failed. reason: Premature end of document while parsing at line 1(possibly  around char 0)"
    
  2. नीति के उल्लंघन वाले एक्सएमएल को JSON में बदलने के लिए इस्तेमाल किए गए एक्सएमएल में मौजूद <Source> एलिमेंट की जांच करें. साथ ही, तय किए गए वैरिएबल का पता लगाएं. उदाहरण के लिए, एक्सएमएल से JSON में बदलने की इस नीति में, <Source> एलिमेंट को अनुरोध पर सेट किया गया है:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <XMLToJSON async="false" continueOnError="false" enabled="true" name="Convert-XMLToJSON">
        <DisplayName>Convert-XMLToJSON</DisplayName>
        <Properties/>
        <Options>
            <RecognizeNumber>true</RecognizeNumber>
            <RecognizeBoolean>true</RecognizeBoolean>
            <RecognizeNull>true</RecognizeNull>
        </Options>
        <OutputVariable>request</OutputVariable>
        <Source>request</Source>
    </XMLToJSON>
    
  3. देखें कि XMLToJSON नीति में <Source> एलिमेंट के लिए तय किया गया वैरिएबल खाली है या नहीं. अगर यह खाली है, तो गड़बड़ी की वजह यही है.

    ऊपर दिए गए उदाहरण में, XML से JSON फ़ॉर्मैट में बदलने की नीति में, क्लाइंट ने अनुरोध का पेलोड (यानी कि अनुरोध का मुख्य हिस्सा) खाली भेजा था.

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

    curl -v "http://<org>-<env>.apigee.net/v1/testxmltojson" -H "Content-Type: application/xml"
    

    एक्सएमएल अनुरोध का पेलोड खाली होने की वजह से, आपको यह गड़बड़ी कोड मिलता है:

    steps.xml2json.ExecutionFailed
    

    यह गड़बड़ी तब भी हो सकती है, जब <Source> एलिमेंट को रिस्पॉन्स पर सेट किया गया हो, लेकिन बैकएंड सर्वर से खाली पेलोड पास किया गया हो.

रिज़ॉल्यूशन

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

एक्सएमएल से JSON में बदलने की नीति के उल्लंघन की समस्या को ठीक करने के लिए, मान्य एक्सएमएल पेलोड पास करें. उदाहरण के लिए:

  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/testxmltojson" -H "Content-Type: application/xml" -X POST -d @company.xml
    

वजह: गलत या अमान्य इनपुट

अगर एक्सएमएल से JSON में बदलने की नीति, अमान्य या गलत फ़ॉर्मैट वाले इनपुट को पार्स करती है, तो आपको यह गड़बड़ी दिखेगी.

उदाहरण के लिए, अगर नीचे दिए गए अमान्य एक्सएमएल को XML से JSON में बदलने की नीति के इनपुट के तौर पर दिया जाता है,

<?xml version="1.0" encoding="UTF-8"?>
<root>
   <City>Bengaluru</City>
   <Name>Apigee</Name>
   <Pincode>560016</Pincode>

आपको यह गड़बड़ी दिखेगी:

"faultstring": "XMLToJSON[Convert-XMLToJSON]: Execution failed. reason: Premature end of document while parsing at line 6(possibly  around char 0)"

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

  1. उस एक्सएमएल से JSON फ़ाइल बनाने की नीति का पता लगाएं जिसमें गड़बड़ी हुई है. यह जानकारी, गड़बड़ी के जवाब के faultstring एलिमेंट में देखी जा सकती है. उदाहरण के लिए, यहां दिए गए faultstring में, नीति का नाम Convert-XMLToJSON है:

    "faultstring": "XMLToJSON[Convert-XMLToJSON]: Execution failed. reason: Premature end of document while parsing at line 6(possibly  around char 0)"
    
  2. एक्सएमएल से JSON में बदलने की नीति के उल्लंघन वाले एक्सएमएल में दिए गए <Source> एलिमेंट की जांच करें. उदाहरण के लिए, एक्सएमएल से JSON में बदलने की इस नीति में, <Source> एलिमेंट को request वैरिएबल पर सेट किया गया है:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <XMLToJSON async="false" continueOnError="false" enabled="true" name="Convert-XMLToJSON">
        <DisplayName>Convert-XMLToJSON</DisplayName>
        <Properties/>
        <Options>
            <RecognizeNumber>true</RecognizeNumber>
            <RecognizeBoolean>true</RecognizeBoolean>
            <RecognizeNull>true</RecognizeNull>
        </Options>
        <OutputVariable>request</OutputVariable>
        <Source>request</Source>
    </XMLToJSON>
    
  3. इस नीति से यह पुष्टि की जाती है कि XML To JSON नीति के <Source> एलिमेंट में दिया गया इनपुट, मान्य एक्सएमएल पेलोड है या नहीं. अगर इनपुट अमान्य है या उसमें कोई बदलाव किया गया है, तो यह गड़बड़ी की वजह है.

    ऊपर दिए गए उदाहरण में, एक्सएमएल से JSON में बदलने की नीति के तहत, फ़ाइल city.xml के ज़रिए Extract Variables नीति को यह अमान्य एक्सएमएल पास किया गया था:

    <?xml version="1.0" encoding="UTF-8"?>
    <root>
       <City>Bengaluru</City>
       <Name>Apigee</Name>
       <Pincode>560016</Pincode>
    

    यहां एपीआई कॉल का एक सैंपल दिया गया है. इससे पता चलता है कि अनुरोध कैसे पास किया गया था:

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

    एपीआई को भेजा गया एक्सएमएल पेलोड अमान्य है, क्योंकि एक्सएमएल में <root> एलिमेंट के लिए कोई एंड टैग नहीं है. इसलिए, आपको गड़बड़ी का यह कोड मिलता है:

    steps.xml2json.ExecutionFailed
    

    यह गड़बड़ी तब भी हो सकती है, जब <Source> एलिमेंट को रिस्पॉन्स पर सेट किया गया हो, लेकिन बैकएंड सर्वर से मिला XML रिस्पॉन्स पेलोड अमान्य हो या गलत फ़ॉर्मैट में हो.

रिज़ॉल्यूशन

पक्का करें कि <Source> एलिमेंट के ज़रिए, XML से JSON फ़ॉर्मैट में बदलने की नीति को दिया गया इनपुट मान्य हो और गलत तरीके से न बनाया गया हो.

ऊपर बताई गई, एक्सएमएल से JSON में बदलने की नीति से जुड़ी समस्या को ठीक करने के लिए, मान्य एक्सएमएल पेलोड अनुरोध को इस तरह पास करें:

<?xml version="1.0" encoding="UTF-8"?>
<root>
   <City>Bengaluru</City>
   <Name>Apigee</Name>
   <Pincode>560016</Pincode>
</root>

OutputVariableIsNotAvailable

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

steps.xml2json.OutputVariableIsNotAvailable

गड़बड़ी के जवाब का मुख्य हिस्सा

{
    "fault": {
        "faultstring": "XMLToJSON[policy_name]: Output variable is not available.",
        "detail": {
            "errorcode": "steps.xml2json.OutputVariableIsNotAvailable"
        }
    }
}

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

{
    "fault": {
        "faultstring": "XMLToJSON[Convert-XMLToJSON]: Output variable is not available.",
        "detail": {
            "errorcode": "steps.xml2json.OutputVariableIsNotAvailable"
        }
    }
}

वजह

यह गड़बड़ी तब होती है, जब XML से JSON नीति के <Source> एलिमेंट में तय किया गया वैरिएबल, स्ट्रिंग टाइप का होता है और <OutputVariable> एलिमेंट को तय नहीं किया जाता है. <OutputVariable> एलिमेंट तब ज़रूरी होता है, जब <Source> एलिमेंट में तय किया गया वैरिएबल string टाइप का हो.

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

  1. उस एक्सएमएल से JSON फ़ाइल बनाने की नीति का पता लगाएं जिसमें गड़बड़ी हुई है. यह आपको गड़बड़ी के जवाब के faultstring एलिमेंट में मिलेगा. उदाहरण के लिए, यहां दिए गए faultstring में, नीति का नाम Convert-XMLToJSON है:

    "faultstring": "XMLToJSON[Convert-XMLToJSON]: Output variable is not available."
    
  2. अगर एक्सएमएल से JSON में बदलने की नीति का पालन नहीं किया गया है, तो पुष्टि करें कि <OutputVariable> मौजूद है या नहीं.

    यहां एक्सएमएल से JSON में बदलने की नीति का एक सैंपल दिया गया है. इसमें <OutputVariable> एलिमेंट मौजूद नहीं है.

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <XMLToJSON async="false" continueOnError="false" enabled="true" name="Convert-XMLToJSON">
        <DisplayName>Convert-XMLToJSON</DisplayName>
        <Properties/>
        <Format>google</Format>
        <Source>TrackingNumber</Source>
    </XMLToJSON>
    
    
  3. <Source> एलिमेंट में दिए गए वैरिएबल का टाइप तय करें:

    1. एपीआई प्रॉक्सी बंडल में वह कोड ढूंढें जहां वैरिएबल को पहली बार तय किया गया था.
    2. जिस नीति में वैरिएबल को पहली बार तय किया गया है और भरा गया है उसके बारे में पता चलने के बाद, आपको उस वैरिएबल का टाइप तय करना होगा. इसके लिए, यह तरीका अपनाएं:
      1. टाइप एट्रिब्यूट की वैल्यू देखें (अगर मौजूद है).
      2. अगर टाइप एट्रिब्यूट मौजूद नहीं है, तो वैरिएबल को स्ट्रिंग माना जाता है.
    3. अगर वैरिएबल का टाइप string है, तो गड़बड़ी की वजह यही है. वेरिएबल रेफ़रंस में जाकर, सामान्य वैरिएबल और उनके टाइप के बारे में जानें.

    उदाहरण के लिए, ऊपर दी गई XML से JSON फ़ॉर्मैट में बदलने की नीति में TrackingNumber वैरिएबल देखें. यह स्ट्रिंग टाइप का होता है. अब, असाइन मैसेज नीति पर विचार करें. इसका इस्तेमाल, TrackingNumber नाम के वैरिएबल की वैल्यू सेट करने के लिए किया जाता है. इसे यहां दिखाया गया है:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <AssignMessage async="false" continueOnError="false" enabled="true" name="Assign_TrackingNumber">
        <DisplayName>Assign_TrackingNumber</DisplayName>
        <Properties/>
        <AssignVariable>
            <Name>TrackingNumber</Name>
            <Value><![CDATA[<Code>560075393539898</Code>]]></Value>
            <Ref/>
        </AssignVariable>
        <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
        <AssignTo createNew="false" transport="http" type="request"/>
    </AssignMessage>
    

    ध्यान दें कि <AssignVariable> के ज़रिए सेट किया गया वैरिएबल टाइप, स्ट्रिंग होता है. इसलिए, वैरिएबल TrackingNumber, स्ट्रिंग टाइप का है.

    अब याद करें कि TrackingNumber वैरिएबल का इस्तेमाल, XML से JSON में बदलने की नीति के <Source> एलिमेंट में किया जाता है:

    <Source>TrackingNumber</Source>
    

    TrackingNumber स्ट्रिंग टाइप का है और नीति में <OutputVariable> मौजूद नहीं है. इसलिए, आपको यह गड़बड़ी कोड मिलता है:

    steps.xml2json.OutputVariableIsNotAvailable
    

रिज़ॉल्यूशन

पक्का करें कि अगर XMLToJSON नीति के <Source> एलिमेंट में दिया गया वैरिएबल, स्ट्रिंग टाइप का है, तो इस मामले में <OutputVariable> एलिमेंट का होना ज़रूरी है.

ऊपर बताई गई, एक्सएमएल से JSON में बदलने की नीति को ठीक करने के लिए, <OutputVariable> एलिमेंट को शामिल करें. इसे यहां दिखाया गया है.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<XMLToJSON async="false" continueOnError="false" enabled="true" name="Convert-XMLToJSON">
    <DisplayName>Convert-XMLToJSON</DisplayName>
    <Properties/>
    <Format>google</Format>
    <OutputVariable>response</OutputVariable>
    <Source>TrackingNumber</Source>
</XMLToJSON>

InCompatibleTypes

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

steps.xml2json.InCompatibleTypes

गड़बड़ी के जवाब का मुख्य हिस्सा

{
    "fault": {
        "faultstring": "XMLToJSON[policy_name]: String can not be assigned to message type.",
        "detail": {
            "errorcode": "steps.xml2json.InCompatibleTypes"
        }
    }
}

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

{
    "fault": {
        "faultstring": "XMLToJSON[XMLToJSON_CheckType]: String can not be assigned to message type.",
        "detail": {
            "errorcode": "steps.xml2json.InCompatibleTypes"
        }
    }
}

वजह

यह गड़बड़ी तब होती है, जब <Source> एलिमेंट और <OutputVariable> एलिमेंट में तय किए गए वैरिएबल का टाइप एक जैसा नहीं होता. यह ज़रूरी है कि <Source> एलिमेंट और <OutputVariable> एलिमेंट में शामिल वैरिएबल का टाइप एक जैसा हो.

The valid types are message and string.

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

  1. उस एक्सएमएल से JSON फ़ाइल बनाने की नीति का पता लगाएं जिसमें गड़बड़ी हुई है. यह आपको गड़बड़ी के जवाब के faultstring एलिमेंट में मिलेगा. उदाहरण के लिए, यहां दिए गए faultstring में, नीति का नाम XMLToJSON_CheckType है:

    "faultstring": "XMLToJSON[XMLToJSON_CheckType]: String can not be assigned to message type."
    
  2. 'एक्सएमएल से JSON में बदलने की नीति' लागू न होने पर, <OutputVariable> में दी गई वैल्यू नोट करें.

    यहां XMLToJSON नीति का एक सैंपल दिया गया है, जिसमें <OutputVariable> एलिमेंट मौजूद नहीं है

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <XMLToJSON async="false" continueOnError="false" enabled="true" name="XMLToJSON_CheckType">
        <DisplayName>XMLToJSON_CheckType</DisplayName>
        <Properties/>
        <Format>google</Format>
        <OutputVariable>request</OutputVariable>
        <Source>TrackingNumber</Source>
    </XMLToJSON>
    
  3. <Source> और <OutputVariable> एलिमेंट में बताए गए वैरिएबल का टाइप तय करें:

    1. एपीआई प्रॉक्सी बंडल में वह कोड ढूंढें जहां इन वैरिएबल को पहली बार तय किया गया था.
    2. जिस नीति में वैरिएबल को पहली बार तय किया गया है और भरा गया है उसके बारे में पता चलने के बाद, आपको उस वैरिएबल का टाइप तय करना होगा. इसके लिए, यह तरीका अपनाएं:
      1. टाइप एट्रिब्यूट की वैल्यू देखें (अगर मौजूद है).
      2. अगर टाइप एट्रिब्यूट मौजूद नहीं है, तो वैरिएबल को स्ट्रिंग माना जाता है.
    3. अगर <Source> में तय किए गए वैरिएबल का टाइप string है, जबकि <OutputVariable> का टाइप मैसेज है या इसके उलट है, तो यह गड़बड़ी की वजह है. वेरिएबल रेफ़रंस में जाकर, सामान्य वैरिएबल और उनके टाइप के बारे में जानें.

    उदाहरण के लिए, Assign Message नीति का इस्तेमाल करके, TrackingNumber नाम के वैरिएबल के लिए वैल्यू सेट की जाती है. इसे यहां दिखाया गया है:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <AssignMessage async="false" continueOnError="false" enabled="true" name="Assign_TrackingNumber">
        <DisplayName>Assign_TrackingNumber</DisplayName>
        <Properties/>
        <AssignVariable>
            <Name>TrackingNumber</Name>
            <Value><![CDATA[<Code>560075393539898</Code>]]></Value>
            <Ref/>
        </AssignVariable>
        <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
        <AssignTo createNew="false" transport="http" type="request"/>
    </AssignMessage>
    

    ध्यान दें कि <AssignVariable> के ज़रिए सेट किया गया वैरिएबल टाइप, स्ट्रिंग होता है. इसलिए, वैरिएबल TrackingNumber, स्ट्रिंग टाइप का है.

    अब याद करें कि TrackingNumber वैरिएबल का इस्तेमाल, XMLToJSON नीति के <Source> एलिमेंट में किया जाता है:

    <Source>TrackingNumber</Source>
    

    इसी तरह, याद रखें कि request वैरिएबल का इस्तेमाल, XML से JSON फ़ॉर्मैट में बदलने की नीति के <OutputVariable> एलिमेंट में किया जाता है:

    <OutputVariable>request</OutputVariable>
    

    TrackingNumber का टाइप string है, जबकि response वैरिएबल का टाइप message है. इसलिए, ये दोनों टाइप एक-दूसरे के साथ काम नहीं करते. इसलिए, आपको यह गड़बड़ी कोड मिलता है:

    steps.xml2json.InCompatibleTypes
    

    ऊपर दी गई गड़बड़ी तब भी हो सकती है, जब <Source> एलिमेंट में मौजूद वैरिएबल का टाइप message हो, लेकिन <OutputVariable> एलिमेंट में मौजूद वैरिएबल का टाइप स्ट्रिंग हो.

रिज़ॉल्यूशन

पक्का करें कि <Source> एलिमेंट और <OutputVariable> एलिमेंट में तय किए गए वैरिएबल का टाइप हमेशा एक जैसा हो. यह ज़रूरी है कि <Source> एलिमेंट और <OutputVariable> एलिमेंट में शामिल वैरिएबल का टाइप एक जैसा हो.

ऊपर बताई गई XML से JSON में बदलने की नीति को ठीक करने के लिए, Assign Message Policy का इस्तेमाल करके string टाइप का दूसरा वैरिएबल TrackingNumber_output घोषित किया जा सकता है. साथ ही, इस वैरिएबल का इस्तेमाल XML से JSON में बदलने की नीति के <OutputVariable> एलिमेंट में किया जा सकता है.

'मैसेज असाइन करें' नीति में बदलाव किया गया:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign_TrackingNumber">
    <DisplayName>Assign_TrackingNumber</DisplayName>
    <Properties/>
    <AssignVariable>
        <Name>TrackingNumber</Name>
        <Value><![CDATA[<Code>560098</Code>]]></Value>
        <Ref/>
    </AssignVariable>
    <AssignVariable>
        <Name>TrackingNumber_output</Name>
        <Ref/>
    </AssignVariable>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

XMLToJSON नीति में बदलाव किया गया है:

  <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  <XMLToJSON async="false" continueOnError="false" enabled="true" name="XMLToJSON_CheckType">
      <DisplayName>XMLToJSON_CheckType</DisplayName>
      <Properties/>
      <Format>google</Format>
      <OutputVariable>TrackingNumber_output</OutputVariable>
      <Source>TrackingNumber</Source>
  </XMLToJSON>

InvalidSourceType

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

steps.xml2json.InvalidSourceType

गड़बड़ी के जवाब का मुख्य हिस्सा

{
    "fault": {
        "faultstring": "XMLToJSON[class invalid_class]: Invalid source type class invalid_class. Valid source types are [message, string].",
        "detail": {
            "errorcode": "steps.xml2json.InvalidSourceType"
        }
    }
}

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

{
    "fault": {
        "faultstring": "XMLToJSON[class java.lang.Integer]: Invalid source type class java.lang.Integer. Valid source types are [message, string].",
        "detail": {
            "errorcode": "steps.xml2json.InvalidSourceType"
        }
    }
}

वजह

यह गड़बड़ी तब होती है, जब <Source> एलिमेंट को तय करने के लिए इस्तेमाल किए गए वैरिएबल का टाइप अमान्य होता है.वैरिएबल के मान्य टाइप message और string हैं.

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

  1. XML से JSON फ़ॉर्मैट में बदलने की नीति में इस्तेमाल किए गए अमान्य सोर्स टाइप की पहचान करें. यह जानकारी, गड़बड़ी के मैसेज में देखी जा सकती है. उदाहरण के लिए, यहां दी गई गड़बड़ी में, अमान्य टाइप पूर्णांक है.

    "faultstring": "XMLToJSON[class java.lang.Integer]: Invalid source type class java.lang.Integer. Valid source types are [message, string]."
    
  2. उस एपीआई प्रॉक्सी में मौजूद, XML से JSON में बदलने की सभी नीतियों की जांच करें जहां गड़बड़ी हुई है. एक्सएमएल से JSON में बदलने की नीति के उल्लंघन की सूचना में, <Source> में दिए गए वैरिएबल का नाम नोट करें.

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <XMLToJSON async="false" continueOnError="false" enabled="true" name="XMLToJSON_CheckType">
        <DisplayName>XMLToJSON_CheckType</DisplayName>
        <Properties/>
        <Format>google</Format>
        <OutputVariable>response</OutputVariable>
        <Source>BookCode</Source>
    </XMLToJSON>
    
  3. <Source> एलिमेंट में दिए गए वैरिएबल का टाइप तय करें:

    1. एपीआई प्रॉक्सी बंडल में उस कोड का पता लगाएं जहां इस वैरिएबल को पहली बार तय किया गया था.
    2. जिस नीति में वैरिएबल को पहली बार तय किया गया है और भरा गया है उसके बारे में पता चलने के बाद, आपको उस वैरिएबल का टाइप तय करना होगा. इसके लिए, यह तरीका अपनाएं:
      1. टाइप एट्रिब्यूट की वैल्यू देखें (अगर मौजूद है).
      2. अगर टाइप एट्रिब्यूट मौजूद नहीं है, तो वैरिएबल को स्ट्रिंग माना जाता है.
    3. अगर <Source> में तय किए गए वैरिएबल का टाइप, message या string टाइप में से कोई नहीं है, तो गड़बड़ी की वजह यही है. वेरिएबल रेफ़रंस में जाकर, सामान्य वैरिएबल और उनके टाइप के बारे में जानें.

    उदाहरण के लिए, ExtractVariables नीति का इस्तेमाल करके, एक्सएमएल पेलोड से वैल्यू निकाली जाती है. साथ ही, वैरिएबल BookCode की वैल्यू को integer टाइप पर सेट किया जाता है. इसे यहां दिखाया गया है:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract_BookCode">
        <DisplayName>Extract_BookCode</DisplayName>
        <Properties/>
        <Source>request</Source>
        <XMLPayload stopPayloadProcessing="false">
            <Variable name="BookCode" type="integer">
                <XPath>/root/BookCode</XPath>
            </Variable>
        </XMLPayload>
    </ExtractVariables>
    

    अब याद करें कि BookCode वैरिएबल का इस्तेमाल, XML से JSON में बदलने की नीति के <Source> एलिमेंट में किया जाता है:

    <Source>BookCode</Source>
    

    इस वैरिएबल का टाइप Integer है, जो <Source> का मान्य टाइप नहीं है. इसलिए, एपीआई प्रॉक्सी में यह गड़बड़ी होती है:

    steps.xml2json.InvalidSourceType
    

रिज़ॉल्यूशन

पक्का करें कि <Source> एलिमेंट के लिए इस्तेमाल किए गए वैरिएबल का टाइप मान्य हो. मान्य <Source> टाइप message और string हैं.

XML से JSON में बदलने की नीति से जुड़ी ऊपर दी गई गड़बड़ी से बचने के लिए, request वैरिएबल का इस्तेमाल किया जा सकता है. यह message टाइप का होता है. इसके अलावा, किसी अन्य स्ट्रिंग का इस्तेमाल भी किया जा सकता है, जो मान्य एक्सएमएल पेलोड हो.