Esta página aplica-se ao Apigee e ao Apigee Hybrid.
Veja a documentação do
Apigee Edge.
O quê
Esta política converte mensagens do formato de linguagem de marcação extensível (XML) para JavaScript Object Notation (JSON), o que lhe dá várias opções para controlar a forma como as mensagens são convertidas.
Partindo do princípio de que a intenção é converter uma resposta formatada em XML numa resposta formatada em JSON, a política seria anexada a um fluxo de resposta (por exemplo, Response / ProxyEndpoint/PostFlow).
Esta política é uma política padrão e pode ser implementada em qualquer tipo de ambiente. Para obter informações sobre os tipos de políticas e a disponibilidade com cada tipo de ambiente, consulte Tipos de políticas.
Acerca de
Num cenário de mediação típico, uma política de JSON para XML no fluxo de pedidos de entrada é frequentemente combinada com uma política de XML para JSON no fluxo de respostas de saída. Ao combinar políticas desta forma, pode expor uma API JSON para serviços de back-end que suportam nativamente apenas XML.
Para cenários em que as APIs são consumidas por diversas apps de cliente que podem exigir JSON ou XML, o formato de resposta pode ser definido dinamicamente configurando políticas de JSON para XML e de XML para JSON para execução condicional. Consulte as variáveis e condições do fluxo para uma implementação deste cenário.
Amostras
Para uma discussão detalhada sobre a conversão entre JSON e XML, consulte este artigo.
Converter uma resposta
<XMLToJSON name="ConvertToJSON"> <Options> </Options> <OutputVariable>response</OutputVariable> <Source>response</Source> </XMLToJSON>
Esta configuração, que é a configuração mínima necessária para converter XML em JSON, usa uma mensagem de resposta formatada em XML como origem e, em seguida, cria uma mensagem formatada em JSON preenchida na OutputVariable response
. O Apigee usa automaticamente o conteúdo desta variável como a mensagem para o passo de processamento seguinte.
Referência do elemento
Seguem-se os elementos e os atributos que pode configurar nesta política.
<XMLToJSON async="false" continueOnError="false" enabled="true" name="XML-to-JSON-1"> <DisplayName>XML to JSON 1</DisplayName> <Source>response</Source> <OutputVariable>response</OutputVariable> <Options> <RecognizeNumber>true</RecognizeNumber> <RecognizeBoolean>true</RecognizeBoolean> <RecognizeNull>true</RecognizeNull> <NullValue>NULL</NullValue> <NamespaceBlockName>#namespaces</NamespaceBlockName> <DefaultNamespaceNodeName>&</DefaultNamespaceNodeName> <NamespaceSeparator>***</NamespaceSeparator> <TextAlwaysAsProperty>true</TextAlwaysAsProperty> <TextNodeName>TEXT</TextNodeName> <AttributeBlockName>FOO_BLOCK</AttributeBlockName> <AttributePrefix>BAR_</AttributePrefix> <OutputPrefix>PREFIX_</OutputPrefix> <OutputSuffix>_SUFFIX</OutputSuffix> <StripLevels>2</StripLevels> <TreatAsArray> <Path unwrap="true">teachers/teacher/studentnames/name</Path> </TreatAsArray> </Options> <!-- Use Options or Format, not both --> <Format>yahoo</Format> </XMLToJSON>
Atributos <XMLtoJSON>
<XMLtoJSON async="false" continueOnError="false" enabled="true" name="XML-to-JSON-1">
A tabela seguinte descreve os atributos comuns a todos os elementos principais de políticas:
Atributo | Descrição | Predefinição | Presença |
---|---|---|---|
name |
O nome interno da política. O valor do atributo Opcionalmente, use o elemento |
N/A | Obrigatória |
continueOnError |
Definido como Definido como |
falso | Opcional |
enabled |
Defina como Defina como |
verdadeiro | Opcional |
async |
Este atributo foi descontinuado. |
falso | Descontinuado |
Elemento <DisplayName>
Use em conjunto com o atributo name
para etiquetar a política no editor de proxy da IU de gestão com um nome diferente em linguagem natural.
<DisplayName>Policy Display Name</DisplayName>
Predefinição |
N/A Se omitir este elemento, é usado o valor do atributo |
---|---|
Presença | Opcional |
Tipo | String |
Elemento <Source>
A variável que especifica a mensagem XML que quer converter em JSON.
O cabeçalho Content-type HTTP da mensagem de origem tem de estar definido como
application/xml
. Caso contrário, a política não é aplicada.
Se <Source>
não estiver definido, é tratado como message
,
que é resolvido como request
quando a política está anexada a um fluxo de pedidos ou
response
quando a política está anexada a um fluxo de respostas.
Se a variável de origem não puder ser resolvida ou for resolvida para um tipo que não seja de mensagem, a política gera um erro.
<Source>response</Source>
Predefinição | O valor do elemento Source |
---|---|
Presença | Opcional |
Tipo | Mensagem |
Elemento <OutputVariable>
Especifica onde armazenar o resultado da conversão do formato XML para JSON. Normalmente, este elemento não está incluído na configuração da política.
O Apigee analisa o payload da mensagem XML especificada em Source
, converte-o em JSON, armazena o resultado no payload de OutputVariable
e define o cabeçalho Content-type HTTP da mensagem OutputVariable
como application/json
.
Se OutputVariable
não for especificado, o valor de Source
é usado
por predefinição. Por exemplo, se o valor de source
for response
, o valor de OutputVariable
é predefinido como response
.
<OutputVariable>response</OutputVariable>
Predefinição | A mensagem especificada em Source |
---|---|
Presença | Opcional |
Tipo | Mensagem |
<Options>
As opções dão-lhe controlo sobre a conversão de XML para JSON. Use o grupo <Options>
, que lhe permite adicionar definições de conversão específicas, ou o elemento <Format>
, que lhe permite fazer referência a um modelo de opções predefinidas. Não pode usar <Options>
e <Format>
ao mesmo tempo.
O campo <Options>
é obrigatório se o campo <Format>
não for usado.
Elemento <RecognizeNumber>
Se for verdadeiro, os campos numéricos na carga útil XML mantêm o formato original.
<RecognizeNumber>true</RecognizeNumber>
Considere o seguinte exemplo de XML:
<a> <b>100</b> <c>value</c> </a>
Se RecognizeNumber
for true
, a política converte-o no seguinte:
{ "a": { "b": 100, "c": "value" } }
Se RecognizeNumber
for false
, a política converte-o no seguinte:
{ "a": { "b": "100", "c": "value" } }
Predefinição | falso |
---|---|
Presença | Opcional |
Tipo | Booleano |
Elemento <RecognizeBoolean>
Permite que a conversão mantenha os valores booleanos verdadeiro/falso em vez de transformar os valores em strings.
<RecognizeBoolean>true</RecognizeBoolean>
Para o seguinte exemplo de XML:
<a> <b>true</b> <c>value</c> </a>
Se RecognizeBoolean
for true
, a política converte-o no seguinte:
{ "a": { "b": true, "c": "value" } }
Se RecognizeBoolean
for false
, a política converte-o no seguinte:
{ "a": { "b": "true", "c": "value" } }
Predefinição | falso |
---|---|
Presença | Opcional |
Tipo | Booleano |
Elemento <RecognizeNull>
Permite converter valores vazios em valores nulos.
<RecognizeNull>true</RecognizeNull>
Para o seguinte XML:
<a> <b></b> <c>value</c> </a>
Se RecognizeNull
for true
e não existir a opção NullValue
, este XML é convertido em:
{ "a": { "b": null, "c": "value" } }
Se RecognizeNull
for false
, este XML é convertido em:
{ "a": { "b": {}, "c": "value" } }
Predefinição | falso |
---|---|
Presença | Opcional |
Tipo | Booleano |
Elemento <NullValue>
Indica o valor para o qual os valores nulos reconhecidos na mensagem de origem devem ser convertidos. Por predefinição, o valor é null
. Esta opção só é eficaz se RecognizeNull
for verdadeira.
<NullValue>not-present</NullValue>
Para o seguinte XML:
<a> <b></b> <c>value</c> </a>
Se RecognizeNull
for true
e NullValue
não for especificado,
este XML é convertido em:
{ "a": { "b": null, "c": "value" } }
Se RecognizeNull
for true
e NullValue
for
not-present
, este XML é convertido em:
{ "a": { "b": "not-present", "c": "value" } }
Predefinição | null |
---|---|
Presença | Opcional |
Tipo | String |
Opções de espaço de nomes
Por predefinição, esta política omite os espaços de nomes XML no JSON gerado. Para especificar que os espaços de nomes no documento XML devem ser traduzidos para o JSON gerado, use estes elementos em conjunto.
<NamespaceBlockName>#namespaces</NamespaceBlockName> <DefaultNamespaceNodeName>&</DefaultNamespaceNodeName> <NamespaceSeparator>***</NamespaceSeparator>
Considere o seguinte exemplo de XML:
<a xmlns="http://ns.com" xmlns:ns1="http://ns1.com"> <ns1:b>value</ns1:b> </a>
Se NamespaceSeparator
não for especificado, é gerada a seguinte estrutura JSON:
{ "a": { "b": "value" } }
Se os elementos NamespaceBlockName
, DefaultNamespaceNodeName
e
NamespaceSeparator
forem especificados como #namespaces
, &
e
***
, respetivamente, é gerada a seguinte estrutura JSON:
{ "a": { "#namespaces": { "&": "http://ns.com", "ns1": "http://ns1.com" }, "ns1***b": "value" } }
Predefinição | Nenhum. Se <NamespaceBlockName> não for especificado, a política vai gerar JSON de saída que não se refere a nenhum espaço de nomes XML, independentemente de a mensagem de origem se referir a espaços de nomes. |
---|---|
Presença | Opcional No entanto, se especificar <NamespaceBlockName> , também tem de especificar os
outros dois elementos. |
Tipo | Strings |
Opções de texto
Use estes elementos em conjunto.
<TextAlwaysAsProperty>true|false</TextAlwaysAsProperty> <TextNodeName>TEXT</TextNodeName>
Quando a política encontra um elemento XML que contém apenas um único nó de texto como filho, a política traduz o conteúdo de texto desse elemento XML numa propriedade no hash JSON.
Quando a política encontra um elemento XML que contém vários filhos de conteúdo misto, estas opções permitem-lhe controlar o JSON de saída de quaisquer nós de texto filhos.
Por exemplo, considere esta configuração de política:
<XMLToJSON name='XMLToJSON-1'> <Options> <TextAlwaysAsProperty>???</TextAlwaysAsProperty> <TextNodeName>#text</TextNodeName> </Options> </XMLToJSON>
Para as entradas XML fornecidas, a política gera estas saídas, consoante TextAlwaysAsProperty
seja true
ou false
:
Introdução de XML | Saída JSON | |
---|---|---|
quando TextAlwaysAsProperty é false |
quando TextAlwaysAsProperty é true |
|
<a>value1</a> |
{ "a": "value1" } |
{ "a": { "#text": "value1" } } |
<a>value1 <b>value2</b> </a> |
{ "a": { "#text": "value1\n", "b": "value2" } } |
{ "a": { "#text": "value1\n", "b": { "#text": "value2" } } } |
Predefinição | <TextAlwaysAsProperty> : false<TextNodeName> : (string em branco) |
---|---|
Presença | Opcional |
Tipo | <TextAlwaysAsProperty> : booleano<TextNodeName> : string |
Opções de atributos
Estes elementos, em conjunto, permitem-lhe agrupar valores de atributos num bloco JSON e acrescentar prefixos aos nomes dos atributos.
<AttributeBlockName>FOO_BLOCK</AttributeBlockName> <AttributePrefix>BAR_</AttributePrefix>
Considere o seguinte exemplo de XML:
<a attrib1="value1" attrib2="value2"/>
Se ambos os atributos (AttributeBlockName
e AttributePrefix
) forem especificados conforme definido no exemplo de XML para JSON, é gerada a seguinte estrutura JSON:
{ "a": { "FOO_BLOCK": { "BAR_attrib1": "value1", "BAR_attrib2": "value2" } } }
Se apenas AttributeBlockName
for especificado, é gerada a seguinte estrutura JSON:
{ "a": { "FOO_BLOCK": { "attrib1": "value1", "attrib2": "value2" } } }
Se apenas AttributePrefix
for especificado, é gerada a seguinte estrutura JSON:
{ "a": { "BAR_attrib1": "value1", "BAR_attrib2": "value2" } }
Se não for especificado nenhum, é gerada a seguinte estrutura JSON:
{ "a": { "attrib1": "value1", "attrib2": "value2" } }
Predefinição | Nenhum. |
---|---|
Presença | Opcional |
Tipo | String |
Elementos <OutputPrefix> e <OutputSuffix>
Use estes elementos em conjunto para aplicar um prefixo e/ou um sufixo ao JSON gerado.
<OutputPrefix>PREFIX_</OutputPrefix> <OutputSuffix>_SUFFIX</OutputSuffix>
Considere o seguinte exemplo de XML:
<a>value</a>
Suponhamos que a configuração da política é a seguinte:
<XMLToJSON name='XMLToJSON-4'> <Options> <OutputPrefix>{ "result": </OutputPrefix> <OutputSuffix>}</OutputSuffix> </Options> </XMLToJSON>
É gerada a seguinte estrutura JSON:
{ "result": { "a": "value" } }
Pode omitir OutputPrefix
, OutputSuffix
ou ambos.
A utilização destes elementos pode gerar JSON inválido. Por exemplo, usando esta configuração de política:
<XMLToJSON name='XMLToJSON-4'> <Options> <OutputPrefix>PREFIX_</OutputPrefix> </Options> </XMLToJSON>
A política gera o seguinte, que não é um JSON válido:
PREFIX_{ "a" : "value" }
Se a configuração não especificar OutputPrefix
nem OutputSuffix
,
a política gera a seguinte estrutura JSON:
{ "a": "value" }
Predefinição | Veja exemplos acima. |
---|---|
Presença | Opcional |
Tipo | String |
Elemento <StripLevels>
<Options> <StripLevels>4</StripLevels> </Options>
Por vezes, as cargas úteis XML, como SOAP, têm muitos níveis principais que não quer incluir no JSON convertido. Segue-se um exemplo de resposta SOAP que contém vários níveis:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/Schemata-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <soap:Body> <GetCityWeatherByZIPResponse xmlns="http://ws.cdyne.com/WeatherWS/"> <GetCityWeatherByZIPResult> <State>CO</State> <City>Denver</City> <Description>Sunny</Description> <Temperature>62</Temperature> </GetCityWeatherByZIPResult> </GetCityWeatherByZIPResponse> </soap:Body> </soap:Envelope>
Existem 4 níveis antes de chegar ao nível de estado, cidade, descrição e temperatura.
Sem usar <StripLevels>
, a resposta JSON convertida teria o seguinte aspeto:
{ "Envelope" : { "Body" : { "GetCityWeatherByZIPResponse" : { "GetCityWeatherByZIPResult" : { "State" : "CO", "City" : "Denver", "Description" : "Sunny", "Temperature" : "62" } } } } }
Se quiser remover esses 4 primeiros níveis na resposta JSON, deve definir
<StripLevels>4</StripLevels>
, o que lhe daria o seguinte
JSON:
{ "State" : "CO", "City" : "Denver", "Description" : "Sunny", "Temperature" : "62" }
Pode remover níveis até ao primeiro elemento que contenha vários elementos secundários. O que é que isso significa? Vejamos um exemplo de JSON mais complexo:
{ "Envelope" : { "Body" : { "GetCityForecastByZIPResponse" : { "GetCityForecastByZIPResult" : { "ResponseText" : "City Found", "ForecastResult" : { "Forecast" : [ { "ProbabilityOfPrecipiation" : { "Nighttime" : "00", "Daytime" : 10 } ...
O nível 3 neste exemplo é GetCityForecastByZIPResponse
, que tem apenas um filho. Assim, se usasse <StripLevels>3</StripLevels>
(remover os
primeiros três níveis), o JSON teria o seguinte aspeto:
{ "GetCityForecastByZIPResult" : { "ResponseText" : "City Found", "ForecastResult" : { "Forecast" : [ { "ProbabilityOfPrecipiation" : { "Nighttime" : "00", "Daytime" : 10 } ...
Repare que GetCityForecastByZIPResult
tem vários filhos. Uma vez que é o primeiro elemento que contém vários filhos, pode remover este último nível através de <StripLevels>4</StripLevels>
, o que lhe dá o seguinte JSON:
{ "ResponseText" : "City Found", "ForecastResult" : { "Forecast" : [ { "ProbabilityOfPrecipiation" : { "Nighttime" : "00", "Daytime" : 10 } ...
Uma vez que o nível 4 é o primeiro nível que contém vários elementos secundários, não pode remover nenhum nível inferior a este. Se definir o nível de remoção como 5, 6, 7 e assim sucessivamente, continua a receber a resposta acima.
Predefinição | 0 (sem remoção de níveis) |
---|---|
Presença | Opcional |
Tipo | Número inteiro |
Elemento <TreatAsArray>/<Path>
<Options> <TreatAsArray> <Path unwrap="true">teachers/teacher/studentnames/name</Path> </TreatAsArray> </Options>
Esta combinação de elementos permite-lhe garantir que os valores de um documento XML são sempre traduzidos
para uma matriz JSON. Isto pode ser útil quando o número de elementos secundários varia para diferentes payloads. O comportamento predefinido do Apigee é converter vários elementos secundários com o mesmo nome num array JSON e elementos secundários únicos numa primitiva JSON. A opção TreatAsArray
permite-lhe garantir que os elementos secundários são sempre traduzidos para uma matriz JSON.
A utilização de TreatAsArray
pode melhorar a estrutura do código subsequente que processa a saída, porque os dados da matriz são devolvidos sempre da mesma forma. Por exemplo, a avaliação de um JSONPath de $.teachers.teacher.studentnames.name[0]
devolve o valor do primeiro nome de forma consistente, quer o XML original contenha um ou mais elementos name
.
Vamos recuar um pouco e analisar o comportamento predefinido de XML para JSON e, em seguida, explorar como
controlar o resultado através de <TreatAsArray>/<Path>
.
Quando um documento XML contém um elemento com várias ocorrências (o que pode acontecer quando o esquema XML especifica maxOccurs='unbounded'
para o elemento), a política de XML para JSON coloca automaticamente esses valores numa matriz. Por exemplo, o seguinte bloco XML
<teacher> <name>teacherA</name> <studentnames> <name>student1</name> <name>student2</name> </studentnames> </teacher>
… é convertido automaticamente no seguinte JSON sem configuração de política especial:
{ "teachers" : { "teacher" : { "name" : "teacherA", "studentnames" : { "name" : [ "student1", "student2" ] } } } }
Repare que os dois nomes dos alunos estão contidos numa matriz.
No entanto, se apenas um aluno aparecer no documento XML, a política de XML para JSON trata automaticamente o valor como uma única string e não como uma matriz de strings, conforme mostrado no exemplo seguinte:
{ "teachers" : { "teacher" : { "name" : "teacherA", "studentnames" : { "name" : "student1" } } } }
Nos exemplos anteriores, os dados semelhantes foram convertidos de forma diferente, uma vez numa matriz e outra numa única string. O elemento <TreatAsArray>/<Path>
permite-lhe controlar o resultado para garantir que os nomes dos alunos são sempre convertidos num conjunto, mesmo que exista apenas um valor. Para configurar esta opção, identifique o caminho para o elemento
cujos valores quer converter num conjunto, da seguinte forma:
<Options> <TreatAsArray> <Path>teachers/teacher/studentnames/name</Path> </TreatAsArray> </Options>
A configuração acima geraria o JSON da seguinte forma:
{ "teachers" : { "teacher" : { "name" : "teacherA", "studentnames" : { "name" : ["student1"] } } } }
Repare que student1 está agora num conjunto. Agora, independentemente de haver um ou vários alunos, pode obtê-los a partir de uma matriz JSON no seu código através do seguinte JSONPath:
$.teachers.teacher.studentnames.name[0]
O elemento <Path>
também tem um atributo unwrap
, explicado na
secção seguinte.
Predefinição | N/A |
---|---|
Presença | Opcional |
Tipo | String |
Atributos
<Options> <TreatAsArray> <Path unwrap="true">teachers/teacher/studentnames/name</Path> </TreatAsArray> </Options>
Atributo | Descrição | Presença | Tipo |
---|---|---|---|
anular união |
Predefinição: false Remove o elemento da saída JSON. Use esta opção para simplificar ou reduzir ("desembrulhar") o JSON, o que também reduz o JSONPath necessário para obter valores. Por exemplo,
em vez de Segue-se um exemplo de JSON: { "teachers" : { "teacher" : { "name" : "teacherA", "studentnames" : { "name" : [ "student1", "student2" ]}... Neste exemplo, pode argumentar que o elemento <TreatAsArray> <Path unwrap="true">teachers/teacher</Path> <Path unwrap="true">teachers/teacher/studentnames/name</Path> </TreatAsArray> O atributo { "teachers" : [{ "name" : "teacherA", "studentnames" : ["student1","student2"] }]... Tenha em atenção que, uma vez que o elemento |
Opcional | Booleano |
Para mais exemplos e uma explicação passo a passo da funcionalidade, consulte este artigo da comunidade do Google Cloud.
<Format>
O formato dá-lhe controlo sobre a conversão de XML para JSON. Introduza o nome de um modelo predefinido
que contenha uma combinação específica de elementos Options descritos neste tópico.
Os formatos predefinidos incluem: xml.com
, yahoo
, google
,
badgerFish
.
Use o elemento <Format>
ou o grupo <Options>
. Não pode usar
<Format>
e <Options>
ao mesmo tempo.
Seguem-se as definições de formato de cada modelo predefinido.
xml.com
<RecognizeNull>true</RecognizeNull> <TextNodeName>#text</TextNodeName> <AttributePrefix>@</AttributePrefix>
yahoo
<RecognizeNumber>true</RecognizeNumber> <TextNodeName>content</TextNodeName>
<TextNodeName>$t</TextNodeName> <NamespaceSeparator>$</NamespaceSeparator> <TextAlwaysAsProperty>true</TextAlwaysAsProperty>
badgerFish
<TextNodeName>$</TextNodeName> <TextAlwaysAsProperty>true</TextAlwaysAsProperty> <AttributePrefix>@</AttributePrefix> <NamespaceSeparator>:</NamespaceSeparator> <NamespaceBlockName>@xmlns</NamespaceBlockName> <DefaultNamespaceNodeName>$</DefaultNamespaceNodeName>
Sintaxe do elemento:
<Format>yahoo</Format>
Predefinição | (nenhum) |
---|---|
Valores válidos | Uma das seguintes opções:xml.com , yahoo , google , badgerFish |
Presença | Opcional, mas obrigatório se não usar <Options> . |
Tipo | String |
Esquemas
Referência de erro
Esta secção descreve os códigos de falha e as mensagens de erro devolvidas, bem como as variáveis de falha definidas pelo Apigee quando esta política aciona um erro. Estas informações são importantes para saber se está a desenvolver regras de falhas para tratar falhas. Para saber mais, consulte o artigo O que precisa de saber acerca dos erros de políticas e o artigo Processamento de falhas.
Erros de tempo de execução
Estes erros podem ocorrer quando a política é executada.
Código de falha | Estado de HTTP | Causa | Corrigir |
---|---|---|---|
steps.xmltojson.ExecutionFailed |
ExecutionFailed |
Este erro ocorre quando a carga útil de entrada (XML) está vazia ou o XML de entrada é inválido ou tem um formato incorreto. | build |
steps.xmltojson.InCompatibleTypes |
ExecutionFailed |
Este erro ocorre se o tipo da variável definida no elemento <Source> e no elemento <OutputVariable> não for o mesmo. É obrigatório que o tipo das variáveis contidas no elemento <Source> e no elemento <OutputVariable> corresponda.
|
build |
steps.xmltojson.InvalidSourceType |
ExecutionFailed |
Este erro ocorre se o tipo da variável usada para definir o elemento <Source> for inválido.Os tipos de variáveis válidos são message e string. |
build |
steps.xmltojson.OutputVariableIsNotAvailable |
ExecutionFailed |
Este erro ocorre se a variável especificada no elemento <Source> do XML para a política JSON for do tipo string e o elemento <OutputVariable> não estiver definido.
O elemento <OutputVariable> é obrigatório quando a variável definida no elemento <Source>
é do tipo string. |
build |
steps.xmltojson.SourceUnavailable |
ExecutionFailed |
Este erro ocorre se a variável message
especificada no elemento <Source> da política de XML para JSON for:
|
build |
Erros de implementação
Estes erros podem ocorrer quando implementa um proxy que contém esta política.
Nome do erro | Causa | Corrigir |
---|---|---|
EitherOptionOrFormat |
Se um dos elementos <Options> ou <Format> não for declarado no XML para a política JSON, a implementação do proxy de API falha.
|
build |
UnknownFormat |
Se o elemento <Format> na política de XML para JSON tiver um formato desconhecido definido, a implementação do proxy de API falha. Os formatos predefinidos incluem:
xml.com , yahoo , google e badgerFish .
|
build |
Variáveis de falha
Estas variáveis são definidas quando ocorre um erro de tempo de execução. Para mais informações, consulte o artigo O que precisa de saber acerca dos erros de políticas.
Variáveis | Onde | Exemplo |
---|---|---|
fault.name="fault_name" |
fault_name é o nome da falha, conforme indicado na tabela Erros de tempo de execução acima. O nome da falha é a última parte do código de falha. | fault.name = "SourceUnavailable" |
xmltojson.policy_name.failed |
policy_name é o nome especificado pelo utilizador da política que gerou a falha. | xmltojson.XMLtoJSON-1.failed = true |
Exemplo de resposta de erro
{ "fault": { "faultstring": "XMLToJSON[XMLtoJSON-1]: Source xyz is not available", "detail": { "errorcode": "steps.xml2json.SourceUnavailable" } } }
Exemplo de regra de falha
<faultrule name="VariableOfNonMsgType"></faultrule><FaultRule name="XML to JSON Faults"> <Step> <Name>AM-SourceUnavailableMessage</Name> <Condition>(fault.name Matches "SourceUnavailable") </Condition> </Step> <Step> <Name>AM-BadXML</Name> <Condition>(fault.name = "ExecutionFailed")</Condition> </Step> <Condition>(xmltojson.XMLtoJSON-1.failed = true) </Condition> </FaultRule>
Tópicos relacionados
JSON para XML: política JSONtoXML