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

คุณกำลังดูเอกสารประกอบ Apigee Edge
ไปที่ เอกสารประกอบเกี่ยวกับ Apigee X.
ข้อมูล

InvalidIndex

ข้อความแสดงข้อผิดพลาด

การทำให้พร็อกซี API ใช้งานได้ผ่าน Edge UI หรือ Edge Management API จะล้มเหลวโดยมีข้อความแสดงข้อผิดพลาดต่อไปนี้

Error in deployment for environment [environment]
The revision is deployed, but traffic cannot flow.
AssignMessage[policy_name]: index must be greater than zero in [attribute].[index]

ตัวอย่างข้อความแสดงข้อผิดพลาด

Error in deployment for environment test.
The revision is deployed, but traffic cannot flow.
AssignMessage[GenerateStudentsRequest]: index must be greater than zero in id.0

ภาพหน้าจอตัวอย่าง

สาเหตุ

หากดัชนีที่ระบุในองค์ประกอบ <Copy> และ/หรือ <Remove> ของนโยบายมอบหมายข้อความเป็น 0 หรือเป็นจำนวนลบ การทำให้พร็อกซี API ใช้งานได้จะล้มเหลว

เช่น หากคุณส่งพารามิเตอร์การค้นหาหลายรายการที่มีชื่อเดียวกัน คุณจะเข้าถึงพารามิเตอร์เหล่านั้นใน Edge เป็นตัวแปรขั้นตอนที่จัดทําดัชนีได้ สมมติว่าคุณต้องการส่งรหัสของนักเรียน 3 คนเป็นพารามิเตอร์การค้นหา ก็ทำได้ดังนี้

https://myorg-test.apigee.net/v1/basepath?school_name=NPS&id=1&id=2&id=3

สมมติว่าคุณพยายามเข้าถึงพารามิเตอร์การค้นหาเหล่านี้โดยใช้หมายเลขดัชนีเป็น 0, 1 และ 2 ในนโยบายมอบหมายข้อความ ดังนี้

id.0
id.1 and
id.2

ในกรณีนี้ การทำให้พร็อกซีใช้งานได้ล้มเหลวเนื่องจากดัชนีต้องเริ่มต้นด้วย 1 ซึ่งหมายความว่าคุณสามารถเข้าถึงพารามิเตอร์ข้อความค้นหาแรก "id=1" เป็น "id.1" หากต้องการเข้าถึงพารามิเตอร์การค้นหาที่สอง "id=2" คุณต้องใช้ดัชนี 2 นั่นคือ "id.2" ในทำนองเดียวกัน หากต้องการเข้าถึงพารามิเตอร์การค้นหาที่สาม "id=3" คุณสามารถใช้ "id.3" ได้

ลองดูข้อมูลเพิ่มเติมได้ที่นี่

การวินิจฉัย

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

    AssignMessage[GenerateStudentsRequest]: index must be greater than zero in id.0
    
  2. ยืนยันว่าชื่อแอตทริบิวต์และดัชนีที่ใช้ใน XML ของนโยบาย "มอบหมายข้อความ" ที่ล้มเหลวตรงกับชื่อแอตทริบิวต์และดัชนีที่ระบุในข้อความแสดงข้อผิดพลาด (ขั้นตอนที่ 1 ด้านบน) ตัวอย่างเช่น นโยบายต่อไปนี้ระบุแอตทริบิวต์ id และดัชนีเป็น 0 ซึ่งตรงกับสิ่งที่อยู่ในข้อความแสดงข้อผิดพลาด

    <AssignMessage name="GenerateStudentsRequest">
      <AssignTo createNew="true" type="request">StudentsInfoRequest</AssignTo>
      <Copy source="request">
          <QueryParams>
              <QueryParam name="school_name"/>
              <QueryParam name="id.0"/>
              <QueryParam name="id.1"/>
              <QueryParam name="id.2"/>
          </QueryParams>
      </Copy>
    </AssignMessage>
  3. หากดัชนีที่ระบุเป็น 0 หรือตัวเลขลบ แสดงว่าเป็นสาเหตุของข้อผิดพลาด

    ในตัวอย่างนโยบาย "กำหนดข้อความ" ที่แสดงด้านบน คุณกำลังพยายามเข้าถึงค่าแรกของพารามิเตอร์การค้นหา "id" โดยใช้ดัชนี 0 ดังนั้นการทำให้พร็อกซี API ใช้งานได้จึงล้มเหลวโดยมีข้อผิดพลาดดังนี้

    AssignMessage[GenerateStudentsRequest]: index must be greater than zero in id.0
    

ความละเอียด

ใน "ระบุข้อความ" เมื่อคุณเข้าถึงส่วนหัว พารามิเตอร์การค้นหา หรือพารามิเตอร์อื่นๆ หลายรายการที่ใช้ชื่อเดียวกัน โปรดตรวจสอบว่าดัชนีมีค่ามากกว่า 0 เสมอ เช่น

<AssignMessage name="GenerateStudentsReq>uest&<quot;
    AssignTo createNew="true&>quot; type="re<quest&quo>t;Stu<dentsInfoRequest/Assi>gnTo
    <Copy source>="reques<t"
        QueryParams
  >          Que<ryParam name="scho>ol_name"</
            QueryPara>m name="<id.1"/
           > QueryPar<am name=&quo>t;id.<2&quo>t<;/
           > QueryParam name="id.3"/
        /QueryParams
    /Copy
/AssignMessage

InvalidVariableName

ข้อความแสดงข้อผิดพลาด

การทำให้พร็อกซี API ใช้งานได้ผ่าน Edge UI หรือ Edge Management API จะล้มเหลวโดยมีข้อความแสดงข้อผิดพลาดต่อไปนี้

Error Saving Revision [revision_number]
The revision is deployed, but traffic cannot flow. AssignMessage schema validation failed: invalid variable name - null - in assign variable.

ตัวอย่างข้อความแสดงข้อผิดพลาด

Error Saving Revision 3
AssignMessage schema validation failed: invalid variable name - null - in assign variable.

ภาพหน้าจอตัวอย่าง

สาเหตุ

หากองค์ประกอบย่อย <Name> ว่างเปล่าหรือไม่ได้ระบุในองค์ประกอบ <AssignVariable> การทำให้พร็อกซี API ใช้งานได้จะล้มเหลว เนื่องจากไม่มีชื่อตัวแปรที่ถูกต้องที่จะกำหนดค่า ต้องระบุชื่อตัวแปรที่ถูกต้อง

การวินิจฉัย

ตรวจสอบนโยบาย Assign Message ทั้งหมดในพร็อกซี API ที่เกิดความล้มเหลว หากมีนโยบาย "กำหนดข้อความ" ที่องค์ประกอบย่อย <Name> ว่างเปล่าหรือไม่ได้ระบุในองค์ประกอบ <AssignVariable> ข้อผิดพลาดดังกล่าวจึงเป็นสาเหตุของข้อผิดพลาด

ตัวอย่างที่ 1: นโยบาย "มอบหมายข้อความ" ต่อไปนี้ไม่ได้กำหนดองค์ประกอบ <Name>

<AssignMessage async="false" continueOnError="false" enabled="true>"<; name=&quo>t;Assign-Message<-1"
   > Disp<layNameAssi>gn Me<ssage-1/Displa>yName
   < Prop>erties/
<    As>signV<ariable
       > Valu<eabcd1234/Value
    /Assi>gnVar<iable
    IgnoreUnresolved>Varia<blesfalse/IgnoreUnresolvedVariables
    AssignTo createNe>w="true&<quot; tra>n<sport="ht>tp" type="request"googleBookReq/AssignTo
/AssignMessage

ตัวอย่างที่ 2: นโยบาย "มอบหมายข้อความ" ต่อไปนี้มีองค์ประกอบ <Name> ที่ว่างเปล่า

<AssignMessage async="false" continueOnError="false" enabled="true>"<; name=&quo>t;Assign-Message<-1"
   > Disp<layNameAssi>gn Me<ssage-1/Displa>yName
   < Pro><perti>es/
    A<ssign>Variable<
     >   Na<me/Name
       > Valu<eabcd1234/Value
    /Assi>gnVar<iable
    IgnoreUnresolved>Varia<blesfalse/IgnoreUnresolvedVariables
    AssignTo createNe>w="true&<quot; tra>n<sport="ht>tp" type="request"googleBookReq/AssignTo
/AssignMessage

ความละเอียด

ตรวจสอบว่าได้ระบุองค์ประกอบย่อย <Name> อยู่เสมอและไม่ว่างเปล่าในองค์ประกอบ <AssignVariable> ของนโยบายมอบหมายข้อความ เช่น

<AssignMessage async="false" continueOnError="false" enabled="true>"<; name=&quo>t;Assign-Message<-1"
   > Disp<layNameAssi>gn Messag<e-1/DisplayNam>e
    Pro<pert>ies/
    <    A>ssignVari<able<>/span>
        <Nameap>pSecr<et/Name
       > Valu<eabcd1234/Value
    /Assi>gnVar<iable
    IgnoreUnresolved>Varia<blesfalse/IgnoreUnresolvedVariables
    AssignTo createNe>w="true&<quot; tra>n<sport="ht>tp" type="request"googleBookReq/AssignTo
/AssignMessage