คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่เอกสารประกอบของ
Apigee X info
UnresolvedVariable
รหัสข้อผิดพลาด
steps.assignmessage.UnresolvedVariable
เนื้อหาการตอบกลับข้อผิดพลาด
{ "fault": { "faultstring": "AssignMessage[policy_name]: unable to resolve variable [variable_name]", "detail": { "errorcode": "steps.assignmessage.UnresolvedVariable" } } }
สาเหตุ
ข้อผิดพลาดนี้จะเกิดขึ้นหากตัวแปรที่ระบุในนโยบายกำหนดข้อความมีลักษณะอย่างใดอย่างหนึ่งต่อไปนี้
- อยู่นอกขอบเขต (ไม่พร้อมใช้งานในโฟลว์ที่เฉพาะเจาะจงซึ่งมีการบังคับใช้นโยบาย) หรือ
- ไม่สามารถแก้ไขได้ (ไม่ได้กำหนด)
ตัวอย่างเช่น ข้อผิดพลาดนี้จะเกิดขึ้นหากนโยบาย Assign Message ทำงานในโฟลว์คำขอ แต่แอตทริบิวต์ source ในองค์ประกอบ <Copy> ตั้งค่าเป็นตัวแปร response หรือ error หรือตัวแปรที่กำหนดเองอื่นๆ ที่ไม่มีอยู่ในโฟลว์คำขอ
การวินิจฉัย
ระบุนโยบายการกำหนดข้อความที่เกิดข้อผิดพลาดและชื่อของตัวแปรที่ใช้ไม่ได้ คุณดูรายการทั้ง 2 รายการนี้ได้ในองค์ประกอบ
faultstringของการตอบกลับข้อผิดพลาดตัวอย่างเช่น ใน
faultstringต่อไปนี้ ชื่อนโยบายคือgoogleBookและตัวแปรคือvar"faultstring": "AssignMessage[googleBook]: unable to resolve variable var"ใน XML ของ Assign Message Policy ที่ล้มเหลว ให้ตรวจสอบว่าชื่อของตัวแปรที่ใช้ตรงกับชื่อตัวแปรที่ระบุในสตริงข้อผิดพลาด (ขั้นตอนที่ 1 ด้านบน) ตัวอย่างเช่น นโยบายต่อไปนี้จะตั้งค่าแอตทริบิวต์แหล่งที่มาในองค์ประกอบ
<Copy>เป็นตัวแปรชื่อvarซึ่งตรงกับสิ่งที่อยู่ในfaultstring<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign-Message-1"> <DisplayName>googleBook</DisplayName> <Properties /> <Copy source="var"> <Headers> <Header name="user-agent" /> </Headers> </Copy> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignTo createNew="true" transport="http" type="request">googleBookReq</AssignTo> </AssignMessage>พิจารณาว่ามีการกำหนดตัวแปรและพร้อมใช้งานในโฟลว์ที่นโยบายกำหนดข้อความกำลังดำเนินการอยู่หรือไม่
หากตัวแปรเป็นอย่างใดอย่างหนึ่งต่อไปนี้
- อยู่นอกขอบเขต (ไม่พร้อมใช้งานในโฟลว์ที่เฉพาะเจาะจงซึ่งมีการบังคับใช้นโยบาย) หรือ
- ไม่สามารถแก้ไขได้ (ไม่ได้กำหนด)
นั่นคือสาเหตุของข้อผิดพลาด
ตัวอย่างเช่น สมมติว่านโยบาย Assign Message ที่แสดงด้านบนทำงานในโฟลว์คำขอ ตรวจสอบว่ามีการกำหนดตัวแปร
varในนโยบายใดๆ ที่ดำเนินการก่อนนโยบายกำหนดข้อความในโฟลว์คำขอหรือไม่ หากไม่ได้กำหนดตัวแปรไว้ คุณจะได้รับรหัสข้อผิดพลาดต่อไปนี้steps.assignmessage.UnresolvedVariable
ความละเอียด
ตรวจสอบว่าตัวแปรที่อ้างอิงในนโยบายมีอยู่และพร้อมใช้งานในโฟลว์ที่เฉพาะเจาะจง ซึ่งมีการดำเนินการนโยบายกำหนดข้อความ
หากต้องการแก้ไขนโยบายตัวอย่างที่แสดงด้านบน คุณสามารถแก้ไขแอตทริบิวต์แหล่งที่มาในองค์ประกอบ <Copy> ให้เป็นตัวแปรคำขอหรือตัวแปรที่กำหนดเองอื่นๆ ที่มีประเภทข้อความซึ่งอยู่ในโฟลว์คำขอ
<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign-Message-1">
<DisplayName>googleBook</DisplayName>
<Properties />
<Copy source="request">
<Headers>
<Header name="user-agent" />
</Headers>
</Copy>
<IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
<AssignTo createNew="true" transport="http" type="request">googleBookReq</AssignTo>
</AssignMessage>
VariableOfNonMsgType
รหัสข้อผิดพลาด
steps.assignmessage.VariableOfNonMsgType
เนื้อหาการตอบกลับข้อผิดพลาด
{ "fault": { "faultstring": "AssignMessage[policy_name]: value of variable [variable] is not of type Message", "detail": { "errorcode": "steps.assignmessage.VariableOfNonMsgType" } } }
สาเหตุ
ข้อผิดพลาดนี้จะเกิดขึ้นหากตั้งค่าsourceแอตทริบิวต์ในองค์ประกอบ<Copy>เป็นตัวแปรที่ไม่ใช่ประเภทข้อความ
ตัวแปรประเภทข้อความแสดงถึงคำขอและการตอบกลับ HTTP ทั้งหมด ตัวแปรโฟลว์ Edge แบบบิวท์อิน request, response และ message มีประเภทเป็นข้อความ ดูข้อมูลเพิ่มเติมเกี่ยวกับตัวแปรข้อความได้ที่ข้อมูลอ้างอิงตัวแปร
การวินิจฉัย
ระบุนโยบายการกำหนดข้อความที่เกิดข้อผิดพลาดและชื่อของตัวแปรที่มีประเภทไม่ถูกต้อง คุณดูรายการทั้ง 2 รายการนี้ได้ในองค์ประกอบ
faultstringของการตอบกลับข้อผิดพลาด ตัวอย่างเช่น ในfaultstringต่อไปนี้ ชื่อนโยบายคือGenerateGeocodingRequestและตัวแปรคือPostalCode"faultstring": "AssignMessage[GenerateGeocodingRequest]: value of variable PostalCode is not of type Message"ใน XML ของ Assign Message Policy ที่ล้มเหลว ให้ตรวจสอบว่าชื่อของตัวแปรที่ตั้งค่าไว้ในองค์ประกอบ
<Copy>ตรงกับชื่อตัวแปรที่ระบุในสตริงข้อผิดพลาด (ขั้นตอนที่ 1 ด้านบน) ตัวอย่างเช่น นโยบายต่อไปนี้จะตั้งค่าแอตทริบิวต์แหล่งที่มาเป็นตัวแปรชื่อPostalCodeซึ่งตรงกับค่าในfaultstring<AssignMessage name="GenerateGeocodingRequest"> <AssignTo createNew="true" type="request">GeocodingRequest</AssignTo> <AssignVariable> <Name>PostalCode</Name> <Ref>request.queryparam.postalcode</Ref> </AssignVariable> <AssignVariable> <Name>Country</Name> <Ref>request.queryparam.country</Ref> </AssignVariable> <Copy source="PostalCode"> <QueryParams> <QueryParam name="q" /> </QueryParams> </Copy> </AssignMessage>ตรวจสอบว่าตัวแปรนี้เป็นประเภทข้อความหรือไม่
- ค้นหาโค้ดภายในชุดพร็อกซี API ซึ่งเป็นที่ที่กำหนดตัวแปรเป็นครั้งแรก
- เมื่อทราบแล้วว่านโยบายใดที่กำหนดและป้อนค่าตัวแปรก่อน คุณต้องกำหนดประเภทของตัวแปรนั้นดังนี้
- ตรวจสอบค่าของแอตทริบิวต์ประเภท (หากมี)
- หากไม่มีแอตทริบิวต์ประเภท ระบบจะถือว่าตัวแปรเป็นสตริง
- หากประเภทของตัวแปรไม่ใช่ข้อความ (เช่น สตริง) แสดงว่านั่นคือสาเหตุของข้อผิดพลาด คุณดูตัวแปรที่ใช้กันทั่วไปและประเภทของตัวแปรได้ในข้อมูลอ้างอิงตัวแปร
เช่น ดูตัวแปร PostalCode ใน XML ด้านบน โดยจะกำหนดค่าของตัวแปรโฟลว์
request.queryparam.postalcodeในองค์ประกอบ<AssignVariable>ค่านี้เป็นสตริงเนื่องจากไม่มีแอตทริบิวต์ประเภทในการกําหนดตัวแปรตอนนี้โปรดจำว่าตัวแปร PostalCode ใช้ในองค์ประกอบ
<Copy>ของนโยบายกำหนดข้อความ<Copy source="PostalCode"> <QueryParams> <QueryParam name="PostalCode" /> </QueryParams> </Copy>เนื่องจาก PostalCode ไม่ใช่ประเภทข้อความ (เป็นสตริงในตัวอย่างนี้) คุณจึงได้รับรหัสข้อผิดพลาดต่อไปนี้
steps.assignmessage.VariableOfNonMsgType
ความละเอียด
ตรวจสอบว่าแอตทริบิวต์ source ในองค์ประกอบ <Copy> ในนโยบายกำหนดข้อความที่ไม่สำเร็จได้รับการตั้งค่าเป็นตัวแปรโฟลว์ประเภท message ที่มีอยู่
หากต้องการแก้ไขนโยบาย คุณสามารถแก้ไขแอตทริบิวต์ source ในองค์ประกอบ <Copy> เพื่อระบุตัวแปรประเภทข้อความ เช่น หากนโยบาย Assign Message ควรจะดำเนินการในโฟลว์คำขอ คุณก็สามารถใช้ตัวแปรประเภทข้อความ request หรือตัวแปรที่กำหนดเองอื่นๆ ที่มีประเภทเป็นข้อความได้
<AssignMessage name="GenerateGeocodingRequest">
<AssignTo createNew="true" type="request">GeocodingRequest</AssignTo>
<AssignVariable>
<Name>PostalCode</Name>
<Ref>request.queryparam.postalcode</Ref>
</AssignVariable>
<AssignVariable>
<Name>Country</Name>
<Ref>request.queryparam.country</Ref>
</AssignVariable>
<Copy source="request">
<QueryParams>
<QueryParam name="PostalCode" />
</QueryParams>
</Copy>
</AssignMessage>