Вы просматриваете документацию по 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"
}
}
}
Причина
Эта ошибка возникает, если переменная message или строковая переменная, указанная в элементе <Source> правила XML в JSON, является:
- недоступно (не поддерживается в определенном процессе, в котором выполняется правило);
- не может быть разрешен (не определен);
Например, эта ошибка возникает, если правило XML в JSON должно выполняться в потоке запроса, но элемент <Source> задан для переменной response, которая не существует в потоке запроса.
диагностика;
Определите правило XML в JSON, в котором произошла ошибка, и название недоступной переменной. Оба этих элемента можно найти в элементе
faultstringответа об ошибке. Например, в следующем тегеfaultstringназвание правила –Convert-XMLToJSON, а переменная –response:"faultstring": "XMLToJSON[Convert-XMLToJSON]: Source response is not available"В XML-файле правил, который не удалось преобразовать из XML в JSON, убедитесь, что название переменной, заданной в элементе
<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 должно выполняться в потоке запроса. Напомним, что переменная
responseиспользуется в элементе<Source>политики XML в JSON. Переменная ответа доступна только в потоке ответов.Поскольку переменная response не существует в потоке запроса, вы получите код ошибки:
steps.xml2json.SourceUnavailable
Разрешение
Убедитесь, что переменная, заданная в элементе <Source> невыполненного правила XML в JSON, определена и существует в потоке, в котором выполняется правило.
Чтобы исправить приведенный выше пример 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" } } }
Возможные причины
Возможные причины ошибки:
| Cause | Описание |
| Отсутствует входная полезная нагрузка | Входная полезная нагрузка (XML) пуста. |
| Недопустимый или неправильный ввод | Входные данные (XML), переданные правилу XML в JSON, недействительны или сформированы некорректно. |
Причина: отсутствует входная полезная нагрузка
В правиле преобразования XML в JSON возникает ошибка, если контент (полезная нагрузка) переменной, указанной в элементе <Source>, пуст.
Например, если элемент <Source> в правиле XML-JSON задан как переменная 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)"Проверьте элемент
<Source>в XML-файле правил, который не удалось преобразовать в JSON, и определите указанную переменную. Например, в следующем правиле преобразования 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>в правиле XMLToJSON, пустой. Если он пуст, то это и есть причина ошибки.В примере XML-преобразования в JSON, приведенном выше, полезная нагрузка запроса (то есть тело запроса), отправленного клиентом, была пустой.
Пример:
curl -v "http://<org>-<env>.apigee.net/v1/testxmltojson" -H "Content-Type: application/xml"Поскольку полезная нагрузка XML-запроса пуста, вы получите код ошибки:
steps.xml2json.ExecutionFailedЭта ошибка также может возникнуть, если для элемента
<Source>задано значение response, но сервер передает пустую полезную нагрузку.
Разрешение
Убедитесь, что входные данные, передаваемые в правило XML в JSON через элемент <Source>, являются действительной полезной нагрузкой XML и не пусты.
Чтобы устранить проблему с примером правил XML в JSON, передайте действительную полезную нагрузку 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/testxmltojson" -H "Content-Type: application/xml" -X POST -d @company.xml
Причина: недействительный или неправильный входной запрос
Эта ошибка возникает, если правило XML в JSON обрабатывает недопустимый или неправильно отформатированный входной файл.
Например, если в качестве входных данных для правила XML в JSON используется следующий недопустимый код XML:
<?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)"Проверьте элемент
<Source>, указанный в XML-файле правил, который не удалось преобразовать в JSON. Например, в следующем правиле преобразования 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 в JSON", допустимой полезной нагрузкой XML. Если входные данные недействительны или имеют неверный формат, это и будет причиной ошибки.В примере правила преобразования XML в JSON, приведенном выше, в правило извлечения переменных через файл
city.xmlбыл передан следующий недействительный 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>задано значение response, но полезная нагрузка XML-ответа от внутреннего сервера недействительна или имеет неверный формат.
Разрешение
Убедитесь, что входные данные, передаваемые в правило XML в JSON через элемент <Source>, действительны и не повреждены.
Чтобы исправить проблему с примером правил преобразования 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"
}
}
}
Причина
Эта ошибка возникает, если переменная, указанная в элементе <Source> правила XML в JSON, имеет строковый тип, а элемент <OutputVariable> не определен. Элемент <OutputVariable> обязателен, если переменная, определенная в элементе <Source>, имеет тип string.
диагностика;
Определите правило XML в JSON, в котором произошла ошибка. Его можно найти в элементе
faultstringответа об ошибке. Например, в следующем фрагменте кодаfaultstringназвание правила –Convert-XMLToJSON:"faultstring": "XMLToJSON[Convert-XMLToJSON]: Output variable is not available."В правиле "Не удалось преобразовать XML в JSON" проверьте, не отсутствует ли
<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> <Source>TrackingNumber</Source> </XMLToJSON>Определите тип переменной, указанной в элементе
<Source>:- Найдите в пакете прокси API код, в котором впервые была определена переменная.
- Определив, в каких правилах переменная задается и заполняется первой, определите ее тип, выполнив следующие действия:
- Проверьте значение атрибута type (если он есть).
- Если атрибут type отсутствует, переменная считается строкой.
- Если тип переменной –
string, то именно это и является причиной ошибки. Информацию о распространенных переменных и их типах можно найти в справочнике по переменным.
Например, посмотрите на переменную TrackingNumber в приведенном выше правиле преобразования XML в JSON. Это строка. Теперь рассмотрим правило "Назначить сообщение", которое используется для присвоения значения переменной
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имеет строковый тип.Напомним, что переменная
TrackingNumberиспользуется в элементе<Source>правила XML в JSON:<Source>TrackingNumber</Source>Поскольку
TrackingNumberимеет строковый тип, а<OutputVariable>отсутствует в правилах, вы получите код ошибки:steps.xml2json.OutputVariableIsNotAvailable
Разрешение
Если переменная, указанная в элементе <Source> правила XMLToJSON, имеет тип string, элемент <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>.Ниже приведен пример правила XMLToJSON, в котором отсутствует элемент
<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, где впервые были определены эти переменные.
- Определив, в каких правилах переменная задается и заполняется первой, определите ее тип, выполнив следующие действия:
- Проверьте значение атрибута type (если он есть).
- Если атрибут type отсутствует, переменная считается строкой.
- Если тип переменной, указанной в
<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>, – строка. Таким образом, переменнаяTrackingNumberимеет строковый тип.Напомним, что переменная
TrackingNumberиспользуется в элементе<Source>правила XMLToJSON:<Source>TrackingNumber</Source>Напомним, что переменная
requestиспользуется в элементе<OutputVariable>правила "XML в JSON":<OutputVariable>request</OutputVariable>Поскольку
TrackingNumberимеет типstring, а переменнаяresponse– типmessage, эти типы несовместимы, поэтому вы получаете код ошибки:steps.xml2json.InCompatibleTypesЭта ошибка также может возникнуть, если переменная в элементе
<Source>имеет типmessage, а переменная в элементе<OutputVariable>– строковый тип.
Разрешение
Убедитесь, что тип переменной, определенный в элементе <Source>, всегда совпадает с типом переменной, определенным в элементе <OutputVariable>. Типы переменных, содержащихся в элементах <Source> и <OutputVariable>, должны совпадать.
Чтобы исправить описанное выше правило XML To JSON, можно объявить ещё одну переменную TrackingNumber_output типа string, используя правило Assign Message, и использовать эту переменную в элементе <OutputVariable> правила XML To JSON.
Измененные правила назначения сообщений:
<?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. Эту информацию можно найти в сообщении об ошибке. Например, в приведенной ниже ошибке недопустимый тип – integer.
"faultstring": "XMLToJSON[class java.lang.Integer]: Invalid source type class java.lang.Integer. Valid source types are [message, string]."Проверьте все правила XML в JSON в определенном прокси-сервере API, где произошел сбой. В примечании к правилу "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, где эта переменная была определена впервые.
- Определив, в каких правилах переменная задается и заполняется первой, определите ее тип, выполнив следующие действия:
- Проверьте значение атрибута type (если он есть).
- Если атрибут 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>Напомним, что переменная
BookCodeиспользуется в элементе<Source>правила XML в JSON:<Source>BookCode</Source>Поскольку тип этой переменной –
Integer, который не является допустимым типом<Source>, прокси API завершается с ошибкой:steps.xml2json.InvalidSourceType
Разрешение
Убедитесь, что тип переменной, используемой для указания элемента <Source>, действителен. Допустимые типы <Source>: message и string.
Чтобы избежать описанной выше ошибки при использовании правила XML To JSON, можно использовать переменную request типа message или любую другую строку, которая является допустимой полезной нагрузкой XML.