การแก้ปัญหาข้อผิดพลาดของรันไทม์นโยบาย XML เป็น JSON

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

SourceUnavailable

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

steps.xml2json.SourceUnavailable

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

{
    "fault": {
        "faultstring": "XMLToJSON[policy_name]: Source [source_variable] is not available",
        "detail": {
            "errorcode": "steps.xmltojson.SourceUnavailable"
        }
    }
}

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

{
    "fault": {
        "faultstring": "XMLToJSON[Convert-XMLToJSON]: Source response is not available",
        "detail": {
            "errorcode": "steps.xml2json.SourceUnavailable"
        }
    }
}

สาเหตุ

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

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

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

การวินิจฉัย

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

    "faultstring": "XMLToJSON[Convert-XMLToJSON]: Source response is not available"
    
  2. ใน XML ของนโยบาย XML เป็น JSON ที่ล้มเหลว ให้ตรวจสอบว่าชื่อของตัวแปรที่ตั้งค่าไว้ในองค์ประกอบ <Source> ตรงกับชื่อตัวแปรที่ระบุในสตริงข้อผิดพลาด (ขั้นตอนที่ 1 ด้านบน) ตัวอย่างเช่น นโยบาย XML เป็น JSON ต่อไปนี้จะระบุตัวแปรชื่อ response ในองค์ประกอบ <Source> ซึ่งตรงกับสิ่งที่อยู่ใน faultstring

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <XMLToJSON async="false" continueOnError="false" enabled="true" name="Convert-XMLToJSON">
        <DisplayName>Convert-XMLToJSON</DisplayName>
        <Properties/>
        <Format>google</Format>
        <OutputVariable>response</OutputVariable>
        <Source>response</Source>
    </XMLToJSON>
    
  3. ตรวจสอบว่าตัวแปรที่ใช้ในองค์ประกอบ <Source> ได้รับการกำหนดและพร้อมใช้งานในโฟลว์ที่นโยบาย XML เป็น JSON กำลังดำเนินการอยู่

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

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

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

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

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

    steps.xml2json.SourceUnavailable
    

ความละเอียด

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

หากต้องการแก้ไขนโยบาย XML เป็น JSON ตัวอย่างที่แสดงด้านบน คุณสามารถแก้ไของค์ประกอบ <Source> เพื่อใช้ตัวแปร request ตามที่มีอยู่ในโฟลว์คำขอได้ดังนี้

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<XMLToJSON async="false" continueOnError="false" enabled="true" name="Convert-XMLToJSON">
    <DisplayName>Convert-XMLToJSON</DisplayName>
    <Properties/>
    <Format>google</Format>
    <OutputVariable>response</OutputVariable>
    <Source>request</Source>
</XMLToJSON>

ExecutionFailed

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

steps.xml2json.ExecutionFailed

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

{
    "fault": {
        "faultstring": "XMLToJSON[policy_name]: Execution failed. reason: Premature end of document while parsing at line [line_number](possibly  around char [character_number])",
        "detail": {
            "errorcode": "steps.xml2json.ExecutionFailed"
        }
    }
}

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

สาเหตุที่เป็นไปได้ของข้อผิดพลาดนี้มีดังนี้

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

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

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

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

การวินิจฉัย

  1. ระบุนโยบาย XML เป็น JSON ที่เกิดข้อผิดพลาด คุณดูข้อมูลนี้ได้ในองค์ประกอบ faultstring ของการตอบกลับข้อผิดพลาด ตัวอย่างเช่น ใน faultstring ต่อไปนี้ ชื่อนโยบายคือ Convert-XMLToJSON

    "faultstring": "XMLToJSON[Convert-XMLToJSON]: Execution failed. reason: Premature end of document while parsing at line 1(possibly  around char 0)"
    
  2. ตรวจสอบองค์ประกอบ <Source> ใน XML ที่ไม่ผ่านนโยบาย XML เป็น JSON และระบุตัวแปรที่ระบุ ตัวอย่างเช่น นโยบาย XML เป็น JSON ต่อไปนี้มีองค์ประกอบ <Source> ที่ตั้งค่าเป็นคำขอ

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <XMLToJSON async="false" continueOnError="false" enabled="true" name="Convert-XMLToJSON">
        <DisplayName>Convert-XMLToJSON</DisplayName>
        <Properties/>
        <Options>
            <RecognizeNumber>true</RecognizeNumber>
            <RecognizeBoolean>true</RecognizeBoolean>
            <RecognizeNull>true</RecognizeNull>
        </Options>
        <OutputVariable>request</OutputVariable>
        <Source>request</Source>
    </XMLToJSON>
    
  3. ตรวจสอบว่าตัวแปรที่ระบุสำหรับองค์ประกอบ <Source> ในนโยบาย XMLToJSON ว่างเปล่าหรือไม่ หากว่างเปล่า แสดงว่านั่นคือสาเหตุของข้อผิดพลาด

    ในนโยบาย XML เป็น JSON ตัวอย่างที่แสดงด้านบน เพย์โหลดคำขอ (เช่น เนื้อหาคำขอ) ที่ไคลเอ็นต์ส่งมานั้นว่างเปล่า

    เช่น

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

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

    steps.xml2json.ExecutionFailed
    

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

ความละเอียด

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

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

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

    <?xml version="1.0" encoding="UTF-8"?>
    <root>
       <City>Bengaluru</City>
       <Name>Apigee</Name>
       <Pincode>560016</Pincode>
    </root>
    
  2. เรียก API โดยใช้คำสั่ง cURL ดังนี้

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

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

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

ตัวอย่างเช่น หากมีการระบุ XML ที่ไม่ถูกต้องต่อไปนี้เป็นอินพุตของนโยบาย XML เป็น JSON

<?xml version="1.0" encoding="UTF-8"?>
<root>
   <City>Bengaluru</City>
   <Name>Apigee</Name>
   <Pincode>560016</Pincode>

คุณจะได้รับข้อผิดพลาดต่อไปนี้

"faultstring": "XMLToJSON[Convert-XMLToJSON]: Execution failed. reason: Premature end of document while parsing at line 6(possibly  around char 0)"

การวินิจฉัย

  1. ระบุนโยบาย XML เป็น JSON ที่เกิดข้อผิดพลาด คุณดูข้อมูลนี้ได้ในองค์ประกอบ faultstring ของการตอบกลับข้อผิดพลาด ตัวอย่างเช่น ใน faultstring ต่อไปนี้ ชื่อนโยบายคือ Convert-XMLToJSON

    "faultstring": "XMLToJSON[Convert-XMLToJSON]: Execution failed. reason: Premature end of document while parsing at line 6(possibly  around char 0)"
    
  2. ตรวจสอบองค์ประกอบ <Source> ที่ระบุใน XML ของนโยบาย XML เป็น JSON ที่ล้มเหลว ตัวอย่างเช่น นโยบาย XML เป็น JSON ต่อไปนี้มีองค์ประกอบ <Source> ที่ตั้งค่าเป็นตัวแปร request

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <XMLToJSON async="false" continueOnError="false" enabled="true" name="Convert-XMLToJSON">
        <DisplayName>Convert-XMLToJSON</DisplayName>
        <Properties/>
        <Options>
            <RecognizeNumber>true</RecognizeNumber>
            <RecognizeBoolean>true</RecognizeBoolean>
            <RecognizeNull>true</RecognizeNull>
        </Options>
        <OutputVariable>request</OutputVariable>
        <Source>request</Source>
    </XMLToJSON>
    
  3. ตรวจสอบว่าอินพุตที่ระบุในองค์ประกอบ <Source> ของนโยบาย XML เป็น JSON เป็นเพย์โหลด XML ที่ถูกต้องหรือไม่ หากอินพุตไม่ถูกต้องหรือผิดรูปแบบ นั่นคือสาเหตุของข้อผิดพลาด

    ในนโยบาย XML เป็น JSON ตัวอย่างที่แสดงด้านบน ระบบจะส่ง XML ที่ไม่ถูกต้องต่อไปนี้ไปยังนโยบาย Extract Variables ผ่านไฟล์ city.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <root>
       <City>Bengaluru</City>
       <Name>Apigee</Name>
       <Pincode>560016</Pincode>
    

    นี่คือตัวอย่างการเรียก API ที่แสดงวิธีส่งคำขอ

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

    เพย์โหลด XML ที่ส่งไปยัง API ไม่ถูกต้อง เนื่องจาก XML ไม่มีแท็กปิดสำหรับองค์ประกอบ <root> คุณจึงได้รับรหัสข้อผิดพลาดต่อไปนี้

    steps.xml2json.ExecutionFailed
    

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

ความละเอียด

ตรวจสอบว่าอินพุตที่ส่งไปยังนโยบาย XML เป็น JSON ผ่านองค์ประกอบ <Source> นั้นถูกต้องและมีรูปแบบที่ถูกต้อง

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

<?xml version="1.0" encoding="UTF-8"?>
<root>
   <City>Bengaluru</City>
   <Name>Apigee</Name>
   <Pincode>560016</Pincode>
</root>

OutputVariableIsNotAvailable

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

steps.xml2json.OutputVariableIsNotAvailable

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

{
    "fault": {
        "faultstring": "XMLToJSON[policy_name]: Output variable is not available.",
        "detail": {
            "errorcode": "steps.xml2json.OutputVariableIsNotAvailable"
        }
    }
}

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

{
    "fault": {
        "faultstring": "XMLToJSON[Convert-XMLToJSON]: Output variable is not available.",
        "detail": {
            "errorcode": "steps.xml2json.OutputVariableIsNotAvailable"
        }
    }
}

สาเหตุ

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

การวินิจฉัย

  1. ระบุนโยบาย XML เป็น JSON ที่เกิดข้อผิดพลาด คุณจะดูข้อมูลนี้ได้ในองค์ประกอบ faultstring ของการตอบกลับข้อผิดพลาด ตัวอย่างเช่น ใน faultstring ต่อไปนี้ ชื่อนโยบายคือ Convert-XMLToJSON

    "faultstring": "XMLToJSON[Convert-XMLToJSON]: Output variable is not available."
    
  2. ในนโยบายการตรวจสอบ XML เป็น JSON ที่ไม่สำเร็จ ให้ตรวจสอบว่าไม่มี <OutputVariable>

    ต่อไปนี้คือตัวอย่างนโยบาย XML เป็น JSON ที่ไม่มีองค์ประกอบ <OutputVariable>

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <XMLToJSON async="false" continueOnError="false" enabled="true" name="Convert-XMLToJSON">
        <DisplayName>Convert-XMLToJSON</DisplayName>
        <Properties/>
        <Format>google</Format>
        <Source>TrackingNumber</Source>
    </XMLToJSON>
    
    
  3. พิจารณาประเภทของตัวแปรที่ระบุในองค์ประกอบ <Source> ดังนี้

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

    เช่น ดูตัวแปร TrackingNumber ในนโยบาย XML เป็น JSON ด้านบน โดยมีประเภทเป็นสตริง ตอนนี้ ให้พิจารณานโยบาย Assign Message ที่ใช้ในการตั้งค่าให้กับตัวแปรที่ชื่อ TrackingNumber ดังที่แสดงด้านล่าง

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <AssignMessage async="false" continueOnError="false" enabled="true" name="Assign_TrackingNumber">
        <DisplayName>Assign_TrackingNumber</DisplayName>
        <Properties/>
        <AssignVariable>
            <Name>TrackingNumber</Name>
            <Value><![CDATA[<Code>560075393539898</Code>]]></Value>
            <Ref/>
        </AssignVariable>
        <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
        <AssignTo createNew="false" transport="http" type="request"/>
    </AssignMessage>
    

    โปรดทราบว่าประเภทตัวแปรที่ตั้งค่าผ่าน <AssignVariable> คือสตริง ดังนั้นตัวแปร TrackingNumber จึงเป็นประเภทสตริง

    ตอนนี้โปรดจำไว้ว่ามีการใช้ตัวแปร TrackingNumber ในองค์ประกอบ <Source> ของนโยบาย XML เป็น JSON

    <Source>TrackingNumber</Source>
    

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

    steps.xml2json.OutputVariableIsNotAvailable
    

ความละเอียด

ตรวจสอบว่าหากตัวแปรที่ระบุในองค์ประกอบ <Source> ของนโยบาย XMLToJSON เป็นประเภทสตริง องค์ประกอบ <OutputVariable> จะต้องมีในกรณีนี้

หากต้องการแก้ไขนโยบาย XML เป็น JSON ที่กล่าวถึงข้างต้น ให้รวมองค์ประกอบ <OutputVariable> ตามที่แสดงด้านล่าง

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<XMLToJSON async="false" continueOnError="false" enabled="true" name="Convert-XMLToJSON">
    <DisplayName>Convert-XMLToJSON</DisplayName>
    <Properties/>
    <Format>google</Format>
    <OutputVariable>response</OutputVariable>
    <Source>TrackingNumber</Source>
</XMLToJSON>

InCompatibleTypes

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

steps.xml2json.InCompatibleTypes

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

{
    "fault": {
        "faultstring": "XMLToJSON[policy_name]: String can not be assigned to message type.",
        "detail": {
            "errorcode": "steps.xml2json.InCompatibleTypes"
        }
    }
}

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

{
    "fault": {
        "faultstring": "XMLToJSON[XMLToJSON_CheckType]: String can not be assigned to message type.",
        "detail": {
            "errorcode": "steps.xml2json.InCompatibleTypes"
        }
    }
}

สาเหตุ

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

The valid types are message and string.

การวินิจฉัย

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

    "faultstring": "XMLToJSON[XMLToJSON_CheckType]: String can not be assigned to message type."
    
  2. ในหมายเหตุนโยบาย XML เป็น JSON ที่ล้มเหลว ให้สังเกตค่าที่ระบุใน <OutputVariable>

    ต่อไปนี้คือตัวอย่างนโยบาย XMLToJSON ที่ไม่มีองค์ประกอบ <OutputVariable>

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <XMLToJSON async="false" continueOnError="false" enabled="true" name="XMLToJSON_CheckType">
        <DisplayName>XMLToJSON_CheckType</DisplayName>
        <Properties/>
        <Format>google</Format>
        <OutputVariable>request</OutputVariable>
        <Source>TrackingNumber</Source>
    </XMLToJSON>
    
  3. กำหนดประเภทตัวแปรที่ระบุในองค์ประกอบ <Source> และ <OutputVariable>

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

    ตัวอย่างเช่น พิจารณานโยบาย Assign Message ที่ใช้ตั้งค่าให้กับตัวแปรชื่อ TrackingNumber ดังที่แสดงด้านล่าง

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <AssignMessage async="false" continueOnError="false" enabled="true" name="Assign_TrackingNumber">
        <DisplayName>Assign_TrackingNumber</DisplayName>
        <Properties/>
        <AssignVariable>
            <Name>TrackingNumber</Name>
            <Value><![CDATA[<Code>560075393539898</Code>]]></Value>
            <Ref/>
        </AssignVariable>
        <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
        <AssignTo createNew="false" transport="http" type="request"/>
    </AssignMessage>
    

    โปรดทราบว่าประเภทตัวแปรที่ตั้งค่าผ่าน <AssignVariable> คือสตริง ดังนั้นตัวแปร TrackingNumber จึงเป็นประเภทสตริง

    ตอนนี้โปรดจำไว้ว่ามีการใช้ตัวแปร TrackingNumber ในองค์ประกอบ <Source> ของนโยบาย XMLToJSON

    <Source>TrackingNumber</Source>
    

    ในทำนองเดียวกัน โปรดทราบว่ามีการใช้ตัวแปร request ในองค์ประกอบ <OutputVariable> ของนโยบาย XML เป็น JSON

    <OutputVariable>request</OutputVariable>
    

    เนื่องจาก TrackingNumber มีประเภทเป็น string ในขณะที่ตัวแปร response มีประเภทเป็น message จึงเป็นประเภทที่ใช้ร่วมกันไม่ได้ คุณจึงได้รับรหัสข้อผิดพลาดต่อไปนี้

    steps.xml2json.InCompatibleTypes
    

    ข้อผิดพลาดข้างต้นอาจเกิดขึ้นได้เช่นกันหากตัวแปรในองค์ประกอบ <Source> เป็นประเภท message แต่ตัวแปรในองค์ประกอบ <OutputVariable> เป็นประเภทสตริง

ความละเอียด

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

หากต้องการแก้ไขนโยบาย XML เป็น JSON ที่กล่าวถึงข้างต้น คุณสามารถประกาศตัวแปรอื่น TrackingNumber_output ประเภท string โดยใช้นโยบายการกำหนดข้อความ และใช้ตัวแปรนี้ในองค์ประกอบ <OutputVariable> ของนโยบาย XML เป็น JSON

นโยบาย "กำหนดข้อความ" ที่แก้ไขแล้ว

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign_TrackingNumber">
    <DisplayName>Assign_TrackingNumber</DisplayName>
    <Properties/>
    <AssignVariable>
        <Name>TrackingNumber</Name>
        <Value><![CDATA[<Code>560098</Code>]]></Value>
        <Ref/>
    </AssignVariable>
    <AssignVariable>
        <Name>TrackingNumber_output</Name>
        <Ref/>
    </AssignVariable>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

นโยบาย XMLToJSON ที่แก้ไขแล้ว

  <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  <XMLToJSON async="false" continueOnError="false" enabled="true" name="XMLToJSON_CheckType">
      <DisplayName>XMLToJSON_CheckType</DisplayName>
      <Properties/>
      <Format>google</Format>
      <OutputVariable>TrackingNumber_output</OutputVariable>
      <Source>TrackingNumber</Source>
  </XMLToJSON>

InvalidSourceType

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

steps.xml2json.InvalidSourceType

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

{
    "fault": {
        "faultstring": "XMLToJSON[class invalid_class]: Invalid source type class invalid_class. Valid source types are [message, string].",
        "detail": {
            "errorcode": "steps.xml2json.InvalidSourceType"
        }
    }
}

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

{
    "fault": {
        "faultstring": "XMLToJSON[class java.lang.Integer]: Invalid source type class java.lang.Integer. Valid source types are [message, string].",
        "detail": {
            "errorcode": "steps.xml2json.InvalidSourceType"
        }
    }
}

สาเหตุ

ข้อผิดพลาดนี้เกิดขึ้นหากประเภทของตัวแปรที่ใช้กำหนดองค์ประกอบ <Source> ไม่ถูกต้อง ประเภทตัวแปรที่ถูกต้องคือ message และ string

การวินิจฉัย

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

    "faultstring": "XMLToJSON[class java.lang.Integer]: Invalid source type class java.lang.Integer. Valid source types are [message, string]."
    
  2. ตรวจสอบนโยบาย XML เป็น JSON ทั้งหมดในพร็อกซี API ที่เฉพาะเจาะจงซึ่งเกิดข้อผิดพลาด ในหมายเหตุเกี่ยวกับนโยบาย XML เป็น JSON ที่ล้มเหลว ให้จดชื่อตัวแปรที่ระบุใน <Source>

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <XMLToJSON async="false" continueOnError="false" enabled="true" name="XMLToJSON_CheckType">
        <DisplayName>XMLToJSON_CheckType</DisplayName>
        <Properties/>
        <Format>google</Format>
        <OutputVariable>response</OutputVariable>
        <Source>BookCode</Source>
    </XMLToJSON>
    
  3. กำหนดประเภทตัวแปรที่ระบุในองค์ประกอบ <Source> ดังนี้

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

    ตัวอย่างเช่น พิจารณานโยบาย ExtractVariables ที่ใช้ในการดึงค่าจากเพย์โหลด XML และตั้งค่าให้กับตัวแปร BookCode ให้เป็นประเภท integer ดังที่แสดงด้านล่าง

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract_BookCode">
        <DisplayName>Extract_BookCode</DisplayName>
        <Properties/>
        <Source>request</Source>
        <XMLPayload stopPayloadProcessing="false">
            <Variable name="BookCode" type="integer">
                <XPath>/root/BookCode</XPath>
            </Variable>
        </XMLPayload>
    </ExtractVariables>
    

    ตอนนี้โปรดจำไว้ว่ามีการใช้ตัวแปร BookCode ในองค์ประกอบ <Source> ของนโยบาย XML เป็น JSON

    <Source>BookCode</Source>
    

    เนื่องจากประเภทของตัวแปรนี้คือ Integer ซึ่งไม่ใช่ประเภท <Source> ที่ถูกต้อง พร็อกซี API จึงล้มเหลวพร้อมข้อผิดพลาดต่อไปนี้

    steps.xml2json.InvalidSourceType
    

ความละเอียด

ตรวจสอบว่าประเภทของตัวแปรที่ใช้ระบุองค์ประกอบ <Source> นั้นถูกต้อง ประเภท <Source> ที่ถูกต้องคือ message และ string

หากต้องการหลีกเลี่ยงข้อผิดพลาดข้างต้นเกี่ยวกับนโยบาย XML เป็น JSON คุณสามารถใช้ตัวแปร request ซึ่งมีประเภทเป็น message หรือสตริงอื่นๆ ที่เป็นเพย์โหลด XML ที่ถูกต้อง