Khắc phục sự cố về lỗi thời gian chạy chính sách JSON sang XML

Bạn đang xem tài liệu về Apigee Edge.
Chuyển đến tài liệu về Apigee X.
thông tin

SourceUnavailable

Mã lỗi

steps.json2xml.SourceUnavailable

Nội dung phản hồi lỗi

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

Lỗi ví dụ

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

Nguyên nhân

Lỗi này xảy ra nếu biến thông báo được chỉ định trong phần tử <Source> của chính sách JSON sang XML:

  • Ngoài phạm vi (không có trong quy trình cụ thể đang thực thi chính sách) hoặc
  • Không thể phân giải (không xác định)

Ví dụ: lỗi này xảy ra nếu bạn định thực thi chính sách JSON sang XML trong luồng yêu cầu, nhưng phần tử <Source> được đặt thành biến response không tồn tại trong luồng yêu cầu.

Chẩn đoán

  1. Xác định chính sách JSON sang XML nơi xảy ra lỗi và tên của biến không có sẵn. Bạn có thể tìm thấy cả hai mục này trong phần tử faultstring của phản hồi lỗi. Ví dụ: trong faultstring sau đây, tên chính sách là Convert-JSONToXML và biến là response:

    "faultstring": "JSONToXML[Convert-JSONToXML]: Source response is not available"
    
  2. Trong XML chính sách JSON sang XML không thành công, hãy xác minh rằng tên của biến được đặt trong phần tử <Source> khớp với tên biến được xác định trong chuỗi lỗi (bước #1 ở trên). Ví dụ: Chính sách JSON sang XML sau đây chỉ định một biến có tên là response trong phần tử <Source>, biến này khớp với biến trong 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. Xác định xem biến dùng trong phần tử <Source> có được xác định và có sẵn trong quy trình thực thi chính sách JSON sang XML hay không.

  4. Nếu biến đó là:

    • Ngoài phạm vi (không có trong quy trình cụ thể đang thực thi chính sách) hoặc
    • Không thể phân giải (không xác định)

    thì đó chính là nguyên nhân gây ra lỗi.

    Ví dụ: giả sử chính sách JSON sang XML được hiển thị ở trên dự kiến được thực thi trong quy trình yêu cầu. Hãy nhớ rằng biến response được dùng trong phần tử <Source> của chính sách JSON sang XML. Biến phản hồi chỉ có trong quy trình phản hồi.

    Vì biến response không tồn tại trong luồng yêu cầu nên bạn sẽ nhận được mã lỗi:

    steps.json2xml.SourceUnavailable
    

Độ phân giải

Đảm bảo rằng biến được đặt trong phần tử <Source> của chính sách JSON thành XML không thành công đã được xác định và tồn tại trong luồng mà chính sách thực thi.

Để chỉnh sửa chính sách JSON thành XML mẫu nêu trên, bạn có thể sửa đổi phần tử <Source> để dùng biến request vì phần tử này tồn tại trong quy trình yêu cầu:

  <?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

Mã lỗi

steps.json2xml.ExecutionFailed

Nội dung phản hồi lỗi

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

Các nguyên nhân có thể

Nguyên nhân có thể dẫn đến lỗi này là:

Nguyên nhân Mô tả
Thiếu tải trọng đầu vào Tải trọng đầu vào (JSON) trống.
Thông tin đầu vào không hợp lệ hoặc không đúng định dạng Dữ liệu đầu vào (JSON) được chuyển tới JSON sang chính sách XML không hợp lệ hoặc không đúng định dạng.

Nguyên nhân: Thiếu tải trọng đầu vào

Trong chính sách JSON sang XML nếu nội dung (trọng tải) của biến được chỉ định trong phần tử <Source> bị trống, thì lỗi này sẽ xảy ra.

Ví dụ: Nếu phần tử <Source> trong chính sách JSON sang XML được đặt thành biến request hoặc response và chúng được cho là chứa tải trọng JSON, nhưng nếu tải trọng trống, thì lỗi sẽ xảy ra.

Chẩn đoán

  1. Xác định chính sách JSON sang XML nơi xảy ra lỗi. Bạn có thể tìm thấy thông tin này trong phần tử faultstring của phản hồi lỗi. Ví dụ: trong faultstring sau đây, tên chính sách là Convert-JSONToXML:

    "faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [ at line 1"
    
  2. Kiểm tra phần tử <Source> trong XML chính sách JSON sang XML không thành công và xác định biến được chỉ định. Ví dụ: chính sách JSON sang XML sau đây có phần tử <Source> được đặt thành 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. Kiểm tra xem biến được chỉ định cho phần tử <Source> trong chính sách có trống hay không. Nếu phần này trống, thì đó chính là nguyên nhân gây ra lỗi.

    Trong ví dụ về chính sách JSON sang XML được trình bày ở trên, tải trọng yêu cầu (tức là nội dung yêu cầu) do ứng dụng gửi đang trống.

    Ví dụ:

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

    Do tải trọng phản hồi JSON trống, nên bạn sẽ nhận được mã lỗi:

    steps.json2xml.ExecutionFailed
    

    Lỗi này cũng có thể xảy ra nếu phần tử <Source> được đặt thành phản hồi, nhưng máy chủ phụ trợ lại chuyển sang tải trọng trống.

Độ phân giải

Đảm bảo rằng dữ liệu đầu vào được truyền tới chính sách JSON sang XML trong phần tử <Source> là tải trọng JSON hợp lệ và không trống.

Để khắc phục vấn đề về chính sách JSON mẫu sang XML, hãy chuyển một tải trọng JSON hợp lệ. Ví dụ:

  1. Tạo một tệp có tên city.json với nội dung sau:

    {
      "Name":"Apigee",
      "City":"Bengaluru",
      "Pincode":"560016"
    }
    
  2. Thực hiện lệnh gọi API bằng lệnh cURL như sau:

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

Nguyên nhân: Thông tin đầu vào không hợp lệ hoặc không đúng định dạng

Nếu chính sách JSON sang XML phân tích cú pháp dữ liệu đầu vào không hợp lệ hoặc sai định dạng, thì bạn sẽ gặp lỗi này.

Ví dụ: nếu bạn cung cấp JSON không hợp lệ sau đây dưới dạng dữ liệu đầu vào của chính sách JSON thành XML,

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

bạn sẽ gặp lỗi:

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

Chẩn đoán

  1. Xác định chính sách JSON sang XML nơi xảy ra lỗi. Bạn có thể tìm thấy thông tin này trong phần tử faultstring của phản hồi lỗi. Ví dụ: trong faultstring sau đây, tên chính sách là Convert-JSONToXML:

    "faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [ at line 1"
    
  2. Kiểm tra phần tử <Source> được chỉ định trong tệp XML của chính sách JSON sang XML không thành công. Ví dụ: chính sách JSON sang XML sau đây có phần tử <Source> được đặt thành biến 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. Xác thực xem dữ liệu đầu vào được chỉ định trong phần tử <Source> có phải là một tải trọng JSON hợp lệ hay không. Nếu dữ liệu nhập không hợp lệ hoặc sai định dạng thì đó chính là nguyên nhân gây ra lỗi.

    Giả sử tệp JSON không hợp lệ sau đây đã được chuyển vào chính sách

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

    Dưới đây là lệnh gọi API mẫu cho thấy cách chuyển yêu cầu:

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

    Tải trọng JSON được truyền trong yêu cầu không hợp lệ vì đối tượng JSON bắt đầu và kết thúc bằng dấu ngoặc vuông ([ ]). Do đó, bạn sẽ nhận được mã lỗi:

    steps.json2xml.ExecutionFailed

    Lỗi này cũng có thể xảy ra nếu phần tử <Source> được đặt thành phản hồi nhưng tải trọng phản hồi JSON không hợp lệ hoặc không đúng định dạng.

Độ phân giải

Đảm bảo rằng dữ liệu đầu vào được truyền từ JSON sang chính sách XML trong phần tử <Source> là hợp lệ và không sai định dạng.

Để khắc phục vấn đề với chính sách JSON sang XML mẫu được thảo luận ở trên, hãy truyền một yêu cầu tải trọng JSON hợp lệ như sau:

{
  "args"  : {

        "name"  :  "Google"
   }
}

OutputVariableIsNotAvailable

Mã lỗi

steps.json2xml.OutputVariableIsNotAvailable

Nội dung phản hồi lỗi

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

Lỗi ví dụ

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

Nguyên nhân

Lỗi này xảy ra nếu biến được chỉ định trong phần tử <Source> của Chính sách JSON sang XML thuộc loại chuỗi và phần tử <OutputVariable> không được xác định. Phần tử <OutputVariable> là bắt buộc khi biến được xác định trong phần tử <Source> thuộc kiểu chuỗi.

Chẩn đoán

  1. Xác định Chính sách JSON sang XML nơi xảy ra lỗi. Bạn có thể tìm thấy thông tin này trong phần tử faultstring của phản hồi lỗi. Ví dụ: trong faultstring sau đây, tên chính sách là Check-JSONToXML:

    "faultstring": "JSONToXML[Check-JSONToXML]: Output variable is not available."
    
  2. Trong chính sách JSON không thành công, hãy xác thực xem <OutputVariable> có bị thiếu hay không.

    Chính sách JSONToXML mẫu sau đây bị thiếu phần tử <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. Xác định loại biến được chỉ định trong phần tử <Source>:

    1. Tìm mã trong Proxy API nơi biến được xác định đầu tiên.
    2. Sau khi tìm hiểu chính sách mà biến được định nghĩa và điền trước, bạn cần xác định loại biến đó như sau:
      1. Kiểm tra giá trị của thuộc tính loại (nếu có).
      2. Nếu không có thuộc tính loại thì biến được coi là một chuỗi.
    3. Nếu loại biến là chuỗi, thì đó chính là nguyên nhân gây ra lỗi. Bạn có thể tìm hiểu về các biến phổ biến và loại biến trong Tài liệu tham khảo về biến.

    Ví dụ: xem biến PostalCode trong chính sách JSON sang XML ở trên.

    Ví dụ: hãy xem xét rằng chính sách Chỉ định tin nhắn được dùng để gán giá trị cho biến tên là PostalCode như minh hoạ dưới đây:

    <?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>
    

    Lưu ý rằng loại biến được đặt trong <AssignVariable> là kiểu chuỗi. Do đó, biến PostalCode thuộc kiểu chuỗi.

    Bây giờ, hãy nhớ lại biến PostalCode được dùng trong phần tử <Source> của chính sách JSONToXML:

    <Source>PostalCode</Source>
    

    PostalCode thuộc loại chuỗi và bị thiếu phần tử <OutputVariable>, nên bạn sẽ nhận được mã lỗi:

    steps.json2xml.OutputVariableIsNotAvailable
    

Độ phân giải

Đảm bảo rằng nếu biến được chỉ định trong phần tử <Source> của Chính sách JSONToXML là loại chuỗi thì phần tử <OutputVariable> sẽ được xác định trong chính sách.

Để sửa Chính sách JSONToXML đã thảo luận ở trên, hãy thêm phần tử <OutputVariable> như minh hoạ bên dưới.

  <?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

Mã lỗi

steps.json2xml.InCompatibleTypes

Nội dung phản hồi lỗi

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

Lỗi ví dụ

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

Nguyên nhân

Lỗi này xảy ra nếu loại biến được xác định trong phần tử <Source> và phần tử <OutputVariable> không giống nhau. Bắt buộc kiểu của các biến chứa trong phần tử <Source> và phần tử <OutputVariable> phải khớp với nhau.

Loại hợp lệ là messagestring.

Chẩn đoán

  1. Xác định Chính sách JSON sang XML nơi xảy ra lỗi. Bạn có thể tìm thấy thông tin này trong phần tử faultstring của phản hồi lỗi. Ví dụ: trong faultstring sau đây, tên chính sách là JSONToXML_checktype:

    "faultstring": "JSONToXML[JSONToXML_checktype]: String can not be assigned to message type."
    
  2. Trong Chính sách JSON sang XML không thành công, hãy lưu ý các giá trị được chỉ định trong <OutputVariable><Source>.

    Hãy xem xét chính sách ví dụ sau:

    <?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. Xác định loại biến được chỉ định trong các phần tử <Source><OutputVariable>:

    1. Tìm mã trong Proxy API, nơi mỗi biến trong số này được xác định trước tiên.
    2. Sau khi tìm hiểu chính sách mà biến được định nghĩa và điền trước, bạn cần xác định loại biến đó như sau:
      1. Kiểm tra giá trị của thuộc tính loại (nếu có).
      2. Nếu không có thuộc tính loại thì biến được coi là một chuỗi.
    3. Nếu loại biến được chỉ định trong <Source> là chuỗi trong khi loại <OutputVariable> là thông điệp hoặc ngược lại, thì đó chính là nguyên nhân gây ra lỗi. Bạn có thể tìm hiểu về các biến phổ biến và loại biến trong Tài liệu tham khảo về biến.

    Ví dụ: hãy xem xét chính sách Chỉ định tin nhắn dùng để gán giá trị cho biến tên là PostalCode như minh hoạ dưới đây:

    <?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>
    

    Lưu ý rằng loại biến được đặt trong <AssignVariable> là chuỗi; do đó, biến PostalCode thuộc kiểu chuỗi.

    Bây giờ, hãy nhớ lại biến PostalCode được dùng trong phần tử <Source> của chính sách JSONToXML:

    <Source>PostalCode</Source>
    

    Tương tự, hãy nhớ lại biến response được dùng trong phần tử <OutputVariable> của chính sách JSONToXML:

    <OutputVariable>response</OutputVariable>
    

    PostalCode thuộc loại chuỗi trong khi biến response thuộc loại thông báo nên chúng không phải là các loại không tương thích, do đó, bạn sẽ nhận được mã lỗi:

    steps.json2xml.InCompatibleTypes
    

    Lỗi trên cũng có thể xảy ra nếu biến trong phần tử <Source> thuộc loại message nhưng biến trong phần tử <OutputVariable> thuộc loại chuỗi.

Độ phân giải

Đảm bảo rằng loại biến được xác định trong phần tử <Source> và phần tử <OutputVariable> luôn giống nhau. Bắt buộc kiểu của các biến chứa trong phần tử <Source> và phần tử <OutputVariable> phải khớp với nhau. Điều này nghĩa là đảm bảo rằng kiểu của <Source> và các phần tử <OutputVariable> đều là kiểu chuỗi hoặc thông báo.

Để sửa Chính sách JSON sang XML được thảo luận ở trên, bạn có thể khai báo một biến khác PostalCode_output của chuỗi loại bằng cách sử dụng Chính sách chỉ định thông báo và sử dụng biến này trong phần tử <OutputVariable> của Chính sách JSON cho XML.

Chính sách chỉ định tin nhắn đã sửa đổi:

<?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>

Sửa đổi chính sách 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

Mã lỗi

steps.json2xml.InvalidSourceType

Nội dung phản hồi lỗi

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

Lỗi ví dụ

{
    "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"
        }
    }
}

Nguyên nhân

Lỗi này xảy ra nếu loại biến dùng để xác định phần tử <Source> không hợp lệ.Các loại biến hợp lệ là messagestring.

Chẩn đoán

  1. Xác định loại nguồn không hợp lệ dùng trong chính sách JSON sang XML. Bạn có thể tìm thấy thông tin này trong thông báo lỗi. Ví dụ: trong lỗi sau, loại không hợp lệ là Số nguyên.

    "faultstring": "JSONToXML[class java.lang.Integer]: Invalid source type class java.lang.Integer. Valid source types are [message, string]."
    
  2. Kiểm tra tất cả các chính sách JSON sang XML trong Proxy API cụ thể nơi xảy ra lỗi. Trong Chính sách JSON sang XML không thành công, hãy ghi lại tên của biến được chỉ định trong <Source>.

    Dưới đây là một chính sách mẫu, trong đó biến có tên là EmployeeID được chỉ định trong phần tử <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. Xác định loại biến được chỉ định trong phần tử <Source>:

    1. Tìm mã trong Proxy API nơi biến này được xác định trước tiên.
    2. Sau khi tìm hiểu chính sách mà biến được định nghĩa và điền trước, bạn cần xác định loại biến đó như sau:
      1. Kiểm tra giá trị của thuộc tính loại (nếu có).
      2. Nếu không có thuộc tính loại thì biến được coi là một chuỗi.
    3. Nếu loại biến được chỉ định trong <Source> không phải là loại thông báo hay loại chuỗi, thì đó là nguyên nhân gây ra lỗi. Bạn có thể tìm hiểu về các biến phổ biến và loại biến trong Tài liệu tham khảo về biến.

    Ví dụ: chính sách ExtractVariables dùng để trích xuất giá trị từ tải trọng JSON và đặt giá trị cho biến EmployeeID có kiểu số nguyên như minh hoạ dưới đây:

    <?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>
    

    Bây giờ, hãy nhớ lại biến EmployeeID được dùng trong phần tử <Source> của chính sách JSONToXML:

    <Source>EmployeeID</Source>
    

    Vì loại biến này là Integer và không phải là loại <Source> hợp lệ, nên Proxy API sẽ gặp lỗi:

    steps.json2xml.InvalidSourceType
    

Độ phân giải

Đảm bảo rằng loại biến dùng để chỉ định phần tử <Source> là hợp lệ. Loại <Source> hợp lệ là messagestring.

Để tránh lỗi nêu trên với chính sách JSONToXML, bạn có thể sử dụng biến yêu cầu thuộc loại thông báo hoặc bất kỳ chuỗi nào khác là tải trọng JSON hợp lệ.