Antwort mit einem Java-Callout in Großbuchstaben umwandeln

Sie lesen gerade die Dokumentation zu Apigee Edge.
Zur Dokumentation zuApigee X wechseln.
info

Wenn Sie Java-Callouts zum ersten Mal ausprobieren, empfehlen wir Ihnen, mit dem Artikel Java-Callout erstellen zu beginnen.

In diesem Cookbook-Beispiel wird gezeigt, wie Sie eine einfache JavaCallout-Richtlinie erstellen, die benutzerdefinierten Java-Code im Kontext eines Proxyablaufs ausführt.

Was macht der Beispielcode?

Der API-Proxy in diesem Beispiel ruft einen Zieldienst auf, der eine einfache JSON-Antwort zurückgibt. Die Java-Callout-Richtlinie wird im Antwortablauf des Ziels platziert. Der Java-Code konvertiert die Header und Inhalt der Antwort in Großbuchstaben. Es ist ein einfaches Beispiel, das jedoch veranschaulicht, wie Sie benutzerdefinierten Java-Code im Kontext eines API-Proxys in Edge verwenden können.

Beispiel ausprobieren

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-cookbook Projekt.

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 nach dem Maven-Beispiel auch ein Beispiel hinzu.

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

Kompilieren mit javac

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

  1. cd in api-platform-samples/doc-samples/java-cookbook.
  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/ResponseUppercase.java
  4. 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 com/apigeesample/ResponseUppercase.class apiproxy/resources/java

Proxy bereitstellen und aufrufen

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

  1. cd in api-platform-samples/doc-samples/java-cookbook.
  2. Öffnen Sie die Datei ../../setup/setenv.sh und bearbeiten Sie sie wie angegeben mit Ihren Apigee-Kontoinformationen: Ihr Nutzername (die mit Ihrem Konto verknüpfte E-Mail-Adresse), Ihr Organisationsname und die Domain, die Sie für API Verwaltungsaufrufe verwenden. Bei Edge Cloud ist die Domain beispielsweise https://api.enterprise.apigee.com. Ihre Domain kann jedoch anders sein, wenn Sie Edge Private Cloud verwenden.
  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-cookbook/json

Die Antwort sieht ungefähr so aus:

< HTTP/1.1 200 OK
< Date: Tue, 09 May 2017 20:31:08 GMT
< Content-Type: APPLICATION/JSON; CHARSET=UTF-8
< Content-Length: 68
< Connection: keep-alive
< Access-Control-Allow-Origin: *
< ETag: W/"44-RA5ERT/MMLIK54NVBWBSZG"
< X-Powered-By: APIGEE
< Server: Apigee Router
<
* Curl_http_done: called premature == 0
* Connection #0 to host willwitman-test.apigee.net left intact
{"FIRSTNAME":"JOHN","LASTNAME":"DOE","CITY":"SAN JOSE","STATE":"CA"}

Proxyablauf

Dies ist ein Screenshot des Trace-Tools, der den Ablauf des Proxys zeigt:

Proxystruktur

Dies ist die Struktur des Proxys. Beachten Sie, dass sie eine JAR-Datei im apiproxy/resources/java Verzeichnis enthält. Die JAR-Datei ist erforderlich. Wir stellen sie für das Beispiel bereit. Wenn Sie jedoch benutzerdefinierte Arbeiten ausführen, müssen Sie sie selbst erstellen und an diesen Speicherort kopieren. Eine Anleitung zum Kompilieren und Bereitstellen eines Java-Callouts finden Sie unter Java Callout erstellen.

java-cookbook

    apiproxy
        java-cookbook.xml
    policies
        responseUppercase.xml
    proxies
        default.xml
    resources
        java
            ResponseUppercase.jar
    targets
        default.xml

Über den Java-Code

Die Java-Callout-Richtlinie führt den folgenden Java-Code aus, der Antwortheader und den Antworttext in Großbuchstaben konvertiert. Beachten Sie, dass das Programm Apigee-spezifische Pakete verwendet. Diese Pakete enthalten Objekte und Methoden, mit denen Sie direkt mit dem Proxyablauf interagieren können. Es gibt Methoden, mit denen Sie Ablaufvariablen, Header, Nachrichteninhalte und mehr abrufen und festlegen können.

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.Set; 

public class ResponseUppercase implements Execution{
    public ExecutionResult execute(MessageContext messageContext, ExecutionContext executionContext) {
        try {
            Set headers = messageContext.getMessage().getHeaderNames();
            for (String header : headers) {
                String h = messageContext.getMessage().getHeader(header).toUpperCase();
                messageContext.getMessage().setHeader(header, h);
            }
            String content = messageContext.getMessage().getContent();
            messageContext.getMessage().setContent(content.toUpperCase());
            return ExecutionResult.SUCCESS;
        } catch (Exception e) {
                return ExecutionResult.ABORT;
        }
    }
}

Beispielproxy untersuchen

Öffnen Sie den Proxy und untersuchen Sie die Dateien. Hier ist die Java-Callout-Richtlinie. Beachten Sie, wie sie auf die Klasse verweist, die vom Callout ausgeführt wird, und auf die JAR-Datei. Alle Java-Callout Richtlinien folgen diesem Muster. Weitere Informationen finden Sie unter Java-Callout-Richtlinie.

<JavaCallout name="responseUppercase">         
    <ClassName>com.apigeesample.ResponseUppercase</ClassName>         
    <ResourceURL>java://ResponseUppercase.jar</ResourceURL> 
</JavaCallout>