กำหนดการแก้ปัญหาข้อผิดพลาดของรันไทม์ข้อความ

คุณกำลังดูเอกสารประกอบของ 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 หรือตัวแปรที่กำหนดเองอื่นๆ ที่ไม่มีอยู่ในโฟลว์คำขอ

การวินิจฉัย

  1. ระบุนโยบายการกำหนดข้อความที่เกิดข้อผิดพลาดและชื่อของตัวแปรที่ใช้ไม่ได้ คุณดูรายการทั้ง 2 รายการนี้ได้ในองค์ประกอบ faultstring ของการตอบกลับข้อผิดพลาด

    ตัวอย่างเช่น ใน faultstring ต่อไปนี้ ชื่อนโยบายคือ googleBook และตัวแปรคือ var

    "faultstring": "AssignMessage[googleBook]: unable to resolve variable var"
    
  2. ใน 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>
    
  3. พิจารณาว่ามีการกำหนดตัวแปรและพร้อมใช้งานในโฟลว์ที่นโยบายกำหนดข้อความกำลังดำเนินการอยู่หรือไม่

  4. หากตัวแปรเป็นอย่างใดอย่างหนึ่งต่อไปนี้

    1. อยู่นอกขอบเขต (ไม่พร้อมใช้งานในโฟลว์ที่เฉพาะเจาะจงซึ่งมีการบังคับใช้นโยบาย) หรือ
    2. ไม่สามารถแก้ไขได้ (ไม่ได้กำหนด)

    นั่นคือสาเหตุของข้อผิดพลาด

    ตัวอย่างเช่น สมมติว่านโยบาย 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 มีประเภทเป็นข้อความ ดูข้อมูลเพิ่มเติมเกี่ยวกับตัวแปรข้อความได้ที่ข้อมูลอ้างอิงตัวแปร

การวินิจฉัย

  1. ระบุนโยบายการกำหนดข้อความที่เกิดข้อผิดพลาดและชื่อของตัวแปรที่มีประเภทไม่ถูกต้อง คุณดูรายการทั้ง 2 รายการนี้ได้ในองค์ประกอบ faultstring ของการตอบกลับข้อผิดพลาด ตัวอย่างเช่น ใน faultstring ต่อไปนี้ ชื่อนโยบายคือ GenerateGeocodingRequest และตัวแปรคือ PostalCode

    "faultstring": "AssignMessage[GenerateGeocodingRequest]: value of variable PostalCode is not of type Message"
    
  2. ใน 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>
    
  3. ตรวจสอบว่าตัวแปรนี้เป็นประเภทข้อความหรือไม่

    1. ค้นหาโค้ดภายในชุดพร็อกซี API ซึ่งเป็นที่ที่กำหนดตัวแปรเป็นครั้งแรก
    2. เมื่อทราบแล้วว่านโยบายใดที่กำหนดและป้อนค่าตัวแปรก่อน คุณต้องกำหนดประเภทของตัวแปรนั้นดังนี้
      1. ตรวจสอบค่าของแอตทริบิวต์ประเภท (หากมี)
      2. หากไม่มีแอตทริบิวต์ประเภท ระบบจะถือว่าตัวแปรเป็นสตริง
    3. หากประเภทของตัวแปรไม่ใช่ข้อความ (เช่น สตริง) แสดงว่านั่นคือสาเหตุของข้อผิดพลาด คุณดูตัวแปรที่ใช้กันทั่วไปและประเภทของตัวแปรได้ในข้อมูลอ้างอิงตัวแปร

    เช่น ดูตัวแปร 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>