現在、Apigee と Apigee ハイブリッドのドキュメントを表示しています。
Apigee Edge のドキュメントを表示する。
XSLSourceMessageNotAvailable
エラーコード
steps.xsl.XSLSourceMessageNotAvailable
エラー レスポンスの本文
{ "fault": { "faultstring": "response message is not available for XSL: policy_name", "detail": { "errorcode": "steps.xsl.XSLSourceMessageNotAvailable" } } }
エラー メッセージの例
{
"fault": {
"faultstring": "response message is not available for XSL: xslt",
"detail": {
"errorcode": "steps.xsl.XSLSourceMessageNotAvailable"
}
}
}
原因
このエラーは、XSLTransform ポリシーの <Source>
要素に指定された message
または文字列変数が次のいずれかである場合に発生します。
- 範囲外(ポリシーが実行されている特定のフローで使用できない)
- 解決不能(未定義)
たとえば、XSLTransform ポリシーがリクエスト フローで実行されなければならないにもかかわらず、このリクエスト フローに存在しない response 変数に <Source>
要素が設定されている場合に、このエラーが発生します。
診断
エラーが発生した XSLTransform ポリシーと、使用できない変数の名前を特定します。どちらの項目もエラー レスポンスの
faultstring
要素にあります。たとえば、次のfaultstring
では、xslt
がポリシー名、response
が変数です。faultstring": "response message is not available for XSL: xslt
失敗した XSLTransform ポリシーの XML で、
<Source>
要素に設定された変数名が、障害文字列内で特定された変数名(上記のステップ 1)に一致していることを確認します。たとえば、次の XSLTransform ポリシーでは、<Source>
要素内でresponse
という名前の変数を指定しています、これは、障害文字列の内容と一致します。<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <XSL async="false" continueOnError="false" enabled="true" name="xslt"> <DisplayName>xslt</DisplayName> <Properties/> <ResourceURL>xsl://XSL-Transform.xsl</ResourceURL> <Source>response</Source> <Parameters ignoreUnresolvedVariables="false"/> <OutputVariable/> </XSL>
XSLTransform ポリシーが実行されるフローで、
<Source>
要素が定義されていて、使用できることを確認します。変数が次のいずれかの状態になっていないか確認します。
- 範囲外(ポリシーが実行されている特定のフローで使用できない)
- 解決不能(未定義)
該当する場合は、それがエラーの原因です。
たとえば、上記の XSLTransform ポリシーがリクエスト フローで実行されるとします。前述のとおり、
response
変数は、サンプル ポリシーの<Source>
要素で使用されています。response
変数はレスポンス フローでのみ使用できます。response
変数はリクエスト フローに存在しないため、次のエラーコードを受け取ります。steps.xsl.XSLSourceMessageNotAvailable
解決策
失敗した XSLTransform ポリシーの <Source>
要素内に設定された変数が定義されていて、ポリシーが実行されるフローに存在することを確認します。
上記の XSLTransform ポリシーの例を修正するには、request
変数がリクエスト フローに存在するので、それを使用するように <Source>
要素を変更します。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<XSL async="false" continueOnError="false" enabled="true" name="xslt">
<DisplayName>xslt</DisplayName>
<Properties/>
<ResourceURL>xsl://XSL-Transform.xsl</ResourceURL>
<Source>request</Source>
<Parameters ignoreUnresolvedVariables="false"/>
<OutputVariable/>
</XSL>
XSLEvaluationFailed
エラーコード
steps.xsl.XSLEvaluationFailed
エラー レスポンスの本文
{
"fault": {
"faultstring": "Evaluation of XSL <var>XSL_file_name</var> failed with reason: \"<var>reason_for_failure</var>",
"detail": {
"errorcode": "steps.xsl.XSLEvaluationFailed"
}
}
}
エラー メッセージの例
{
"fault": {
"faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Premature end of document while parsing at line 1(possibly around char 0)\"",
"detail": {
"errorcode": "steps.xsl.XSLEvaluationFailed"
}
}
}
考えられる原因
このエラーは、次の場合に発生します。
- 入力 XML ペイロードが使用できないか、不正な形式である。
- XSLTransform ポリシーが、XSL ファイルで指定された変換ルールに基づいて入力 XML ファイルを変換できない。XSLTransform ポリシーは、さまざまな原因で失敗します。エラー メッセージに含まれている失敗の理由から、原因についてより詳しい情報を得ることができます。以下の表に、この失敗の原因の一つである無効な接頭辞を示します。また、その例についても説明します。
原因 | 説明 |
---|---|
入力 XML ペイロードが使用できない | 入力 XML ペイロードが渡されないか空です。 |
入力 XML の形式が正しくない | 入力 XML ペイロードの形式が正しくないか、無効です。 |
無効な接頭辞 | 入力 XML ペイロードの接頭辞が XSL ファイルで定義されていません。 |
原因: 入力 XML ペイロードを使用できない
このエラーは、入力 XML ペイロードが渡されなかった場合、または XSLTransform ポリシーを持つ API プロキシに API リクエストの一部として渡された XML ペイロードが空の場合に発生します。
エラー メッセージの例
{
"fault": {
"faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Premature end of document while parsing at line 1(possibly around char 0)\"",
"detail": {
"errorcode": "steps.xsl.XSLEvaluationFailed"
}
}
}
診断
XML Transform ポリシーで評価できなかった XSL ファイルと、失敗の理由を特定します。入力 XML ペイロードが渡されないか空の場合、失敗の原因は、解析の途中でドキュメントが早期終了したことです。この情報はすべてエラー レスポンスの
faultstring
要素で確認できます。たとえば、次のfaultstring
では XSL ファイルはXSL-Transform.xsl
、失敗の理由はPremature end of document while parsing at line 1 (possibly around char 0)
です。このエラーは、XML ペイロードが渡されていないか空であることを示します。"faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Premature end of document while parsing at line 1(possibly around char 0)\""
リクエストの一部として渡された入力 XML ペイロードが空かどうかを判断します。入力ペイロードが渡されていないか空の場合は、これがエラーの原因です。
以下のリクエスト例では、ユーザーが送信したリクエスト ペイロード(つまり、リクエスト本文)が空でした。
次に例を示します。
curl -v "http://your_host_alias/v1/xsltransform" -H "Content-Type: application/xml"
ここで、your_host_alias は、オーバーライド ファイルの
virtualhosts.hostAliases
プロパティで構成され、API へのアクセスに使用される公開ドメインです。構成のオーバーライドを指定するをご覧ください。XML 入力ペイロードが空であるため、次のエラーを受け取ります。
"faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Premature end of document while parsing at line 1(possibly around char 0)\""
解決策
XSLTransform ポリシーに渡された入力が有効な XML ペイロードであり、空でないことを確認します。
サンプルの XSLTransform ポリシーの問題を解決するには、有効な 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/xsltransform" -H "Content-Type: application/xml" -X POST -d @city.xml
ここで、your_host_alias は、オーバーライド ファイルの
virtualhosts.hostAliases
プロパティで構成され、API へのアクセスに使用される公開ドメインです。構成のオーバーライドを指定するをご覧ください。
原因: 入力 XML の形式が正しくない
API リクエストの一部として XSLTransform ポリシーに渡された入力 XML ペイロードの形式が正しくないか無効です。
エラー メッセージの例
{
"fault": {
"faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Unexpected char while looking for open tag ('<') character\"",
"detail": {
"errorcode": "steps.xsl.XSLEvaluationFailed"
}
}
}
診断
XML Transform ポリシーで評価できなかった XSL ファイルと、失敗の理由を特定します。入力 XML ペイロードの形式が正しくない場合、失敗の原因は、想定外の文字が含まれていることです。この情報はすべてエラー レスポンスの
faultstring
要素で確認できます。たとえば、次のfaultstring
では XSL ファイルはXSL-Transform.xsl
、失敗の理由はUnexpected char while looking for open tag ('<') character
です。つまり、XML ペイロードに「<
」がありません。"faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Unexpected char while looking for open tag ('<') character\""
XSLTransform ポリシーに渡された入力 XML ペイロードを調べて、有効な XML コンテンツがあるかどうかを確認します。入力ペイロードが有効な XML でない場合は、これがエラーの原因です。
以下のリクエスト例では、ユーザーが送信した入力ペイロード(つまり、リクエスト本文)が無効でした。
次に例を示します。
curl -v "http://your_host_alias/v1/xsltransform" -H "Content-Type: application/xml" -X POST -d @city.xml
ここで、your_host_alias は、オーバーライド ファイルの
virtualhosts.hostAliases
プロパティで構成され、API へのアクセスに使用される公開ドメインです。構成のオーバーライドを指定するをご覧ください。この例では、
city.xml
は次のように定義されています。{ "City": "Bengaluru", "Name": "Apigee", "Pincode": "560016" }
入力ペイロードが JSON であり、有効な XML でないため、次のエラーを受け取ります。
"faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Unexpected char while looking for open tag ('<') character\""
解決策
XSLTransform ポリシーに渡された入力が有効な XML ペイロードであり、空でないことを確認します。
サンプルの XSLTransform ポリシーの問題を解決するには、有効な XML ペイロードを渡します。次に例を示します。
次のように、ファイル
city.xml
を変更して、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/xsltransform" -H "Content-Type: application/xml" -X POST -d @city.xml
ここで、your_host_alias は、オーバーライド ファイルの
virtualhosts.hostAliases
プロパティで構成され、API へのアクセスに使用される公開ドメインです。構成のオーバーライドを指定するをご覧ください。
原因: 無効な接頭辞
XSLTransform ポリシーに渡された入力 XML ペイロードに、ポリシーで指定された XSL ファイルで接頭辞として定義されていない要素があります。
エラー メッセージの例
{
"fault": {
"faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Unresolved Prefix at line 1(possibly around char 270)\"",
"detail": {
"errorcode": "steps.xsl.XSLEvaluationFailed"
}
}
}
診断
XML Transform ポリシーで評価できなかった XSL ファイルと、失敗の理由を特定します。この場合、失敗の原因は、入力 XML ペイロードの特定の行番号に未解決の接頭辞があることです。この情報はすべてエラー レスポンスの
faultstring
要素で確認できます。たとえば、次のfaultstring
では、XSL ファイルはXSL-Transform.xsl
、失敗の理由はUnresolved Prefix
、行番号は1
です。"faultstring":"Evaluation of XSL XSL-Transform.xsl failed with reason: \"Unresolved Prefix at line 1(possibly around char 270)\""
XSL ファイルのコンテンツ(上記のステップ 1 で特定)と、入力 XML ペイロードを調べます。入力 XML ペイロードの行番号(上記のステップ 1 で特定)で使用されている接頭辞が XSL ファイルに存在しない場合は、それがエラーの原因です。
エラーとなるサンプルの XSL と対応する XML ペイロードの例は次のとおりです。
XSL-Transform.xsl <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="text"/> <xsl:variable name="newline"> <xsl:text> </xsl:text> </xsl:variable> <xsl:template match="/"> <xsl:text><Life></xsl:text> <xsl:value-of select="$newline"/> <xsl:text>Here are the odd-numbered items from the list:</xsl:text> <xsl:value-of select="$newline"/> <xsl:for-each select="list/listitem"> <xsl:if test="(position() mod 2) = 1"> <xsl:number format="1. "/> <xsl:value-of select="."/> <xsl:value-of select="$newline"/> </xsl:if> </xsl:for-each> <xsl:text></Life></xsl:text> </xsl:template> </xsl:stylesheet>
入力 XML ペイロード
<?xml version="1.0"?> <Life:Books> <title>A few of my favorite albums</title> <listitem>Beat Crazy</listitem> <listitem>Here Come the Warm Jets</listitem> <listitem>Kind of Blue</listitem> <listitem>London Calling</listitem> </Life:Books>
上記の XML ペイロードの例には
<Life:Books>
要素が含まれています。XSL がこの接頭辞を持たないことに注意してください。代わりに<xsl:text><Life></xsl:text>
という接頭辞が付いています。このため、次のエラーが発生します。"faultstring":"Evaluation of XSL XSL-Transform.xsl failed with reason: \"Unresolved Prefix at line 1(possibly around char 270)\""
解決策
XSLTransform ポリシーに渡す入力 XML ペイロードには、ポリシーで使用される XSL ファイルの接頭辞として定義されるすべての要素形式があることを確認します。
上記の XML ファイルの例を修正するには、ファイルを次のように変更します。
更新された入力 XML ペイロード
<?xml version="1.0"?>
<Life>
<title>A few of my favorite albums</title>
<listitem>Beat Crazy</listitem>
<listitem>Here Come the Warm Jets</listitem>
<listitem>Kind of Blue</listitem>
<listitem>London Calling</listitem>
</Life>