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