Cómo usar las propiedades en un texto destacado de Java

Estás consultando la documentación de Apigee Edge.
Consulta la documentación de Apigee X.
Información

¿Qué es un texto destacado de Java?

Si es la primera vez que usas textos destacados de Java, te recomendamos comenzar con Crea un texto destacado de Java.

Usa propiedades en un texto destacado de Java

Las propiedades te permiten especificar pares nombre-valor en una política de texto destacado de Java a la que puedes acceder desde tu código Java en el entorno de ejecución. Debes especificar un valor de string literal para cada propiedad, no puedes hacer referencia a variables de flujo en este elemento.

Veamos un ejemplo simple de texto destacado de Java que usa propiedades. En este ejemplo, creamos un proxy con una política de texto destacado de Java. La política usa el elemento <Properties> para especificar un par nombre/valor. En el código de Java, recuperamos el valor y lo usamos para configurar un encabezado de respuesta.

Descarga el proyecto

Para simplificar el proceso, puedes descargar este proyecto del repositorio api-platform-samples de Apigee en GitHub.

  1. Descarga o clona api-platform-samples en tu sistema.
  2. En un editor de código o terminal de tu elección, ve al proyecto api-platform-samples/doc-samples/java-properties.

La política de texto destacado de Java

La política usa el elemento <Properties>. Este elemento te permite especificar pares nombre-valor. En el entorno de ejecución, tu código de Java puede acceder a los valores de las propiedades especificadas en la política, como veremos pronto.

<JavaCallout name="java-callout">         
    <ClassName>com.apigeesample.JavaProperties</ClassName>         
    <ResourceURL>java://edge-custom-policy-java-properties.jar</ResourceURL>         
    <Properties>              
        <Property name="prop">WORLD!</Property>             
    </Properties> 
</JavaCallout>

El código Java de muestra

El código Java de esta muestra te indica cómo recuperar una propiedad que se especificó en la política de texto destacado de Java. En el proyecto de muestra, puedes encontrar el código fuente en java-properties/callout/src/main/java/JavaProperties.java. Repasaremos los pasos para compilar y, luego, implementar este código más adelante en este tema.

package com.apigeesample;

import com.apigee.flow.execution.ExecutionContext;
import com.apigee.flow.execution.ExecutionResult;
import com.apigee.flow.execution.spi.Execution;
import com.apigee.flow.message.MessageContext;

import java.util.Map;

public class JavaProperties implements Execution {

	private Map <String,String> properties; // read-only

	public JavaProperties(Map <String,String> properties) {
	        this.properties = properties;
	}

	public ExecutionResult execute(MessageContext messageContext, ExecutionContext executionContext) {

		try {

		    messageContext.getMessage().setHeader("X-PROPERTY-HELLO", this.properties.get("prop"));

            return ExecutionResult.SUCCESS;

		} catch (Exception e) {
			return ExecutionResult.ABORT;
		}
	}
}

Compila tu código con Maven

El proyecto está configurado para que puedas compilar con Maven. Si quieres usar javac, también incluiremos un ejemplo.

  1. Asegúrate de tener Maven instalado:
    mvn -version
    
  2. Ejecuta la siguiente secuencia de comandos java-properties/buildsetup.sh. Esta secuencia de comandos instala las dependencias JAR necesarias en tu repositorio local de Maven.
  3. cd al directorio java-properties/callout.
  4. Ejecuta Maven:
    mvn clean package
    
  5. Si lo deseas, verifica que el archivo JAR edge-custom-policy-java-properties.jar se copió en java-properties/apiproxy/resources/java. Esta es la ubicación requerida para los archivos JAR que deseas implementar con un proxy.

Compila con javac (opcional)

Si quieres usar javac para compilar el código, puedes hacer algo similar a lo siguiente (desde el directorio java-properties). Los archivos JAR necesarios se proporcionan en el directorio java-properties/lib.

  1. cd a api-platform-samples/doc-samples/java-properties.
  2. Asegúrate de tener javac en tu ruta de acceso.

    javac -version
    
  3. Ejecuta el siguiente comando de javac:

    javac -d . -classpath ./lib/expressions-1.0.0.jar:./lib/message-flow-1.0.0.jar:. callout/src/main/java/JavaProperties.java
    
  4. Crea un archivo JAR:

    jar -cvf edge-custom-policy-java-properties.jar ./com/apigeesample/JavaProperties.class
  5. Copia el archivo JAR al directorio apiproxy/resources/java. Esta es la ubicación requerida para los archivos JAR que deseas implementar con un proxy.
    cp edge-custom-policy-java-properties.jar apiproxy/resources/java
    

Implementa y llama al proxy

Se proporciona una secuencia de comandos de implementación en el directorio ./java-properties. Pero antes de ejecutarla, debes hacer una configuración rápida.

  1. Ve a api-platform-samples/doc-samples/java-properties
  2. Si aún no lo hiciste, abre el archivo ../../setup/setenv.sh y edítalo como se indica con la información de tu cuenta de Apigee: tu nombre de usuario (la dirección de correo electrónico asociada con tu cuenta), el nombre de tu organización y el dominio que usas para realizar llamadas de administración de API. Por ejemplo, para la nube perimetral, el dominio es https://api.enterprise.apigee.com. Sin embargo, el dominio puede ser diferente si usas la nube privada perimetral.
  3. Guarda el archivo setenv.sh.
  4. Ejecuta la secuencia de comandos de implementación:
    ./deploy.sh
    
  5. Si la implementación se realiza correctamente, ejecuta la secuencia de comandos de invocación:
    ./invoke.sh
    

    La secuencia de comandos de invocación llama a un comando cURL similar al siguiente:

    curl  http://$org-$env.$api_domain/java-properties
    

    El proxy muestra el encabezado: X-PROPERTY-HELLO: WORLD!. Recuerda que, en la política, agregamos un par nombre/valor de propiedad "prop/WORLD!". El texto destacado de Java recupera el valor "WORLD!" y lo configura en un encabezado llamado X-PROPERTY-HELLO:

    messageContext.getMessage().setHeader("X-PROPERTY-HELLO", this.properties.get("prop"));