Вы просматриваете документацию Apigee Edge .
Перейдите в документацию Apigee X.info
Источник недоступен
Код ошибки
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"
}
}
}
Причина
Эта ошибка возникает, если переменная сообщения или строка, указанная в элементе <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 указывает переменную с именемresponseв элементе<Source>, которая совпадает с именем в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. Переменная ответа доступна только в потоке ответа.Поскольку переменная ответа отсутствует в потоке запроса, вы получаете код ошибки:
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>
Выполнение завершилось с ошибкой.
Код ошибки
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 в 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-файле политики преобразования 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-файле политики преобразования 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 в политику извлечения переменных был передан следующий недопустимый 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.xmlXML-данные, переданные в API, недействительны, поскольку в 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, имеет тип string, а элемент <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 Proxy, где эта переменная была определена впервые.
- После того, как вы определите политику, в соответствии с которой переменная определяется и заполняется в первую очередь, вам необходимо определить тип этой переменной следующим образом:
- Проверьте значение атрибута типа (если он присутствует).
- Если атрибут типа отсутствует, то переменная считается строкой.
- Если тип переменной —
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, имеет строковый тип, то элемент <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>
Несовместимые Типы
Код ошибки
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 Policy обратите внимание на значения, указанные в
<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 Proxy код, где каждая из этих переменных была определена впервые.
- После того, как вы определите политику, в соответствии с которой переменная определяется и заполняется в первую очередь, вам необходимо определить тип этой переменной следующим образом:
- Проверьте значение атрибута типа (если он присутствует).
- Если атрибут типа отсутствует, то переменная считается строкой.
- Если тип переменной, указанной в
<Source>—string, а тип<OutputVariable>— сообщение, или наоборот, то это и является причиной ошибки. Подробнее о распространенных переменных и их типах можно узнать в справочнике по переменным .
В качестве примера рассмотрим политику назначения сообщений, которая используется для присвоения значения переменной с именем
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>имеет тип string.
Разрешение
Убедитесь, что тип переменной, определенной в элементе <Source> и элементе <OutputVariable> , всегда совпадает. Обязательно, чтобы тип переменных, содержащихся в элементе <Source> и элементе <OutputVariable> совпадал.
Для исправления описанной выше политики преобразования XML в JSON можно объявить еще одну переменную TrackingNumber_output типа string используя политику назначения сообщений, и использовать эту переменную в элементе <OutputVariable> политики преобразования XML в 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. Эту информацию можно найти в сообщении об ошибке. Например, в следующем сообщении об ошибке недопустимый тип — целое число.
"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 Proxy тот фрагмент кода, где эта переменная была определена впервые.
- После того, как вы определите политику, в соответствии с которой переменная определяется и заполняется в первую очередь, вам необходимо определить тип этой переменной следующим образом:
- Проверьте значение атрибута типа (если он присутствует).
- Если атрибут типа отсутствует, то переменная считается строкой.
- Если тип переменной, указанной в
<Source>не является ниmessage, ни типомstring, то это и является причиной ошибки. Подробнее о распространенных переменных и их типах можно узнать в справочнике по переменным .
В качестве примера рассмотрим политику ExtractVariables, которая используется для извлечения значения из XML-данных и присваивает переменной
BookCodeintegerтип, как показано ниже:<?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 Proxy выдает ошибку:steps.xml2json.InvalidSourceType
Разрешение
Убедитесь, что тип переменной, используемой для указания элемента <Source> , является допустимым. Допустимыми типами <Source> являются message и string .
Чтобы избежать указанной выше ошибки при использовании политики преобразования XML в JSON, вы можете использовать переменную request типа message или любую другую строку, являющуюся допустимой XML-нагрузкой.