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

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

पर क्लिक करें.

UnresolvedVariable

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

steps.assignmessage.UnresolvedVariable

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

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

वजह

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

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

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

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

  1. उस Assign Message नीति का पता लगाएं जहां गड़बड़ी हुई है. साथ ही, उस वैरिएबल का नाम पता लगाएं जो उपलब्ध नहीं है. आपको ये दोनों आइटम, गड़बड़ी के जवाब के faultstring एलिमेंट में मिल सकते हैं.

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

    "faultstring": "AssignMessage[googleBook]: unable to resolve variable var"
    
  2. Assign Message Policy के फ़ेल हुए एक्सएमएल में, पुष्टि करें कि इस्तेमाल किए गए वैरिएबल का नाम, फ़ॉल्ट स्ट्रिंग (ऊपर दिया गया पहला चरण) में पहचाने गए वैरिएबल के नाम से मेल खाता हो. उदाहरण के लिए, यहां दी गई नीति, <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. यह तय करें कि जिस फ़्लो में Assign Message नीति लागू की जा रही है उसमें वैरिएबल को तय किया गया है और वह उपलब्ध है.

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

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

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

    उदाहरण के लिए, मान लें कि ऊपर दिखाई गई Assign Message नीति, अनुरोध फ़्लो में लागू होती है. देखें कि क्या अनुरोध फ़्लो में Assign Message नीति से पहले लागू होने वाली किसी भी नीति में, 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. Assign Message Policy की जिस एक्सएमएल फ़ाइल को लागू नहीं किया जा सका उसमें यह पुष्टि करें कि <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 वैरिएबल का इस्तेमाल, Assign Message नीति के <Copy> एलिमेंट में किया जाता है:

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

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

    steps.assignmessage.VariableOfNonMsgType
    

रिज़ॉल्यूशन

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

नीति का उल्लंघन ठीक करने के लिए, <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>