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

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

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

वजह

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

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

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

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

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

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

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

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

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

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

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

    steps.xml2json.SourceUnavailable
    

रिज़ॉल्यूशन

पक्का करें कि एक्सएमएल से 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/>
    <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> एलिमेंट के लिए तय किया गया वैरिएबल खाली है या नहीं. अगर यह फ़ील्ड खाली है, तो गड़बड़ी की यही वजह है.

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

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

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

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

    steps.xml2json.ExecutionFailed
    

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

रिज़ॉल्यूशन

पक्का करें कि <Source> एलिमेंट के ज़रिए, एक्सएमएल से 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 में बदलने की नीति, अमान्य या गलत फ़ॉर्मैट वाले इनपुट को पार्स करती है, तो आपको यह गड़बड़ी दिखती है.

उदाहरण के लिए, अगर एक्सएमएल से 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. पुष्टि करें कि एक्सएमएल से JSON में बदलने की नीति के <Source> एलिमेंट में दिया गया इनपुट, मान्य एक्सएमएल पेलोड है या नहीं. अगर इनपुट अमान्य या गलत है, तो गड़बड़ी की यही वजह है.

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

    <?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> एलिमेंट को 'रिस्पॉन्स' पर सेट किया गया हो, लेकिन बैकएंड सर्वर से मिला एक्सएमएल रिस्पॉन्स पेलोड अमान्य या गलत फ़ॉर्मैट में हो.

रिज़ॉल्यूशन

पक्का करें कि <Source> एलिमेंट की मदद से, एक्सएमएल से 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"
        }
    }
}

वजह

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

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

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

    "faultstring": "XMLToJSON[Convert-XMLToJSON]: Output variable is not available."
    
  2. XML से 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 है, तो गड़बड़ी की वजह यही है. वैरिएबल रेफ़रंस में, सामान्य वैरिएबल और उनके टाइप के बारे में जानकारी मिल सकती है.

    उदाहरण के लिए, ऊपर दी गई एक्सएमएल से 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 वैरिएबल का इस्तेमाल, एक्सएमएल से 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> का टाइप मैसेज है या इसके उलट है, तो गड़बड़ी की यही वजह है. वैरिएबल रेफ़रंस में, सामान्य वैरिएबल और उनके टाइप के बारे में जानकारी मिल सकती है.

    उदाहरण के लिए, मैसेज असाइन करने की नीति का इस्तेमाल, 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 वैरिएबल का इस्तेमाल, एक्सएमएल से JSON में बदलने की नीति के <OutputVariable> एलिमेंट में किया जाता है:

    <OutputVariable>request</OutputVariable>
    

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

    steps.xml2json.InCompatibleTypes
    

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

रिज़ॉल्यूशन

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

ऊपर बताई गई, एक्सएमएल से JSON में बदलने की नीति को ठीक करने के लिए, मैसेज असाइन करने की नीति का इस्तेमाल करके, string टाइप का कोई दूसरा वैरिएबल TrackingNumber_output एलान किया जा सकता है. साथ ही, इस वैरिएबल का इस्तेमाल, एक्सएमएल से 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. एक्सएमएल से JSON नीति में इस्तेमाल किए गए अमान्य सोर्स टाइप की पहचान करें. गड़बड़ी के मैसेज से आपको यह जानकारी मिल सकती है. उदाहरण के लिए, नीचे दी गई गड़बड़ी में, अमान्य टाइप इंटीजर है.

    "faultstring": "XMLToJSON[class java.lang.Integer]: Invalid source type class java.lang.Integer. Valid source types are [message, string]."
    
  2. उस एपीआई प्रॉक्सी में, एक्सएमएल से 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 वैरिएबल का इस्तेमाल, एक्सएमएल से JSON में बदलने की नीति के <Source> एलिमेंट में किया जाता है:

    <Source>BookCode</Source>
    

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

    steps.xml2json.InvalidSourceType
    

रिज़ॉल्यूशन

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

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