您正在查看 Apigee Edge 說明文件。
查看 Apigee X 說明文件。 資訊
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"
}
}
}
原因
從 XML 到 JSON 政策的 <Source>
元素中,如果指定 message 或字串變數,就會發生這個錯誤:
- 超出範圍 (不適用於執行政策的特定流程) 或
- 無法解析 (未定義)
例如,如果 XML 至 JSON 政策應在要求流程中執行,但 <Source>
元素設為 response
變數,而該變數並不存在於要求流程中,就會發生這個錯誤。
診斷
找出發生錯誤的 XML 到 JSON 政策,以及無法使用的變數名稱。您可以在錯誤回應的
faultstring
元素中找到這兩個項目。舉例來說,在下列faultstring
中,政策名稱是Convert-XMLToJSON
,變數則為response
:"faultstring": "XMLToJSON[Convert-XMLToJSON]: Source response is not available"
請在失敗的 XML 到 JSON 政策 XML 中,確認
<Source>
元素中設定的變數名稱與錯誤字串中識別的變數名稱相符 (如上述步驟 #1)。舉例來說,下列 XML 到 JSON 政策會在<Source>
元素中指定名為response
的變數,該變數與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>
確定
<Source>
元素中使用的變數是否已定義,且可在執行 XML 到 JSON 政策的流程中使用。如果該變數為其中一種:
- 超出範圍 (不適用於執行政策的特定流程) 或
- 無法解析 (未定義)
這就是錯誤的原因
舉例來說,假設上述顯示的 XML 到 JSON 政策應在 request 流程中執行。提醒您,在 XML 對 JSON 政策的
<Source>
元素中,會使用response
變數。回應變數僅適用於回應流程。由於要求流程中沒有回應變數,因此您會收到錯誤代碼:
steps.xml2json.SourceUnavailable
解析度
針對失敗的 XML 至 JSON 政策,確保已定義 <Source>
元素中設定的變數,並存在於執行政策的流程中。
如要將 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) 無效或格式錯誤。 |
原因:缺少輸入酬載
在 XML 到 JSON 政策中,如果 <Source>
元素中指定的變數內容 (酬載) 空白,就會發生這個錯誤。
舉例來說,如果 XML 到 JSON 政策中的 <Source>
元素設為 request
或 response
變數,且其中包含 XML 酬載,那麼只要酬載是空的,就會發生這個錯誤。
診斷
找出發生錯誤的 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)"
檢查失敗的 XML 到 JSON 政策 XML 中的
<Source>
元素,並確定指定的變數。舉例來說,下列 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>
檢查 XMLToJSON 政策中為
<Source>
元素指定的變數是否為空白。若空無一物,就是發生錯誤的原因。在上述的 XML 到 JSON 政策範例中,用戶端傳送的要求酬載 (即要求主體) 為空白。
例如:
curl -v "http://<org>-<env>.apigee.net/v1/testxmltojson" -H "Content-Type: application/xml"
由於 XML 要求酬載為空白,因此您會收到錯誤代碼:
steps.xml2json.ExecutionFailed
如果將
<Source>
元素設為回應,但後端伺服器傳遞空白酬載,也可能會發生這個錯誤。
解析度
確保透過 <Source>
元素傳遞至 XML 政策的輸入內容是有效的 XML 酬載,不得為空白。
如要修正 XML 範例至 JSON 政策的問題,請傳遞有效的 XML 酬載。例如:
建立名為 city.xml 的檔案,其中含有以下內容:
<?xml version="1.0" encoding="UTF-8"?> <root> <City>Bengaluru</City> <Name>Apigee</Name> <Pincode>560016</Pincode> </root>
使用 cURL 指令發出 API 呼叫,如下所示:
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)"
診斷
找出發生錯誤的 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)"
檢查失敗的 XML 到 JSON 政策 XML 中指定的
<Source>
元素。舉例來說,下列 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>
驗證
<Source>
元素中指定的 XML To JSON 政策是否為有效的 XML 酬載。如果輸入內容無效或格式錯誤,就是導致錯誤的原因。在上述 XML 到 JSON 政策的範例中,下列無效的 XML 已透過
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
傳遞至 API 的 XML 酬載無效,因為 XML 沒有
<root>
元素的結束標記。因此您會收到以下錯誤代碼:steps.xml2json.ExecutionFailed
如果
<Source>
元素已設為回應,但後端伺服器的 XML 回應酬載無效或格式錯誤,也可能會發生這個錯誤。
解析度
確認透過 <Source>
元素傳遞至 XML 政策的輸入內容有效,且格式無效。
如要修正上述 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"
}
}
}
原因
如果 XML 至 JSON 政策的 <Source>
元素中指定的變數為類型字串,且 <OutputVariable>
元素未定義,就會發生這個錯誤。如果 <Source>
元素中定義的變數類型為 string
,就必須使用 <OutputVariable>
元素。
診斷
找出發生錯誤的 XML 到 JSON 政策。您可以在錯誤回應的
faultstring
元素中找到這項資訊。例如,在下列faultstring
中,政策名稱是Convert-XMLToJSON
:"faultstring": "XMLToJSON[Convert-XMLToJSON]: Output variable is not available."
在失敗的 XML 至 JSON 政策中,是否缺少
<OutputVariable>
。以下是缺少
<OutputVariable>
元素的 XML 對 JSON 政策的範例。<?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>
判斷
<Source>
元素中指定的變數類型:- 在 API Proxy 軟體包中找出變數,其中先定義變數。
- 確定定義及填入變數的政策後,您必須按照下列方式判斷該變數的類型:
- 檢查類型屬性的值 (如果有的話)。
- 如果沒有 type 屬性,系統會將該變數視為字串。
- 如果變數的類型為
string
,就是錯誤的原因。如要瞭解常見的變數及其類型,請參閱變數參考資料。
例如,您可以查看上述 XML 到 JSON 政策中的 TrackingNumber 變數。屬於類型字串。現在,請考慮使用「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
是類型字串。現在,請記得在 XML To JSON 政策的
<Source>
元素中使用TrackingNumber
變數:<Source>TrackingNumber</Source>
由於
TrackingNumber
是字串類型,且政策中缺少<OutputVariable>
,因此您會收到錯誤代碼:steps.xml2json.OutputVariableIsNotAvailable
解析度
如果 XMLToJSON 政策的 <Source>
元素中指定的變數為類型字串,請確保 <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.
診斷
找出發生錯誤的 XML 到 JSON 政策。您可以在錯誤回應的
faultstring
元素中找到這項資訊。例如,在下列faultstring
中,政策名稱是XMLToJSON_CheckType
:"faultstring": "XMLToJSON[XMLToJSON_CheckType]: String can not be assigned to message type."
在失敗的「XML 對 JSON」政策中,系統會記下
<OutputVariable>
中指定的值。以下是缺少
<OutputVariable>
元素的範例 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>request</OutputVariable> <Source>TrackingNumber</Source> </XMLToJSON>
判斷
<Source>
和<OutputVariable>
元素中指定的變數類型:- 找出 API Proxy 組合中的程式碼,其中必須先定義每個變數。
- 確定定義及填入變數的政策後,您必須按照下列方式判斷該變數的類型:
- 檢查類型屬性的值 (如果有的話)。
- 如果沒有 type 屬性,系統會將該變數視為字串。
- 如果
<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
是類型字串。現在,請記得在 XMLToJSON 政策的
<Source>
元素中使用TrackingNumber
變數:<Source>TrackingNumber</Source>
同樣地,請記得在 XML To JSON 政策的
<OutputVariable>
元素中使用request
變數:<OutputVariable>request</OutputVariable>
由於
TrackingNumber
屬於string
類型,但response
變數屬於message
類型,因此是不相容的類型,因此您會收到錯誤代碼:steps.xml2json.InCompatibleTypes
如果
<Source>
元素中的變數類型為message
,但<OutputVariable>
元素中的變數是類型字串,也可能會發生上述錯誤。
解析度
確保 <Source>
元素中定義的變數類型與 <OutputVariable>
元素一律相同。請務必比對 <Source>
元素中包含的變數類型,且 <OutputVariable>
元素必須相符。
如要修正上述的「XML 轉換為 JSON 政策」,您可以使用「Assign Message Policy」(指派訊息政策) 宣告另一個類型為 string
的變數 TrackingNumber_output
,並在 XML To JSON 政策的 <OutputVariable>
元素中使用這個變數。
修改後指派訊息政策:
<?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
。
診斷
找出 XML 至 JSON 政策中使用的無效來源類型。您可以在錯誤訊息中找到這項資訊。舉例來說,在下列錯誤中,無效類型為整數。
"faultstring": "XMLToJSON[class java.lang.Integer]: Invalid source type class java.lang.Integer. Valid source types are [message, string]."
檢查發生錯誤的特定 API Proxy 中的所有 XML 至 JSON 政策。在失敗的「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>
判斷
<Source>
元素中指定的變數類型:- 在 API Proxy 套件中找到程式碼 (先定義這個變數的位置)。
- 確定定義及填入變數的政策後,您必須按照下列方式判斷該變數的類型:
- 檢查類型屬性的值 (如果有的話)。
- 如果沒有 type 屬性,系統會將該變數視為字串。
- 如果
<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>
現在,請記得在 XML To JSON 政策的
<Source>
元素中使用BookCode
變數:<Source>BookCode</Source>
由於這個變數的類型是
Integer
,但屬於無效的<Source>
類型,因此 API Proxy 會失敗並顯示以下錯誤:steps.xml2json.InvalidSourceType
解析度
確認用於指定 <Source>
元素的變數類型有效。有效的 <Source>
類型為 message
和 string
。
為避免「XML 對 JSON」政策發生上述錯誤,您可以使用類型為 message
的 request
變數,或屬於有效 XML 酬載的任何其他字串。