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

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

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> एलिमेंट में बताया गया मैसेज वैरिएबल, इनमें से कोई एक हो:

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

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

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

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

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

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

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

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

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

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

    steps.json2xml.SourceUnavailable
    

रिज़ॉल्यूशन

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

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

  <?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 को भेजा गया इनपुट (JSON) अमान्य या गलत है.

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

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

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

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

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

    "faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [ at line 1"
    
  2. JSON से एक्सएमएल में माइग्रेट नहीं किए जा सके नीति एक्सएमएल में, <Source> एलिमेंट की जांच करें और तय किया गया वैरिएबल तय करें. उदाहरण के लिए, JSON से एक्सएमएल में दी गई इस नीति में, <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 टू एक्सएमएल नीति के उदाहरण में, क्लाइंट की ओर से भेजा गया अनुरोध पेलोड (यानी अनुरोध का मुख्य हिस्सा) खाली है.

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

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

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

    steps.json2xml.ExecutionFailed
    

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

रिज़ॉल्यूशन

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

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

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

आपको गड़बड़ी दिखाई देगी:

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

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

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

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

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

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

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

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

    यहां एक नीति का नमूना दिया गया है, जिसके <Source> एलिमेंट में कर्मचारी आईडी नाम का वैरिएबल मौजूद है:

<?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 पेलोड हो.