পরিষেবা কলআউট রানটাইম ত্রুটি সমস্যা সমাধান, পরিষেবা কলআউট রানটাইম ত্রুটি সমস্যা সমাধান

আপনি Apigee Edge-এর ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশন
.info- তে যান।

RequestVariableNotMessageType

ত্রুটি কোড

steps.servicecallout.RequestVariableNotMessageType

ত্রুটিপূর্ণ প্রতিক্রিয়া বডি

{
    "fault": {
        "faultstring": "ServiceCallout[policy_name]: request variable [variable_name] value is not of type Message",
        "detail": {
            "errorcode": "steps.servicecallout.RequestVariableNotMessageType"
        }
    }
}

কারণ

সার্ভিস কলআউট পলিসির <Request> এলিমেন্টে নির্দিষ্ট করা কোনো ভেরিয়েবল যদি 'message' টাইপের না হয়, তাহলে এই ত্রুটিটি ঘটে। যদি ভেরিয়েবলটি একটি স্ট্রিং বা অন্য কোনো নন-মেসেজ টাইপের হয়, তাহলে আপনি এই ত্রুটিটি দেখতে পাবেন।

মেসেজ টাইপ ভেরিয়েবলগুলো সম্পূর্ণ HTTP অনুরোধ এবং প্রতিক্রিয়া উপস্থাপন করে। Edge ফ্লো-এর বিল্ট-ইন ভেরিয়েবল request , response , এবং message হলো message টাইপের। মেসেজ ভেরিয়েবল সম্পর্কে আরও জানতে, ভেরিয়েবল রেফারেন্স দেখুন।

রোগ নির্ণয়

  1. যে সার্ভিস কলআউট পলিসিতে ত্রুটিটি ঘটেছে সেটি এবং যে ভেরিয়েবলের টাইপ ভুল, তার নাম শনাক্ত করুন। আপনি এই দুটি আইটেমই এরর রেসপন্সের faultstring ' এলিমেন্টে খুঁজে পাবেন। উদাহরণস্বরূপ, নিম্নলিখিত faultstring এ, পলিসির নাম হলো ExecuteGeocodingRequest এবং ভেরিয়েবলটি হলো PostalCode :

    "faultstring": "ServiceCallout[ ExecuteGeocodingRequest ]: request variable PostalCode value is not of type Message"

  2. ব্যর্থ হওয়া সার্ভিস কলআউট পলিসি XML-এ, <Request> এলিমেন্টে সেট করা ভেরিয়েবলের নামটি ফল্ট স্ট্রিং-এ (উপরের ধাপ #১) চিহ্নিত ভেরিয়েবলের নামের সাথে মেলে কিনা তা যাচাই করুন। উদাহরণস্বরূপ, নিম্নলিখিত পলিসিটি PostalCode নামের একটি রিকোয়েস্ট ভেরিয়েবল নির্দিষ্ট করে, যা faultstring এ যা আছে তার সাথে মেলে:

    <?xml version="1.0" encoding="UTF-8&quo>t<; standalone="yes"?
    ServiceCallout >name=<"ExecuteGeocodingRequest&>quot;<
        Req>uest variable=&qu<ot;Postal>Code&<quot;/
        ResponseG>eocodingR<esp>onse/Response
        HTTPTargetConnection
            U<RLht>tp://<maps.googleapis.com/m>a<ps/api/geocode/>json/URL
        /HTTPTargetConnection
    /ServiceCallout
    
  3. এই ভেরিয়েবলটি message টাইপের কিনা তা নির্ণয় করুন:

    1. API Proxy বান্ডেলের মধ্যে কোডটি খুঁজুন, যেখানে ভেরিয়েবলটি প্রথম সংজ্ঞায়িত করা হয়েছিল।
    2. বেশিরভাগ ক্ষেত্রে, আপনি দেখবেন যে 'প্রবলেম' ভ্যারিয়েবলটি এমন একটি পলিসিতে তৈরি ও পূরণ করা হয়, যা 'সার্ভিস কলআউট' পলিসির আগে কার্যকর হয়। উদাহরণস্বরূপ, একটি এপিআই প্রক্সি ফ্লো-তে ভ্যারিয়েবল তৈরি ও পূরণ করার জন্য সাধারণত 'অ্যাসাইন মেসেজ' পলিসি ব্যবহার করা হয়।
    3. প্রথমে যে পলিসিতে ভেরিয়েবলটি সংজ্ঞায়িত এবং পূরণ করা হয়েছে তা বের করার পর, আপনাকে নিম্নলিখিতভাবে সেই ভেরিয়েবলের ধরণ নির্ধারণ করতে হবে:
      • type অ্যাট্রিবিউটের মান যাচাই করুন (যদি থাকে)।
      • যদি type অ্যাট্রিবিউটটি উপস্থিত না থাকে, তাহলে ভেরিয়েবলটিকে স্ট্রিং হিসেবে গণ্য করা হয়।
    4. যদি ভেরিয়েবলের টাইপ মেসেজ নয় (যেমন স্ট্রিং), তাহলে সেটাই ত্রুটির কারণ। আপনি ভেরিয়েবল রেফারেন্স থেকে সাধারণ ভেরিয়েবল এবং তাদের টাইপ সম্পর্কে জানতে পারবেন।

উদাহরণস্বরূপ, ধরে নিন যে সার্ভিস কলআউট পলিসিতে উল্লেখিত PostalCode ভেরিয়েবলটি নিম্নলিখিত অ্যাসাইন মেসেজ পলিসিতে তৈরি করা হয়েছিল। লক্ষ্য করুন যে PostalCode request.queryparam.postalcode ফ্লো ভেরিয়েবলের মানটি অ্যাসাইন করা হয়েছে। এই মানটি একটি স্ট্রিং, কারণ ভেরিয়েবল অ্যাসাইনমেন্টে কোনো type অ্যাট্রিবিউট উপস্থিত নেই।

<?xml version="1.0" encoding="UTF-8&quo>t<; standalone="yes"?
AssignMessage n>ame="<;GenerateGeocodingRequest"
        >AssignTo createN<ew=">true&<quo>t; type=&<quot;reques>t"Geocod<ingRequest/AssignTo
    S>et
        QueryParams
        <    QueryPa>ram name=&quo<t;address"{request.>queryparam.postalcode}/Query<Param
     >       QueryP<aram name="region&q>uot;{<request.que>ryparam.c<ountry}/Quer>yParam
  <    >   <   Qu>eryPa<ram >name=<"sensor&q>uot;false</Que>ryParam
  <     > /QueryPa<ram>s
        VerbGET/Verb
    /S<et
 >   As<signVariable
  >     < NamePostalCod>e/Name
  <    >  Refre<quest>.querypar<am.>postalcode/Ref
    /Assign<Vari>able
<    AssignVaria>b<le
        Nam>eCountry/Name
        Refrequest.queryparam.country/Ref
    /AssignVariable
/AssignMessage

এখন, মনে করুন যে PostalCode ভেরিয়েবলটি সার্ভিস কলআউট পলিসির <Request> এলিমেন্টে ব্যবহৃত হয়:

<?xml version="1.0" encoding="UTF-8&quo>t<; standalone="yes"?
ServiceCallout >name=<"ExecuteGeocodingRequest&>quot;<
    Req>uest variable=&qu<ot;Postal>Code&<quot;/
    ResponseG>eocodingR<esp>onse/Response
    HTTPTargetConnection
        U<RLht>tp://<maps.googleapis.com/m>a<ps/api/geocode/>json/URL
    /HTTPTargetConnection
/ServiceCallout

যেহেতু PostalCode টাইপ message নয় (এই উদাহরণে এটি একটি স্ট্রিং), তাই আপনি steps.servicecallout.RequestVariableNotMessageType এই এরর কোডটি পাবেন।

সমাধান

নিশ্চিত করুন যে ব্যর্থ সার্ভিস কলআউট পলিসির <Request> এলিমেন্টে সেট করা ভেরিয়েবলটি একটি বিদ্যমান মেসেজ টাইপ ফ্লো ভেরিয়েবল, অথবা বিকল্পভাবে আপনি সরাসরি সার্ভিস কলআউট পলিসিতে একটি নতুন মেসেজ টাইপ ভেরিয়েবল তৈরি করে ( পলিসি ডকুমেন্টেশনে যেমন ব্যাখ্যা করা হয়েছে) সেটি ব্যবহার করতে পারেন।

পলিসিটি সংশোধন করতে, আপনাকে <Request> এলিমেন্টটি পরিবর্তন করে message টাইপের একটি বিদ্যমান বা নতুন ভ্যারিয়েবল নির্দিষ্ট করতে হবে। উদাহরণস্বরূপ, Assign Message পলিসিতে সেট করা GeocodingRequest ভ্যারিয়েবলটি message টাইপের, এবং এটি Service Callout পলিসিতেও ঠিকঠাক কাজ করবে। উদাহরণস্বরূপ:

<?xml version="1.0" encoding="UTF-8&quo>t<; standalone="yes"?
ServiceCallout >name=<"ExecuteGeocodingRequest"
>    R<equest v>ariable="Geo<codingReq>uest&<quot;/
    ResponseG>eocodingR<esp>onse/Response
    HTTPTargetConnection
        U<RLht>tp://<maps.googleapis.com/m>a<ps/api/geocode/>json/URL
    /HTTPTargetConnection
/ServiceCallout

অনুরোধ ভেরিয়েবল অনুরোধ বার্তা প্রকার নয়

ত্রুটি কোড

steps.servicecallout.RequestVariableNotRequestMessageType

ত্রুটিপূর্ণ প্রতিক্রিয়া বডি

{
    "fault": {
        "faultstring": "ServiceCallout[policy_name]: request variable [variable_name] value is not of type Request Message",
        "detail": {
            "errorcode": "steps.servicecallout.RequestVariableNotRequestMessageType"
        }
    }
}

কারণ

সার্ভিস কলআউট পলিসির <Request> এলিমেন্টে নির্দিষ্ট করা কোনো ভেরিয়েবল যদি 'রিকোয়েস্ট মেসেজ' টাইপের না হয়, তাহলে এই ত্রুটিটি ঘটে। যদি ভেরিয়েবলটি 'রেসপন্স মেসেজ' টাইপের, একটি স্ট্রিং, বা অন্য কোনো টাইপের হয়, তাহলে আপনি এই ত্রুটিটি দেখতে পাবেন।

মেসেজ টাইপ ভেরিয়েবলগুলো সম্পূর্ণ HTTP অনুরোধ এবং প্রতিক্রিয়া উপস্থাপন করে। Edge ফ্লো-এর বিল্ট-ইন ভেরিয়েবল request , response , এবং message হলো message টাইপের। মেসেজ ভেরিয়েবল সম্পর্কে আরও জানতে, ভেরিয়েবল রেফারেন্স দেখুন।

রোগ নির্ণয়

  1. যে সার্ভিস কলআউট পলিসিতে ত্রুটিটি ঘটেছে তা শনাক্ত করুন এবং যে ভেরিয়েবলের টাইপ ভুল, তার নাম খুঁজে বের করুন। আপনি এই দুটি আইটেমই এরর রেসপন্সের faultstring ' এলিমেন্টে খুঁজে পাবেন। উদাহরণস্বরূপ, নিম্নলিখিত faultstring এ, পলিসির নাম হলো ExecuteGeocodingRequest এবং ভেরিয়েবলটি হলো var_response :

    "faultstring": "ServiceCallout[ ExecuteGeocodingRequest ]: request variable var_response value is not of type Message"

  2. ব্যর্থ হওয়া সার্ভিস কলআউট পলিসি XML-এ, <Request> এলিমেন্টে সেট করা ভেরিয়েবলের নামটি ফল্ট স্ট্রিং-এ (উপরের ধাপ #১) চিহ্নিত ভেরিয়েবলের নামের সাথে মেলে কিনা তা যাচাই করুন। উদাহরণস্বরূপ, নিম্নলিখিত পলিসিটি var_response নামের একটি রিকোয়েস্ট ভেরিয়েবল নির্দিষ্ট করে, যা faultstring এ যা আছে তার সাথে মেলে:

    <?xml version="1.0" encoding="UTF-8&quo>t<; standalone="yes"?
    ServiceCallout >name=<"ExecuteGeocodingRequest&qu>ot;
     <   Reque>st variable="<;var_resp>onse&<quot;/
        ResponseG>eocodingR<esp>onse/Response
        HTTPTargetConnection
            U<RLht>tp://<maps.googleapis.com/m>a<ps/api/geocode/>json/URL
        /HTTPTargetConnection
    /ServiceCallout
    
  3. ভেরিয়েবলটি অনুরোধ বার্তা প্রকারের কিনা তা নির্ধারণ করুন:

    1. API Proxy বান্ডেলের মধ্যে কোডটি খুঁজুন, যেখানে ভেরিয়েবলটি প্রথম সংজ্ঞায়িত করা হয়েছিল।
    2. বেশিরভাগ ক্ষেত্রে, আপনি দেখবেন যে 'প্রবলেম' ভ্যারিয়েবলটি এমন একটি পলিসিতে তৈরি ও পূরণ করা হয়, যা 'সার্ভিস কলআউট' পলিসির আগে কার্যকর হয়। উদাহরণস্বরূপ, একটি এপিআই প্রক্সি ফ্লো-তে ভ্যারিয়েবল তৈরি ও পূরণ করার জন্য সাধারণত 'অ্যাসাইন মেসেজ' পলিসি ব্যবহার করা হয়।
    3. প্রথমে যে পলিসিতে ভেরিয়েবলটি সংজ্ঞায়িত এবং পূরণ করা হয়েছে তা বের করার পর, আপনাকে নিম্নলিখিতভাবে সেই ভেরিয়েবলের ধরণ নির্ধারণ করতে হবে:
      • type অ্যাট্রিবিউটের মান যাচাই করুন (যদি থাকে)।
      • যদি type অ্যাট্রিবিউটটি উপস্থিত না থাকে, তাহলে ভেরিয়েবলটিকে স্ট্রিং হিসেবে গণ্য করা হয়।
    4. যদি ভেরিয়েবলের টাইপ রিকোয়েস্ট মেসেজ টাইপের না হয়, তাহলে সেটাই ত্রুটির কারণ। আপনি ভেরিয়েবল রেফারেন্স থেকে সাধারণ ভেরিয়েবল এবং তাদের টাইপ সম্পর্কে জানতে পারবেন।

উদাহরণস্বরূপ, ধরে নিন যে সার্ভিস কলআউট পলিসিতে উল্লেখিত var_response ভেরিয়েবলটি নিম্নলিখিত অ্যাসাইন মেসেজ পলিসিতে তৈরি করা হয়েছিল। লক্ষ্য করুন যে var_response response টাইপটি দেওয়া হয়েছে। সুতরাং, var_response ভেরিয়েবলটির টাইপ হলো response message।

<?xml version="1.0" encoding="UTF-8&quo>t<; standalone="yes"?
AssignMessage n>ame="<;GenerateGeocodingRequest"
        >AssignTo createN<ew=">true&<quot; type="request"GeocodingRe>quest/Assign<To
    As>signT<o c>reateNew=<"true&>quot; type=&q<uot;response"var_res>ponse/AssignTo
    Set
        <QueryParams>
            <QueryParam name="ad>dress"{request.querypar<am.postalco>de}/QueryPara<m
            QueryParam> name<="regi>on"{<request.quer>yparam.co<untr>y}/<Query>Param<
   >     <    QueryParam> name=&qu<ot;s>ensor"<;fals>e/QueryPa<ram>
        /QueryParams
       < Ver>bGET/<Verb
    /Set
 >   As<signVariable
 >       Na<mePo>stalCod<e/Nam>e
       < Re>frequest.queryparam.postal<code>/Ref
<    /AssignVari>a<ble
    Assign>Variable
        NameCountry/Name
        Refrequest.queryparam.country/Ref
    /AssignVariable
/AssignMessage

মনে রাখবেন যে, var_response ভেরিয়েবলটি সার্ভিস কলআউট পলিসির <Request> এলিমেন্টে ব্যবহৃত হয়।

<?xml version="1.0" encoding="UTF-8&quo>t<; standalone="yes"?
ServiceCallout >name=<"ExecuteGeocodingRequest&qu>ot;
 <   Reque>st variable="<;var_resp>onse&<quot;/
    ResponseG>eocodingR<esp>onse/Response
    HTTPTargetConnection
        U<RLht>tp://<maps.googleapis.com/m>a<ps/api/geocode/>json/URL
    /HTTPTargetConnection
/ServiceCallout

যেহেতু var_response টাইপ request message নয় (এর টাইপ হলো response message), তাই আপনি steps.servicecallout.RequestVariableNotRequestMessageType এই এরর কোডটি পাচ্ছেন।

সমাধান

নিশ্চিত করুন যে ব্যর্থ সার্ভিস কলআউট পলিসির <Request> এলিমেন্টে সেট করা ভেরিয়েবলটি একটি বিদ্যমান রিকোয়েস্ট মেসেজ টাইপ ভেরিয়েবল, অথবা বিকল্পভাবে আপনি সরাসরি সার্ভিস কলআউট পলিসিতে একটি নতুন রিকোয়েস্ট মেসেজ টাইপ ভেরিয়েবল তৈরি করতে পারেন (যেমনটি পলিসি ডকুমেন্টেশনে ব্যাখ্যা করা হয়েছে) এবং সেটি ব্যবহার করতে পারেন।

পলিসিটি সংশোধন করতে, আপনাকে <Request> এলিমেন্টটি পরিবর্তন করে 'request message' টাইপের একটি বিদ্যমান বা নতুন ভ্যারিয়েবল নির্দিষ্ট করতে হবে, এবং এটি সার্ভিস কলআউট পলিসিতে কাজ করবে। উদাহরণস্বরূপ:

<?xml version="1.0" encoding="UTF-8&quo>t<; standalone="yes"?
ServiceCallout >name=<"ExecuteGeocodingRequest"
>    R<equest v>ariable="Geo<codingReq>uest&<quot;/
    ResponseG>eocodingR<esp>onse/Response
    HTTPTargetConnection
        U<RLht>tp://<maps.googleapis.com/m>a<ps/api/geocode/>json/URL
    /HTTPTargetConnection
/ServiceCallout

এক্সিকিউশন ব্যর্থ হয়েছে

ত্রুটি কোড

steps.servicecallout.ExecutionFailed

ত্রুটিপূর্ণ প্রতিক্রিয়া বডি

{
    "fault": {
        "faultstring": "Execution of ServiceCallout [policy_name] failed. Reason: Host not reachable",
        "detail": {
            "errorcode": "steps.servicecallout.ExecutionFailed"
        }
    }
}

অথবা

{
    "fault": {
        "faultstring": "Execution of ServiceCallout [policy_name] failed. Reason: ResponseCode [http_code] is treated as error",
        "detail": {
            "errorcode": "steps.servicecallout.ExecutionFailed"
        }
    }
}

সম্ভাব্য কারণসমূহ

এই ত্রুটির সম্ভাব্য কারণগুলো হলো:

কারণ বর্ণনা
অবৈধ বা ত্রুটিপূর্ণ URL সার্ভিস কলআউট পলিসিতে থাকা টার্গেট ইউআরএলটি ত্রুটিপূর্ণ অথবা এর হোস্টনেমটি অবৈধ বা নাগালের বাইরে।
ব্যাকএন্ড সার্ভার ত্রুটি ব্যাকএন্ড সার্ভার 4XX বা 5XX এর একটি ত্রুটিপূর্ণ প্রতিক্রিয়া ফেরত দেয়।

কারণ: অবৈধ বা ত্রুটিপূর্ণ URL

সার্ভিস কলআউট পলিসিতে থাকা টার্গেট ইউআরএলটি ত্রুটিপূর্ণ অথবা এর হোস্টনেমটি অবৈধ বা নাগালের বাইরে।

রোগ নির্ণয়

  1. যে সার্ভিস কলআউট পলিসিটির কারণে ত্রুটিটি ঘটেছে, সেটি শনাক্ত করুন। পলিসির নামটি এরর রেসপন্সের faultstring ' এলিমেন্টে দেখা যায়। উদাহরণস্বরূপ, নিম্নলিখিত faultstring এ, ব্যর্থ হওয়া সার্ভিস কলআউট পলিসিটির নাম হলো ExecuteGeocodingRequest

    "faultstring": "ServiceCallout[ ExecuteGeocodingRequest ]"

  2. ব্যর্থ হওয়া সার্ভিস কলআউট পলিসিতে, <URL> এলিমেন্টটি পরীক্ষা করুন। যদি এটি ত্রুটিপূর্ণ হয় অথবা এতে একটি অবৈধ বা অপ্রাপ্য হোস্ট নেম থাকে, তাহলে সেটিই এই ত্রুটির কারণ। উদাহরণস্বরূপ, নিম্নলিখিত সার্ভিস কলআউট পলিসিটি একটি অবৈধ <URL> নির্দিষ্ট করে:

    <?xml version="1.0" encoding="UTF-8&quo>t<; standalone="yes"?
    ServiceCallout >name=<"ExecuteGeocodingRequest"
    >    R<equest v>ariable="Geo<codingReq>uest&<quot;/
        ResponseG>eocodingR<esp>onse/Re<spon>se
      <  HTTPTargetConnectio>n<
            URLhtt>p:///URL
        /HTTPTargetConnection
    /ServiceCallout
    

    <URL> এলিমেন্টটিতে শুধুমাত্র http:// প্রোটোকলটি আছে, কিন্তু কোনো বৈধ হোস্টনেম নেই; তাই, সার্ভিস কলআউট পলিসিটি এই ত্রুটি সহ ব্যর্থ হয়: Execution of ServiceCallout ExecuteGeocodingRequest failed. Reason: Host not reachable .

সমাধান

নিশ্চিত করুন যে ব্যর্থ সার্ভিস কলআউট পলিসির <URL> এলিমেন্টে একটি বৈধ URL এবং একটি পৌঁছানো যায় এমন হোস্টনেম রয়েছে।

উপরে দেখানো সার্ভিস কলআউট পলিসি সংশোধন করতে, আপনি <URL> এলিমেন্টটি পরিবর্তন করে একটি বৈধ URL নির্দিষ্ট করতে পারেন:

<?xml version="1.0" encoding="UTF-8&quo>t<; standalone="yes"?
ServiceCallout >name=<"ExecuteGeocodingRequest"
>    R<equest v>ariable="Geo<codingReq>uest&<quot;/
    ResponseG>eocodingR<esp>onse/Response
    HTTPTargetConnection
        U<RLht>tp://<maps.googleapis.com/m>a<ps/api/geocode/>json/URL
    /HTTPTargetConnection
/ServiceCallout

কারণ: ব্যাকএন্ড সার্ভার ত্রুটি

ব্যাকএন্ড সার্ভার 4XX বা 5XX এর একটি ত্রুটিপূর্ণ প্রতিক্রিয়া ফেরত দেয়।

রোগ নির্ণয়

  1. যে সার্ভিস কলআউট পলিসিটির কারণে ত্রুটিটি ঘটেছে, সেটি শনাক্ত করুন। পলিসির নামটি এরর রেসপন্সের faultstring ' এলিমেন্টে দেখা যায়। উদাহরণস্বরূপ, নিম্নলিখিত faultstring এ, ব্যর্থ হওয়া সার্ভিস কলআউট পলিসিটির নাম হলো ExecuteGeocodingRequest

    "faultstring": "ServiceCallout[ ExecuteGeocodingRequest ]

  2. এরর রেসপন্স বডিতে থাকা faultstring পরীক্ষা করুন এবং দেখুন Reason এ কোনো 4XX বা 5XX রেসপন্স কোড তালিকাভুক্ত আছে কিনা। উদাহরণস্বরূপ, নিম্নলিখিত ফল্টস্ট্রিংটি স্পষ্টভাবে নির্দেশ করে যে ব্যাকএন্ড সার্ভার থেকে একটি 502 রেসপন্স কোড ফেরত এসেছে:

    "faultstring": "Execution of ServiceCallout ExecuteGeocodingRequest failed. Reason: ResponseCode 502 is treated as error"

সমাধান

একবার আপনি এরর রেসপন্স কোডটি নির্ধারণ করতে পারলে, যেকোনো 4XX বা 5XX এররের মতোই এই সমস্যাটির সমাধান করতে পারবেন। 4XX বা 5XX এররগুলোর সমাধান ও প্রতিকারের নির্দেশাবলীর জন্য রানটাইম এরর (4XX/5XX) প্লেবুকগুলো দেখুন।