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

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

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

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

    ตัวอย่างเช่น ดูที่ตัวแปร 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>