Resolução de problemas de erros de tempo de execução da política XSLTransform

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

  1. 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 seguinte faultstring, 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 (passo n.º 1 acima). Por exemplo, a seguinte política XSLTransform especifica uma variável denominada 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. 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.

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

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

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

Diagnóstico

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

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

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