Come utilizzare le proprietà in JavaCallout

Questa pagina si applica ad Apigee e Apigee hybrid.

Visualizza la documentazione di Apigee Edge.

Che cos'è un callout Java?

Se non hai mai utilizzato JavaCallouts, ti consigliamo di iniziare con l'articolo Come creare un callout Java.

Utilizzo delle proprietà nei criteri JavaCallout

Le proprietà ti consentono di specificare coppie nome/valore in un criterio JavaCallout a cui puoi accedere dal codice Java in fase di esecuzione. Devi specificare un valore di stringa letterale per ogni proprietà. Non puoi fare riferimento alle variabili di flusso in questo elemento.

Vediamo un semplice esempio di criterio JavaCallout che utilizza le proprietà. In questo esempio, creiamo un proxy che include un criterio JavaCallout. Il criterio utilizza l'elemento <Properties> per specificare una coppia nome/valore. Nel codice Java, recupero il valore e lo utilizzo per impostare un'intestazione di risposta.

Scarica il progetto

Per semplificare, puoi scaricare questo progetto dal repository api-platform-samples di Apigee su GitHub.

  1. Scarica o clona api-platform-samples sul tuo sistema.
  2. In un terminale o in un editor di codice a tua scelta, vai al progetto api-platform-samples/doc-samples/java-properties.

Il criterio JavaCallout

Il criterio utilizza l'elemento <Properties>. Questo elemento consente di specificare coppie di nome/valore. In fase di esecuzione, il codice Java può accedere ai valori delle proprietà specificate nel criterio, come vedremo a breve.

<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>

Il codice Java di esempio

Il codice Java di questo esempio mostra come recuperare una proprietà specificata nel criterio JavaCallout. Nel progetto di esempio, puoi trovare il codice sorgente in java-properties/callout/src/main/java/JavaProperties.java. Analizzeremo i passaggi per compilare e implementare questo codice più avanti in questo argomento.

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;
		}
	}
}

Compilare il codice con Maven

Il progetto è configurato in modo da poter compilare con Maven. Se vuoi utilizzare javac, includeremo anche un esempio.

  1. Assicurati di aver installato Maven:
    mvn -version
  2. Esegui lo script java-properties/buildsetup.sh. Questo script installa le dipendenze JAR richieste nel repository Maven locale.
  3. Vai alla directory java-properties/callout.
  4. Esegui Maven:
    mvn clean package
  5. Se vuoi, verifica che il file JAR edge-custom-policy-java-properties.jar sia stato copiato in java-properties/apiproxy/resources/java. Si tratta della posizione obbligatoria per i file JAR che vuoi eseguire il deployment con un proxy.

Compila con javac (facoltativo)

Se vuoi utilizzare javac per compilare il codice, puoi fare qualcosa di simile a quanto segue (dalla directory java-properties). I file JAR richiesti sono forniti nella directory java-properties/lib.

  1. cd a api-platform-samples/doc-samples/java-properties.
  2. Assicurati che javac sia presente nel percorso.

    javac -version
  3. Esegui il seguente comando 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 file JAR:

    jar -cvf edge-custom-policy-java-properties.jar ./com/apigeesample/JavaProperties.class
  5. Copia il file JAR nella directory apiproxy/resources/java. Questa è la posizione obbligatoria per i file JAR che vuoi eseguire il deployment con un proxy.
    cp edge-custom-policy-java-properties.jar apiproxy/resources/java

Esegui il deployment e chiama il proxy

Nella directory ./java-properties è fornito uno script di deployment. Tuttavia, prima di eseguire il programma, devi eseguire una breve configurazione.

  1. cd a api-platform-samples/doc-samples/java-properties
  2. Il modo più semplice per eseguire il deployment del proxy è raggrupparlo in un file ZIP e caricare il bundle del proxy in un ambiente della tua organizzazione Apigee. Consulta la sezione Creare un proxy API. Assicurati di utilizzare l'opzione Carica pacchetto proxy. Consulta anche Suggerimenti e trucchi per il caricamento del proxy API in un bundle di proxy nella community Apigee.
  3. Dopo aver eseguito il deployment del proxy, prova a chiamarlo:
    curl  https://$HOSTNAME/java-properties

    Il proxy restituisce l'intestazione: X-PROPERTY-HELLO: WORLD!. Ricorda che nel criterio abbiamo aggiunto una coppia nome/valore della proprietà "prop/WORLD!". Il criterio JavaCallout retrieving il valore "WORLD!" e lo imposta in un'intestazione denominata X-PROPERTY-HELLO:

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