Solução de problemas de erro de ambiente de execução da política de transformação XSL

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

  1. 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, no faultstring a seguir, o nome da política é xslt e a variável é response:

    faultstring": "response message is not available for XSL: xslt
    
  2. 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 chamada response 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>
    
  3. 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.

  4. 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ável response 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

  1. 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, no faultstring 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)\""
    
  2. 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:

  1. 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>
    
  2. 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 ('&lt;') character\"",
        "detail": {
            "errorcode": "steps.xsl.XSLEvaluationFailed"
        }
    }
}

Diagnóstico

  1. 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, no faultstring a seguir, o arquivo XSL é XSL-Transform.xsl e o motivo da falha é Unexpected char while looking for open tag ('&lt;') 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 ('&lt;') character\""
    
  2. 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 ('&lt;') 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:

  1. 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>
    
  2. 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

  1. 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, no faultstring 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)\""
    
  2. 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>&lt;Life&gt;</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>&lt;/Life&gt;</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>&lt;Life&gt;</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>