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

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

SourceUnavailable

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

steps.json2xml.SourceUnavailable

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

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

ตัวอย่างข้อผิดพลาด

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

สาเหตุ

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

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

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

การวินิจฉัย

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

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

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONToXML async="false" continueOnError="false" enabled="true" name="Convert-JSONToXML">
        <DisplayName>Convert-JSONToXML</DisplayName>
        <Properties/>
        <Options>
            <NullValue>NULL</NullValue>
            <NamespaceBlockName>#namespaces</NamespaceBlockName>
        <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
            <NamespaceSeparator>:</NamespaceSeparator>
            <TextNodeName>#text</TextNodeName>
            <AttributeBlockName>#attrs</AttributeBlockName>
            <AttributePrefix>@</AttributePrefix>
            <InvalidCharsReplacement>_</InvalidCharsReplacement>
            <ObjectRootElementName>Root</ObjectRootElementName>
            <ArrayRootElementName>Array</ArrayRootElementName>
            <ArrayItemElementName>Item</ArrayItemElementName>
        </Options>
        <OutputVariable>request</OutputVariable>
        <Source>response</Source>
    </JSONToXML>
    
  3. ตรวจสอบว่ามีการกําหนดตัวแปรที่ใช้ในองค์ประกอบ <Source> และพร้อมใช้งานในขั้นตอนที่นโยบาย JSON เป็น XML กำลังทำงานอยู่หรือไม่

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

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

    แสดงว่านี่อาจเป็นสาเหตุของข้อผิดพลาด

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

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

    steps.json2xml.SourceUnavailable
    

ความละเอียด

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

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

  <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  <JSONToXML async="false" continueOnError="false" enabled="true" name="Convert-JSONToXML">
      <DisplayName>Convert-JSONToXML</DisplayName>
      <Properties/>
      <Options>
          <NullValue>NULL</NullValue>
          <NamespaceBlockName>#namespaces</NamespaceBlockName>
          <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
          <NamespaceSeparator>:</NamespaceSeparator>
          <TextNodeName>#text</TextNodeName>
          <AttributeBlockName>#attrs</AttributeBlockName>
          <AttributePrefix>@</AttributePrefix>
          <InvalidCharsReplacement>_</InvalidCharsReplacement>
          <ObjectRootElementName>Root</ObjectRootElementName>
          <ArrayRootElementName>Array</ArrayRootElementName>
          <ArrayItemElementName>Item</ArrayItemElementName>
      </Options>
      <OutputVariable>request</OutputVariable>
      <Source>request</Source>
  </JSONToXML>

ExecutionFailed

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

steps.json2xml.ExecutionFailed

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

{
   "fault": {
        "faultstring": "JSONToXML[policy_name]: Execution failed due to reason: Expecting { or [ at line 1",
        "detail": {
            "errorcode": "steps.json2xml.ExecutionFailed"
        }
    }
}

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

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

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

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

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

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

การวินิจฉัย

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

    "faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [ at line 1"
    
  2. ตรวจสอบองค์ประกอบ <Source> ใน XML นโยบาย JSON เป็น XML ที่ไม่สําเร็จ และระบุตัวแปรที่ระบุ ตัวอย่างเช่น นโยบาย JSON เป็น XML ต่อไปนี้ตั้งค่าองค์ประกอบ <Source> เป็น request

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONToXML async="false" continueOnError="false" enabled="true" name="Convert-JSONToXML">
    <DisplayName>Convert-JSONToXML</DisplayName>
    <Properties/>
    <Options>
        <NullValue>NULL</NullValue>
        <NamespaceBlockName>#namespaces</NamespaceBlockName>
        <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
        <NamespaceSeparator>:</NamespaceSeparator>
        <TextNodeName>#text</TextNodeName>
        <AttributeBlockName>#attrs</AttributeBlockName>
        <AttributePrefix>@</AttributePrefix>
        <InvalidCharsReplacement>_</InvalidCharsReplacement>
        <ObjectRootElementName>Root</ObjectRootElementName>
        <ArrayRootElementName>Array</ArrayRootElementName>
        <ArrayItemElementName>Item</ArrayItemElementName>
    </Options>
    <OutputVariable>request</OutputVariable>
    <Source>request</Source>
    </JSONToXML>
    
  3. ตรวจสอบว่าตัวแปรที่ระบุสำหรับองค์ประกอบ <Source> ในนโยบายว่างเปล่าหรือไม่ หากช่องนี้ว่างเปล่า แสดงว่านี่คือสาเหตุของข้อผิดพลาด

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

    เช่น

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

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

    steps.json2xml.ExecutionFailed
    

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

ความละเอียด

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

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

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

    {
      "Name":"Apigee",
      "City":"Bengaluru",
      "Pincode":"560016"
    }
    
  2. เรียกใช้ API โดยใช้คําสั่ง cURL ดังนี้

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

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

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

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

[
    "args": ["name" : "Google" ]
]

คุณจะได้รับข้อผิดพลาด

"faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [ at line 1"

การวินิจฉัย

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

    "faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [ at line 1"
    
  2. ตรวจสอบองค์ประกอบ <Source> ที่ระบุไว้ใน XML นโยบายการเปลี่ยนจาก JSON เป็น XML ที่ไม่สําเร็จ ตัวอย่างเช่น นโยบาย JSON เป็น XML ต่อไปนี้ตั้งค่าองค์ประกอบ <Source> เป็นตัวแปร request

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONToXML async="false" continueOnError="false" enabled="true" name="Convert-JSONToXML">
      <DisplayName>Convert-JSONToXML</DisplayName>
      <Properties/>
      <Options>
          <NullValue>NULL</NullValue>
          <NamespaceBlockName>#namespaces</NamespaceBlockName>
          <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
          <NamespaceSeparator>:</NamespaceSeparator>
          <TextNodeName>#text</TextNodeName>
          <AttributeBlockName>#attrs</AttributeBlockName>
          <AttributePrefix>@</AttributePrefix>
          <InvalidCharsReplacement>_</InvalidCharsReplacement>
          <ObjectRootElementName>Root</ObjectRootElementName>
          <ArrayRootElementName>Array</ArrayRootElementName>
          <ArrayItemElementName>Item</ArrayItemElementName>
      </Options>
      <OutputVariable>request</OutputVariable>
      <Source>request</Source>
    </JSONToXML>
    
  3. ตรวจสอบว่าอินพุตที่ระบุในองค์ประกอบ <Source> เป็นเพย์โหลด JSON ที่ถูกต้องหรือไม่ หากอินพุตไม่ถูกต้องหรือผิดรูปแบบ แสดงว่านั่นคือสาเหตุของข้อผิดพลาด

    สมมติว่ามีการส่ง JSON ที่ไม่ถูกต้องต่อไปนี้ไปยังนโยบาย

    [
        "args": ["name" : "Google" ]
    ]
    

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

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

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

    steps.json2xml.ExecutionFailed

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

วิธีแก้ปัญหา

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

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

{
  "args"  : {

        "name"  :  "Google"
   }
}

OutputVariableIsNotAvailable

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

steps.json2xml.OutputVariableIsNotAvailable

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

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

ตัวอย่างข้อผิดพลาด

{
    "fault": {
        "faultstring": "JSONToXML[Check-JSONToXML]: Output variable is not available.",
        "detail": {
            "errorcode": "steps.json2xml.OutputVariableIsNotAvailable"
        }
    }
}

สาเหตุ

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

การวินิจฉัย

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

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

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

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONToXML async="false" continueOnError="false" enabled="true" name="JSONToXML">
        <DisplayName>Check-JSONToXML</DisplayName>
        <Properties/>
        <Options>
            <NullValue>NULL</NullValue>
            <NamespaceBlockName>#namespaces</NamespaceBlockName>
            <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
            <NamespaceSeparator>:</NamespaceSeparator>
            <TextNodeName>#text</TextNodeName>
            <AttributeBlockName>#attrs</AttributeBlockName>
            <AttributePrefix>@</AttributePrefix>
            <InvalidCharsReplacement>_</InvalidCharsReplacement>
            <ObjectRootElementName>Root</ObjectRootElementName>
            <ArrayRootElementName>Array</ArrayRootElementName>
            <ArrayItemElementName>Item</ArrayItemElementName>
        </Options>
        <Source>PostalCode</Source>
    </JSONToXML>
    
  3. กำหนดประเภทตัวแปรที่ระบุไว้ในองค์ประกอบ <Source>

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

    เช่น ดูตัวแปร PostalCode ในนโยบาย JSON เป็น XML ด้านบน

    ตัวอย่างเช่น สมมติว่าใช้นโยบายกำหนดข้อความเพื่อกำหนดค่าให้กับตัวแปรชื่อ PostalCode ดังที่แสดงด้านล่าง

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <AssignMessage async="false" continueOnError="false" enabled="true" name="Assign_PostalCode">
        <DisplayName>Assign_PostalCode</DisplayName>
        <Properties/>
        <AssignVariable>
            <Name>PostalCode</Name>
            <Value>{"value":"56008"}</Value>
            <Ref/>
        </AssignVariable>
        <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
        <AssignTo createNew="false" transport="http" type="request"/>
    </AssignMessage>
    

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

    โปรดทราบว่ามีการใช้ตัวแปร PostalCode ในองค์ประกอบ <Source> ของนโยบาย JSONToXML

    <Source>PostalCode</Source>
    

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

    steps.json2xml.OutputVariableIsNotAvailable
    

ความละเอียด

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

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

  <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  <JSONToXML async="false" continueOnError="false" enabled="true" name="JSONToXML">
      <DisplayName>Check-JSONToXML</DisplayName>
      <Properties/>
      <Options>
          <NullValue>NULL</NullValue>
          <NamespaceBlockName>#namespaces</NamespaceBlockName>
          <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
          <NamespaceSeparator>:</NamespaceSeparator>
          <TextNodeName>#text</TextNodeName>
          <AttributeBlockName>#attrs</AttributeBlockName>
          <AttributePrefix>@</AttributePrefix>
          <InvalidCharsReplacement>_</InvalidCharsReplacement>
          <ObjectRootElementName>Root</ObjectRootElementName>
          <ArrayRootElementName>Array</ArrayRootElementName>
          <ArrayItemElementName>Item</ArrayItemElementName>
      </Options>
      <OutputVariable>response</OutputVariable>
      <Source>PostalCode</Source>
  </JSONToXML>

InCompatibleTypes

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

steps.json2xml.InCompatibleTypes

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

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

ตัวอย่างข้อผิดพลาด

{
    "fault": {
        "faultstring": "JSONToXML[JSONToXML_checktype]: String can not be assigned to message type.",
        "detail": {
            "errorcode": "steps.json2xml.InCompatibleTypes"
        }
    }
}

สาเหตุ

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

ประเภทที่ถูกต้องคือ message และ string

การวินิจฉัย

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

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

    ลองดูตัวอย่างนโยบายต่อไปนี้

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONToXML async="false" continueOnError="false" enabled="true" name="JSONToXML_checktype">
        <DisplayName>JSONToXML_checktype</DisplayName>
        <Properties/>
        <Options>
            <NullValue>NULL</NullValue>
            <NamespaceBlockName>#namespaces</NamespaceBlockName>
            <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
            <NamespaceSeparator>:</NamespaceSeparator>
            <TextNodeName>#text</TextNodeName>
            <AttributeBlockName>#attrs</AttributeBlockName>
            <AttributePrefix>@</AttributePrefix>
            <InvalidCharsReplacement>_</InvalidCharsReplacement>
            <ObjectRootElementName>Root</ObjectRootElementName>
            <ArrayRootElementName>Array</ArrayRootElementName>
            <ArrayItemElementName>Item</ArrayItemElementName>
        </Options>
        <OutputVariable>response</OutputVariable>
        <Source>PostalCode</Source>
    </JSONToXML>
    
    
  3. ระบุประเภทของตัวแปรที่ระบุไว้ในองค์ประกอบ <Source> และ <OutputVariable>

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

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

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <AssignMessage async="false" continueOnError="false" enabled="true" name="Assign_PostalCode">
        <DisplayName>Assign_PostalCode</DisplayName>
        <Properties/>
        <AssignVariable>
            <Name>PostalCode</Name>
            <Value>{"value":"56008"}</Value>
            <Ref/>
        </AssignVariable>
        <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
        <AssignTo createNew="false" transport="http" type="request"/>
    </AssignMessage>
    

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

    โปรดทราบว่ามีการใช้ตัวแปร PostalCode ในองค์ประกอบ <Source> ของนโยบาย JSONToXML

    <Source>PostalCode</Source>
    

    ในทํานองเดียวกัน โปรดทราบว่ามีการใช้ตัวแปร response ในองค์ประกอบ <OutputVariable> ของนโยบาย JSONToXML ดังนี้

    <OutputVariable>response</OutputVariable>
    

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

    steps.json2xml.InCompatibleTypes
    

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

ความละเอียด

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

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

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

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign_PostalCode">
    <DisplayName>Assign_PostalCode</DisplayName>
    <Properties/>
    <AssignVariable>
        <Name>PostalCode</Name>
        <Value>{"value":"56008"}</Value>
        <Ref/>
    </AssignVariable>
    <AssignVariable>
        <Name>PostalCode_output</Name>
        <Ref/>
    </AssignVariable>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

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

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<JSONToXML async="false" continueOnError="false" enabled="true" name="JSONToXML">
    <DisplayName>JSONToXML_checktype</DisplayName>
    <Properties/>
    <Options>
        <NullValue>NULL</NullValue>
        <NamespaceBlockName>#namespaces</NamespaceBlockName>
        <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
        <NamespaceSeparator>:</NamespaceSeparator>
        <TextNodeName>#text</TextNodeName>
        <AttributeBlockName>#attrs</AttributeBlockName>
        <AttributePrefix>@</AttributePrefix>
        <InvalidCharsReplacement>_</InvalidCharsReplacement>
        <ObjectRootElementName>Root</ObjectRootElementName>
        <ArrayRootElementName>Array</ArrayRootElementName>
        <ArrayItemElementName>Item</ArrayItemElementName>
    </Options>
    <OutputVariable>PostalCode_output</OutputVariable>
    <Source>PostalCode</Source>
</JSONToXML>

InvalidSourceType

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

steps.json2xml.InvalidSourceType

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

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

ตัวอย่างข้อผิดพลาด

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

สาเหตุ

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

การวินิจฉัย

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

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

    ต่อไปนี้คือตัวอย่างนโยบายที่มีตัวแปรชื่อ EmployeeID ที่ระบุในองค์ประกอบ <Source>

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<JSONToXML async="false" continueOnError="false" enabled="true" name="JSONToXML">
    <DisplayName>Check_SourceType</DisplayName>
    <Properties/>
    <Options>
        <NullValue>NULL</NullValue>
        <NamespaceBlockName>#namespaces</NamespaceBlockName>
        <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
        <NamespaceSeparator>:</NamespaceSeparator>
        <TextNodeName>#text</TextNodeName>
        <AttributeBlockName>#attrs</AttributeBlockName>
        <AttributePrefix>@</AttributePrefix>
        <InvalidCharsReplacement>_</InvalidCharsReplacement>
        <ObjectRootElementName>Root</ObjectRootElementName>
        <ArrayRootElementName>Array</ArrayRootElementName>
        <ArrayItemElementName>Item</ArrayItemElementName>
    </Options>
    <OutputVariable>request</OutputVariable>
    <Source>EmployeeID</Source>
</JSONToXML>
  1. กำหนดประเภทตัวแปรที่ระบุไว้ในองค์ประกอบ <Source>

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

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

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ExtractVariables name="ExtractJSONVariables">
        <Source>request</Source>
        <JSONPayload>
            <Variable name="EmployeeID" type="integer">
                <JSONPath>$.ID</JSONPath>
            </Variable>
        </JSONPayload>
    </ExtractVariables>
    

    โปรดทราบว่ามีการใช้ตัวแปร EmployeeID ในองค์ประกอบ <Source> ของนโยบาย JSONToXML

    <Source>EmployeeID</Source>
    

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

    steps.json2xml.InvalidSourceType
    

ความละเอียด

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

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