คุณกำลังดูเอกสารประกอบ 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
ในนโยบายใดก็ตามที่จะดำเนินการก่อนนโยบาย "กำหนดข้อความ" ในขั้นตอนคำขอหรือไม่ หากไม่มีการกำหนดตัวแปร คุณจะได้รับรหัสข้อผิดพลาด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
เป็นข้อความประเภท ดูข้อมูลเพิ่มเติมเกี่ยวกับตัวแปรข้อความได้ที่ข้อมูลอ้างอิงตัวแปร
การวินิจฉัย
ระบุนโยบาย Assign 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 ที่กำหนดตัวแปรก่อน
- เมื่อคุณทราบว่านโยบายมีการกำหนดและป้อนข้อมูลตัวแปรใดก่อน คุณจะต้องระบุประเภทของตัวแปรนั้นดังนี้
- ตรวจสอบค่าของแอตทริบิวต์ประเภท (หากมี)
- หากไม่มีแอตทริบิวต์ประเภท ระบบจะถือว่าตัวแปรเป็นสตริง
- หากประเภทของตัวแปรไม่ใช่ข้อความ (เช่น สตริง) นั่นเป็นสาเหตุของข้อผิดพลาด ดูตัวแปรทั่วไปและประเภทตัวแปรได้ในข้อมูลอ้างอิงตัวแปร
เช่น ดูตัวแปร PostalCode ใน XML ด้านบน ซึ่งได้รับการกำหนดค่าของตัวแปรโฟลว์
request.queryparam.postalcode
ในองค์ประกอบ<AssignVariable>
ค่านี้เป็นสตริง เนื่องจากไม่มีแอตทริบิวต์ประเภทในการกำหนดตัวแปรตอนนี้ ให้ระลึกไว้เสมอว่าตัวแปร PostalCode ถูกใช้ในองค์ประกอบ
<Copy>
ของนโยบายกำหนดข้อความ ดังนี้<Copy source="PostalCode"> <QueryParams> <QueryParam name="PostalCode" /> </QueryParams> </Copy>
เนื่องจาก PostalCode ไม่ใช่ข้อความประเภท (ในตัวอย่างนี้เป็นสตริง) คุณจะได้รับรหัสข้อผิดพลาด:
steps.assignmessage.VariableOfNonMsgType
ความละเอียด
ตรวจสอบว่าแอตทริบิวต์ source
ในองค์ประกอบ <Copy>
ในนโยบาย "มอบหมายข้อความ" ที่ล้มเหลวได้รับการตั้งค่าเป็นตัวแปรโฟลว์ประเภทข้อความที่มีอยู่
หากต้องการแก้ไขนโยบาย ให้แก้ไขแอตทริบิวต์ 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>