การแก้ปัญหาข้อผิดพลาดของรันไทม์ในการดึงข้อมูลตัวแปร

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

SourceMessageNotAvailable

รหัสข้อผิดพลาด

steps.extractvariables.SourceMessageNotAvailable

เนื้อหาการตอบกลับข้อผิดพลาด

{
  "fault": {
      "faultstring": "[variable_name] message is not available for ExtractVariable: [policy_name]",
      "detail": {
          "errorcode": "steps.extractvariables.SourceMessageNotAvailable"
      }
  }
}

สาเหตุ

ข้อผิดพลาดนี้เกิดขึ้นหากตัวแปร message ที่ระบุในองค์ประกอบ <Source> ของนโยบายตัวแปรการแตกข้อมูลเป็นอย่างใดอย่างหนึ่งต่อไปนี้

  • อยู่นอกขอบเขต (ใช้ไม่ได้ในขั้นตอนที่เจาะจงซึ่งจะมีการบังคับใช้นโยบาย) หรือ
  • แก้ไขไม่ได้ (ไม่ได้กำหนด)

ตัวอย่างเช่น ข้อผิดพลาดนี้เกิดขึ้นหากนโยบายการดึงข้อมูลตัวแปรทำงานในไฟล์ ขั้นตอนการส่งคำขอ แต่องค์ประกอบ <Source> มีการตั้งค่าเป็น response หรือ error ซึ่งไม่มีอยู่ในขั้นตอนคำขอ

การวินิจฉัย

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

    "faultstring": "response message is not available for ExtractVariable: ExtractVariables-1"

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

    <ExtractVariables name="ExtractVariables-1">
        <Source>response</Source>
        <URIPath>
            <Pattern ignoreCase="true">/a/{pathSeg}</Pattern>
        </URIPath>
        <VariablePrefix>urirequest</VariablePrefix>
    </ExtractVariables>
    
  3. ตรวจสอบว่าตัวแปรที่ใช้ในองค์ประกอบ <Source> ได้รับการกำหนดและพร้อมใช้งานในขั้นตอนที่มีการดำเนินการนโยบายการดึงข้อมูลตัวแปรหรือไม่

  4. หากตัวแปรมีลักษณะอย่างใดอย่างหนึ่งต่อไปนี้

    • อยู่นอกขอบเขต (ใช้ไม่ได้ในขั้นตอนที่เจาะจงซึ่งจะมีการบังคับใช้นโยบาย) หรือ
    • แก้ไขไม่ได้ (ไม่ได้กำหนด)

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

    ตัวอย่างเช่น สมมติว่านโยบายการดึงข้อมูลตัวแปรที่แสดงด้านบนทํางานในขั้นตอนคําขอ โปรดทราบว่ามีการใช้ตัวแปร response ในองค์ประกอบ <Source> ของนโยบายการดึงข้อมูลตัวแปร ตัวแปร response จะใช้ได้ในขั้นตอนการตอบกลับเท่านั้น

    เนื่องจากไม่มีตัวแปร response อยู่ในขั้นตอนคำขอ คุณจึงได้รับรหัสข้อผิดพลาด: steps.extractvariables.SourceMessageNotAvailable

ความละเอียด

ตรวจสอบว่าได้กำหนดตัวแปรที่ตั้งค่าในองค์ประกอบ <Source> ของนโยบายการดึงข้อมูลตัวแปรที่ล้มเหลวแล้ว และมีอยู่ในโฟลว์ที่นโยบายทำงาน

หากต้องการแก้ไขตัวอย่างนโยบายการดึงข้อมูลตัวแปรที่แสดงด้านบน ให้แก้ไของค์ประกอบ <Source> ให้ใช้ตัวแปร request ตามที่มีอยู่ในขั้นตอนคําขอ

<ExtractVariables name="ExtractVariables-1">
    <Source>request</Source>
    <URIPath>
        <Pattern ignoreCase="true">/a/{pathSeg}</Pattern>
    </URIPath>
    <VariablePrefix>urirequest</VariablePrefix>
</ExtractVariables>

SetVariableFailed

รหัสข้อผิดพลาด

steps.extractvariables.SetVariableFailed

เนื้อหาการตอบกลับข้อผิดพลาด

{
    "fault": {
        "faultstring": "Failed to set variable [variable_name] value [variable_value] from ExtractVariables: [policy_name]",
        "detail": {
            "errorcode": "steps.extractvariables.SetVariableFailed"
        }
    }
}

สาเหตุ

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

เช่น สมมติว่าคุณสร้าง/กำหนดค่าให้กับตัวแปร var.color ในกรณีนี้ ระบบจะจัดสรร color เป็นโหนดออบเจ็กต์ หากพยายามกำหนดค่าให้กับตัวแปรอื่น var.color.next ค่าดังกล่าวจะทำไม่สำเร็จเนื่องจากมีการจัดสรรตัวแปร color แล้ว และไม่อนุญาตให้จัดสรรตัวแปรอื่นให้ตัวแปรอื่น

การวินิจฉัย

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

    "faultstring": "Failed to set variable var.color.next value red from ExtractVariables: ExtractColors"

  2. ใน XML นโยบายการดึงข้อมูลตัวแปรที่ไม่สําเร็จ ให้ยืนยันว่าชื่อตัวแปรตรงกับชื่อตัวแปรที่ระบุไว้ในสตริงข้อบกพร่อง (ขั้นตอนที่ 1 ด้านบน) สำหรับ ตัวอย่างเช่น นโยบายต่อไปนี้พยายามกำหนดค่าจากคำค้นหาคำขอ ไปยังตัวแปรชื่อ var.color.next (ค่าที่ปรากฏสตริงข้อผิดพลาด):

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ExtractVariables name="ExtractColors">
        <DisplayName>ExtractColors</DisplayName>
        <Source>request</Source>
        <QueryParam name="color">
            <Pattern ignoreCase="true">{color}</Pattern>
        </QueryParam>
        <QueryParam name="nextcolor">
            <Pattern ignoreCase="true">{color.next}</Pattern>
        </QueryParam>
        <VariablePrefix>var</VariablePrefix>
    </ExtractVariables>
    
  3. ตรวจสอบชื่อตัวแปรทั้งหมดที่ใช้ในนโยบายการดึงข้อมูลตัวแปรที่ล้มเหลว หากคุณกําหนดค่าให้กับตัวแปรอื่นที่มีชื่อขึ้นต้นด้วยชื่อเดียวกับชื่อตัวแปรที่ระบุไว้ในสตริงข้อบกพร่อง (ขั้นตอนที่ 1 ด้านบน) แสดงว่านี่อาจเป็นสาเหตุของข้อผิดพลาด

    ในตัวอย่างนโยบายการดึงข้อมูลตัวแปรที่แสดงด้านบน ให้สังเกตว่า

    • ระบบจะกำหนดค่าพารามิเตอร์การค้นหาชื่อ color ให้กับตัวแปร var.color ก่อน(หมายเหตุ: var เป็นคำนำหน้าสำหรับตัวแปรทั้งหมดตามที่ตั้งค่าไว้ในองค์ประกอบ <VariablePrefix>)
    • ในการกําหนดค่าถัดไป ระบบจะกําหนดค่าพารามิเตอร์การค้นหา nextcolor ให้กับตัวแปรอื่น var.color.next
    • เนื่องจากมีการจัดสรร var.color อยู่แล้ว นโยบายการดึงข้อมูลตัวแปรจึงไม่สามารถจัดสรรตัวแปรที่ซ้อนกันอีก var.color.next ได้ ดังนั้นคุณจึงได้รับรหัสข้อผิดพลาด: steps.extractvariables.SetVariableFailed

ความละเอียด

  1. ตรวจสอบว่าไม่มีชื่อตัวแปรหลายชื่อขึ้นต้นด้วย คำเดียวกันที่ซ้อนในรูปแบบที่คั่นด้วยจุด

    หากต้องการแก้ไขนโยบายการดึงข้อมูลตัวแปรที่แสดงด้านบน คุณสามารถแก้ไข ชื่อตัวแปร var.color.next เพื่อใช้ชื่อตัวแปร var.nextcolor.

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ExtractVariables name="ExtractColors">
        <DisplayName>ExtractColors</DisplayName>
        <Source>request</Source>
        <QueryParam name="color">
            <Pattern ignoreCase="true">{color}</Pattern>
        </QueryParam>
        <QueryParam name="nextcolor">
            <Pattern ignoreCase="true">{nextcolor}</Pattern>
        </QueryParam>
        <VariablePrefix>var</VariablePrefix>
    </ExtractVariables>
    
    

ข้อมูลเพิ่มเติม

ดูรายละเอียดเพิ่มเติมได้ที่โพสต์ชุมชนนี้

InvalidJSONPath

รหัสข้อผิดพลาด

steps.extractvariables.InvalidJSONPath

เนื้อหาการตอบกลับข้อผิดพลาด

{
    "fault": {
        "faultstring": "Invalid JSON path [path_name] in policy [policy_name].",
        "detail": {
            "errorcode": "steps.extractvariables.InvalidJSONPath"
        }
    }
}

สาเหตุ

ข้อผิดพลาดนี้เกิดขึ้นหากใช้เส้นทาง JSON ที่ไม่ถูกต้องในองค์ประกอบ <JSONPath> ของนโยบายการดึงข้อมูลตัวแปร เช่น หากเพย์โหลด JSON ไม่มี ออบเจ็กต์ Name แต่คุณระบุ Name เป็นเส้นทางในตัวแปรการดึงข้อมูล แล้ว ข้อผิดพลาดนี้จะเกิดขึ้น

การวินิจฉัย

  1. ระบุนโยบายการดึงข้อมูลตัวแปรที่เกิดข้อผิดพลาดและตัวแปรที่ไม่ถูกต้อง เส้นทาง JSON ทั้ง 2 รายการนี้อยู่ในองค์ประกอบ faultstring ของ การตอบกลับข้อผิดพลาด ตัวอย่างเช่น ในสตริงข้อผิดพลาดต่อไปนี้ ชื่อนโยบายคือ ExtractJSONVariables และเส้นทาง JSON ที่ไม่ถูกต้องคือ $.Name:

    "faultstring": "Invalid JSON path $.Name in policy ExtractJSONVariables."

  2. ใน XML ของนโยบายการดึงข้อมูลตัวแปรที่ล้มเหลว ให้ยืนยันว่าเส้นทาง JSON ที่ตั้งค่าไว้ใน องค์ประกอบ <JSONPath> ตรงกับเส้นทางที่ระบุในสตริงข้อผิดพลาด (ขั้นตอนที่ 1 ด้านบน) ตัวอย่างเช่น นโยบายการดึงข้อมูลตัวแปรต่อไปนี้ระบุเส้นทาง JSON $.Name ที่ตรงกับสิ่งที่อยู่ใน fault string ได้แก่

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ExtractVariables name="ExtractJSONVariables">
        <Source>response</Source>
        <JSONPayload>
            <Variable name="name" type="string">
                <JSONPath>$.Name</JSONPath>
            </Variable>
        </JSONPayload>
       <VariablePrefix>employee</VariablePrefix>
    </ExtractVariables>
    
  3. ตรวจสอบเอลิเมนต์ <Source> และพิจารณาว่าเพย์โหลด JSON ใดที่คุณพยายามแยกตัวแปร เช่น หากตั้งค่าองค์ประกอบ <Source> เป็น request นโยบายจะดึงเพย์โหลด JSON จากออบเจ็กต์คำขอ หากตั้งค่าเป็น response รายการดังกล่าวจะเป็นออบเจ็กต์การตอบกลับ

    ในตัวอย่างนโยบายการดึงข้อมูลตัวแปรที่แสดงด้านบน องค์ประกอบ <Source> ตั้งค่าเป็น response ระบบจึงดึงข้อมูลตัวแปรจากเพย์โหลด JSON ของคำตอบ

    <Source>response</Source>

  4. ตรวจสอบเพย์โหลด JSON ที่เหมาะสม (กำหนดจากขั้นตอนที่ 3) และตรวจสอบ หากมีออบเจ็กต์ที่ระบุในองค์ประกอบ <JSONPath> หากเพย์โหลด JSON ไม่มีออบเจ็กต์ดังกล่าว นั่นจึงเป็นสาเหตุของข้อผิดพลาด

    ตัวอย่างเช่น คุณกำลังพยายามดึงตัวแปรจากการติดตาม เพย์โหลดการตอบสนอง JSON:

    {
      "firstName":"John",
      "lastName":"Doe",
      "city":"San Jose",
      "state":"CA"
    }
    

    เนื่องจากเพย์โหลดการตอบกลับ JSON ไม่มีออบเจ็กต์ Name นโยบายการดึงข้อมูลตัวแปรจึงล้มเหลวโดยมีข้อผิดพลาดที่คุณได้รับรหัสข้อผิดพลาด: steps.extractvariables.InvalidJSONPath

ความละเอียด

  1. ตรวจสอบว่าได้ระบุเฉพาะออบเจ็กต์ที่เป็นส่วนหนึ่งของเพย์โหลด JSON ซึ่งมีการดึงข้อมูลตัวแปรในองค์ประกอบ <JSONPath> ของนโยบายตัวแปรการดึงข้อมูล

    หากต้องการแก้ไขตัวอย่างนโยบายการดึงข้อมูลตัวแปรที่แสดงด้านบน คุณสามารถแก้ไของค์ประกอบ <JSONPath> เพื่อระบุออบเจ็กต์ใดออบเจ็กต์หนึ่งที่มีอยู่ในเพย์โหลดการตอบกลับ JSON ตัวอย่าง (เช่น ออบเจ็กต์ firstName และ lastName ใช้งานได้)

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ExtractVariables name="ExtractJSONVariables">
        <Source>response</Source>
        <JSONPayload>
            <Variable name="name" type="string">
                <JSONPath>$.firstName</JSONPath>
            </Variable>
        </JSONPayload>
       <VariablePrefix>employee</VariablePrefix>
    </ExtractVariables>
    
    

ExecutionFailed

รหัสข้อผิดพลาด

steps.extractvariables.ExecutionFailed

เนื้อหาการตอบกลับข้อผิดพลาด

{
    "fault": {
        "faultstring": "Failed to execute the ExtractVariables: [policy_name]",
        "detail": {
            "errorcode": "steps.extractvariables.ExecutionFailed"
        }
    }
}

สาเหตุที่เป็นไปได้

สาเหตุที่เป็นไปได้สำหรับข้อผิดพลาดนี้คือ

สาเหตุ คำอธิบาย
ไม่มีเพย์โหลดอินพุต เพย์โหลดอินพุต (JSON, XML) ว่างเปล่า
อินพุตไม่ถูกต้องหรือมีรูปแบบไม่ถูกต้อง อินพุต (JSON, XML ฯลฯ) ที่ส่งไปยังนโยบายไม่ถูกต้องหรือผิดรูปแบบ

สาเหตุ: ไม่มีเพย์โหลดอินพุต

หากนโยบายการดึงข้อมูลตัวแปรควรดึงข้อมูลตัวแปรจากเพย์โหลด JSON หรือ XML แต่เนื้อหา (เพย์โหลด) ของตัวแปรที่ระบุไว้ในองค์ประกอบ <Source> ว่างเปล่า ระบบจะแสดงข้อผิดพลาดนี้

เช่น หากองค์ประกอบ <Source> ในนโยบายการดึงข้อมูลตัวแปรเป็น request หรือ response องค์ประกอบเหล่านี้ควรมีหรือเพย์โหลด JSON หรือ XML แต่เพย์โหลดว่างเปล่า ระบบจะเกิดข้อผิดพลาดขึ้น

การวินิจฉัย

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

    "faultstring": "Failed to execute the ExtractVariables: ExtractXMLVariables"

  2. ตรวจสอบองค์ประกอบ <Source> ใน XML ตัวแปรการแตกข้อมูลล้มเหลว และระบุประเภทอินพุตที่เป็นแหล่งที่มาของตัวแปร ตัวอย่างเช่น นโยบายการดึงข้อมูลตัวแปรต่อไปนี้มีองค์ประกอบ <Source> ที่ตั้งค่าไว้เป็น response และกำลังดึงข้อมูลตัวแปรจากเพย์โหลด XML

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <ExtractVariables name="ExtractXMLVariables" async="false" continueOnError="false" enabled="true">
        <XMLPayload>
            <Namespaces/>
            <Variable name="City" type="string">
                <XPath>/city</XPath>
            </Variable>
        </XMLPayload>
        <Source clearPayload="false">response</Source>
    </ExtractVariables>
    
    
  3. ตรวจสอบว่าอินพุตที่แยกวิเคราะห์โดยนโยบายการแยกตัวแปรว่างเปล่าหรือไม่ หากข้อมูลที่ป้อนว่างเปล่า นั่นเป็นสาเหตุของข้อผิดพลาด

    ในตัวอย่างนโยบายการดึงข้อมูลตัวแปรที่แสดงด้านบน เพย์โหลดการตอบกลับ (เนื้อหาการตอบกลับ) ที่ส่งโดยเซิร์ฟเวอร์แบ็กเอนด์ว่างเปล่า

    เนื่องจากเพย์โหลดการตอบกลับ XML ว่างเปล่า คุณได้รับรหัสข้อผิดพลาด:

    steps.extractvariables.ExecutionFailed

    ข้อผิดพลาดนี้อาจเกิดขึ้นได้เช่นกันหากตั้งค่าองค์ประกอบ <Source> เป็น request แต่ ไม่มีการส่งผ่านเพย์โหลดในคำขอพร็อกซี API เช่น

    curl -v "http://<org>-<env>.apigee.net/v1/testevexecutionfailed" -H "Content-Type: application/xml"
    

    นโยบายการดึงข้อมูลตัวแปรจะทำการดึงข้อมูล XML เมื่อไฟล์ ส่วนหัว Content-Type คือ application/xml, text/xml หรือ application/*+xml คุณต้องส่งส่วนหัว Content-Type เป็น application/xml, text/xml หรือ application/*+xmlหากคุณต้องการให้นโยบายการแยกตัวแปรการแยกวิเคราะห์ XML เพย์โหลดคำขอ

ความละเอียด

ตรวจสอบว่าอินพุตที่ส่งไปยังนโยบายการดึงข้อมูลตัวแปรถูกต้องและไม่ว่างเปล่า

ในการแก้ไขปัญหาเกี่ยวกับตัวอย่างนโยบายการดึงข้อมูลตัวแปรที่แสดงด้านบน ให้ส่ง เพย์โหลด XML ที่ถูกต้อง เช่น

  1. สร้างไฟล์ชื่อ city.xml ด้วยเนื้อหาต่อไปนี้

    <city>Bengaluru</city>
    <area>Sanjaynagar</area>
    
  2. เรียกใช้ API โดยใช้คำสั่ง cURL ดังนี้

    curl -v "http://<org>-<env>.apigee.net/v1/testevexecutionfailed" -H "Content-Type: application/xml" -X POST -d @city.xml
    
    

สาเหตุ: อินพุตไม่ถูกต้องหรือมีรูปแบบไม่ถูกต้อง

หากนโยบายการแยกตัวแปรแยกวิเคราะห์อินพุตที่ไม่ถูกต้องหรือผิดรูปแบบ คุณจะได้รับข้อผิดพลาดนี้

เช่น หากมีการระบุ JSON ที่ไม่ถูกต้องต่อไปนี้เป็นอินพุตของนโยบายการดึงข้อมูลตัวแปร คุณจะได้รับข้อผิดพลาดนี้

[
    "args": ["name" : "amar" ]
]

การวินิจฉัย

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

    "faultstring": "Failed to execute the ExtractVariables: ExtractJSONVariables"

  2. ตรวจสอบองค์ประกอบ <Source> ใน XML ตัวแปรการแตกข้อมูลล้มเหลว และระบุประเภทอินพุตที่เป็นแหล่งที่มาของตัวแปร ตัวอย่างเช่น นโยบายการดึงข้อมูลตัวแปรต่อไปนี้มีการตั้งค่าองค์ประกอบ <Source> เป็น request และกําลังดึงตัวแปรจากเพย์โหลด JSON

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <ExtractVariables name="ExtractJSONVariables" async="false" continueOnError="false" enabled="true">
        <JSONPayload>
            <Variable name="Name" type="string">
                <JSONPath>$.args.name</JSONPath>
            </Variable>
        </JSONPayload>
        <Source clearPayload="false">request</Source>
    </ExtractVariables>
    
    
  3. ตรวจสอบว่าอินพุตที่แยกวิเคราะห์โดยนโยบายการแยกตัวแปรถูกต้องหรือไม่ หากข้อมูลที่ป้อนไม่ถูกต้องหรือผิดรูปแบบ นั่นเป็นสาเหตุของข้อผิดพลาด

    ในตัวอย่างนโยบายการดึงข้อมูลตัวแปรที่แสดงด้านบน มีการส่ง JSON ที่ไม่ถูกต้องต่อไปนี้ไปยังนโยบายการดึงข้อมูลตัวแปร

    [
        "args": ["name" : "amar" ]
    ]
    

    ต่อไปนี้คือตัวอย่างการเรียก API ที่แสดงให้เห็นว่าคำขอส่งผ่านไปอย่างไร

    curl -v "http://<org>-<env>.apigee.net/v1/testevexecutionfailed" -H "Content-Type: application/json" -X POST -d '[ "args" : ["name" : "amar" ]]'
    

    เพย์โหลด JSON ที่ส่งไปยัง API ไม่ถูกต้องเนื่องจากมีอาร์เรย์ที่มีวงเล็บเหลี่ยม ([ ]) คุณจึงได้รับรหัสข้อผิดพลาดต่อไปนี้

    steps.extractvariables.ExecutionFailed
    

    ข้อผิดพลาดนี้ยังอาจเกิดขึ้นได้หากตั้งค่าองค์ประกอบ <Source> เป็น response แต่เพย์โหลดการตอบกลับ JSON ไม่ถูกต้องหรือผิดรูปแบบ

ความละเอียด

ตรวจสอบว่าอินพุตที่ส่งไปยังนโยบายการแยกตัวแปรถูกต้องและไม่ผิดรูปแบบ

หากต้องการแก้ปัญหาเกี่ยวกับตัวอย่างนโยบายการดึงข้อมูลตัวแปรที่กล่าวถึงข้างต้น ให้ส่งคำขอเพย์โหลด JSON ที่ถูกต้องโดยทำดังนี้

{
   "args":{
      "name":"amar"
   }
}

UnableToCast

รหัสข้อผิดพลาด

steps.extractvariables.UnableToCast

เนื้อหาการตอบกลับข้อผิดพลาด

{
    "fault": {
        "faultstring": "Unable to cast value [value] as [type].",
        "detail": {
            "errorcode": "steps.extractvariables.UnableToCast"
        }
    }
}

สาเหตุ

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

เช่น หากนโยบายการดึงข้อมูลตัวแปรพยายามตั้งค่าที่ดึงมาจากตัวแปรสตริงเป็นตัวแปรจำนวนเต็ม คุณจะเห็นข้อผิดพลาดนี้

การวินิจฉัย

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

    "faultstring":"Unable to cast value 36.231 as BOOLEAN."

  2. ระบุนโยบายการแยกตัวแปรที่คุณพยายามตั้งค่าให้กับตัวแปรประเภทที่ระบุไว้ในขั้นตอนที่ 1

    ตัวอย่างเช่น นโยบายการดึงข้อมูลตัวแปรต่อไปนี้จะดึงค่าจาก JSONPath $.latitude ไปยังตัวแปรประเภท boolean ซึ่งตรงกับ ในสตริงข้อผิดพลาด

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <ExtractVariables name="EV-XML-Name" async="false" continueOnError="false" enabled="true">
        <JSONPayload>
          <Variable name="latitude" type="boolean">
              <JSONPath>$.latitude</JSONPath>
          </Variable>
        </JSONPayload>
        <Source clearPayload="false">response</Source>
    </ExtractVariables>
    
    
  3. ตรวจสอบประเภทข้อมูลของค่าที่จะแตกข้อมูล ข้อมูลอาจอยู่ใน รูปแบบของส่วนหัว, เส้นทาง URI, เพย์โหลด JSON/XML, พารามิเตอร์ฟอร์ม และพารามิเตอร์การค้นหา

  4. ตรวจสอบว่าประเภทข้อมูลที่ระบุไว้ในขั้นตอนที่ 3 และประเภทข้อมูลของตัวแปรที่จะกําหนดค่า (ระบุไว้ในขั้นตอนที่ 2) เหมือนกันหรือไม่

  5. หากประเภทข้อมูลของตัวแปรต้นทางและปลายทางไม่เหมือนกัน เป็นสาเหตุของข้อผิดพลาด

    ในตัวอย่างนโยบายการดึงข้อมูลตัวแปรที่แสดงด้านบน ให้พิจารณาคำขอ JSON เพย์โหลดมีดังนี้

    {
     "latitude":36.2312
    }
    

    ประเภทข้อมูลของค่าที่จะดึงมาจาก <JSONPath>, ‘$.latitude’ เป็นจำนวนเต็ม ซึ่งกำหนดให้กับตัวแปรของประเภทข้อมูลบูลีน

    เนื่องจากประเภทข้อมูลของค่าที่ดึงมาและประเภทข้อมูลของตัวแปรไปยัง ซึ่งค่าที่ได้รับการกำหนดไม่ใช่ค่าเดียวกัน คุณจะได้รับรหัสข้อผิดพลาด steps.extractvariables.UnableToCast

ความละเอียด

ตรวจสอบว่าประเภทข้อมูลของค่าที่ดึงมาและตัวแปรที่เกี่ยวข้องกับเนื้อหา ถูกกำหนดเป็นประเภทเดียวกัน

หากต้องการแก้ไขนโยบายการดึงข้อมูลตัวแปรตัวอย่าง คุณต้องแก้ไขประเภทตัวแปรเป็นจำนวนเต็ม

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ExtractVariables name="EV-XML-Name" async="false" continueOnError="false" enabled="true">
    <JSONPayload>
        <Variable name="latitude" type="integer">
            <JSONPath>$.latitude</JSONPath>
        </Variable>
    </JSONPayload>
    <Source clearPayload="false">response</Source>
</ExtractVariables>

JsonPathParsingFailure

รหัสข้อผิดพลาด

steps.extractvariables.JsonPathParsingFailure

เนื้อหาการตอบกลับข้อผิดพลาด

{
    "fault": {
        "faultstring": "ExtractVariables [policy_name]: Json path parsing failed for flow variables [variable_name]",
        "detail": {
            "errorcode": "steps.extractvariables.JsonPathParsingFailure"
        }
    }
}

สาเหตุ

ข้อผิดพลาดนี้เกิดขึ้นเมื่อตัวแปรดึงข้อมูล นโยบายแยกวิเคราะห์เส้นทาง JSON และแยกข้อมูลจากตัวแปรโฟลว์ไม่ได้ ที่ระบุในองค์ประกอบ <Source> โดยปกติแล้วจะเกิดขึ้นหากตัวแปรโฟลว์ ไม่มีที่ระบุในองค์ประกอบ <Source> ในขั้นตอนปัจจุบัน

ตัวอย่างเช่น ข้อผิดพลาดนี้เกิดขึ้นหากนโยบายการดึงข้อมูลตัวแปรทำงานในไฟล์ โฟลว์การตอบกลับและคาดว่าจะแยกวิเคราะห์เส้นทาง JSON แต่องค์ประกอบ <Source> ระบุตัวแปรโฟลว์ request.content ซึ่งไม่มีอยู่ในขั้นตอนการตอบกลับ

การวินิจฉัย

  1. ระบุนโยบายการแยกตัวแปรที่เกิดข้อผิดพลาดขึ้นและชื่อของตัวแปรโฟลว์ที่ดึงข้อมูลไม่ได้ คุณดูทั้ง 2 รายการนี้ได้ในองค์ประกอบ Faultstring ของการตอบกลับข้อผิดพลาด ตัวอย่างเช่น ในสตริงข้อผิดพลาดต่อไปนี้ ชื่อนโยบายคือ ExtractVariables-1 และตัวแปรคือ request.content

    "faultstring": "ExtractVariables ExtractJSONVariabes: Json path parsing failed for flow variables request.content"

  2. ใน XML นโยบายการดึงข้อมูลตัวแปรที่ไม่สําเร็จ ให้ตรวจสอบว่าชื่อตัวแปรที่ตั้งไว้ในองค์ประกอบ <Source> ตรงกับชื่อตัวแปรที่ระบุไว้ในสตริงข้อผิดพลาด (ขั้นตอนที่ 1 ด้านบน) เช่น ตัวแปรการดึงข้อมูลต่อไปนี้ นโยบายระบุตัวแปรที่ชื่อ request.content ซึ่งตรงกับสิ่งที่อยู่ใน faultstring

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <ExtractVariables name="ExtractJSONVariables" async="false" continueOnError="false" enabled="true">
        <JSONPayload>
            <Variable name="Name" type="string">
                <JSONPath>$.args.name</JSONPath>
            </Variable>
        </JSONPayload>
        <Source clearPayload="false">request.content</Source>
    </ExtractVariables>
    
    
  3. ตรวจสอบว่ามีการกำหนดตัวแปรโฟลว์ที่ใช้ในองค์ประกอบ <Source> หรือไม่ และพร้อมใช้งานในโฟลว์ที่มีการบังคับใช้นโยบายการดึงข้อมูลตัวแปร

  4. หากตัวแปรมีลักษณะอย่างใดอย่างหนึ่งต่อไปนี้

    • อยู่นอกขอบเขต (ใช้ไม่ได้ในขั้นตอนที่เจาะจงซึ่งจะมีการบังคับใช้นโยบาย) หรือ
    • แก้ไขไม่ได้ (ไม่ได้กำหนด)

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

    ตัวอย่างเช่น สมมติว่าระบบควรเรียกใช้นโยบาย ExtractVariable ที่แสดงด้านบนในขั้นตอนการตอบกลับ โปรดทราบว่าตัวแปรโฟลว์ request.content นั้นใช้ในองค์ประกอบ <Source> ของนโยบายการดึงข้อมูลตัวแปร ตัวแปรโฟลว์ request.content จะพร้อมใช้งานในขั้นตอนคําขอเท่านั้น

    เนื่องจากไม่มีตัวแปร response อยู่ในขั้นตอนคำขอ คุณจึงได้รับรหัสข้อผิดพลาด: steps.extractvariables.JsonPathParsingFailure

ความละเอียด

ตรวจสอบว่าตัวแปรโฟลว์ที่ใช้ในองค์ประกอบ <Source> ของการแตกข้อมูล นโยบายตัวแปรจะอยู่ในโฟลว์ที่มีนโยบายการดึงข้อมูลตัวแปร ในการดำเนินการ

เช่น สมมติว่ามีตัวแปรชื่อ response.content ในการตอบกลับ และที่จริงแล้วมี JSON ที่คุณต้องการแยกออก หากต้องการแก้ไขนโยบายการดึงข้อมูลตัวแปรที่แสดงด้านบน คุณสามารถแก้ไของค์ประกอบ <Source> ดังนี้

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ExtractVariables name="ExtractJSONVariables" async="false" continueOnError="false" enabled="true">
    <JSONPayload>
        <Variable name="Name" type="string">
            <JSONPath>$.args.name</JSONPath>
        </Variable>
    </JSONPayload>
    <Source clearPayload="false">response.content</Source>
</ExtractVariables>