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

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 एट्रिब्यूट को किसी ऐसे वैरिएबल पर सेट किया गया हो जो message टाइप का नहीं है.

मैसेज टाइप वैरिएबल से पूरे एचटीटीपी अनुरोध और उनके जवाब दिखते हैं. बिल्ट-इन Edge फ़्लो वैरिएबल 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>