Está a ver a documentação do Apigee e do Apigee Hybrid.
Ver documentação do
Apigee Edge.
XSLSourceMessageNotAvailable
Código de 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
Este erro ocorre se a variável de string ou de
message
especificada no elemento <Source>
da política XSLTransform for:
- Fora do âmbito (não disponível no fluxo específico onde a política está a ser executada)
- Não é possível resolver (não está definido)
Por exemplo, este erro ocorre se a política XSLTransform for suposta ser executada no fluxo de pedidos, mas o elemento <Source>
estiver definido para a variável de resposta, que não existe no fluxo de pedidos.
Diagnóstico
Identifique a política XSLTransform onde ocorreu o erro e o nome da variável que não está disponível. Pode encontrar ambos os itens no elemento
faultstring
da resposta de erro. Por exemplo, no seguintefaultstring
, 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 (passo n.º 1 acima). Por exemplo, a seguinte política XSLTransform especifica uma variável denominadaresponse
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>
Determinar se a variável usada no elemento
<Source>
está definida e disponível no fluxo no qual a política XSLTransform está a ser executada.Se a variável for:
- Fora do âmbito (não disponível no fluxo específico onde a política está a ser executada) ou
- Não é possível resolver (não está definido)
Então, essa é a causa do erro.
Por exemplo, suponhamos que a política XSLTransform apresentada acima se destina a ser executada no fluxo de pedidos. Recorde que a variável
response
é usada no elemento<Source>
da política de exemplo. A variávelresponse
só está disponível no fluxo de resposta.Uma vez que a variável
response
não existe no fluxo de pedidos, recebe o código de erro:steps.xsl.XSLSourceMessageNotAvailable
Resolução
Certifique-se de que a variável definida no elemento <Source>
da política XSLTransform com falha está definida e existe no fluxo onde a política é executada.
Para corrigir a política XSLTransform de exemplo apresentada acima, pode modificar o elemento <Source>
para usar a variável request
, porque existe no fluxo de pedidos:
<?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 de 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/com formato incorreto.
- A política XSLTransform falha/não consegue transformar o ficheiro XML de entrada com base nas regras de transformação fornecidas no ficheiro XSL. Podem existir muitas causas diferentes para a falha da política XSLTransform. O motivo da falha na mensagem de erro fornece mais informações sobre a causa. A tabela seguinte lista uma das causas desta falha (prefixo inválido) e é explicada com um exemplo.
Causa | Descrição |
---|---|
Payload XML de entrada indisponível | A carga útil XML de entrada não é transmitida ou está vazia. |
XML de entrada com formato incorreto | A carga útil XML de entrada tem um formato incorreto ou é inválida. |
Prefixo inválido | A carga útil XML de entrada tem um prefixo que não está definido no ficheiro XSL. |
Causa: o payload XML de entrada está indisponível
Este erro ocorre se o payload XML de entrada não for transmitido ou se o payload XML transmitido como parte do pedido da API ao proxy da API com a política XSLTransform 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
Identificar o ficheiro XSL que não pôde ser avaliado pela política de transformação XML e o motivo da falha. Se a carga útil XML de entrada não for transmitida ou estiver vazia, o motivo da falha indica que existe um fim prematuro do documento durante a análise. Pode encontrar todas estas informações no elemento
faultstring
da resposta de erro. Por exemplo, no seguintefaultstring
, o ficheiro 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 a carga útil XML não foi transmitida ou está vazia."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 a carga útil XML de entrada que foi transmitida como parte do pedido está vazia. Se o payload de entrada não for transmitido ou estiver vazio, essa é a causa do erro.
No pedido de exemplo abaixo, a carga útil do pedido (ou seja, o corpo do pedido) enviada pelo utilizador estava vazia.
Por exemplo:
curl -v "http://your_host_alias/v1/xsltransform" -H "Content-Type: application/xml"
Em que your_host_alias é um domínio público usado para aceder às suas APIs, conforme configurado na propriedade
virtualhosts.hostAliases
no ficheiro de substituições. Consulte Especifique substituições de configuração.Uma vez que o payload de entrada XML está vazio, recebe o seguinte 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
Certifique-se de que a entrada transmitida à política XSLTransform é uma carga útil XML válida e não está vazia.
Para corrigir o problema com a política XSLTransform de exemplo, transmita uma carga útil XML válida. Por exemplo:
Crie um ficheiro denominado
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 da API através de um comando curl da seguinte forma:
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 público usado para aceder às suas APIs, conforme configurado na propriedade
virtualhosts.hostAliases
no ficheiro de substituições. Consulte Especifique substituições de configuração.
Causa: XML de entrada com formato incorreto
A carga útil XML de entrada transmitida como parte do pedido da API para a política XSLTransform tem um formato incorreto ou é inválida.
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 ficheiro XSL que não pôde ser avaliado pela política de transformação XML e o motivo da falha. Se a carga útil XML de entrada estiver formatada incorretamente, o motivo da falha indica que existe um carater inesperado. Pode encontrar todas estas informações no elemento
faultstring
da resposta de erro. Por exemplo, no seguintefaultstring
, o ficheiro XSL éXSL-Transform.xsl
e o motivo da falha éUnexpected char while looking for open tag ('<') character
. Ou seja, o elemento "<
" está em falta na carga útil XML."faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Unexpected char while looking for open tag ('<') character\""
Examine a carga útil XML de entrada transmitida à política XSLTransform e verifique se tem conteúdo XML válido ou não. Se a carga útil de entrada não for XML válido, essa é a causa do erro.
No pedido de exemplo abaixo, a carga útil de entrada (ou seja, o corpo do pedido) que foi enviada pelo utilizador era inválida.
Por 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 público usado para aceder às suas APIs, conforme configurado na propriedade
virtualhosts.hostAliases
no ficheiro de substituições. Consulte Especifique substituições de configuração.Neste exemplo,
city.xml
é definido como:{ "City": "Bengaluru", "Name": "Apigee", "Pincode": "560016" }
Uma vez que o payload de entrada é JSON e não XML válido, recebe o seguinte erro:
"faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Unexpected char while looking for open tag ('<') character\""
Resolução
Certifique-se de que a entrada transmitida à política XSLTransform é uma carga útil XML válida e não está vazia.
Para corrigir o problema com a política XSLTransform de exemplo, transmita uma carga útil XML válida. Por exemplo:
Modifique o ficheiro
city.xml
para ter o conteúdo em XML, conforme apresentado 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 através do comando curl da seguinte forma:
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 público usado para aceder às suas APIs, conforme configurado na propriedade
virtualhosts.hostAliases
no ficheiro de substituições. Consulte Especifique substituições de configuração.
Causa: prefixo inválido
A carga útil XML de entrada transmitida à política XSLTransform tem um elemento que não está definido como um prefixo no ficheiro 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 ficheiro XSL que não pôde ser avaliado pela política de transformação XML e o motivo da falha. Neste caso, o motivo da falha indicaria que existe um prefixo não resolvido num número de linha específico na carga útil XML de entrada. Pode encontrar todas estas informações no elemento
faultstring
da resposta de erro. Por exemplo, no seguintefaultstring
, o ficheiro XSL éXSL-Transform.xsl
, o motivo da falha éUnresolved Prefix
e o número da 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 ficheiro XSL (identificado no passo n.º 1 acima) e a carga útil XML de entrada. Se o prefixo usado no número da linha (identificado no passo n.º 1 acima) da carga útil XML de entrada não existir no ficheiro XSL, essa é a causa do erro.
Seguem-se o XSL de exemplo e a carga útil XML correspondente que originam o 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 XML de entrada
<?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 apresentado acima contém um elemento
<Life:Books>
. Repare que o XSL não tem este prefixo. Em alternativa, tem o prefixo<xsl:text><Life></xsl:text>
. Por isso, recebe 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 a carga útil XML de entrada transmitida à política XSLTransform tem todos os formatos de elementos definidos como prefixos no ficheiro XSL usado na política.
Para corrigir o ficheiro XML de exemplo apresentado acima, pode modificar o ficheiro conforme apresentado 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>