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> एलिमेंट में बताए गए message वैरिएबल में से कोई एक स्थिति हो:

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

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

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

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

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

    steps.json2xml.SourceUnavailable
    

रिज़ॉल्यूशन

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

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

आपको गड़बड़ी का यह मैसेज दिखेगा:

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

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

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

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

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

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

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