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

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

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

SourceUnavailable

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

steps.json2xml.SourceUnavailable

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

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

गड़बड़ी का उदाहरण

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

वजह

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

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

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

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

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

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

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONToXML async="false" continueOnError="false" enabled="true" name="Convert-JSONToXML">
        <DisplayName>Convert-JSONToXML</DisplayName>
        <Properties/>
        <Options>
            <NullValue>NULL</NullValue>
            <NamespaceBlockName>#namespaces</NamespaceBlockName>
        <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
            <NamespaceSeparator>:</NamespaceSeparator>
            <TextNodeName>#text</TextNodeName>
            <AttributeBlockName>#attrs</AttributeBlockName>
            <AttributePrefix>@</AttributePrefix>
            <InvalidCharsReplacement>_</InvalidCharsReplacement>
            <ObjectRootElementName>Root</ObjectRootElementName>
            <ArrayRootElementName>Array</ArrayRootElementName>
            <ArrayItemElementName>Item</ArrayItemElementName>
        </Options>
        <OutputVariable>request</OutputVariable>
        <Source>response</Source>
    </JSONToXML>
    
  3. यह तय करें कि <Source> एलिमेंट में इस्तेमाल किया गया वैरिएबल, उस फ़्लो में तय किया गया है या नहीं जिसमें JSON से XML में बदलने वाली नीति लागू की जा रही है.

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

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

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

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

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

    steps.json2xml.SourceUnavailable
    

रिज़ॉल्यूशन

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

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

  <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  <JSONToXML async="false" continueOnError="false" enabled="true" name="Convert-JSONToXML">
      <DisplayName>Convert-JSONToXML</DisplayName>
      <Properties/>
      <Options>
          <NullValue>NULL</NullValue>
          <NamespaceBlockName>#namespaces</NamespaceBlockName>
          <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
          <NamespaceSeparator>:</NamespaceSeparator>
          <TextNodeName>#text</TextNodeName>
          <AttributeBlockName>#attrs</AttributeBlockName>
          <AttributePrefix>@</AttributePrefix>
          <InvalidCharsReplacement>_</InvalidCharsReplacement>
          <ObjectRootElementName>Root</ObjectRootElementName>
          <ArrayRootElementName>Array</ArrayRootElementName>
          <ArrayItemElementName>Item</ArrayItemElementName>
      </Options>
      <OutputVariable>request</OutputVariable>
      <Source>request</Source>
  </JSONToXML>

ExecutionFailed

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

steps.json2xml.ExecutionFailed

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

{
   "fault": {
        "faultstring": "JSONToXML[policy_name]: Execution failed due to reason: Expecting { or [ at line 1",
        "detail": {
            "errorcode": "steps.json2xml.ExecutionFailed"
        }
    }
}

संभावित कारण

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

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

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

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

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

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

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

    "faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [ at line 1"
    
  2. नीति के उल्लंघन वाले JSON को एक्सएमएल में बदलने के लिए इस्तेमाल की गई एक्सएमएल फ़ाइल में मौजूद <Source> एलिमेंट की जांच करें. साथ ही, तय किए गए वैरिएबल का पता लगाएं. उदाहरण के लिए, JSON से XML में बदलने की इस नीति में, <Source> एलिमेंट को request पर सेट किया गया है:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONToXML async="false" continueOnError="false" enabled="true" name="Convert-JSONToXML">
    <DisplayName>Convert-JSONToXML</DisplayName>
    <Properties/>
    <Options>
        <NullValue>NULL</NullValue>
        <NamespaceBlockName>#namespaces</NamespaceBlockName>
        <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
        <NamespaceSeparator>:</NamespaceSeparator>
        <TextNodeName>#text</TextNodeName>
        <AttributeBlockName>#attrs</AttributeBlockName>
        <AttributePrefix>@</AttributePrefix>
        <InvalidCharsReplacement>_</InvalidCharsReplacement>
        <ObjectRootElementName>Root</ObjectRootElementName>
        <ArrayRootElementName>Array</ArrayRootElementName>
        <ArrayItemElementName>Item</ArrayItemElementName>
    </Options>
    <OutputVariable>request</OutputVariable>
    <Source>request</Source>
    </JSONToXML>
    
  3. देखें कि नीति में <Source> एलिमेंट के लिए तय किया गया वैरिएबल खाली तो नहीं है. अगर यह खाली है, तो गड़बड़ी की वजह यही है.

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

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

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

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

    steps.json2xml.ExecutionFailed
    

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

रिज़ॉल्यूशन

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

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

  1. यहां दिए गए कॉन्टेंट के साथ, city.json नाम की फ़ाइल बनाएं:

    {
      "Name":"Apigee",
      "City":"Bengaluru",
      "Pincode":"560016"
    }
    
  2. cURL कमांड का इस्तेमाल करके, एपीआई कॉल करें. इसके लिए, यह तरीका अपनाएं:

    curl -v "http://<org>-<env>.apigee.net/v1/testxmltojson" -H "Content-Type: application/json" -X POST -d @company.json
    

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

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

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

[
    "args": ["name" : "Google" ]
]

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

"faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [ at line 1"

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

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

    "faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [ at line 1"
    
  2. नीति के उल्लंघन वाले JSON को एक्सएमएल में बदलने की नीति वाले एक्सएमएल में दिए गए <Source> एलिमेंट की जांच करें. उदाहरण के लिए, JSON से XML में बदलने की इस नीति में, <Source> एलिमेंट को request वैरिएबल पर सेट किया गया है:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONToXML async="false" continueOnError="false" enabled="true" name="Convert-JSONToXML">
      <DisplayName>Convert-JSONToXML</DisplayName>
      <Properties/>
      <Options>
          <NullValue>NULL</NullValue>
          <NamespaceBlockName>#namespaces</NamespaceBlockName>
          <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
          <NamespaceSeparator>:</NamespaceSeparator>
          <TextNodeName>#text</TextNodeName>
          <AttributeBlockName>#attrs</AttributeBlockName>
          <AttributePrefix>@</AttributePrefix>
          <InvalidCharsReplacement>_</InvalidCharsReplacement>
          <ObjectRootElementName>Root</ObjectRootElementName>
          <ArrayRootElementName>Array</ArrayRootElementName>
          <ArrayItemElementName>Item</ArrayItemElementName>
      </Options>
      <OutputVariable>request</OutputVariable>
      <Source>request</Source>
    </JSONToXML>
    
  3. पुष्टि करें कि <Source> एलिमेंट में दिया गया इनपुट, मान्य JSON पेलोड है. अगर इनपुट अमान्य है या उसमें कोई बदलाव किया गया है, तो यह गड़बड़ी की वजह है.

    मान लें कि नीति को यह अमान्य JSON पास किया गया था

    [
        "args": ["name" : "Google" ]
    ]
    

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

    curl -v "http://<org>-<env>.apigee.net/v1/testjsontoxml" -H "Content-Type:
    application/json" -X POST -d '[ "args" : ["name" : "Google" ]]'
    

    अनुरोध में पास किया गया JSON पेलोड अमान्य है, क्योंकि JSON ऑब्जेक्ट स्क्वेयर ब्रैकेट ([ ]) से शुरू और खत्म होता है. इस वजह से, आपको यह गड़बड़ी कोड मिलता है:

    steps.json2xml.ExecutionFailed

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

रिज़ॉल्यूशन

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

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

{
  "args"  : {

        "name"  :  "Google"
   }
}

OutputVariableIsNotAvailable

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

steps.json2xml.OutputVariableIsNotAvailable

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

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

गड़बड़ी का उदाहरण

{
    "fault": {
        "faultstring": "JSONToXML[Check-JSONToXML]: Output variable is not available.",
        "detail": {
            "errorcode": "steps.json2xml.OutputVariableIsNotAvailable"
        }
    }
}

वजह

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

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

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

    "faultstring": "JSONToXML[Check-JSONToXML]: Output variable is not available."
    
  2. JSON से XML में बदलने की नीति के उल्लंघन की वजह से, पुष्टि नहीं हो पाने की स्थिति में यह देखें कि <OutputVariable> मौजूद है या नहीं.

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

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONToXML async="false" continueOnError="false" enabled="true" name="JSONToXML">
        <DisplayName>Check-JSONToXML</DisplayName>
        <Properties/>
        <Options>
            <NullValue>NULL</NullValue>
            <NamespaceBlockName>#namespaces</NamespaceBlockName>
            <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
            <NamespaceSeparator>:</NamespaceSeparator>
            <TextNodeName>#text</TextNodeName>
            <AttributeBlockName>#attrs</AttributeBlockName>
            <AttributePrefix>@</AttributePrefix>
            <InvalidCharsReplacement>_</InvalidCharsReplacement>
            <ObjectRootElementName>Root</ObjectRootElementName>
            <ArrayRootElementName>Array</ArrayRootElementName>
            <ArrayItemElementName>Item</ArrayItemElementName>
        </Options>
        <Source>PostalCode</Source>
    </JSONToXML>
    
  3. <Source> एलिमेंट में दिए गए वैरिएबल का टाइप तय करें:

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

    उदाहरण के लिए, ऊपर दी गई JSON से XML नीति में PostalCode वैरिएबल देखें.

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

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <AssignMessage async="false" continueOnError="false" enabled="true" name="Assign_PostalCode">
        <DisplayName>Assign_PostalCode</DisplayName>
        <Properties/>
        <AssignVariable>
            <Name>PostalCode</Name>
            <Value>{"value":"56008"}</Value>
            <Ref/>
        </AssignVariable>
        <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
        <AssignTo createNew="false" transport="http" type="request"/>
    </AssignMessage>
    

    ध्यान दें कि <AssignVariable> में सेट किया गया वैरिएबल टाइप, स्ट्रिंग है. इसलिए, वैरिएबल PostalCode, स्ट्रिंग टाइप का है.

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

    <Source>PostalCode</Source>
    

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

    steps.json2xml.OutputVariableIsNotAvailable
    

रिज़ॉल्यूशन

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

ऊपर बताई गई JSONToXML नीति को ठीक करने के लिए, नीचे दिखाए गए तरीके से <OutputVariable> एलिमेंट शामिल करें.

  <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  <JSONToXML async="false" continueOnError="false" enabled="true" name="JSONToXML">
      <DisplayName>Check-JSONToXML</DisplayName>
      <Properties/>
      <Options>
          <NullValue>NULL</NullValue>
          <NamespaceBlockName>#namespaces</NamespaceBlockName>
          <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
          <NamespaceSeparator>:</NamespaceSeparator>
          <TextNodeName>#text</TextNodeName>
          <AttributeBlockName>#attrs</AttributeBlockName>
          <AttributePrefix>@</AttributePrefix>
          <InvalidCharsReplacement>_</InvalidCharsReplacement>
          <ObjectRootElementName>Root</ObjectRootElementName>
          <ArrayRootElementName>Array</ArrayRootElementName>
          <ArrayItemElementName>Item</ArrayItemElementName>
      </Options>
      <OutputVariable>response</OutputVariable>
      <Source>PostalCode</Source>
  </JSONToXML>

InCompatibleTypes

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

steps.json2xml.InCompatibleTypes

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

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

गड़बड़ी का उदाहरण

{
    "fault": {
        "faultstring": "JSONToXML[JSONToXML_checktype]: String can not be assigned to message type.",
        "detail": {
            "errorcode": "steps.json2xml.InCompatibleTypes"
        }
    }
}

वजह

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

मान्य टाइप message और string हैं.

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

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

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

    नीति का यह उदाहरण देखें:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONToXML async="false" continueOnError="false" enabled="true" name="JSONToXML_checktype">
        <DisplayName>JSONToXML_checktype</DisplayName>
        <Properties/>
        <Options>
            <NullValue>NULL</NullValue>
            <NamespaceBlockName>#namespaces</NamespaceBlockName>
            <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
            <NamespaceSeparator>:</NamespaceSeparator>
            <TextNodeName>#text</TextNodeName>
            <AttributeBlockName>#attrs</AttributeBlockName>
            <AttributePrefix>@</AttributePrefix>
            <InvalidCharsReplacement>_</InvalidCharsReplacement>
            <ObjectRootElementName>Root</ObjectRootElementName>
            <ArrayRootElementName>Array</ArrayRootElementName>
            <ArrayItemElementName>Item</ArrayItemElementName>
        </Options>
        <OutputVariable>response</OutputVariable>
        <Source>PostalCode</Source>
    </JSONToXML>
    
    
  3. <Source> और <OutputVariable> एलिमेंट में बताए गए वैरिएबल का टाइप तय करें:

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

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

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <AssignMessage async="false" continueOnError="false" enabled="true" name="Assign_PostalCode">
        <DisplayName>Assign_PostalCode</DisplayName>
        <Properties/>
        <AssignVariable>
            <Name>PostalCode</Name>
            <Value>{"value":"56008"}</Value>
            <Ref/>
        </AssignVariable>
        <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
        <AssignTo createNew="false" transport="http" type="request"/>
    </AssignMessage>
    

    ध्यान दें कि <AssignVariable> में सेट किया गया वैरिएबल टाइप स्ट्रिंग है. इसलिए, वैरिएबल PostalCode स्ट्रिंग टाइप का है.

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

    <Source>PostalCode</Source>
    

    इसी तरह, याद रखें कि response वैरिएबल का इस्तेमाल JSONToXML नीति के <OutputVariable> एलिमेंट में किया जाता है:

    <OutputVariable>response</OutputVariable>
    

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

    steps.json2xml.InCompatibleTypes
    

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

रिज़ॉल्यूशन

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

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

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

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign_PostalCode">
    <DisplayName>Assign_PostalCode</DisplayName>
    <Properties/>
    <AssignVariable>
        <Name>PostalCode</Name>
        <Value>{"value":"56008"}</Value>
        <Ref/>
    </AssignVariable>
    <AssignVariable>
        <Name>PostalCode_output</Name>
        <Ref/>
    </AssignVariable>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

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

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<JSONToXML async="false" continueOnError="false" enabled="true" name="JSONToXML">
    <DisplayName>JSONToXML_checktype</DisplayName>
    <Properties/>
    <Options>
        <NullValue>NULL</NullValue>
        <NamespaceBlockName>#namespaces</NamespaceBlockName>
        <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
        <NamespaceSeparator>:</NamespaceSeparator>
        <TextNodeName>#text</TextNodeName>
        <AttributeBlockName>#attrs</AttributeBlockName>
        <AttributePrefix>@</AttributePrefix>
        <InvalidCharsReplacement>_</InvalidCharsReplacement>
        <ObjectRootElementName>Root</ObjectRootElementName>
        <ArrayRootElementName>Array</ArrayRootElementName>
        <ArrayItemElementName>Item</ArrayItemElementName>
    </Options>
    <OutputVariable>PostalCode_output</OutputVariable>
    <Source>PostalCode</Source>
</JSONToXML>

InvalidSourceType

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

steps.json2xml.InvalidSourceType

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

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

गड़बड़ी का उदाहरण

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

वजह

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

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

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

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

    यहां नीति का एक सैंपल दिया गया है. इसमें <Source> एलिमेंट में EmployeeID नाम का वैरिएबल तय किया गया है:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<JSONToXML async="false" continueOnError="false" enabled="true" name="JSONToXML">
    <DisplayName>Check_SourceType</DisplayName>
    <Properties/>
    <Options>
        <NullValue>NULL</NullValue>
        <NamespaceBlockName>#namespaces</NamespaceBlockName>
        <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
        <NamespaceSeparator>:</NamespaceSeparator>
        <TextNodeName>#text</TextNodeName>
        <AttributeBlockName>#attrs</AttributeBlockName>
        <AttributePrefix>@</AttributePrefix>
        <InvalidCharsReplacement>_</InvalidCharsReplacement>
        <ObjectRootElementName>Root</ObjectRootElementName>
        <ArrayRootElementName>Array</ArrayRootElementName>
        <ArrayItemElementName>Item</ArrayItemElementName>
    </Options>
    <OutputVariable>request</OutputVariable>
    <Source>EmployeeID</Source>
</JSONToXML>
  1. <Source> एलिमेंट में दिए गए वैरिएबल का टाइप तय करें:

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

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

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ExtractVariables name="ExtractJSONVariables">
        <Source>request</Source>
        <JSONPayload>
            <Variable name="EmployeeID" type="integer">
                <JSONPath>$.ID</JSONPath>
            </Variable>
        </JSONPayload>
    </ExtractVariables>
    

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

    <Source>EmployeeID</Source>
    

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

    steps.json2xml.InvalidSourceType
    

रिज़ॉल्यूशन

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

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