คุณกำลังดูเอกสารประกอบ 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>
ของนโยบายข้อความไฮไลต์บริการไม่ใช่ประเภท message หากตัวแปรเป็นสตริงหรือประเภทอื่นๆ ที่ไม่ใช่ข้อความ คุณจะเห็นข้อผิดพลาดนี้
ตัวแปรประเภทข้อความแสดงคำขอ HTTP และการตอบกลับทั้งหมด ตัวแปรโฟลว์ Edge ในตัว request
, response
และ message
เป็นข้อความประเภท ดูข้อมูลเพิ่มเติมเกี่ยวกับตัวแปรข้อความได้ที่ข้อมูลอ้างอิงเกี่ยวกับตัวแปร
การวินิจฉัย
ระบุนโยบายคำขอราคาเสนอบริการที่เกิดข้อผิดพลาดขึ้นและชื่อของตัวแปรที่มีประเภทไม่ถูกต้อง คุณดูรายการทั้ง 2 รายการนี้ได้ในองค์ประกอบ
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 และการตอบกลับทั้งหมด ตัวแปรโฟลว์ Edge ในตัว request
, response
และ message
เป็นข้อความประเภท ดูข้อมูลเพิ่มเติมเกี่ยวกับตัวแปรข้อความได้ที่ข้อมูลอ้างอิงตัวแปร
การวินิจฉัย
ระบุนโยบายคำขอราคาเสนอบริการที่เกิดข้อผิดพลาดขึ้นและชื่อของตัวแปรที่มีประเภทไม่ถูกต้อง คุณดูรายการทั้ง 2 รายการนี้ได้ในองค์ประกอบ
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 message ที่มีอยู่ หรือสร้างตัวแปรประเภทข้อความคำขอใหม่โดยตรงในนโยบายข้อความไฮไลต์บริการ (ตามที่อธิบายไว้ในเอกสารประกอบนโยบาย) แล้วใช้งาน
หากต้องการแก้ไขนโยบาย คุณต้องแก้ไของค์ประกอบ <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>
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 เป้าหมายในนโยบายข้อความไฮไลต์บริการมีรูปแบบไม่ถูกต้องหรือมีชื่อโฮสต์ไม่ถูกต้องหรือเข้าถึงไม่ได้ |
ข้อผิดพลาดเกี่ยวกับเซิร์ฟเวอร์แบ็กเอนด์ | เซิร์ฟเวอร์แบ็กเอนด์แสดงผลการตอบกลับข้อผิดพลาด 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
ในเนื้อหาการตอบกลับข้อผิดพลาดและตรวจสอบว่ามีโค้ดตอบกลับ 4XX หรือ 5XX แสดงอยู่ในReason
หรือไม่ ตัวอย่างเช่น Faultstring ต่อไปนี้ระบุอย่างชัดเจนว่ามีการส่งคืนโค้ดตอบกลับ 502 จากเซิร์ฟเวอร์แบ็กเอนด์"faultstring": "Execution of ServiceCallout ExecuteGeocodingRequest failed. Reason: ResponseCode 502 is treated as error"
ความละเอียด
เมื่อทราบรหัสการตอบกลับข้อผิดพลาดแล้ว คุณจะแก้ปัญหานี้ได้เช่นเดียวกับข้อผิดพลาด 4XX หรือ 5XX โปรดดูวิธีการแก้ปัญหาและแก้ไขข้อผิดพลาด 4XX หรือ 5XX ในPlaybook ข้อผิดพลาดรันไทม์ (4XX/5XX)