Política ServiceCallout

Estás viendo la documentación de Apigee Edge.
Ve a la Documentación de Apigee X.
información

Qué

La política de texto destacado de servicios te permite llamar a otro servicio desde tu flujo de proxy de API. Puedes hacer textos destacados para un servicio externo (como un extremo de servicio de RESTful externo) o servicios internos (como un proxy de API en la misma organización y entorno).

  • En un caso de uso externo, conviertes un texto destacado en una API de terceros que es externa a tu proxy. La respuesta de la API de terceros se analiza y se inserta en el mensaje de respuesta de la API, enriquece y “combina” los datos para los usuarios finales de la app. También puedes realizar una solicitud mediante la política de texto destacado del servicio en el flujo de solicitud y, luego, pasar la información en la respuesta al TargetEndpoint del proxy de API.
  • En otro caso de uso, debes llamar a un proxy que se encuentra en la misma organización y entorno como desde el que llamas. Por ejemplo, puede resultarte útil cuando tienes un proxy que ofrece alguna funcionalidad discreta de bajo nivel que consumirán uno o más proxies. Por ejemplo, un proxy que expone operaciones de creación, lectura, actualización y eliminación con un almacén de datos de backend puede ser el proxy de destino para varios otros proxies que exponen los datos a los clientes.

La política admite solicitudes a través de HTTP y HTTPS.

Ejemplos

Llamada local a un proxy interno

<LocalTargetConnection>
    <APIProxy>data-manager</APIProxy>
    <ProxyEndpoint>default</ProxyEndpoint>
</LocalTargetConnection>

En este ejemplo, se crea un texto destacado en un proxy de API local (es decir, uno en la misma organización y entorno) llamado data-manager, que especifica su extremo proxy cuyo nombre es default.

URL como una variable

<HTTPTargetConnection>
    <URL>http://example.com/{request.myResourcePath}</URL>
</HTTPTargetConnection>

En este ejemplo, se usa una variable en la URL para propagar de forma dinámica la URL de destino. La parte del protocolo de la URL, http://, no se puede especificar mediante una variable. Además, debes usar variables separadas para la parte del dominio de la URL y el resto de la URL.

Geocodificación y definición de solicitudes de Google

<ServiceCallout name="ServiceCallout-GeocodingRequest1">
    <DisplayName>Inline request message</DisplayName>
    <Request variable="authenticationRequest">
      <Set>
        <QueryParams>
          <QueryParam name="address">{request.queryparam.postalcode}</QueryParam>
          <QueryParam name="region">{request.queryparam.country}</QueryParam>
          <QueryParam name="sensor">false</QueryParam>
        </QueryParams>
      </Set>
    </Request>
    <Response>GeocodingResponse</Response>
    <Timeout>30000</Timeout>
    <HTTPTargetConnection>
      <URL>http://maps.googleapis.com/maps/api/geocode/json</URL>
    </HTTPTargetConnection>
</ServiceCallout>
http://maps.googleapis.com/maps/api/geocode/json

En lugar de usar una política como Asignar mensaje para crear el objeto de la solicitud, puedes definirlo directamente en la política de texto destacado del servicio. En este ejemplo, la política de texto destacado del servicio establece los valores de tres parámetros de consulta que se pasan al servicio externo. Puedes crear un mensaje de solicitud completo en la política de texto destacado del servicio que especifica una carga útil, un tipo de codificación, como application/xml, encabezados, parámetros de formulario, etcétera.

A continuación, se muestra otro ejemplo en el que se realiza la solicitud antes de que alcance la política de texto destacado del servicio.

<ServiceCallout name="ServiceCallout-GeocodingRequest2">
    <Request clearPayload="false" variable="GeocodingRequest"/>
    <Response>GeocodingResponse</Response>
    <Timeout>30000</Timeout>
    <HTTPTargetConnection>
      <URL>http://maps.googleapis.com/maps/api/geocode/json</URL>
    </HTTPTargetConnection>
</ServiceCallout>

El contenido del mensaje de la solicitud se extrae de una variable llamada GeocodingRequest (que se podría propagar, por ejemplo, a través de una política de AssignMessage). El mensaje de respuesta se asigna a la variable GeocodingResponse, en la que se encuentra disponible para que la analice una política de extracción de variables o el código personalizado escrito en JavaScript o Java. La política espera 30 segundos para la respuesta de la API de geocodificación de Google antes de que se agote el tiempo de espera.

Para ver un proxy de API de muestra completo que use este ejemplo de texto destacado del servicio, junto con las políticas de asignación de mensajes y extracción de variables, consulta Usa la composición de políticas.

Llama a los servidores de destino

<ServiceCallout async="false" continueOnError="false" enabled="true" name="service-callout">
    <DisplayName>service-callout</DisplayName>
    <Properties/>
    <Request clearPayload="true" variable="myRequest">
        <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    </Request>
    <Response>myResponse</Response>
    <HTTPTargetConnection>
        <LoadBalancer>
            <Algorithm>RoundRobin</Algorithm>
            <Server name="httpbin"/>
            <Server name="yahoo"/>
        </LoadBalancer>
        <Path>/get</Path>
    </HTTPTargetConnection>
</ServiceCallout>

Esta política usa el atributo LoadBalancer para llamar a los servidores de destino y realizar el balanceo de cargas entre ellos. En este ejemplo, la carga se distribuye a través de dos servidores de destino llamados “httpbin” y “yahoo”. Si deseas obtener información sobre cómo configurar los servidores de destino para tu proxy y configurar el balanceo de cargas, consulta Balanceo de cargas entre servidores de backend.


Acerca de la política de texto destacado del servicio

Hay muchas situaciones en las que puedes usar una política de texto destacado del servicio en tu proxy de API. Por ejemplo, puedes configurar un proxy de API para realizar llamadas a un servicio externo a fin de entregar datos de ubicación geográfica, opiniones de los clientes, elementos del catálogo minorista de un socio, etcétera.

Por lo general, un texto destacado se usa con otras dos políticas: asignar mensajes y extraer variables.

  • Solicitud: La asignación de mensaje propaga el mensaje de solicitud enviado al servicio remoto.
  • Respuesta: Las variables de extracción analizan la respuesta y extraen contenido específico.

La composición típica de la política de solicitud de texto destacado incluye las siguientes políticas:

  1. Política Asignar mensaje: Crea un mensaje de solicitud, propaga encabezados HTTP, parámetros de consulta, establece el verbo HTTP, etcétera.
  2. Política de Texto destacado de servicio: Hace referencia a un mensaje creado por la política de Asignar mensaje, define una URL de destino para la llamada externa y define un nombre para el objeto de respuesta que muestra el servicio de destino.

    Para mejorar el rendimiento, también puedes almacenar en caché las respuestas de texto destacado de servicio, como se describe en esta conversación de la comunidad de Apigee: https://community.apigee.com/questions/34110/how-can-i-store-the-results-of-the-servicecallout.html.
  3. Política de extracción de variables: Por lo general, define una expresión JSONPath o XPath que analiza el mensaje generado por el texto destacado del servicio. Luego, la política establece variables que contienen los valores analizados desde la respuesta de solicitud de oferta de servicio.

Consulta Usar la composición de políticas para ver un proxy de API de muestra completo que usa la política de texto destacado del servicio junto con las políticas de asignación de mensajes y variables de extracción.

Control de errores personalizados

Referencia del elemento

A continuación, se describen los elementos y los atributos que puedes configurar en esta política:

<ServiceCallout async="false" continueOnError="false" enabled="true" name="Service-Callout-1">
    <DisplayName>Custom label used in UI</DisplayName>
    <Request clearPayload="true" variable="myRequest">
        <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
        <Remove>
            <ReasonPhrase/>
            <StatusCode/>
            <Path/>
            <Version/>
            <Verb/>
         </Remove>
         <Copy>
            <ReasonPhrase/>
            <StatusCode/>
            <Path/>
            <Version/>
            <Verb/>
        </Copy>
        <Add>
            <Headers/>
            <QueryParams/>
            <FormParams/>
        </Add>
        <Set>
            <Headers/>
            <QueryParams/>
            <FormParams/>
            <Payload/>
            <ReasonPhrase/>
            <StatusCode/>
            <Path/>
            <Version/>
            <Verb/>
        </Set>
    </Request>
    <Response>calloutResponse</Response>
    <Timeout>30000</Timeout>
    <HTTPTargetConnection>
        <URL>http://example.com</URL>
        <LoadBalancer/>
        <SSLInfo/>
        <Properties/>
    </HTTPTargetConnection>
    <LocalTargetConnection>
        <APIProxy/>
        <ProxyEndpoint/>
        <Path/>
    </LocalTargetConnection>
</ServiceCallout>

Atributos de <ServiceCallout>

<ServiceCallout async="false" continueOnError="false" enabled="true" name="Service-Callout-1">

En la siguiente tabla, se describen los atributos que son comunes a todos los elementos principales de las políticas:

Atributo Descripción Predeterminado Presencia
name

El nombre interno de la política. El valor del atributo name puede contener letras, números, espacios, guiones, guiones bajos y puntos. Este valor no puede superar los 255 caracteres.

De forma opcional, usa el elemento <DisplayName> para etiquetar la política en el editor de proxy de la IU de administración con un nombre de lenguaje natural diferente.

N/A Obligatorio
continueOnError

Configúralo como false para mostrar un error cuando una política falla. Este es el comportamiento previsto para la mayoría de las políticas.

Configúralo como true para continuar con la ejecución del flujo incluso después de que una política falle.

falso Opcional
enabled

Configúralo como true para aplicar la política.

Configúralo como false para desactivar la política. La política no se aplicará incluso si permanece adjunta a un flujo.

true Opcional
async

Este atributo dejó de estar disponible.

falso Obsoleta

Elemento <DisplayName>

Se usan además del atributo name para etiquetar la política en el editor de proxy de la IU de administración con un nombre de lenguaje natural diferente.

<DisplayName>Policy Display Name</DisplayName>
Predeterminada

N/A

Si omites este elemento, se usa el valor del atributo name de la política.

Presencia Opcional
Tipo String

Elemento <Request>

Especifica la variable que contiene el mensaje de la solicitud que se envía desde el proxy de API al otro servicio. La variable se puede crear mediante una política anterior en el flujo, o puedes crearla intercalada en la política de texto destacado del servicio.

<Request clearPayload="true" variable="myRequest">
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    <Remove>
        <ReasonPhrase/>
        <StatusCode/>
        <Path/>
        <Version/>
        <Verb/>
    </Remove>
    <Copy>
        <ReasonPhrase/>
        <StatusCode/>
        <Path/>
        <Version/>
        <Verb/>
    </Copy>
    <Add>
        <Headers/>
        <QueryParams/>
        <FormParams/>
    </Add>
    <Set>
        <Headers/>
        <QueryParams/>
        <FormParams/>
        <Payload/>
        <ReasonPhrase/>
        <StatusCode/>
        <Path/>
        <Version/>
        <Verb/>
    </Set>
</Request>

La sintaxis de las etiquetas <Remove>, <Copy>, <Add> y <Set> es igual que para la política de asignación de mensajes.

La política muestra un error si el mensaje de la solicitud no se puede resolver o es de un tipo de mensaje de solicitud no válido.

En el ejemplo más simple, pasas una variable que contiene el mensaje de la solicitud que se propagó antes en el flujo del proxy de API:

<Request clearPayload="true" variable="myRequest"/>

También puedes propagar el mensaje de solicitud enviado al servicio externo en la política de texto destacado del servicio:

<Request>
  <Set>
    <Headers>
      <Header name="Accept">application/json</Header>
    </Headers>
    <Verb>POST</Verb>
    <Payload contentType="application/json">{"message":"my test message"}</Payload>
  </Set>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
</Request>
Valor predeterminado Si omites el elemento de la solicitud o cualquiera de sus atributos, Edge asigna los siguientes valores predeterminados:

<Request clearPayload="true" variable="servicecallout.request"/>

Veamos qué significan estos valores predeterminados. Primero, clearPayload=true significa que se crea un objeto de solicitud nuevo cada vez que se ejecuta la política ServiceCallout. Esto significa que la solicitud y la ruta del URI de solicitud nunca se reutilizan. En segundo lugar, el nombre de variable predeterminado, servicecallout.request, es un nombre reservado que se asigna a la solicitud si no proporcionas un nombre.

Es importante que sepas este nombre predeterminado si usas enmascarado de datos, si omites el nombre de la variable, debes agregar servicecallout.request a la configuración de la máscara. Por ejemplo, si quieres enmascarar el encabezado de autorización para que no aparezca en las sesiones de Trace, agrega lo siguiente a tu configuración de enmascaramiento a fin de capturar el nombre predeterminado:

servicecallout.request.header.Authorization.

Presencia Opcional.
Tipo N/A

Atributos

Atributo Descripción Predeterminado Presencia
variable

Nombre de la variable que contendrá el mensaje de la solicitud.

servicecallout.request Opcional
clearPayload

Si es true, la variable que contiene el mensaje de solicitud se borra después de que la solicitud se envía al destino HTTP para liberar la memoria que usa el mensaje de solicitud.

Configura la opción clearPayload como falsa solo si el mensaje de solicitud es obligatorio después de que se ejecute el texto destacado del servicio.

true Opcional

Elemento <Request>/<IgnoreUnresolvedVariables>

Cuando se establece en true, la política ignora cualquier error de variable sin resolver en la solicitud.

<Request clearPayload="true" variable="myRequest">
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
</Request> 
Valor predeterminado falso
Presencia Opcional
Tipo Booleano

Elemento <Response>

Incluye este elemento cuando la lógica del proxy de API requiera la respuesta de la llamada remota para su posterior procesamiento.

Cuando este elemento está presente, especifica el nombre de la variable que contendrá el mensaje de respuesta recibido del servicio externo. La respuesta del objetivo se asigna a la variable solo cuando la política lee la respuesta de forma correcta. Si por algún motivo la llamada remota falla, la política muestra un error.

Si se omite este elemento, el proxy de API no espera una respuesta. La ejecución del flujo del proxy de API continúa con los pasos de flujo posteriores. Además, a fin de afirmar lo obvio, sin un elemento Response, la respuesta del destino no está disponible para su procesamiento en pasos posteriores, y no hay forma de que el flujo del proxy detecte una falla en la llamada remota. Un uso común a fin de omitir el elemento Response cuando se usa ServiceCallout: para registrar mensajes en un sistema externo.

 <Response>calloutResponse</Response> 
Valor predeterminado NA
Presencia Opcional
Tipo String

Elemento <Timeout>

El tiempo en milisegundos que la política de texto destacado del servicio espera una respuesta del objetivo. No puedes establecer este valor de forma dinámica en el entorno de ejecución. Si el texto destacado del servicio alcanza un tiempo de espera, se muestra un HTTP 500, la política falla y el proxy de API entra en un estado de error, como se describe en Maneja las fallas.

<Timeout>30000</Timeout>
Valor predeterminado 55,000 milisegundos (55 segundos), la configuración de tiempo de espera de HTTP predeterminada para Apigee Perimetrales
Presencia Opcional
Tipo Entero

Elemento <HTTPTargetConnection>

Proporciona detalles del transporte, como las URL, TLS/SSL y las propiedades de HTTP. Consulta la referencia de configuración de <TargetEndpoint>.

<HTTPTargetConnection>
    <URL>http://example.com</URL>
    <LoadBalancer/>
    <SSLInfo/>
    <Properties/>
</HTTPTargetConnection>
Predeterminada N/A
Presencia Obligatorio
Tipo N/A

Elemento <HTTPTargetConnection>/<URL>

La URL del servicio a la que se llamará:

<HTTPTargetConnection>
    <URL>http://example.com</URL>
</HTTPTargetConnection>

Puedes proporcionar parte de la URL de forma dinámica con una variable. Sin embargo, la parte del protocolo de la URL, http://, no se puede especificar mediante una variable. En el siguiente ejemplo, usarás una variable para especificar el valor de un parámetro de consulta:

<URL>http://example.com/forecastrss?w=${request.header.woeid}</URL>

O bien, configura una parte de la ruta de URL con una variable:

<URL>http://example.com/{request.resourcePath}?w=${request.header.woeid}</URL>

Si quieres usar una variable a fin de especificar el dominio y el puerto de la URL, usa una variable solo para el dominio y el puerto, y una segunda variable para cualquier otra parte de la URL:

<URL>http://{request.dom_port}/{request.resourcePath}</URL>
Valor predeterminado N/A
Presencia Obligatorio
Tipo String

Elemento <HTTPTargetConnection>/<SSLInfo>

La configuración de TLS/SSL para el servicio de backend Para obtener ayuda con la configuración de TLS/SSL, consulta Configura TLS desde el extremo hasta el backend (en la nube y en la nube privada) y “Configuración de TargetEndpoint en TLS/SSL” en la referencia sobre la configuración del proxy de la API.

<HTTPTargetConnection>
    <URL>https://example.com</URL>
    <SSLInfo>
        <Enabled>true</Enabled>
        <ClientAuthEnabled>true</ClientAuthEnabled>
        <KeyStore>ref://mykeystoreref</KeyStore>  ## Use of a reference is recommended
        <KeyAlias>myKey</KeyAlias>
        <TrustStore>myTruststore</TrustStore>
        <Ciphers/>
        <Protocols/>
    </SSLInfo>
</HTTPTargetConnection>
Valor predeterminado N/A
Presencia Opcional
Tipo N/A

Elemento <HTTPTargetConnection>/<Properties>

Propiedades de transporte HTTP al servicio de backend. Para obtener más información, consulta Referencia de propiedades de extremos.

<HTTPTargetConnection>
    <URL>http://example.com</URL>
    <Properties>
        <Property name="allow.http10">true</Property>
        <Property name="request.retain.headers">
          User-Agent,Referer,Accept-Language
        </Property>
    </Properties>
</HTTPTargetConnection>
Valor predeterminado N/A
Presencia Opcional
Tipo N/A

Elemento <HTTPTargetConnection>/<LoadBalancer>

Llamar a uno o más servidores de destino y realiza el balanceo de cargas en ellos. Consulta la muestra Llamar a servidores de destino en la sección Muestras. También consulta Balanceo de cargas entre servidores de backend. También consulta esta publicación de la comunidad en la que se analizan las formas de llamar a los servidores de destino desde la política de texto destacado del servicio y el uso de las reglas de enrutamiento.

<HTTPTargetConnection> <LoadBalancer> <Algorithm>RoundRobin</Algorithm> <Server name="httpbin"/> <Server name="yahoo"/> </LoadBalancer> <Path>/get</Path> </HTTPTargetConnection>
Predeterminada N/A
Presencia Opcional
Tipo N/A

Elemento <LocalTargetConnection>

Especifica un proxy local, es decir, un proxy en la misma organización y entorno, como el objetivo de los textos destacados del servicio.

Para especificar aún más el destino, usa los elementos <APIProxy> y <ProxyEndpoint>, o el elemento <Path>.

<LocalTargetConnection>
   <APIProxy/>
   <ProxyEndpoint/>
   <Path/>
</LocalTargetConnection>
Valor predeterminado N/A
Presencia Obligatorio
Tipo N/A

Elemento <LocalTargetConnection>/<APIProxy>

El nombre de un proxy de API que es el destino de una llamada local. El proxy debe estar en la misma organización y entorno que el proxy que realiza la llamada.

<LocalTargetConnection>
   <APIProxy>data-manager</APIProxy>
   <ProxyEndpoint>default</ProxyEndpoint>
</LocalTargetConnection>

Junto con el elemento <APIProxy>, incluye el elemento <ProxyEndpoint> a fin de especificar el nombre del extremo del proxy que se debe orientar para la llamada.

<LocalTargetConnection>
   <APIProxy/>
   <ProxyEndpoint/>
</LocalTargetConnection> 
Valor predeterminado N/A
Presencia Obligatorio
Tipo String

Elemento <LocalTargetConnection>/<ProxyEndpoint>

El nombre del extremo del proxy que debe ser el objetivo de las llamadas. Este es un extremo proxy en el proxy de API especificado con el elemento <APIProxy>.

<LocalTargetConnection>
   <APIProxy>data-manager</APIProxy>
   <ProxyEndpoint>default</ProxyEndpoint>
</LocalTargetConnection>
Valor predeterminado N/A
Presencia Opcional
Tipo N/A

Elemento <LocalTargetConnection>/<Path>

Una ruta de acceso al extremo que se orientará. El extremo debe hacer referencia a un proxy en la misma organización y entorno que el proxy que realiza la llamada.

Usa esto en lugar de un par <APIProxy>/<ProxyEndpoint> cuando no lo sepas o no puedas confiar en el nombre de proxy. La ruta podría ser un objetivo confiable.

<LocalTargetConnection>
   <Path>/data-manager</Path>
</LocalTargetConnection>
Valor predeterminado N/A
Presencia Opcional
Tipo N/A

Esquemas

Variables de flujo

Las variables de flujo habilitan el comportamiento dinámico de las políticas y los flujos en el entorno de ejecución, en función de los encabezados HTTP, el contenido de los mensajes o el contexto del flujo. Las siguientes variables predefinidas de flujo están disponibles después de que se ejecuta una política de texto destacado del servicio. Para obtener más información sobre las variables de flujo, consulta Referencia de las variables.

Los textos destacados del servicio tienen sus propias solicitudes y respuestas, y puedes acceder a esos datos a través de variables. Debido a que el mensaje principal usa los prefijos de variable request.* y response.*, usa los prefijos myrequest.* y calloutResponse.* (los valores predeterminados en la configuración de texto destacado del servicio) a fin de obtener datos de mensajes específicos para la solicitud de oferta. En el primer ejemplo de la siguiente tabla, se muestra cómo debes obtener los encabezados HTTP en el texto destacado del servicio.

Variable Descripción

A continuación, se muestra un ejemplo de cómo obtener los encabezados de respuesta y solicitud del texto destacado del servicio, de manera similar a como obtendrías los encabezados de la solicitud y la respuesta principal.

calloutResponse.header.HeaderName

myRequest.header.HeaderName

En el ejemplo anterior, calloutResponse es el nombre de la variable para la respuesta en el texto destacado del servicio, y myRequest es el nombre de variable de la solicitud. Por ejemplo:

calloutResponse.header.Content-Length

Muestra el encabezado Content-Length de la respuesta de texto destacado del servicio.

Alcance: Desde el desvío del texto destacado del servicio
Tipo: String
Permiso: Lectura y escritura

Un encabezado de mensaje en la solicitud o respuesta del texto destacado del servicio. Por ejemplo, si la orientación del proxy de API es http://example.com y la orientación del texto destacado del servicio es http://mocktarget.apigee.net, estas variables son los encabezados del texto destacado para http://mocktarget.apigee.net.

servicecallout.requesturi

Alcance: Desde el inicio del texto destacado del servicio
Tipo: String
Permiso: Lectura y escritura

El URI de TargetEndpoint para una política ServiceCallout. El URI es la URL de TargetEndpoint sin la especificación del protocolo y el dominio.

servicecallout.{policy-name}.target.url

Alcance: Desde el inicio del texto destacado del servicio
Tipo: String
Permiso: Lectura y escritura

La URL de destino para un texto destacado del servicio.

calloutResponse.content

En la que calloutResponse es el nombre de la variable <Response> en la configuración de texto destacado del servicio.

Alcance: Desde la respuesta del texto destacado de servicio
Tipo: String
Permiso: Lectura y escritura

El cuerpo de la respuesta del texto destacado del servicio

servicecallout.{policy-name}.expectedcn

Alcance: Desde el inicio del texto destacado del servicio
Tipo: String
Permiso: Lectura y escritura

El nombre común esperado del TargetEndpoint, al que se hace referencia en una política ServiceCallout. Esto es significativo solo cuando el TargetEndpoint hace referencia a un extremo TLS/SSL.

servicecallout.{policy-name}.failed

Alcance: Desde la respuesta del texto destacado de servicio
Tipo: Booleano
Permiso: Lectura y escritura.

Booleano que indica si la política se realizó de forma correcta, si es falsa, falló o si es verdadera.

Errores

This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.

Runtime errors

These errors can occur when the policy executes.

Fault code HTTP status Cause Fix
steps.servicecallout.ExecutionFailed 500

This error can occur when:

  • the policy is asked to handle input that is malformed or otherwise invalid.
  • the backend target service returns an error status (by default, 4xx or 5xx).
steps.servicecallout.RequestVariableNotMessageType 500 The Request variable specified in the policy is not of type Message. For example, if it's a string or other non-message type, you'll see this error.
steps.servicecallout.RequestVariableNotRequestMessageType 500 The Request variable specified in the policy is not of type Request Message. For example, if it's a Response type, you'll see this error.

Deployment errors

These errors can occur when you deploy a proxy containing this policy.

Error name Cause Fix
URLMissing The <URL> element inside <HTTPTargetConnection> is missing or empty.
ConnectionInfoMissing This error happens if the policy does not have an <HTTPTargetConnection> or <LocalTargetConnection> element.
InvalidTimeoutValue This error happens if the <Timeout> value is negative or zero.

Fault variables

These variables are set when a runtime error occurs. For more information, see What you need to know about policy errors.

Variables Where Example
fault.name="fault_name" fault_name is the name of the fault, as listed in the Runtime errors table above. The fault name is the last part of the fault code. fault.name = "RequestVariableNotMessageType"
servicecallout.policy_name.failed policy_name is the user-specified name of the policy that threw the fault. servicecallout.SC-GetUserData.failed = true

Example error response

{  
   "fault":{  
      "detail":{  
         "errorcode":"steps.servicecallout.RequestVariableNotMessageType"
      },
      "faultstring":"ServiceCallout[ServiceCalloutGetMockResponse]: 
            request variable data_str value is not of type Message"
   }
}

Example fault rule

<faultrule name="VariableOfNonMsgType"></faultrule><FaultRule name="RequestVariableNotMessageType">
    <Step>
        <Name>AM-RequestVariableNotMessageType</Name>
    </Step>
    <Condition>(fault.name = "RequestVariableNotMessageType")</Condition>
</FaultRule>

Temas relacionados