Attribute in einem Java-Callout verwenden

<ph type="x-smartling-placeholder"></ph> Sie sehen die Dokumentation zu Apigee Edge.
Gehen Sie zur Apigee X-Dokumentation.
Weitere Informationen

Was ist ein Java-Callout?

Wenn Sie noch nicht mit Java-Callouts vertraut sind, sollten Sie mit dem Erstellen einer Java-Erweiterung beginnen.

Attribute in einem Java-Callout verwenden

Mit Attributen können Sie Namen/Wert-Paare in einer Java-Callout-Richtlinie angeben, auf die Sie von Ihrem Java-Code zur Laufzeit zugreifen können. Sie müssen für jedes Attribut einen literalen Stringwert angeben. Sie können in diesem Element nicht auf Ablaufvariablen verweisen.

Im Folgenden finden Sie ein einfaches Java-Callout-Beispiel, das Attribute verwendet. In diesem Beispiel erstellen wir einen Proxy mit einer Java-Callout-Richtlinie. Die Richtlinie verwendet das <Properties>-Element, um ein Name/Wert-Paar anzugeben. Im Java-Code rufen wir den Wert ab und verwenden ihn zum Festlegen eines Antwort-Headers.

Projekt herunterladen

Sie können dieses Projekt aus dem Apigee-Repository api-platform-samples auf GitHub herunterladen.

  1. Laden Sie api-platform-samples in Ihr System herunter oder klonen Sie es.
  2. Wechseln Sie in einem Terminal oder Codeeditor Ihrer Wahl zum api-platform-samples/doc-samples/java-properties-Projekt.

Java-Callout-Richtlinie

Die Richtlinie verwendet das <Properties>-Element. Mit diesem Element können Sie Name/Wert-Paare angeben. Zur Laufzeit kann Ihr Java-Code auf die Werte der in der Richtlinie angegebenen Attribute zugreifen, wie wir gleich sehen werden.

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

Java-Beispielcode

Der Java-Code für dieses Beispiel zeigt, wie Sie eine Eigenschaft abrufen, die in der Java-Callout-Richtlinie angegeben ist. Im Beispielprojekt finden Sie den Quellcode in java-properties/callout/src/main/java/JavaProperties.java. Die Schritte zum Kompilieren und Bereitstellen dieses Codes werden später in diesem Thema beschrieben.

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

Code mit Maven kompilieren

Das Projekt ist so eingerichtet, dass Sie es mit Maven kompilieren können. Wenn Sie javac verwenden möchten, fügen wir außerdem ein Beispiel hinzu.

  1. Maven muss installiert sein:
    mvn -version
    
  2. Führen Sie das java-properties/buildsetup.sh-Skript aus: Mit diesem Skript werden die erforderlichen JAR-Abhängigkeiten in Ihrem lokalen Maven-Repository installiert.
  3. cd in das java-properties/callout-Verzeichnis.
  4. Führen Sie Maven aus:
    mvn clean package
    
  5. Prüfen Sie bei Bedarf, ob die edge-custom-policy-java-properties.jar-JAR-Datei in java-properties/apiproxy/resources/java kopiert wurde. Dies ist der erforderliche Speicherort für JAR-Dateien, die Sie mit einem Proxy bereitstellen möchten.

Mit Javac komplieren (optional)

Wenn Sie javac verwenden möchten, um den Code zu kompilieren, können Sie beispielsweise Folgendes ausführen (aus dem java-properties-Verzeichnis). Die erforderlichen JAR-Dateien werden im java-properties/lib-Verzeichnis für Sie bereitgestellt.

  1. cd in api-platform-samples/doc-samples/java-properties.
  2. Achten Sie darauf, dass Ihr Pfad javac enthält.

    javac -version
    
  3. Führen Sie den folgenden javac-Befehl aus:

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

    jar -cvf edge-custom-policy-java-properties.jar ./com/apigeesample/JavaProperties.class
  5. Kopieren Sie die JAR-Datei in das Verzeichnis apiproxy/resources/java. Dies ist der erforderliche Speicherort für JAR-Dateien, die Sie mit einem Proxy bereitstellen möchten.
    cp edge-custom-policy-java-properties.jar apiproxy/resources/java
    

Proxy bereitstellen und aufrufen

Ein Bereitstellungsskript wird im ./java-properties-Verzeichnis bereitgestellt. Bevor Sie es ausführen, müssen Sie jedoch eine schnelle Einrichtung vornehmen.

  1. CD zu api-platform-samples/doc-samples/java-properties
  2. Öffnen Sie die Datei ../../setup/setenv.sh und bearbeiten Sie sie, falls Sie das noch nicht getan haben. wie mit Ihren Apigee-Kontoinformationen angegeben: Ihr Nutzername (die E-Mail-Adresse) die mit Ihrem Konto verknüpft sind), den Namen Ihrer Organisation und die Domain, die Sie zur Erstellung der API Anrufverwaltung. Bei Edge Cloud ist die Domain beispielsweise https://api.enterprise.apigee.com; Ihre Domain kann jedoch anders sein, wenn Sie mit Edge Private Cloud.
  3. Speichern Sie die Datei setenv.sh.
  4. Führen Sie das Bereitstellungsskript aus:
    ./deploy.sh
    
  5. Wenn die Bereitstellung erfolgreich ist, führen Sie das Aufrufskript aus:
    ./invoke.sh
    

    Das Aufrufskript ruft einen cURL-Befehl auf, der so aussieht:

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

    Der Proxy gibt den X-PROPERTY-HELLO: WORLD!-Header zurück. Beachten Sie, dass in der Richtlinie ein Attribut-Name/Wert-Paar "prop/WORLD!" hinzugefügt wurde. Das Java-Callout ruft den "WORLD!"-Wert ab und legt es in einem Header mit dem X-PROPERTY-HELLO-Namen fest:

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