Вы просматриваете документацию 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-коде политики преобразования 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.