現在、Apigee と Apigee ハイブリッドのドキュメントを表示しています。
Apigee Edge のドキュメントを表示する。
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 to JSON ポリシーの <Source> 要素に指定された message 変数または string 変数が次のいずれかの状態である場合に発生します。
- 範囲外(ポリシーが実行されている特定のフローで使用できない)
- 解決できない(定義されていない)
たとえば、XML to JSON ポリシーがリクエスト フローで実行されているにもかかわらず、<Source> 要素が response 変数に設定されている(リクエスト フローに存在しない)場合に、このエラーが発生します。
診断
エラーが発生した XML to JSON ポリシーと、使用できない変数の名前を特定します。どちらの項目もエラー レスポンスの
faultstring要素にあります。たとえば、次のfaultstringでは、Convert-XMLToJSONがポリシー名、responseが変数です。"faultstring": "XMLToJSON[Convert-XMLToJSON]: Source response is not available"エラーが発生した XML to JSON ポリシーの XML で、
<Source>要素に設定されている変数名が faultstring で特定された変数名(上記の手順 1)と一致していることを確認します。たとえば、次の XML to 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 to JSON ポリシーが実行されるフローで使用できることを確認します。変数が次のいずれかの状態になっていないか確認します。
- 範囲外(ポリシーが実行されている特定のフローで使用できない)
- 解決できない(定義されていない)
いずれかの状態が当てはまる場合、それがエラーの原因です。
たとえば、上記の XML to JSON ポリシーがリクエスト フローで実行されるとします。
response変数は XML to JSON ポリシーの<Source>要素で使用されていることを思い出してください。response 変数はレスポンス フローでのみ使用できます。response 変数がリクエスト フローに存在しないため、次のエラーコードが表示されます。
steps.xml2json.SourceUnavailable
解決策
エラーが発生した XML to JSON ポリシーの <Source> 要素に設定される変数が定義されていて、ポリシーが実行されるフローにその変数が存在することを確認します。
上記の XML to 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 to JSON ポリシーに渡された入力(XML)が無効であるか不正な形式です。 |
原因: 入力ペイロードがない
XML to JSON ポリシーで <Source> 要素に指定されている変数の内容(ペイロード)が空の場合、このエラーが発生します。
たとえば、XML to JSON ポリシー内の <Source> 要素が request 変数あるいは response 変数として設定されていて、これに XML のペイロードが含まれることになっている場合、ペイロードが空だとこのエラーが発生します。
診断
エラーが発生した XML to 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 to JSON ポリシーの XML に含まれる
<Source>要素を調べて、指定された変数を特定します。たとえば、次の XML to 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>XML to JSON ポリシーの
<Source>要素に指定された変数が空かどうか確認します。要素が空の場合は、それがエラーの原因です。上記の XML to JSON ポリシーの例では、クライアントから送信されたリクエストのペイロード(つまり、リクエストの本文)が空になっています。
例:
curl -v "http://your_host_alias/v1/testxmltojson" -H "Content-Type: application/xml"
ここで、your_host_alias は、オーバーライド ファイルの
virtualhosts.hostAliasesプロパティで構成され、API へのアクセスに使用される公開ドメインです。構成のオーバーライドを指定するをご覧ください。XML リクエストのペイロードが空のため、次のエラーコードが表示されます。
steps.xml2json.ExecutionFailed<Source>要素が response に設定されている場合でも、バックエンド サーバーから空のペイロードが渡されると、このエラーが発生することがあります。
解決策
<Source> 要素を介して XML to JSON ポリシーに渡される入力が有効な XML ペイロードであり、空でないことを確認します。
XML to 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://your_host_alias/v1/testxmltojson" -H "Content-Type: application/xml" -X POST -d @company.xml
ここで、your_host_alias は、オーバーライド ファイルの
virtualhosts.hostAliasesプロパティで構成され、API へのアクセスに使用される公開ドメインです。構成のオーバーライドを指定するをご覧ください。
原因: 入力が無効であるか形式が正しくない
XML to JSON ポリシーが無効または不正な形式の入力を解析すると、このエラーが発生します。
たとえば、次の無効な XML が入力として XML to 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 to 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 to JSON ポリシーの XML で指定された
<Source>要素を調べます。たとえば、次の XML to 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 to JSON ポリシーの例では、
city.xmlファイルから次の無効な XML が Extract Variables ポリシーに渡されました。<?xml version="1.0" encoding="UTF-8"?> <root> <City>Bengaluru</City> <Name>Apigee</Name> <Pincode>560016</Pincode>次の API 呼び出しの例は、リクエストがどのように渡されたかを示しています。
curl -v "http://your_host_alias/v1/testxmltpjson" -H "Content-Type: application/xml" -X POST -d @city.xml
ここで、your_host_alias は、オーバーライド ファイルの
virtualhosts.hostAliasesプロパティで構成され、API へのアクセスに使用される公開ドメインです。構成のオーバーライドを指定するをご覧ください。XML に
<root>要素の終了タグがないため、API に渡された XML ペイロードは無効です。したがって、エラーコードが表示されます。steps.xml2json.ExecutionFailed<Source>要素が response に設定された場合でも、バックエンド サーバーからの XML レスポンスのペイロードが無効あるいは不正な形式であると、このエラーが発生することがあります。
解決策
<Source> 要素によって XML to JSON ポリシーに渡される入力が、有効で不正な形式ではないことを確認します。
上記で説明した XML to 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 to JSON ポリシーの <Source> 要素に指定された変数が string 型であり、<OutputVariable> 要素が定義されていない場合に発生します。<Source> 要素に定義された変数が string 型の場合、<OutputVariable> 要素は必須です。
診断
エラーが発生した XML to JSON ポリシーを特定します。この情報はエラー レスポンスの
faultstring要素で確認できます。たとえば、次のfaultstringではポリシー名はConvert-XMLToJSONです。"faultstring": "XMLToJSON[Convert-XMLToJSON]: Output variable is not available."エラーが発生した XML to JSON ポリシーに、
<OutputVariable>がないかどうかを確認します。次の XML to JSON ポリシーの例には、
<OutputVariable>要素がありません。<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <XMLToJSON async="false" continueOnError="false" enabled="true" name="Convert-XMLToJSON"> <DisplayName>Convert-XMLToJSON</DisplayName> <Properties/> <Format>google</Format> <Source>TrackingNumber</Source> </XMLToJSON>次のようにして
<Source>要素に指定された変数の型を特定します。- API プロキシ バンドルで、最初に変数が定義されたコードを特定します。
- 変数が最初に定義されて値が入力されたポリシーを特定したら、次のようにして変数の型を特定する必要があります。
- 型属性の値を確認します(存在する場合)。
- 型属性が存在しない場合、その変数は文字列とみなされます。
- 変数の型が
stringの場合、それがエラーの原因です。よく使用される変数とその型については、変数リファレンスをご覧ください。
たとえば、上記の XML to JSON ポリシーに含まれる TrackingNumber 変数に注目してください。この変数は string 型です。ここで、次のように 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>で設定される変数の型は string です。したがって、変数TrackingNumberは string 型になります。TrackingNumber変数は XML to JSON ポリシーの<Source>要素で使用されていることを思い出してください。<Source>TrackingNumber</Source>TrackingNumberが string 型でポリシーに<OutputVariable>がないため、次のエラーコードが表示されます。steps.xml2json.OutputVariableIsNotAvailable
解決策
XML to JSON ポリシーの <Source> 要素で指定されている変数が string 型である場合、<OutputVariable> 要素は必須です。
上記で説明した XML to 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 to JSON ポリシーを特定します。この情報はエラー レスポンスの
faultstring要素で確認できます。たとえば、次のfaultstringでは、ポリシー名はXMLToJSON_CheckTypeです。"faultstring": "XMLToJSON[XMLToJSON_CheckType]: String can not be assigned to message type."エラーが発生した XML to JSON ポリシーで、
<OutputVariable>の指定値を調べます。次の XML to JSON ポリシーの例には、
<OutputVariable>要素がありません。<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <XMLToJSON async="false" continueOnError="false" enabled="true" name="XMLToJSON_CheckType"> <DisplayName>XMLToJSON_CheckType</DisplayName> <Properties/> <Format>google</Format> <OutputVariable>request</OutputVariable> <Source>TrackingNumber</Source> </XMLToJSON><Source>要素と<OutputVariable>要素に指定された変数の型を特定します。- API プロキシ バンドルで、それぞれの変数が最初に定義されたコードを特定します。
- 変数が最初に定義されて値が入力されたポリシーを特定したら、次のようにして変数の型を特定する必要があります。
- 型属性の値を確認します(存在する場合)。
- 型属性が存在しない場合、その変数は文字列とみなされます。
<Source>で指定された変数の型がstringである一方で、<OutputVariable>の型が message の場合、またはその逆の場合は、それがエラーの原因です。よく使用される変数とその型については、変数リファレンスをご覧ください。
たとえば、次のように 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>で設定される変数の型は string です。したがって、変数TrackingNumberは string 型になります。TrackingNumber変数は XML To JSON ポリシーの<Source>要素で使用されていることを思い出してください。<Source>TrackingNumber</Source>同様に
request変数は XML to JSON ポリシーの<OutputVariable>要素で使用されています。<OutputVariable>request</OutputVariable>TrackingNumberはstring型であるのに対し、response変数はmessage型で、これらの型には互換性がないため、次のエラーコードが表示されます。steps.xml2json.InCompatibleTypes<Source>要素の変数がmessage型である一方、<OutputVariable>要素の変数が string 型の場合も、上記のエラーが発生することがあります。
解決策
<Source> 要素と <OutputVariable> 要素で定義されている変数の型が常に同じであることを確認します。<Source> 要素に含まれる変数の型と <OutputVariable> 要素に含まれる変数の型は一致している必要があります。
上記の XML to JSON ポリシーを修正するには、Assign Message ポリシーを使用して string 型の別の変数 TrackingNumber_output を宣言し、XML to JSON ポリシーの <OutputVariable> 要素でこの変数を使用します。
変更された Assign Message ポリシー:
<?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 to JSON ポリシーで使用されている無効な型の変数を特定します。この情報はエラー メッセージで確認できます。たとえば、次のエラーの無効な型は integer です。
"faultstring": "XMLToJSON[class java.lang.Integer]: Invalid source type class java.lang.Integer. Valid source types are [message, string]."エラーが発生した特定の API プロキシで、すべての XML to JSON ポリシーを調べます。エラーが発生した XML to 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 プロキシ バンドルで、最初にこの変数が定義されたコードを特定します。
- 変数が最初に定義されて値が入力されたポリシーを特定したら、次のようにして変数の型を特定する必要があります。
- 型属性の値を確認します(存在する場合)。
- 型属性が存在しない場合、その変数は文字列とみなされます。
<Source>に指定されている変数の型がmessageでもstringでもない場合、それがエラーの原因です。よく使用される変数とその型については、変数リファレンスをご覧ください。
たとえば、次のように ExtractVariables ポリシーを使用して、XML ペイロードから値を抽出し、
integer型のBookCode変数にその値を設定するとします。<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract_BookCode"> <DisplayName>Extract_BookCode</DisplayName> <Properties/> <Source>request</Source> <XMLPayload stopPayloadProcessing="false"> <Variable name="BookCode" type="integer"> <XPath>/root/BookCode</XPath> </Variable> </XMLPayload> </ExtractVariables>BookCode変数は XML to JSON ポリシーの<Source>要素で使用されていることを思い出してください。<Source>BookCode</Source>この変数の型は
Integerです。これは有効な<Source>型でないため、API プロキシは次のエラーで失敗します。steps.xml2json.InvalidSourceType
解決策
<Source> 要素の指定に使用される変数の型が有効であることを確認します。有効な <Source> 型は message と string です。
XML to JSON ポリシーで上記のエラーを回避するには、message 型の request 変数か、有効な XML ペイロードの他の文字列を使用します。