Вы просматриваете документацию Apigee Edge .
Перейдите к документации Apigee X. информация
ИсточникНедоступен
Код ошибки
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 to JSON, недействительны или имеют неверный формат. |
Причина: отсутствуют входные полезные данные.
В политике XML to JSON, если содержимое (полезная нагрузка) переменной, указанной в элементе <Source> , пусто, возникает эта ошибка.
Например, если элемент <Source> в политике XML to 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>установлен для запроса:<?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>установлено значение ответа, но внутренний сервер передает пустые полезные данные.
Разрешение
Убедитесь, что входные данные, передаваемые в политику 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 To 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.xmlПолезная нагрузка XML, переданная в API, недействительна, поскольку XML не имеет закрывающего тега для элемента
<root>. Итак, вы получаете код ошибки:steps.xml2json.ExecutionFailedЭта ошибка также может возникнуть, если для элемента
<Source>установлено значение ответа, но полезные данные ответа 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>
ВыходнаяVariableIsNotAvailable
Код ошибки
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 To 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 To 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 Proxy, где каждая из этих переменных была определена первой.
- После того, как вы определите политику, в которой переменная определяется и заполняется в первую очередь, вам необходимо определить тип этой переменной следующим образом:
- Проверьте значение атрибута type (если он присутствует).
- Если атрибут type отсутствует, переменная считается строкой.
- Если тип переменной, указанной в
<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 To JSON:<OutputVariable>request</OutputVariable>Поскольку
TrackingNumberимеет типstring, а переменнаяresponseимеет типmessage, они являются несовместимыми типами, поэтому вы получаете код ошибки:steps.xml2json.InCompatibleTypesВышеуказанная ошибка также может возникнуть, если переменная в элементе
<Source>имеет типmessage, а переменная в элементе<OutputVariable>имеет строковый тип.
Разрешение
Убедитесь, что тип переменной, определенной в элементе <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>
Инвалидсаурцетип
Код ошибки
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 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, где эта переменная была определена первой.
- После того, как вы определите политику, в которой переменная определяется и заполняется в первую очередь, вам необходимо определить тип этой переменной следующим образом:
- Проверьте значение атрибута 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 To JSON:<Source>BookCode</Source>Поскольку тип этой переменной —
Integer, который не является допустимым типом<Source>, прокси-сервер API завершается с ошибкой:steps.xml2json.InvalidSourceType
Разрешение
Убедитесь, что тип переменной, используемой для указания элемента <Source> , допустим. Допустимыми типами <Source> являются message и string .
Чтобы избежать вышеуказанной ошибки с политикой XML To JSON, вы можете использовать переменную request типа message или любую другую строку, которая является допустимой полезной нагрузкой XML.