मैसेज रनटाइम असाइन करने से जुड़ी गड़बड़ी ठीक करना

आपको Apigee Edge दस्तावेज़ दिख रहा है.
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है इस पेज पर जाएं Apigee X दस्तावेज़.
जानकारी

UnresolvedVariable

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

steps.assignmessage.UnresolvedVariable

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

{
    "fault": {
        "faultstring": "AssignMessage[policy_name]: unable to resolve variable [variable_name]",
        "detail": {
            "errorcode": "steps.assignmessage.UnresolvedVariable"
        }
    }
}

वजह

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

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

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

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

  1. गड़बड़ी होने पर 'मैसेज असाइन करें' नीति और उस वैरिएबल के नाम की पहचान करें जो उपलब्ध नहीं है. ये दोनों आइटम, गड़बड़ी के रिस्पॉन्स के faultstring एलिमेंट में देखे जा सकते हैं.

    उदाहरण के लिए, यहां दिए गए faultstring में, नीति का नाम googleBook है और वैरिएबल var है:

    "faultstring": "AssignMessage[googleBook]: unable to resolve variable var"
    
  2. मैसेज असाइन करने से जुड़ी नीति की फ़ेल हो चुकी एक्सएमएल में, पुष्टि करें कि इस्तेमाल किए गए वैरिएबल का नाम, गड़बड़ी वाली स्ट्रिंग में पहचाने गए वैरिएबल के नाम से मेल खाता है (ऊपर दिया गया चरण #1). उदाहरण के लिए, इस नीति से <Copy> एलिमेंट में सोर्स एट्रिब्यूट को var नाम वाले वैरिएबल पर सेट किया जाता है, जो faultstring में मौजूद वैरिएबल से मेल खाता है:

    <AssignMessage async="false" continueOnError="false" enabled="true" name="Assign-Message-1">
       <DisplayName>googleBook</DisplayName>
       <Properties />
       <Copy source="var">
          <Headers>
             <Header name="user-agent" />
          </Headers>
       </Copy>
       <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
       <AssignTo createNew="true" transport="http" type="request">googleBookReq</AssignTo>
    </AssignMessage>
    
  3. जिस फ़्लो में 'मैसेज असाइन करें' नीति लागू की जा रही है उसमें वैरिएबल तय और उपलब्ध है या नहीं.

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

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

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

    उदाहरण के लिए, मान लें कि ऊपर दिखाई गई 'मैसेज असाइन करें' नीति, अनुरोध के फ़्लो में लागू होती है. पक्का करें कि किसी भी ऐसी नीति में वैरिएबल var को तय किया गया हो जिसे अनुरोध करने के दौरान, 'मैसेज असाइन करें' नीति से पहले लागू किया गया हो. अगर वैरिएबल तय नहीं किया गया है, तो आपको गड़बड़ी का कोड मिलेगा:

    steps.assignmessage.UnresolvedVariable
    

रिज़ॉल्यूशन

पक्का करें कि नीति में रेफ़र किया गया वैरिएबल मौजूद हो और उस खास फ़्लो में उपलब्ध हो जहां 'मैसेज असाइन करें' नीति लागू की जा रही हो.

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

<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign-Message-1">
   <DisplayName>googleBook</DisplayName>
   <Properties />
   <Copy source="request">
      <Headers>
         <Header name="user-agent" />
      </Headers>
   </Copy>
   <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
   <AssignTo createNew="true" transport="http" type="request">googleBookReq</AssignTo>
</AssignMessage>

VariableOfNonMsgType

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

steps.assignmessage.VariableOfNonMsgType

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

{
    "fault": {
        "faultstring": "AssignMessage[policy_name]: value of variable [variable] is not of type Message",
        "detail": {
            "errorcode": "steps.assignmessage.VariableOfNonMsgType"
        }
    }
}

वजह

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

मैसेज टाइप वैरिएबल, सभी एचटीटीपी अनुरोधों और जवाबों को दिखाते हैं. बिल्ट-इन एज फ़्लो वैरिएबल request, response, और message मैसेज टाइप के होते हैं. मैसेज वैरिएबल के बारे में ज़्यादा जानने के लिए, वैरिएबल का रेफ़रंस देखें.

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

  1. गड़बड़ी होने पर मैसेज से जुड़ी नीति असाइन करें और उस वैरिएबल के नाम की पहचान करें जिसका टाइप गलत है. ये दोनों आइटम, गड़बड़ी के रिस्पॉन्स के faultstring एलिमेंट में देखे जा सकते हैं. उदाहरण के लिए, यहां दिए गए faultstring में, नीति का नाम GenerateGeocodingRequest है और वैरिएबल PostalCode है:

    "faultstring": "AssignMessage[GenerateGeocodingRequest]: value of variable PostalCode is not of type Message"
    
  2. मैसेज असाइन करने से जुड़ी नीति की फ़ेल हो चुकी एक्सएमएल में, पुष्टि करें कि <Copy> एलिमेंट में सेट किए गए वैरिएबल का नाम, गड़बड़ी वाली स्ट्रिंग में पहचाने गए वैरिएबल के नाम से मेल खाता है (ऊपर दिया गया चरण #1). उदाहरण के लिए, यह नीति एक सोर्स एट्रिब्यूट को PostalCode नाम के वैरिएबल पर सेट करती है, जो faultstring में मौजूद वैरिएबल से मेल खाती है:

    <AssignMessage name="GenerateGeocodingRequest">
       <AssignTo createNew="true" type="request">GeocodingRequest</AssignTo>
       <AssignVariable>
          <Name>PostalCode</Name>
          <Ref>request.queryparam.postalcode</Ref>
       </AssignVariable>
       <AssignVariable>
          <Name>Country</Name>
          <Ref>request.queryparam.country</Ref>
       </AssignVariable>
       <Copy source="PostalCode">
          <QueryParams>
             <QueryParam name="q" />
          </QueryParams>
       </Copy>
    </AssignMessage>
    
  3. तय करें कि यह वैरिएबल, मैसेज टाइप का है या नहीं:

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

    उदाहरण के लिए, ऊपर दिए गए एक्सएमएल में PostalCode वैरिएबल देखें. इसे <AssignVariable> एलिमेंट में, फ़्लो वैरिएबल request.queryparam.postalcode की वैल्यू असाइन की जाती है. यह वैल्यू एक स्ट्रिंग है, क्योंकि वैरिएबल के असाइनमेंट में कोई टाइप एट्रिब्यूट मौजूद नहीं है.

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

    <Copy source="PostalCode">
       <QueryParams>
          <QueryParam name="PostalCode" />
       </QueryParams>
    </Copy>
    

    क्योंकि PostalCode टाइप मैसेज नहीं है (इस उदाहरण में यह एक स्ट्रिंग है), इसलिए आपको गड़बड़ी का कोड मिलता है:

    steps.assignmessage.VariableOfNonMsgType
    

रिज़ॉल्यूशन

पक्का करें कि 'मैसेज असाइन करें' नीति के फ़ेल होने के <Copy> एलिमेंट में मौजूद source एट्रिब्यूट, किसी ऐसे मैसेज टाइप फ़्लो वैरिएबल पर सेट हो जो मौजूद हो.

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

<AssignMessage name="GenerateGeocodingRequest">
   <AssignTo createNew="true" type="request">GeocodingRequest</AssignTo>
   <AssignVariable>
      <Name>PostalCode</Name>
      <Ref>request.queryparam.postalcode</Ref>
   </AssignVariable>
   <AssignVariable>
      <Name>Country</Name>
      <Ref>request.queryparam.country</Ref>
   </AssignVariable>
   <Copy source="request">
      <QueryParams>
         <QueryParam name="PostalCode" />
      </QueryParams>
   </Copy>
</AssignMessage>