คุณกำลังดูเอกสารประกอบของ 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> ของ นโยบาย Service Callout ไม่ใช่ประเภท ข้อความ หากตัวแปรเป็นสตริงหรือประเภทที่ไม่ใช่ข้อความอื่นๆ คุณจะเห็นข้อผิดพลาดนี้
ตัวแปรประเภทข้อความแสดงถึงคำขอและการตอบกลับ HTTP ทั้งหมด ตัวแปรโฟลว์ request, response และ message แบบบิวท์อินของ Edge เป็นประเภทข้อความ ดูข้อมูลเพิ่มเติมเกี่ยวกับตัวแปรข้อความได้ที่ข้อมูลอ้างอิงตัวแปร
การวินิจฉัย
ระบุนโยบาย Service Callout ที่เกิดข้อผิดพลาดและชื่อตัวแปรที่มีประเภทไม่ถูกต้อง คุณสามารถค้นหารายการทั้ง 2 รายการนี้ได้ในองค์ประกอบ
faultstringของการตอบกลับข้อผิดพลาด ตัวอย่างเช่น ในfaultstringต่อไปนี้ ชื่อนโยบายคือExecuteGeocodingRequestและตัวแปรคือPostalCode"faultstring": "ServiceCallout[ExecuteGeocodingRequest]: request variable PostalCode value is not of type Message"ใน XML ของนโยบาย Service Callout ที่ล้มเหลว ให้ตรวจสอบว่าชื่อตัวแปรที่ตั้งค่าไว้ในองค์ประกอบ
<Request>ตรงกับชื่อตัวแปรที่ระบุไว้ในสตริงข้อผิดพลาด (ขั้นตอนที่ 1 ด้านบน) ตัวอย่างเช่น นโยบายต่อไปนี้ระบุตัวแปรคำขอชื่อ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กำหนดว่าตัวแปรนี้เป็นประเภทข้อความหรือไม่
- ค้นหาโค้ดภายในบันเดิลพร็อกซี API ที่กำหนดตัวแปรไว้เป็นครั้งแรก
- ในกรณีส่วนใหญ่ คุณจะพบว่าตัวแปรที่มีปัญหาถูกสร้างและป้อนข้อมูลในนโยบายอื่นที่ทำงานก่อนนโยบาย Service Callout ตัวอย่างเช่น นโยบาย Assign Message มักใช้เพื่อสร้างและป้อนข้อมูลตัวแปรในโฟลว์พร็อกซี API
- เมื่อทราบแล้วว่านโยบายใดกำหนดและป้อนข้อมูลตัวแปรไว้เป็นครั้งแรก คุณต้องกำหนดประเภทของตัวแปรนั้นดังนี้
- ตรวจสอบค่าของแอตทริบิวต์
type(หากมี) - หากไม่มีแอตทริบิวต์
typeระบบจะถือว่าตัวแปรเป็นสตริง
- ตรวจสอบค่าของแอตทริบิวต์
- หากตัวแปรเป็นประเภทที่ไม่ใช่ข้อความ (เช่น สตริง) นั่นคือสาเหตุของข้อผิดพลาด ดูข้อมูลเกี่ยวกับตัวแปรทั่วไปและประเภทของตัวแปรได้ในข้อมูลอ้างอิงตัวแปร
ตัวอย่างเช่น สมมติว่าตัวแปร PostalCode ที่อ้างอิงในนโยบาย Service Callout ถูกสร้างขึ้นในนโยบาย Assign Message ต่อไปนี้ โปรดทราบว่าระบบกำหนดค่าตัวแปรโฟลว์ request.queryparam.postalcode ให้กับ 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> ของนโยบาย Service Callout
<?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 ไม่ใช่ประเภทข้อความ (เป็นสตริงในตัวอย่างนี้) คุณจึงได้รับรหัสข้อผิดพลาด steps.servicecallout.RequestVariableNotMessageType
ความละเอียด
ตรวจสอบว่าตัวแปรที่ตั้งค่าไว้ในองค์ประกอบ <Request> ในนโยบาย Service Callout ที่ล้มเหลวเป็นตัวแปรโฟลว์ประเภท ข้อความ ที่มีอยู่ หรือคุณจะสร้างตัวแปรประเภทข้อความใหม่โดยตรงในนโยบาย Service Callout (ตามที่อธิบายไว้ในเอกสารประกอบของนโยบาย) แล้วใช้ตัวแปรนั้นก็ได้
หากต้องการแก้ไขนโยบาย คุณต้องแก้ไของค์ประกอบ <Request> เพื่อระบุตัวแปรที่มีอยู่หรือตัวแปรใหม่ที่เป็นประเภทข้อความ ตัวอย่างเช่น ตัวแปร GeocodingRequest ที่ตั้งค่าไว้ในนโยบาย Assign 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
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> ของนโยบาย Service Callout ไม่ใช่ประเภท ข้อความคำขอ หากตัวแปรเป็นประเภทข้อความตอบกลับ สตริง หรือประเภทอื่นๆ คุณจะเห็นข้อผิดพลาดนี้
ตัวแปรประเภทข้อความแสดงถึงคำขอและการตอบกลับ HTTP ทั้งหมด ตัวแปรโฟลว์ request, response และ message แบบบิวท์อินของ Edge เป็นประเภทข้อความ ดูข้อมูลเพิ่มเติมเกี่ยวกับตัวแปรข้อความได้ที่ข้อมูลอ้างอิงตัวแปร
การวินิจฉัย
ระบุนโยบาย Service Callout ที่เกิดข้อผิดพลาดและชื่อตัวแปรที่มีประเภทไม่ถูกต้อง คุณสามารถค้นหารายการทั้ง 2 รายการนี้ได้ในองค์ประกอบ
faultstringของการตอบกลับข้อผิดพลาด ตัวอย่างเช่น ในfaultstringต่อไปนี้ ชื่อนโยบายคือExecuteGeocodingRequestและตัวแปรคือvar_response"faultstring": "ServiceCallout[ExecuteGeocodingRequest]: request variable var_response value is not of type Message"ใน XML ของนโยบาย Service Callout ที่ล้มเหลว ให้ตรวจสอบว่าชื่อตัวแปรที่ตั้งค่าไว้ในองค์ประกอบ
<Request>ตรงกับชื่อตัวแปรที่ระบุไว้ในสตริงข้อผิดพลาด (ขั้นตอนที่ 1 ด้านบน) ตัวอย่างเช่น นโยบายต่อไปนี้ระบุตัวแปรคำขอชื่อ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กำหนดว่าตัวแปรเป็นประเภทข้อความคำขอหรือไม่
- ค้นหาโค้ดภายในบันเดิลพร็อกซี API ที่กำหนดตัวแปรไว้เป็นครั้งแรก
- ในกรณีส่วนใหญ่ คุณจะพบว่าตัวแปรที่มีปัญหาถูกสร้างและป้อนข้อมูลในนโยบายอื่นที่ทำงานก่อนนโยบาย Service Callout ตัวอย่างเช่น นโยบาย Assign Message มักใช้เพื่อสร้างและป้อนข้อมูลตัวแปรในโฟลว์พร็อกซี API
- เมื่อทราบแล้วว่านโยบายใดกำหนดและป้อนข้อมูลตัวแปรไว้เป็นครั้งแรก คุณต้องกำหนดประเภทของตัวแปรนั้นดังนี้
- ตรวจสอบค่าของแอตทริบิวต์
type(หากมี) - หากไม่มีแอตทริบิวต์
typeระบบจะถือว่าตัวแปรเป็นสตริง
- ตรวจสอบค่าของแอตทริบิวต์
- หากตัวแปรไม่ใช่ประเภทข้อความคำขอ นั่นคือสาเหตุของข้อผิดพลาด ดูข้อมูลเกี่ยวกับตัวแปรทั่วไปและประเภทของตัวแปรได้ในข้อมูลอ้างอิงตัวแปร
ตัวอย่างเช่น สมมติว่าตัวแปร var_response ที่อ้างอิงในนโยบาย Service Callout ถูกสร้างขึ้นในนโยบาย Assign Message ต่อไปนี้ โปรดทราบว่าระบบกำหนดประเภท response ให้กับ var_response ดังนั้น ตัวแปร var_response จึงเป็นประเภทข้อความตอบกลับ
<?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> ของนโยบาย Service Callout
<?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 ไม่ใช่ประเภทข้อความคำขอ (เป็นประเภทข้อความตอบกลับ) คุณจึงได้รับรหัสข้อผิดพลาด steps.servicecallout.RequestVariableNotRequestMessageType
ความละเอียด
ตรวจสอบว่าตัวแปรที่ตั้งค่าไว้ในองค์ประกอบ <Request> ในนโยบาย Service Callout ที่ล้มเหลวเป็นตัวแปรประเภทข้อความคำขอ request message ที่มีอยู่ หรือคุณจะสร้างตัวแปรประเภทข้อความคำขอใหม่โดยตรงในนโยบาย Service Callout (ตามที่อธิบายไว้ใน policy documentation) แล้วใช้ตัวแปรนั้นก็ได้
หากต้องการแก้ไขนโยบาย คุณต้องแก้ไของค์ประกอบ <Request> เพื่อระบุตัวแปรที่มีอยู่หรือตัวแปรใหม่ที่เป็นประเภทข้อความคำขอ และตัวแปรนั้นจะทำงานในนโยบาย 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
ExecutionFailed
รหัสข้อผิดพลาด
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 เป้าหมายในนโยบาย Service Callout มีรูปแบบไม่เป็นมาตรฐาน หรือมีชื่อโฮสต์ที่ไม่ถูกต้องหรือเข้าถึงไม่ได้ |
| ข้อผิดพลาดของเซิร์ฟเวอร์แบ็กเอนด์ | เซิร์ฟเวอร์แบ็กเอนด์แสดงการตอบกลับข้อผิดพลาด 4XX หรือ 5XX |
สาเหตุ: URL ไม่ถูกต้องหรือมีรูปแบบไม่เป็นมาตรฐาน
URL เป้าหมายในนโยบาย Service Callout มีรูปแบบไม่เป็นมาตรฐาน หรือมีชื่อโฮสต์ที่ไม่ถูกต้องหรือเข้าถึงไม่ได้
การวินิจฉัย
ระบุนโยบาย Service Callout ที่ทำให้เกิดข้อผิดพลาด ชื่อนโยบายจะปรากฏในองค์ประกอบ
faultstringของการตอบกลับข้อผิดพลาด ตัวอย่างเช่น ในfaultstringต่อไปนี้ ชื่อนโยบาย Service Callout ที่ล้มเหลวคือExecuteGeocodingRequest"faultstring": "ServiceCallout[ExecuteGeocodingRequest]"ในนโยบาย Service Callout ที่ล้มเหลว ให้ตรวจสอบองค์ประกอบ
<URL>หากองค์ประกอบมีรูปแบบไม่เป็นมาตรฐาน หรือมีชื่อโฮสต์ที่ไม่ถูกต้องหรือเข้าถึงไม่ได้ นั่นคือสาเหตุของข้อผิดพลาดนี้ ตัวอย่างเช่น นโยบาย Service Callout ต่อไปนี้ระบุ<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://แต่ไม่มีชื่อโฮสต์ที่ถูกต้อง ดังนั้นนโยบาย Service Callout จึงล้มเหลวโดยมีข้อผิดพลาดExecution of ServiceCallout ExecuteGeocodingRequest failed. Reason: Host not reachable
ความละเอียด
ตรวจสอบว่าองค์ประกอบ <URL> ในนโยบาย Service Callout ที่ล้มเหลวมี URL ที่ถูกต้องพร้อมชื่อโฮสต์ที่เข้าถึงได้
หากต้องการแก้ไขนโยบาย Service Callout ที่แสดงด้านบน คุณสามารถแก้ไของค์ประกอบ <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
การวินิจฉัย
ระบุนโยบาย Service Callout ที่ทำให้เกิดข้อผิดพลาด ชื่อนโยบายจะปรากฏในองค์ประกอบ
faultstringของการตอบกลับข้อผิดพลาด ตัวอย่างเช่น ในfaultstringต่อไปนี้ ชื่อนโยบาย Service Callout ที่ล้มเหลวคือExecuteGeocodingRequest"faultstring": "ServiceCallout[ExecuteGeocodingRequest]ตรวจสอบ
faultstringในเนื้อหาการตอบกลับข้อผิดพลาดและดูว่ามีโค้ดตอบกลับ 4XX หรือ 5XX แสดงอยู่ในReasonหรือไม่ ตัวอย่างเช่น faultstring ต่อไปนี้ระบุอย่างชัดเจนว่าเซิร์ฟเวอร์แบ็กเอนด์ส่งคืนโค้ดตอบกลับ 502"faultstring": "Execution of ServiceCallout ExecuteGeocodingRequest failed. Reason: ResponseCode 502 is treated as error"
ความละเอียด
เมื่อทราบโค้ดตอบกลับข้อผิดพลาดแล้ว คุณสามารถแก้ปัญหาข้อผิดพลาดนี้ได้เช่นเดียวกับข้อผิดพลาด 4XX หรือ 5XX โปรดดู Playbook ข้อผิดพลาดรันไทม์ (4XX/5XX) เพื่อดูวิธีการแก้ปัญหาและแก้ไขข้อผิดพลาด 4XX หรือ 5XX