Converti la risposta in lettere maiuscole con un callout Java

Stai visualizzando la documentazione di Apigee Edge.
Vai alla documentazione di Apigee X.
informazioni

Se è la prima volta che provi a utilizzare il callout Java, ti consigliamo di iniziare consultando Come creare un callout Java.

Questo esempio di ricettario mostra come creare un semplice criterio JavaCallout che esegua codice Java personalizzato nel contesto di un flusso proxy.

Qual è la funzione del codice campione?

Il proxy API in questo esempio chiama un servizio di destinazione che restituisce una semplice risposta JSON. Il criterio callout Java viene inserito nel flusso di risposta target. Il codice Java converte le intestazioni e i contenuti della risposta in lettere maiuscole. È un esempio semplice, ma illustra come far funzionare il codice Java personalizzato nel contesto di un proxy API su Edge.

Prova l'esempio

Scarica il progetto

Per semplificare le cose, 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-cookbook.

Compila il codice con Maven

Il progetto è configurato in modo da poter eseguire la compilazione con Maven. Se vuoi utilizzare javac, includeremo un esempio oltre a quello di Maven.

  1. Assicurati di avere installato Maven:
    mvn -version
    
  2. Esegui lo script java-cookbook/buildsetup.sh. Questo script installa le dipendenze JAR richieste nel repository Maven locale.
  3. cd nella directory java-cookbool/callout.
  4. Esegui Maven:
    mvn clean package
    
  5. Se vuoi, verifica che il file JAR edge-custom-policy-java-cookbook.jar sia stato copiato in java-cookbook/apiproxy/resources/java. Questa è la posizione obbligatoria per i file JAR di cui vuoi eseguire il deployment con un proxy.

Compila con javac

Se vuoi utilizzare javac per compilare il codice, puoi eseguire una procedura simile a quella riportata di seguito (dalla directory java-cookbook). I file JAR richiesti sono forniti nella directory java-cookbook/lib.

  1. CD su api-platform-samples/doc-samples/java-cookbook.
  2. Assicurati che nel percorso sia presente javac.

    javac -version
    
  3. Esegui questo comando javac:

    javac -d . -classpath ./lib/expressions-1.0.0.jar:./lib/message-flow-1.0.0.jar:. callout/src/main/java/ResponseUppercase.java
    
  4. Copia il file JAR nella directory apiproxy/resources/java. Questa è la posizione obbligatoria per i file JAR di cui vuoi eseguire il deployment con un proxy.

    cp com/apigeesample/ResponseUppercase.class apiproxy/resources/java
    

Esegui il deployment e chiama il proxy

Nella directory ./java-cookbook è presente uno script di deployment. Ma prima di eseguirlo, devi eseguire una configurazione rapida.

  1. CD a api-platform-samples/doc-samples/java-cookbook
  2. Se non l'hai ancora fatto, apri il file ../../setup/setenv.sh e modificalo come indicato con i dati del tuo account Apigee: il tuo nome utente (l'indirizzo email associato al tuo account), il nome della tua organizzazione e il dominio che utilizzi per effettuare chiamate di gestione delle API. Ad esempio, per il cloud perimetrale, il dominio è https://api.enterprise.apigee.com; tuttavia, il dominio potrebbe essere diverso se utilizzi Edge Private Cloud.
  3. Salva il file setenv.sh.
  4. Esegui lo script di deployment:
    ./deploy.sh
    
  5. Se il deployment ha esito positivo, esegui lo script di chiamata:
    ./invoke.sh
    

    Lo script di chiamata chiama un comando cURL simile al seguente:

    curl  http://$org-$env.$api_domain/java-cookbook/json
    

La risposta sarà simile alla seguente:

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

Flusso proxy

Questa è una ripresa dello strumento traccia che mostra il flusso del proxy:

Struttura del proxy

Questa è la struttura del proxy. Tieni presente che include un file JAR nella directory apiproxy/resources/java. Il JAR è obbligatorio. Forniamo questo modello per l'esempio, ma se stai eseguendo operazioni personalizzate, devi crearlo autonomamente e copiarlo in questa posizione. Per indicazioni sulla compilazione e sul deployment di un callout Java, consulta Come creare un callout Java.

java-cookbook

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

Informazioni sul codice Java

Il criterio callout Java esegue il seguente codice Java, che converte le intestazioni della risposta e il corpo della risposta in maiuscolo. Tieni presente che il programma utilizza pacchetti specifici di Apigee. Questi pacchetti forniscono oggetti e metodi che puoi utilizzare per interagire direttamente con il flusso proxy. Esistono vari metodi che ti consentono di ottenere e impostare variabili di flusso, intestazioni, contenuti dei messaggi e altro ancora.

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

Esamina il proxy di esempio

A te la scelta di aprire il proxy ed esaminare i file. Ecco le norme sui callout Java. Nota come fa riferimento alla classe eseguita dal callout e al file JAR. Tutti i criteri dei callout Java seguono questo schema. Vedi anche le Norme sui callout Java.

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