আপনি Apigee Edge ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশনে যান । তথ্য
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>
উপাদানে নির্দিষ্ট একটি পরিবর্তনশীল টাইপ বার্তার না হলে এই ত্রুটিটি ঘটে। যদি ভেরিয়েবলটি একটি স্ট্রিং বা অন্য কোনো নন-মেসেজ টাইপ হয়, তাহলে আপনি এই ত্রুটিটি দেখতে পাবেন।
মেসেজ টাইপ ভেরিয়েবল সম্পূর্ণ HTTP অনুরোধ এবং প্রতিক্রিয়া উপস্থাপন করে। বিল্ট-ইন এজ ফ্লো ভেরিয়েবল request
, response
এবং message
টাইপ মেসেজ। বার্তা ভেরিয়েবল সম্পর্কে আরও জানতে, ভেরিয়েবল রেফারেন্স দেখুন।
রোগ নির্ণয়
পরিষেবা কলআউট নীতি সনাক্ত করুন যেখানে ত্রুটি ঘটেছে এবং ভেরিয়েবলের নাম যার ধরনটি ভুল। আপনি ত্রুটি প্রতিক্রিয়ার
faultstring
উপাদানে এই দুটি আইটেম খুঁজে পেতে পারেন। উদাহরণস্বরূপ, নিম্নলিখিতfaultstring
-এ, নীতির নাম হলExecuteGeocodingRequest
এবং ভেরিয়েবল হলPostalCode
:"faultstring": "ServiceCallout[ ExecuteGeocodingRequest ]: request variable PostalCode value is not of type Message"
ব্যর্থ পরিষেবা কলআউট নীতি XML-এ, যাচাই করুন যে
<Request>
উপাদানে সেট করা ভেরিয়েবলের নাম ফল্ট স্ট্রিং-এ চিহ্নিত পরিবর্তনশীল নামের সাথে মেলে (উপরের ধাপ #1)। উদাহরণস্বরূপ, নিম্নলিখিত নীতিটিPostalCode
নামে একটি অনুরোধ ভেরিয়েবল নির্দিষ্ট করে, যাfaultstring
-এ যা আছে তার সাথে মেলে:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ServiceCallout name="ExecuteGeocodingRequest"> <Request variable="PostalCode"/> <Response>GeocodingResponse</Response> <HTTPTargetConnection> <URL>http://maps.googleapis.com/maps/api/geocode/json</URL> </HTTPTargetConnection> </ServiceCallout>
এই ভেরিয়েবলটি টাইপ বার্তার কিনা তা নির্ধারণ করুন:
- API প্রক্সি বান্ডেলের মধ্যে কোডটি সনাক্ত করুন, যেখানে ভেরিয়েবলটি প্রথমে সংজ্ঞায়িত করা হয়েছিল।
- বেশিরভাগ ক্ষেত্রে, আপনি দেখতে পাবেন যে সমস্যা ভেরিয়েবলটি অন্য একটি নীতিতে তৈরি এবং পপুলেট করা হয়েছে যা পরিষেবা কলআউট নীতির আগে কার্যকর হয়। উদাহরণস্বরূপ, অ্যাসাইন মেসেজ নীতিটি সাধারণত একটি API প্রক্সি ফ্লোতে ভেরিয়েবল তৈরি করতে এবং পপুলেট করতে ব্যবহৃত হয়।
- একবার আপনি যে নীতিতে ভেরিয়েবলটিকে প্রথমে সংজ্ঞায়িত এবং পপুলেট করা হয়েছে তা বের করার পরে, আপনাকে সেই ভেরিয়েবলের ধরনটি নিম্নরূপ নির্ধারণ করতে হবে:
-
type
অ্যাট্রিবিউটের মান পরীক্ষা করুন (যদি উপস্থিত থাকে)। - যদি
type
অ্যাট্রিবিউটটি উপস্থিত না থাকে তবে ভেরিয়েবলটিকে একটি স্ট্রিং হিসাবে বিবেচনা করা হয়।
-
- যদি ভেরিয়েবলের ধরনটি নন-মেসেজ হয় (যেমন একটি স্ট্রিং), তাহলে এটি ত্রুটির কারণ। আপনি ভেরিয়েবল রেফারেন্সে সাধারণ ভেরিয়েবল এবং তাদের প্রকারগুলি সম্পর্কে শিখতে পারেন।
একটি উদাহরণ হিসাবে, অনুমান করুন যে PostalCode
ভেরিয়েবলটি পরিষেবা কলআউট নীতিতে উল্লেখ করা হয়েছে নিম্নলিখিত অ্যাসাইন মেসেজ নীতিতে তৈরি করা হয়েছে৷ নোট করুন যে PostalCode
ফ্লো ভেরিয়েবল request.queryparam.postalcode
এর মান নির্ধারণ করা হয়েছে। এই মানটি একটি স্ট্রিং, কারণ ভেরিয়েবল অ্যাসাইনমেন্টে উপস্থিত কোনো type
অ্যাট্রিবিউট নেই।
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage name="GenerateGeocodingRequest">
<AssignTo createNew="true" type="request">GeocodingRequest</AssignTo>
<Set>
<QueryParams>
<QueryParam name="address">{request.queryparam.postalcode}</QueryParam>
<QueryParam name="region">{request.queryparam.country}</QueryParam>
<QueryParam name="sensor">false</QueryParam>
</QueryParams>
<Verb>GET</Verb>
</Set>
<AssignVariable>
<Name>PostalCode</Name>
<Ref>request.queryparam.postalcode</Ref>
</AssignVariable>
<AssignVariable>
<Name>Country</Name>
<Ref>request.queryparam.country</Ref>
</AssignVariable>
</AssignMessage>
এখন, স্মরণ করুন যে PostalCode
ভেরিয়েবলটি পরিষেবা কলআউট নীতির <Request>
উপাদানে ব্যবহৃত হয়েছে:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ServiceCallout name="ExecuteGeocodingRequest">
<Request variable="PostalCode"/>
<Response>GeocodingResponse</Response>
<HTTPTargetConnection>
<URL>http://maps.googleapis.com/maps/api/geocode/json</URL>
</HTTPTargetConnection>
</ServiceCallout>
যেহেতু PostalCode
টাইপের বার্তা নয় (এটি এই উদাহরণে একটি স্ট্রিং), আপনি ত্রুটি কোড পাবেন: steps.servicecallout.RequestVariableNotMessageType
।
রেজোলিউশন
নিশ্চিত করুন যে ব্যর্থ পরিষেবা কলআউট নীতিতে <Request>
উপাদানে সেট করা ভেরিয়েবলটি একটি বার্তা টাইপ ফ্লো ভেরিয়েবল যা বিদ্যমান বা বিকল্পভাবে আপনি সরাসরি পরিষেবা কলআউট নীতিতে একটি নতুন বার্তা টাইপ ভেরিয়েবল তৈরি করতে পারেন (যেমন নীতি ডকুমেন্টেশনে ব্যাখ্যা করা হয়েছে) এবং এটা ব্যবহার করুন
নীতি সংশোধন করার জন্য, আপনাকে একটি বিদ্যমান বা নতুন ভেরিয়েবল নির্দিষ্ট করতে <Request>
উপাদানটি পরিবর্তন করতে হবে যা টাইপ বার্তা। উদাহরণ স্বরূপ, ভেরিয়েবল GeocodingRequest
যেটি অ্যাসাইন মেসেজ পলিসিতে সেট করা হয়েছে সেটি টাইপ মেসেজ, এবং সার্ভিস কলআউট নীতিতে ঠিক কাজ করবে। যেমন:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ServiceCallout name="ExecuteGeocodingRequest">
<Request variable="GeocodingRequest"/>
<Response>GeocodingResponse</Response>
<HTTPTargetConnection>
<URL>http://maps.googleapis.com/maps/api/geocode/json</URL>
</HTTPTargetConnection>
</ServiceCallout>
RequestVariableNotRequestMessageType
ত্রুটি কোড
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 অনুরোধ এবং প্রতিক্রিয়া উপস্থাপন করে। বিল্ট-ইন এজ ফ্লো ভেরিয়েবল request
, response
এবং message
টাইপ মেসেজ। বার্তা ভেরিয়েবল সম্পর্কে আরও জানতে, ভেরিয়েবল রেফারেন্স দেখুন।
রোগ নির্ণয়
পরিষেবা কলআউট নীতি সনাক্ত করুন যেখানে ত্রুটি ঘটেছে এবং ভেরিয়েবলের নাম যার ধরনটি ভুল। আপনি ত্রুটি প্রতিক্রিয়ার
faultstring
উপাদানে এই দুটি আইটেম খুঁজে পেতে পারেন। উদাহরণস্বরূপ, নিম্নলিখিতfaultstring
-এ, নীতির নাম হলExecuteGeocodingRequest
এবং ভেরিয়েবল হলvar_response
:"faultstring": "ServiceCallout[ ExecuteGeocodingRequest ]: request variable var_response value is not of type Message"
ব্যর্থ পরিষেবা কলআউট নীতি XML-এ, যাচাই করুন যে
<Request>
উপাদানে সেট করা ভেরিয়েবলের নাম ফল্ট স্ট্রিং-এ চিহ্নিত পরিবর্তনশীল নামের সাথে মেলে (উপরের ধাপ #1)। উদাহরণস্বরূপ, নিম্নলিখিত নীতিটিvar_response
নামে একটি অনুরোধ ভেরিয়েবল নির্দিষ্ট করে, যাfaultstring
-এ যা আছে তার সাথে মেলে:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ServiceCallout name="ExecuteGeocodingRequest"> <Request variable="var_response"/> <Response>GeocodingResponse</Response> <HTTPTargetConnection> <URL>http://maps.googleapis.com/maps/api/geocode/json</URL> </HTTPTargetConnection> </ServiceCallout>
ভেরিয়েবলটি অনুরোধ বার্তা প্রকারের কিনা তা নির্ধারণ করুন:
- API প্রক্সি বান্ডেলের মধ্যে কোডটি সনাক্ত করুন, যেখানে ভেরিয়েবলটি প্রথমে সংজ্ঞায়িত করা হয়েছিল।
- বেশিরভাগ ক্ষেত্রে, আপনি দেখতে পাবেন যে সমস্যা ভেরিয়েবলটি অন্য একটি নীতিতে তৈরি এবং পপুলেট করা হয়েছে যা পরিষেবা কলআউট নীতির আগে কার্যকর হয়। উদাহরণস্বরূপ, অ্যাসাইন মেসেজ নীতিটি সাধারণত একটি API প্রক্সি ফ্লোতে ভেরিয়েবল তৈরি করতে এবং পপুলেট করতে ব্যবহৃত হয়।
- একবার আপনি যে নীতিতে ভেরিয়েবলটিকে প্রথমে সংজ্ঞায়িত এবং পপুলেট করা হয়েছে তা বের করার পরে, আপনাকে সেই ভেরিয়েবলের ধরনটি নিম্নরূপ নির্ধারণ করতে হবে:
-
type
অ্যাট্রিবিউটের মান পরীক্ষা করুন (যদি উপস্থিত থাকে)। - যদি
type
অ্যাট্রিবিউটটি উপস্থিত না থাকে তবে ভেরিয়েবলটিকে একটি স্ট্রিং হিসাবে বিবেচনা করা হয়।
-
- যদি ভেরিয়েবলের টাইপ রিকোয়েস্ট মেসেজ টাইপের না হয়, তাহলে সেটাই ত্রুটির কারণ। আপনি ভেরিয়েবল রেফারেন্সে সাধারণ ভেরিয়েবল এবং তাদের প্রকারগুলি সম্পর্কে শিখতে পারেন।
একটি উদাহরণ হিসাবে, অনুমান করুন যে পরিষেবা কলআউট নীতিতে উল্লেখ করা var_response
ভেরিয়েবলটি নিম্নলিখিত অ্যাসাইন মেসেজ নীতিতে তৈরি করা হয়েছে৷ মনে রাখবেন যে var_response
টাইপ response
দেওয়া হয়েছে। অতএব, var_response
ভেরিয়েবলের ধরন হল প্রতিক্রিয়া বার্তা।
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage name="GenerateGeocodingRequest">
<AssignTo createNew="true" type="request">GeocodingRequest</AssignTo>
<AssignTo createNew="true" type="response">var_response</AssignTo>
<Set>
<QueryParams>
<QueryParam name="address">{request.queryparam.postalcode}</QueryParam>
<QueryParam name="region">{request.queryparam.country}</QueryParam>
<QueryParam name="sensor">false</QueryParam>
</QueryParams>
<Verb>GET</Verb>
</Set>
<AssignVariable>
<Name>PostalCode</Name>
<Ref>request.queryparam.postalcode</Ref>
</AssignVariable>
<AssignVariable>
<Name>Country</Name>
<Ref>request.queryparam.country</Ref>
</AssignVariable>
</AssignMessage>
মনে রাখবেন যে var_response
ভেরিয়েবলটি পরিষেবা কলআউট নীতির <Request>
উপাদানে ব্যবহৃত হয়।
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ServiceCallout name="ExecuteGeocodingRequest">
<Request variable="var_response"/>
<Response>GeocodingResponse</Response>
<HTTPTargetConnection>
<URL>http://maps.googleapis.com/maps/api/geocode/json</URL>
</HTTPTargetConnection>
</ServiceCallout>
যেহেতু var_response
টাইপের অনুরোধ বার্তার নয় (এর প্রকার হল প্রতিক্রিয়া বার্তা), আপনি ত্রুটি কোড পাবেন: steps.servicecallout.RequestVariableNotRequestMessageType
।
রেজোলিউশন
নিশ্চিত করুন যে ব্যর্থ পরিষেবা কলআউট নীতিতে <Request>
উপাদানে সেট করা ভেরিয়েবলটি অনুরোধ বার্তা টাইপ ভেরিয়েবল যা বিদ্যমান বা বিকল্পভাবে আপনি একটি নতুন অনুরোধ বার্তা টাইপ ভেরিয়েবল তৈরি করতে পারেন সরাসরি পরিষেবা কলআউট নীতিতে (যেমন নীতির ডকুমেন্টেশনে ব্যাখ্যা করা হয়েছে) এবং এটা ব্যবহার করুন
নীতি সংশোধন করার জন্য, আপনাকে একটি বিদ্যমান বা নতুন ভেরিয়েবল নির্দিষ্ট করার জন্য <Request>
উপাদানটি সংশোধন করতে হবে যা টাইপের অনুরোধ বার্তার, এবং এটি পরিষেবা কলআউট নীতিতে কাজ করবে। যেমন:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ServiceCallout name="ExecuteGeocodingRequest">
<Request variable="GeocodingRequest"/>
<Response>GeocodingResponse</Response>
<HTTPTargetConnection>
<URL>http://maps.googleapis.com/maps/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 | পরিষেবা কলআউট নীতিতে টার্গেট URLটি ত্রুটিপূর্ণ বা একটি অবৈধ বা পৌঁছানো যায় না এমন হোস্ট নাম রয়েছে৷ |
ব্যাকএন্ড সার্ভার ত্রুটি৷ | ব্যাকএন্ড সার্ভার 4XX বা 5XX এর একটি ত্রুটির প্রতিক্রিয়া প্রদান করে। |
কারণ: অবৈধ বা বিকৃত URL
পরিষেবা কলআউট নীতিতে টার্গেট URLটি ত্রুটিপূর্ণ বা একটি অবৈধ বা পৌঁছানো যায় না এমন হোস্ট নাম রয়েছে৷
রোগ নির্ণয়
পরিষেবা কলআউট নীতি সনাক্ত করুন যা ত্রুটি সৃষ্টি করেছে৷ নীতির নাম ত্রুটি প্রতিক্রিয়ার
faultstring
উপাদানে প্রদর্শিত হয়। উদাহরণস্বরূপ, নিম্নলিখিতfaultstring
-এ, ব্যর্থ পরিষেবা কলআউট নীতির নাম হলExecuteGeocodingRequest
।"faultstring": "ServiceCallout[ ExecuteGeocodingRequest ]"
ব্যর্থ পরিষেবা কলআউট নীতিতে,
<URL>
উপাদান পরীক্ষা করুন। যদি এটি ত্রুটিপূর্ণ হয় বা একটি অবৈধ বা অপাগ্য হোস্ট নাম থাকে, তাহলে এটি এই ত্রুটির কারণ। উদাহরণস্বরূপ, নিম্নলিখিত পরিষেবা কলআউট নীতি একটি অবৈধ<URL>
নির্দিষ্ট করে:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ServiceCallout name="ExecuteGeocodingRequest"> <Request variable="GeocodingRequest"/> <Response>GeocodingResponse</Response> <HTTPTargetConnection> <URL>http://</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" standalone="yes"?>
<ServiceCallout name="ExecuteGeocodingRequest">
<Request variable="GeocodingRequest"/>
<Response>GeocodingResponse</Response>
<HTTPTargetConnection>
<URL>http://maps.googleapis.com/maps/api/geocode/json</URL>
</HTTPTargetConnection>
</ServiceCallout>
কারণ: ব্যাকএন্ড সার্ভার ত্রুটি
ব্যাকএন্ড সার্ভার 4XX বা 5XX এর একটি ত্রুটির প্রতিক্রিয়া প্রদান করে।
রোগ নির্ণয়
পরিষেবা কলআউট নীতি সনাক্ত করুন যা ত্রুটি সৃষ্টি করেছে৷ নীতির নাম ত্রুটি প্রতিক্রিয়ার
faultstring
উপাদানে প্রদর্শিত হয়। উদাহরণস্বরূপ, নিম্নলিখিতfaultstring
-এ, ব্যর্থ পরিষেবা কলআউট নীতির নাম হলExecuteGeocodingRequest
।"faultstring": "ServiceCallout[ ExecuteGeocodingRequest ]
ত্রুটি প্রতিক্রিয়া বডিতে
faultstring
পরীক্ষা করুন এবংReason
তালিকাভুক্ত কোনো 4XX বা 5XX প্রতিক্রিয়া কোড আছে কিনা তা পরীক্ষা করুন। উদাহরণস্বরূপ, নিম্নলিখিত ফল্টস্ট্রিং স্পষ্টভাবে নির্দেশ করে যে ব্যাকএন্ড সার্ভার থেকে একটি প্রতিক্রিয়া কোড 502 ফিরে এসেছে:"faultstring": "Execution of ServiceCallout ExecuteGeocodingRequest failed. Reason: ResponseCode 502 is treated as error"
রেজোলিউশন
একবার আপনি ত্রুটি প্রতিক্রিয়া কোড নির্ধারণ করার পরে, আপনি এই সমস্যাটি ঠিক করতে পারেন ঠিক যেমন আপনি 4XX বা 5XX ত্রুটিটি করবেন৷ 4XX বা 5XX ত্রুটির সমস্যা সমাধান এবং সমাধানের নির্দেশাবলীর জন্য রানটাইম ত্রুটি (4XX/5XX) প্লেবুকগুলি পড়ুন৷