Вы просматриваете документацию Apigee Edge .
Перейдите в документацию Apigee X.info
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"
}
}
}
Причина
Эта ошибка возникает, если переменная сообщения или строка, указанная в элементе <Source> политики преобразования XSL, имеет одно из следующих значений:
- Выход за рамки действия (недоступно в конкретном процессе, в котором выполняется политика)
- Не может быть решено (не определено)
Например, эта ошибка возникает, если политика XSL-преобразования должна выполняться в потоке запроса, но элемент <Source> установлен на переменную ответа, которой в потоке запроса не существует.
Диагноз
Укажите политику XSL-преобразования, в которой произошла ошибка, и имя недоступной переменной. Оба эти элемента можно найти в элементе
faultstringответа об ошибке. Например, в следующемfaultstringимя политики —xslt, а переменная —response:faultstring": "response message is not available for XSL: xsltВ XML-файле политики преобразования XSL, завершившейся ошибкой, убедитесь, что имя переменной, заданной в элементе
<Source>совпадает с именем переменной, указанным в строке ошибки (шаг #1 выше). Например, следующая политика преобразования XSL указывает переменную с именемresponseв элементе<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>response</Source> <Parameters ignoreUnresolvedVariables="false"/> <OutputVariable/> </XSL>Определите, определена ли переменная, используемая в элементе
<Source>, и доступна ли она в потоке, в котором выполняется политика преобразования XSL.Если переменная имеет одно из следующих значений:
- Выход за рамки действия (недоступно в конкретном процессе, в котором выполняется политика) или
- Не может быть решено (не определено)
Тогда это и есть причина ошибки.
В качестве примера предположим, что политика XSL-преобразования, показанная выше, должна выполняться в потоке запроса. Напомним, что переменная
responseиспользуется в элементе<Source>примера политики. Переменнаяresponseдоступна только в потоке ответа.Поскольку переменная
responseотсутствует в потоке запроса, вы получаете код ошибки:steps.xsl.XSLSourceMessageNotAvailable
Разрешение
Убедитесь, что переменная, заданная в элементе <Source> политики неудачного преобразования XSL, определена и существует в потоке, где выполняется политика.
Чтобы исправить приведенный выше пример политики преобразования XSL, можно изменить элемент <Source> , чтобы он использовал переменную request , поскольку она присутствует в потоке запроса:
<?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 не может преобразовать входной XML-файл в соответствии с правилами преобразования, указанными в XSL-файле. Причин сбоя политики XSLTransform может быть множество. Причина сбоя, указанная в сообщении об ошибке, предоставит дополнительную информацию о причине. В следующей таблице приведена одна из таких причин сбоя — «Недопустимый префикс» — и объяснена на примере.
| Причина | Описание |
|---|---|
| Входные данные XML недоступны. | Входные XML-данные не переданы или пусты. |
| Некорректно сформированный входной XML | Входные XML-данные имеют некорректный или недопустимый формат. |
| Недопустимый префикс | Входные XML-данные содержат префикс, который не определен в XSL-файле. |
Причина: Входные XML-данные недоступны.
Эта ошибка возникает, если входные XML-данные не передаются или если XML-данные, передаваемые в рамках запроса API к API-прокси с политикой XSLTransform, пусты.
Пример сообщения об ошибке
{
"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"
}
}
}
Диагноз
Укажите XSL-файл, который не удалось обработать политикой преобразования XML, и причину сбоя. Если входные XML-данные не переданы или пусты, причина сбоя будет указывать на преждевременное завершение документа при разборе. Всю эту информацию можно найти в элементе
faultstringответа об ошибке. Например, в следующемfaultstringXSL-файл —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://<org>-<env>.apigee.net/v1/xsltransform" -H "Content-Type: application/xml"Поскольку входные 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>Выполните вызов API с помощью команды cURL следующим образом:
curl -v "http://<org>-<env>.apigee.net/v1/xsltransform" -H "Content-Type: application/xml" -X POST -d @city.xml
Причина: Некорректный входной XML-код.
Входные XML-данные, передаваемые в рамках API-запроса к политике XSLTransform, имеют некорректный или недействительный формат.
Пример сообщения об ошибке
{
"fault": {
"faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Unexpected char while looking for open tag ('<') character\"",
"detail": {
"errorcode": "steps.xsl.XSLEvaluationFailed"
}
}
}
Диагноз
Определите XSL-файл, который не удалось обработать политикой преобразования XML, и причину сбоя. Если входной XML-код некорректен, причина сбоя будет указывать на наличие неожиданного символа. Всю эту информацию можно найти в элементе
faultstringответа об ошибке. Например, в следующемfaultstringXSL-файл —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\""Проверьте входные XML-данные, передаваемые в политику XSLTransform, и убедитесь, что они содержат допустимый XML-контент. Если входные данные не являются допустимым XML, то это и является причиной ошибки.
В приведенном ниже примере запроса входные данные (то есть тело запроса), отправленные пользователем, были недействительными.
Например:
curl -v "http://<org>-<env>.apigee.net/v1/xsltransform" -H "Content-Type: application/xml" -X POST -d @city.xmlГде находится
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>Выполните вызов API с помощью команды cURL следующим образом:
curl -v "http://<org>-<env>.apigee.net/v1/xsltransform" -H "Content-Type: application/xml" -X POST -d @city.xml
Причина: Недопустимый префикс
Входные XML-данные, передаваемые в политику XSLTransform, содержат элемент, который не определен в качестве префикса в 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"
}
}
}
Диагноз
Укажите XSL-файл, который не удалось обработать политикой преобразования XML, и причину сбоя. В данном случае причина сбоя будет указывать на наличие неразрешенного префикса в определенной строке входного XML-файла. Всю эту информацию можно найти в элементе
faultstringответа об ошибке. Например, в следующемfaultstringXSL-файл —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-файла. Если префикс, используемый в номере строки (указанном на шаге №1 выше) входного XML-файла, отсутствует в 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)\""
Разрешение
Убедитесь, что входной XML-пакет, передаваемый в политику XSLTransform, содержит все форматы элементов, определенные в качестве префиксов в 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>