Esta é a documentação da Apigee e da Apigee híbrida.
Confira a documentação da Apigee Edge.
XSLSourceMessageNotAvailable
Código do erro
steps.xsl.XSLSourceMessageNotAvailable
Corpo da resposta de erro
{ "fault": { "faultstring": "response message is not available for XSL: policy_name", "detail": { "errorcode": "steps.xsl.XSLSourceMessageNotAvailable" } } }
Exemplo de mensagem de erro
{
"fault": {
"faultstring": "response message is not available for XSL: xslt",
"detail": {
"errorcode": "steps.xsl.XSLSourceMessageNotAvailable"
}
}
}
Causa
Esse erro ocorrerá se o
message
ou a variável da string especificada no elemento <Source>
da política XSLTransform forem:
- Fora do escopo (não disponível no fluxo específico em que a política está sendo executada)
- Não é possível resolver (não está definida)
Por exemplo, esse erro ocorrerá se a política XSLTransform precisar ser executada
no fluxo de solicitação, mas o elemento <Source>
estiver definido como a variável da resposta,
que não existe no fluxo de solicitação.
Diagnóstico
Identifique a política XSLTransform em que o erro ocorreu e o nome da variável que não está disponível. É possível encontrar os dois itens no elemento
faultstring
da resposta de erro. Por exemplo, nofaultstring
a seguir, o nome da política éxslt
e a variável éresponse
:faultstring": "response message is not available for XSL: xslt
No XML da política XSLTransform com falha, verifique se o nome da variável definida no elemento
<Source>
corresponde ao nome da variável identificado na string de falha (etapa 1 acima). Por exemplo, a seguinte política XSLTransform especifica uma variável chamadaresponse
no elemento<Source>
, que corresponde ao que está na string de falha:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <XSL async="false" continueOnError="false" enabled="true" name="xslt"> <DisplayName>xslt</DisplayName> <Properties/> <ResourceURL>xsl://XSL-Transform.xsl</ResourceURL> <Source>response</Source> <Parameters ignoreUnresolvedVariables="false"/> <OutputVariable/> </XSL>
Determine se a variável usada no elemento
<Source>
está definida e disponível no fluxo em que a política XSLTransform está sendo executada.Se a variável for:
- Fora do escopo (não disponível no fluxo específico em que a política está sendo executada) ou
- Não é possível resolver (não está definida)
essa é a causa do erro.
Como exemplo, digamos que a política XSLTransform mostrada acima seja executada no fluxo de solicitação. Lembre-se de que a variável
response
é usada no elemento<Source>
da política de exemplo. A variávelresponse
está disponível somente no fluxo de resposta.Como a variável
response
não existe no fluxo de solicitação, você recebe o código de erro:steps.xsl.XSLSourceMessageNotAvailable
Resolução
Verifique se a variável definida no elemento <Source>
da política XSLTransform
com falha está definida e existe no fluxo em que a política é executada.
Para corrigir o exemplo de política XSLTransform mostrado acima, modifique o
elemento <Source>
para usar a variável request
, porque ele existe no fluxo de
solicitações:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<XSL async="false" continueOnError="false" enabled="true" name="xslt">
<DisplayName>xslt</DisplayName>
<Properties/>
<ResourceURL>xsl://XSL-Transform.xsl</ResourceURL>
<Source>request</Source>
<Parameters ignoreUnresolvedVariables="false"/>
<OutputVariable/>
</XSL>
XSLEvaluationFailed
Código do erro
steps.xsl.XSLEvaluationFailed
Corpo da resposta de erro
{
"fault": {
"faultstring": "Evaluation of XSL <var>XSL_file_name</var> failed with reason: \"<var>reason_for_failure</var>",
"detail": {
"errorcode": "steps.xsl.XSLEvaluationFailed"
}
}
}
Exemplo de mensagem de erro
{
"fault": {
"faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Premature end of document while parsing at line 1(possibly around char 0)\"",
"detail": {
"errorcode": "steps.xsl.XSLEvaluationFailed"
}
}
}
Causas possíveis
Este erro ocorre se:
- o payload XML de entrada está indisponível/incorreto;
- a política de transformação XSL falha/não consegue transformar o arquivo XML de entrada com base nas regras de transformação fornecidas no arquivo XSL. Pode haver muitas causas diferentes para a falha da política de transformação XSL. O motivo da falha na mensagem de erro fornecerá mais informações sobre a causa. A tabela a seguir lista uma dessas causas para essa falha (prefixo inválido) e é explicada com um exemplo.
Causa | Descrição |
---|---|
Payload XML de entrada indisponível | O payload XML de entrada não é transmitido ou está vazio. |
XML de entrada incorreto | O payload XML de entrada está incorreto ou é inválido. |
Prefixo inválido | O payload XML de entrada tem um prefixo não definido no arquivo XSL. |
Causa: o payload XML de entrada está indisponível
Esse erro ocorre se o payload XML de entrada não for transmitido ou o que foi transmitido como parte da solicitação da API ao proxy da API com a política de transformação XSL estiver vazio.
Exemplo de mensagem de erro
{
"fault": {
"faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Premature end of document while parsing at line 1(possibly around char 0)\"",
"detail": {
"errorcode": "steps.xsl.XSLEvaluationFailed"
}
}
}
Diagnóstico
Identifique o arquivo XSL que não foi avaliado pela política de transformação XML e o motivo da falha. Se o payload XML de entrada não for transmitido ou estiver vazio, o motivo da falha indicará que há um fim antecipado documento em análise. Você encontra todas essas informações no elemento
faultstring
da resposta de erro. Por exemplo, nofaultstring
a seguir, o arquivo XSL éXSL-Transform.xsl
e o motivo da falha éPremature end of document while parsing at line 1 (possibly around char 0)
. Esse erro significa que o payload XML não foi transmitido ou está vazio."faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Premature end of document while parsing at line 1(possibly around char 0)\""
Determine se o payload XML de entrada que foi transmitido como parte da solicitação está vazio. Se o payload de entrada não for transmitido ou estiver vazio, essa será a causa do erro.
No exemplo de solicitação abaixo, o payload da solicitação (ou seja, o corpo da solicitação) que foi enviado pelo usuário estava vazio.
Exemplo:
curl -v "http://your_host_alias/v1/xsltransform" -H "Content-Type: application/xml"
Em que your_host_alias é um domínio aberto ao público usado para acessar suas APIs, conforme configurado na propriedade
virtualhosts.hostAliases
do arquivo de modificações. Consulte Especificar substituições de configuração.Como o payload de entrada XML está vazio, você recebe o erro:
"faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Premature end of document while parsing at line 1(possibly around char 0)\""
Resolução
Verifique se a entrada transmitida para a política de transformação XSL é um payload XML válido e se não está vazia.
Para corrigir o problema com a política de transformação XSL da amostra, transmita um payload XML válido. Exemplo:
Crie um arquivo chamado
city.xml
com o seguinte conteúdo:<?xml version="1.0" encoding="UTF-8"?> <root> <City>Bengaluru</City> <Name>Apigee</Name> <Pincode>560016</Pincode> </root>
Faça a chamada de API usando um comando curl da seguinte maneira:
curl -v "http://your_host_alias/v1/xsltransform" -H "Content-Type: application/xml" -X POST -d @city.xml
Em que your_host_alias é um domínio aberto ao público usado para acessar suas APIs, conforme configurado na propriedade
virtualhosts.hostAliases
do arquivo de modificações. Consulte Especificar substituições de configuração.
Causa: XML de entrada incorreto
O payload XML de entrada transmitido como parte da solicitação da API à política de transformação XSL está incorreto ou é inválido.
Exemplo de mensagem de erro
{
"fault": {
"faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Unexpected char while looking for open tag ('<') character\"",
"detail": {
"errorcode": "steps.xsl.XSLEvaluationFailed"
}
}
}
Diagnóstico
Identifique o arquivo XSL que não foi avaliado pela política de transformação XML e o motivo da falha. Se o payload XML de entrada estiver incorreto, o motivo da falha indicará que há um caractere inesperado. Você encontra todas essas informações no elemento
faultstring
da resposta de erro. Por exemplo, nofaultstring
a seguir, o arquivo XSL éXSL-Transform.xsl
e o motivo da falha éUnexpected char while looking for open tag ('<') character
. Ou seja, o "<
" está ausente no payload XML."faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Unexpected char while looking for open tag ('<') character\""
Examine o payload XML de entrada transmitido para a política de transformação XSL e veja se ele tem conteúdo XML válido ou não. Se o payload de entrada não for um XML válido, essa será a causa do erro.
Na solicitação de exemplo abaixo, o payload de entrada (ou seja, o corpo da solicitação) enviado pelo usuário era inválido.
Exemplo:
curl -v "http://your_host_alias/v1/xsltransform" -H "Content-Type: application/xml" -X POST -d @city.xml
Em que your_host_alias é um domínio aberto ao público usado para acessar suas APIs, conforme configurado na propriedade
virtualhosts.hostAliases
do arquivo de modificações. Consulte Especificar substituições de configuração.Neste exemplo,
city.xml
é definido como:{ "City": "Bengaluru", "Name": "Apigee", "Pincode": "560016" }
Como o payload de entrada é JSON e não é XML válido, você recebe o erro:
"faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Unexpected char while looking for open tag ('<') character\""
Resolução
Verifique se a entrada transmitida para a política de transformação XSL é um payload XML válido e não vazio.
Para corrigir o problema com a política de transformação XSL da amostra, transmita um payload XML válido. Exemplo:
Modifique o arquivo
city.xml
para ter o conteúdo em XML, conforme mostrado abaixo:<?xml version="1.0" encoding="UTF-8"?> <root> <City>Bengaluru</City> <Name>Apigee</Name> <Pincode>560016</Pincode> </root>
Faça a chamada da API usando o comando curl da seguinte maneira:
curl -v "http://your_host_alias/v1/xsltransform" -H "Content-Type: application/xml" -X POST -d @city.xml
Em que your_host_alias é um domínio aberto ao público usado para acessar suas APIs, conforme configurado na propriedade
virtualhosts.hostAliases
do arquivo de modificações. Consulte Especificar substituições de configuração.
Causa: prefixo inválido
O payload XML de entrada transmitido para a política de transformação XSL tem um elemento que não é definido como um prefixo no arquivo XSL especificado na política.
Exemplo de mensagem de erro
{
"fault": {
"faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Unresolved Prefix at line 1(possibly around char 270)\"",
"detail": {
"errorcode": "steps.xsl.XSLEvaluationFailed"
}
}
}
Diagnóstico
Identifique o arquivo XSL que não foi avaliado pela política de transformação XML e o motivo da falha. Nesse caso, o motivo da falha indicaria que há um prefixo não resolvido em um número de linha específico no payload XML de entrada. Você encontra todas essas informações no elemento
faultstring
da resposta de erro. Por exemplo, nofaultstring
a seguir, o arquivo XSL éXSL-Transform.xsl
, o motivo da falha éUnresolved Prefix
e o número de linha é1
."faultstring":"Evaluation of XSL XSL-Transform.xsl failed with reason: \"Unresolved Prefix at line 1(possibly around char 270)\""
Examine o conteúdo do arquivo XSL (identificado na etapa 1 acima) e o payload XML de entrada. Se o prefixo usado no número da linha (identificado na etapa 1 acima) do payload XML de entrada não existir no arquivo XSL, essa será a causa do erro.
Veja o exemplo de XSL e o payload XML correspondente que levam ao erro:
XSL-Transform.xsl <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="text"/> <xsl:variable name="newline"> <xsl:text> </xsl:text> </xsl:variable> <xsl:template match="/"> <xsl:text><Life></xsl:text> <xsl:value-of select="$newline"/> <xsl:text>Here are the odd-numbered items from the list:</xsl:text> <xsl:value-of select="$newline"/> <xsl:for-each select="list/listitem"> <xsl:if test="(position() mod 2) = 1"> <xsl:number format="1. "/> <xsl:value-of select="."/> <xsl:value-of select="$newline"/> </xsl:if> </xsl:for-each> <xsl:text></Life></xsl:text> </xsl:template> </xsl:stylesheet>
Payload de entrada XML
<?xml version="1.0"?> <Life:Books> <title>A few of my favorite albums</title> <listitem>Beat Crazy</listitem> <listitem>Here Come the Warm Jets</listitem> <listitem>Kind of Blue</listitem> <listitem>London Calling</listitem> </Life:Books>
O payload XML de exemplo mostrado acima contém um elemento
<Life:Books>
. Observe que o XSL não tem esse prefixo. Em vez disso, ele tem o prefixo como<xsl:text><Life></xsl:text>
. Portanto, você receberá o erro:"faultstring":"Evaluation of XSL XSL-Transform.xsl failed with reason: \"Unresolved Prefix at line 1(possibly around char 270)\""
Resolução
Certifique-se de que o payload XML de entrada transmitido à política de transformação XSL tenha todos os formatos de elemento definidos como prefixos no arquivo XSL usado na política.
Para corrigir o arquivo XML de exemplo acima, você pode modificar o arquivo conforme mostrado abaixo:
Payload XML de entrada atualizado
<?xml version="1.0"?>
<Life>
<title>A few of my favorite albums</title>
<listitem>Beat Crazy</listitem>
<listitem>Here Come the Warm Jets</listitem>
<listitem>Kind of Blue</listitem>
<listitem>London Calling</listitem>
</Life>