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

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

การวินิจฉัย

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

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

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

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

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

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

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

การวินิจฉัย

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

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

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

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