คุณกำลังดูเอกสารประกอบของ 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" 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 ที่กำหนดตัวแปรไว้เป็นครั้งแรก
- ในกรณีส่วนใหญ่ คุณจะพบว่าตัวแปรที่มีปัญหาถูกสร้างและป้อนข้อมูลในนโยบายอื่นที่ทำงานก่อนนโยบาย Service Callout ตัวอย่างเช่น นโยบาย Assign Message มักใช้เพื่อสร้างและป้อนข้อมูลตัวแปรในโฟลว์พร็อกซี API
- เมื่อทราบแล้วว่านโยบายใดกำหนดและป้อนข้อมูลตัวแปรไว้เป็นครั้งแรก คุณต้องกำหนดประเภทของตัวแปรนั้นดังนี้
- ตรวจสอบค่าของแอตทริบิวต์
type(หากมี) - หากไม่มีแอตทริบิวต์
typeระบบจะถือว่าตัวแปรเป็นสตริง
- ตรวจสอบค่าของแอตทริบิวต์
- หากตัวแปรเป็นประเภทที่ไม่ใช่ข้อความ (เช่น สตริง) นั่นคือสาเหตุของข้อผิดพลาด ดูข้อมูลเกี่ยวกับตัวแปรทั่วไปและประเภทของตัวแปรได้ในข้อมูลอ้างอิงตัวแปร
ตัวอย่างเช่น สมมติว่าตัวแปร PostalCode ที่อ้างอิงในนโยบาย Service Callout ถูกสร้างขึ้นในนโยบาย Assign Message ต่อไปนี้ โปรดทราบว่าระบบกำหนดค่าตัวแปรโฟลว์ request.queryparam.postalcode ให้กับ 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> ของนโยบาย Service Callout
<?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> ในนโยบาย Service Callout ที่ล้มเหลวเป็นตัวแปรโฟลว์ประเภท ข้อความ ที่มีอยู่ หรือคุณจะสร้างตัวแปรประเภทข้อความใหม่โดยตรงในนโยบาย Service Callout (ตามที่อธิบายไว้ในเอกสารประกอบของนโยบาย) แล้วใช้ตัวแปรนั้นก็ได้
หากต้องการแก้ไขนโยบาย คุณต้องแก้ไของค์ประกอบ <Request> เพื่อระบุตัวแปรที่มีอยู่หรือตัวแปรใหม่ที่เป็นประเภทข้อความ ตัวอย่างเช่น ตัวแปร GeocodingRequest ที่ตั้งค่าไว้ในนโยบาย Assign Message เป็นประเภทข้อความและจะทำงานได้ตามปกติในนโยบาย Service Callout เช่น
<?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> ของนโยบาย 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" 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 ที่กำหนดตัวแปรไว้เป็นครั้งแรก
- ในกรณีส่วนใหญ่ คุณจะพบว่าตัวแปรที่มีปัญหาถูกสร้างและป้อนข้อมูลในนโยบายอื่นที่ทำงานก่อนนโยบาย 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" 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> ของนโยบาย Service Callout
<?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> ในนโยบาย Service Callout ที่ล้มเหลวเป็นตัวแปรประเภทข้อความคำขอ request message ที่มีอยู่ หรือคุณจะสร้างตัวแปรประเภทข้อความคำขอใหม่โดยตรงในนโยบาย Service Callout (ตามที่อธิบายไว้ใน policy documentation) แล้วใช้ตัวแปรนั้นก็ได้
หากต้องการแก้ไขนโยบาย คุณต้องแก้ไของค์ประกอบ <Request> เพื่อระบุตัวแปรที่มีอยู่หรือตัวแปรใหม่ที่เป็นประเภทข้อความคำขอ และตัวแปรนั้นจะทำงานในนโยบาย Service Callout เช่น
<?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>
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" standalone="yes"?> <ServiceCallout name="ExecuteGeocodingRequest"> <Request variable="GeocodingRequest"/> <Response>GeocodingResponse</Response> <HTTPTargetConnection> <URL>http://</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" 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
การวินิจฉัย
ระบุนโยบาย 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