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

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

    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. ระบุนโยบาย Assign Message ที่เกิดข้อผิดพลาดและชื่อของตัวแปรที่มีประเภทไม่ถูกต้อง คุณดูรายการทั้ง 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 ที่กำหนดตัวแปรก่อน
    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> ในนโยบาย "มอบหมายข้อความ" ที่ล้มเหลวได้รับการตั้งค่าเป็นตัวแปรโฟลว์ประเภทข้อความที่มีอยู่

หากต้องการแก้ไขนโยบาย ให้แก้ไขแอตทริบิวต์ 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>