คุณกำลังดูเอกสารประกอบสำหรับ Apigee Edge
ไปที่เอกสารประกอบเกี่ยวกับ Apigee Xข้อมูล
UnresolvedVariable
รหัสข้อผิดพลาด
steps.assignmessage.UnresolvedVariable
เนื้อหาการตอบกลับข้อผิดพลาด
{ "fault": { "faultstring": "AssignMessage[policy_name]: unable to resolve variable [variable_name]", "detail": { "errorcode": "steps.assignmessage.UnresolvedVariable" } } }
สาเหตุ
ข้อผิดพลาดนี้จะเกิดขึ้นหากตัวแปรที่ระบุไว้ในนโยบายกำหนดข้อความเป็นอย่างใดอย่างหนึ่งต่อไปนี้
- อยู่นอกขอบเขต (ไม่พร้อมใช้งานในขั้นตอนที่นโยบายจะทำงาน) หรือ
- ไม่สามารถแก้ไขได้ (ไม่ได้กําหนด)
ตัวอย่างเช่น ข้อผิดพลาดนี้จะเกิดขึ้นหากนโยบายกำหนดข้อความทำงานในขั้นตอนการส่งคำขอ แต่มีการตั้งค่าแอตทริบิวต์ source
ในองค์ประกอบ <Copy>
เป็นตัวแปร response
หรือ error
หรือตัวแปรที่กำหนดเองอื่นๆ ที่ไม่มีอยู่ในขั้นตอนการส่งคำขอ
การวินิจฉัย
ระบุนโยบาย Assign Message ที่เกิดข้อผิดพลาดและชื่อของตัวแปรที่ไม่สามารถใช้ได้ คุณจะเห็นทั้ง 2 รายการนี้ในองค์ประกอบ
faultstring
ของคำตอบข้อผิดพลาดตัวอย่างเช่น ใน
faultstring
ต่อไปนี้ ชื่อนโยบายคือgoogleBook
และตัวแปรคือvar
"faultstring": "AssignMessage[googleBook]: unable to resolve variable var"
ใน XML นโยบายข้อความที่มอบหมายไม่สําเร็จ ให้ตรวจสอบว่าชื่อตัวแปรที่ใช้ตรงกับชื่อตัวแปรที่ระบุไว้ในสตริงข้อบกพร่อง (ขั้นตอนที่ 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>
ตรวจสอบว่าตัวแปรได้รับการกำหนดและพร้อมใช้งานในขั้นตอนที่มีการบังคับใช้นโยบายข้อความหรือไม่
หากตัวแปรเป็นค่าใดค่าหนึ่งต่อไปนี้
- อยู่นอกขอบเขต (ไม่พร้อมใช้งานในขั้นตอนที่นโยบายจะทำงาน) หรือ
- ไม่สามารถแก้ไขได้ (ไม่ได้กําหนด)
นั่นคือสาเหตุของข้อผิดพลาด
ตัวอย่างเช่น สมมติว่านโยบายกำหนดข้อความที่แสดงด้านบนทำงานในขั้นตอนการส่งคำขอ ตรวจสอบว่ามีการกําหนดตัวแปร
var
ในนโยบายใดๆ ที่เรียกใช้ก่อนนโยบาย Assign Message ในขั้นตอนการส่งคําขอหรือไม่ หากไม่ได้กําหนดตัวแปรไว้ คุณจะได้รับรหัสข้อผิดพลาดต่อไปนี้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>
เป็นตัวแปรที่ไม่ใช่ประเภท message
ตัวแปรประเภทข้อความแสดงคำขอ HTTP และการตอบกลับทั้งหมด ตัวแปรโฟลว์ Edge ในตัว request
, response
และ message
เป็นประเภทข้อความ ดูข้อมูลเพิ่มเติมเกี่ยวกับตัวแปรข้อความได้ที่ข้อมูลอ้างอิงเกี่ยวกับตัวแปร
การวินิจฉัย
ระบุนโยบายการกําหนดข้อความที่เกิดข้อผิดพลาดและชื่อตัวแปรที่มีประเภทไม่ถูกต้อง คุณดูรายการทั้ง 2 รายการนี้ได้ในองค์ประกอบ
faultstring
ของการตอบกลับข้อผิดพลาด ตัวอย่างเช่น ในfaultstring
ต่อไปนี้ ชื่อนโยบายคือGenerateGeocodingRequest
และตัวแปรคือPostalCode
"faultstring": "AssignMessage[GenerateGeocodingRequest]: value of variable PostalCode is not of type Message"
ใน XML นโยบายข้อความที่กำหนดไม่สำเร็จ ให้ตรวจสอบว่าชื่อตัวแปรที่ตั้งไว้ในองค์ประกอบ
<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 Proxy ที่กําหนดตัวแปรไว้ก่อน
- เมื่อทราบนโยบายที่กําหนดตัวแปรและป้อนข้อมูลไว้แล้ว คุณจะต้องระบุประเภทของตัวแปรนั้น ดังนี้
- ตรวจสอบค่าของแอตทริบิวต์ type (หากมี)
- หากไม่มีแอตทริบิวต์ประเภท ระบบจะถือว่าตัวแปรเป็นสตริง
- หากประเภทของตัวแปรไม่ใช่ข้อความ (เช่น สตริง) นั่นเป็นสาเหตุของข้อผิดพลาด ดูข้อมูลเกี่ยวกับตัวแปรทั่วไปและประเภทของตัวแปรได้ในข้อมูลอ้างอิงเกี่ยวกับตัวแปร
เช่น ดูตัวแปร PostalCode ใน XML ด้านบน โดยจะได้รับค่าของตัวแปรการไหล
request.queryparam.postalcode
ในองค์ประกอบ<AssignVariable>
ค่านี้เป็นสตริง เนื่องจากไม่มีแอตทริบิวต์ประเภทในการกำหนดตัวแปรโปรดทราบว่าตัวแปร PostalCode ใช้อยู่ในองค์ประกอบ
<Copy>
ของนโยบาย Assign Message<Copy source="PostalCode"> <QueryParams> <QueryParam name="PostalCode" /> </QueryParams> </Copy>
เนื่องจาก PostalCode ไม่ใช่ประเภทข้อความ (แต่เป็นสตริงในตัวอย่างนี้) คุณจึงได้รับรหัสข้อผิดพลาด
steps.assignmessage.VariableOfNonMsgType
ความละเอียด
ตรวจสอบว่าแอตทริบิวต์ source
ในองค์ประกอบ <Copy>
ในนโยบายการกําหนดข้อความที่ไม่สําเร็จได้รับการตั้งค่าเป็นตัวแปรการไหลประเภท message ที่มีอยู่
หากต้องการแก้ไขนโยบาย ให้แก้ไขแอตทริบิวต์ source
ในองค์ประกอบ <Copy>
เพื่อระบุตัวแปรที่เป็นประเภทข้อความ ตัวอย่างเช่น หากควรให้นโยบาย "มอบหมายข้อความ" ทำงานในขั้นตอนคำขอ คุณสามารถใช้ตัวแปรประเภทข้อความ 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>