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

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

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

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

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

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