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 về lỗi
{ "fault": { "faultstring": "JSONToXML[policy_name]: Source [source_variable] is not available", "detail": { "errorcode": "steps.json2xml.SourceUnavailable" } } }
Ví dụ về lỗi
{
"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 message được chỉ định trong phần tử <Source>
của chính sách JSON sang XML có một trong hai trường hợp sau:
- Nằm ngoài phạm vi áp dụng (không áp dụng trong quy trình cụ thể mà chính sách đang được thực thi) hoặc
- Không thể phân giải (chưa được xác định)
Ví dụ: lỗi này xảy ra nếu chính sách JSON thành XML đáng lẽ phải được thực thi trong luồng yêu cầu, nhưng phần tử <Source>
được đặt thành biến response
, biến này không tồn tại trong luồng yêu cầu.
Chẩn đoán
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ụ: trongfaultstring
sau, tên chính sách làConvert-JSONToXML
và biến làresponse
:"faultstring": "JSONToXML[Convert-JSONToXML]: Source response is not available"
Trong tệp XML của chính sách JSON thành XML bị lỗi, 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ênresponse
trong phần tử<Source>
, khớp với nội dung trongfaultstring
:<?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>
Xác định xem biến được dùng trong phần tử
<Source>
đã đượ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.Nếu biến là:
- Nằm ngoài phạm vi áp dụng (không áp dụng trong quy trình cụ thể mà chính sách đang được thực thi) hoặc
- Không thể giải quyết (không xác định)
thì đó là nguyên nhân gây ra lỗi.
Ví dụ: giả sử chính sách JSON thành XML hiển thị ở trên cầ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 chuyển đổi JSON sang XML. Biến phản hồi chỉ dùng đượ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 quy trình thực thi chính sách.
Để sửa chính sách JSON sang XML mẫu ở trên, bạn có thể sửa đổi phần tử <Source>
để sử dụng biến request
, vì biến này tồn tại trong luồng 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 về 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ể gây ra lỗi này là:
Nguyên nhân | Nội dung mô tả |
Thiếu tải trọng đầu vào | Tải trọng đầu vào (JSON) trống. |
Dữ liệu nhập không hợp lệ hoặc không đúng định dạng | Dữ liệu đầu vào (JSON) được truyền đến chính sách JSON sang XML không hợp lệ hoặc sai đị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 (tải trọng) 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 làm biến request
hoặc response
và các phần tử này phải chứa tải trọng JSON, nhưng nếu tải trọng này trống thì lỗi sẽ xảy ra.
Chẩn đoán
Xác định chính sách JSON sang XML 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ụ: trongfaultstring
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"
Kiểm tra phần tử
<Source>
trong tệp XML của chính sách JSON thành XML không thành công và xác định biến được chỉ định. Ví dụ: chính sách JSON thành XML sau đây có phần tử<Source>
được đặt thànhrequest
:<?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>
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 giá trị trống thì đó là nguyên nhân gây ra lỗi.Trong ví dụ về chính sách JSON sang XML 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 bị trống.
Ví dụ:
curl -v "http://<org>-<env>.apigee.net/v1/testjsontoxml" -H "Content-Type: application/json"
Vì 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ợ chuyển phần tải trọng trống.
Độ phân giải
Đảm bảo rằng dữ liệu đầu vào được truyền đến 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 đề liên quan đến chính sách JSON mẫu sang XML, hãy truyền một tải trọng JSON hợp lệ. Ví dụ:
Tạo một tệp có tên
city.json
với nội dung sau:{ "Name":"Apigee", "City":"Bengaluru", "Pincode":"560016" }
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 không đúng định dạng, thì bạn sẽ gặp lỗi này.
Ví dụ: nếu JSON không hợp lệ sau đây được cung cấp làm dữ liệu đầu vào cho chính sách JSON sang XML,
[
"args": ["name" : "Google" ]
]
bạn sẽ nhận được thông báo lỗi:
"faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [ at line 1"
Chẩn đoán
Xác định chính sách JSON sang XML mà lỗi đã xảy ra. 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ụ: trongfaultstring
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"
Kiểm tra phần tử
<Source>
được chỉ định trong tệp XML của chính sách JSON thành XML bị lỗi. Ví dụ: chính sách JSON sang XML sau đây có phần tử<Source>
được đặt thành biếnrequest
:<?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>
Xác thực xem dữ liệu đầu vào được chỉ định trong phần tử
<Source>
có phải là tải trọng JSON hợp lệ hay không. Nếu thông tin nhập vào không hợp lệ hoặc sai định dạng, thì đó là nguyên nhân gây ra lỗi.Giả sử JSON không hợp lệ sau đây đã được truyền đến chính sách
[ "args": ["name" : "Google" ] ]
Dưới đây là lệnh gọi API mẫu cho thấy cách yêu cầu được chuyển:
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 là 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 ([ ]). Vì lý do này, 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 sai định dạng.
Độ phân giải
Hãy đảm bảo rằng dữ liệu đầu vào được chuyển tới chính sách JSON sang XML trong phần tử <Source>
là hợp lệ và không sai định dạng.
Để khắc phục vấn đề liên quan đến chính sách JSON mẫu sang XML được thảo luận ở trên, hãy chuyể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 về lỗi
{ "fault": { "faultstring": "JSONToXML[policy_name]: Output variable is not available.", "detail": { "errorcode": "steps.json2xml.OutputVariableIsNotAvailable" } } }
Ví dụ về lỗi
{
"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 loại chuỗi.
Chẩn đoán
Xác định Chính sách JSON sang XML đã 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ụ: trongfaultstring
sau, tên chính sách làCheck-JSONToXML
:"faultstring": "JSONToXML[Check-JSONToXML]: Output variable is not available."
Trong Chính sách JSON thành XML không thành công, hãy xác thực xem có thiếu
<OutputVariable>
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>
Xác định loại biến được chỉ định trong phần tử
<Source>
:- Tìm mã trong Proxy API, nơi biến được xác định đầu tiên.
- Sau khi tìm ra chính sách mà trong đó biến được xác định và điền trước tiên, bạn cần xác định loại biến như sau:
- Kiểm tra giá trị của thuộc tính loại (nếu có).
- Nếu không có thuộc tính loại thì biến được coi là một chuỗi.
- Nếu loại biến là 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ụ: hãy xem biến
PostalCode
trong chính sách JSON sang XML ở trên.Ví dụ: hãy lưu ý rằng chính sách Chỉ định thông báo được dùng để gán giá trị cho biến có 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 ý loại biến được đặt trong
<AssignVariable>
là chuỗi. Vì vậy, biếnPostalCode
thuộc loại chuỗi.Bây giờ, hãy nhớ rằng biến
PostalCode
được dùng trong phần tử<Source>
của chính sách JSONToXML:<Source>PostalCode</Source>
Vì
PostalCode
thuộc loại chuỗi và 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 thuộc loại chuỗi, thì phần tử <OutputVariable>
phải đượ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ạ dưới đây.
<?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 về lỗi
{ "fault": { "faultstring": "JSONToXML[policy_name]: String can not be assigned to message type.", "detail": { "errorcode": "steps.json2xml.InCompatibleTypes" } } }
Ví dụ về lỗi
{
"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. Kiểu của các biến có trong phần tử <Source>
và phần tử <OutputVariable>
bắt buộc phải khớp nhau.
Có các loại hợp lệ là message
và string
.
Chẩn đoán
Xác định Chính sách JSON sang XML đã 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ụ: trongfaultstring
sau, tên chính sách làJSONToXML_checktype
:"faultstring": "JSONToXML[JSONToXML_checktype]: String can not be assigned to message type."
Trong Chính sách JSON thành XML bị lỗi, hãy ghi chú các giá trị được chỉ định trong
<OutputVariable>
và<Source>
.Hãy xem xét chính sách mẫu 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>
Xác định loại biến được chỉ định trong phần tử
<Source>
và<OutputVariable>
:- Tìm mã trong Proxy API, nơi từng biến này được xác định đầu tiên.
- Sau khi tìm ra chính sách mà trong đó biến được xác định và điền trước tiên, bạn cần xác định loại biến như sau:
- Kiểm tra giá trị của thuộc tính loại (nếu có).
- Nếu không có thuộc tính loại thì biến được coi là một chuỗi.
- Nếu loại biến được chỉ định trong
<Source>
là chuỗi trong khi loại<OutputVariable>
là thông báo hoặc ngược lạ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ụ: hãy xem xét chính sách Chỉ định thông báo được dùng để chỉ định giá trị cho một biến có 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 ý loại biến được đặt trong
<AssignVariable>
là chuỗi; do đó, biếnPostalCode
thuộc loại chuỗi.Bây giờ, hãy nhớ rằng 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ớ rằng biến
response
được dùng trong phần tử<OutputVariable>
của chính sách JSONToXML:<OutputVariable>response</OutputVariable>
Vì
PostalCode
thuộc loại chuỗi còn biếnresponse
thuộc loại thông báo nên đây là loại không tương thích, vì vậy, 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ạimessage
nhưng biến trong phần tử<OutputVariable>
lại 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. Kiểu của các biến có trong phần tử <Source>
và phần tử <OutputVariable>
bắt buộc phải khớp nhau. Tức là hãy đảm bảo rằng kiểu của <Source>
và phần tử <OutputVariable>
đều là kiểu chuỗi hoặc thông báo.
Để sửa Chính sách JSON thành XML được thảo luận ở trên, bạn có thể khai báo một biến khác PostalCode_output
thuộc chuỗi bằng cách sử dụng Gán chính sách thông báo và sử dụng biến này trong phần tử <OutputVariable>
của Chính sách JSON sang XML.
Chính sách gán thông báo đã 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>
Chính sách JSONToXML đã sửa đổi:
<?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 về 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" } } }
Ví dụ về lỗi
{
"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à message
và string
.
Chẩn đoán
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à Integer.
"faultstring": "JSONToXML[class java.lang.Integer]: Invalid source type class java.lang.Integer. Valid source types are [message, string]."
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 thành XML bị lỗi, 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 có biến có tên 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>
Xác định loại biến được chỉ định trong phần tử
<Source>
:- Tìm mã trong Proxy API, nơi biến này được xác định đầu tiên.
- Sau khi tìm ra chính sách trong đó biến được xác định và điền sẵn trước tiên, bạn cần xác định loại biến đó như sau:
- Kiểm tra giá trị của thuộc tính loại (nếu có).
- Nếu không có thuộc tính type, thì biến được coi là một chuỗi.
- Nếu loại của biến được chỉ định trong
<Source>
không phải là loại thông báo hoặc 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ụ: hãy xem xét việc chính sách ExtractVariables được 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ớ rằng biến
EmployeeID
được dùng trong phần tử<Source>
của chính sách JSONToXML:<Source>EmployeeID</Source>
Vì loại của biến này là
Integer
, 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à message
và string
.
Để tránh lỗi 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ệ.