Java çağrısıyla yanıtı büyük harfe dönüştürme

Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin.
bilgi

Java çağrısını ilk kez deniyorsanız Java çağrısı oluşturma başlıklı makaleyle başlamanızı öneririz.

Bu çözüm kitabı örneğinde, bir proxy akışı bağlamında özel Java kodu yürüten basit bir JavaCallout politikası oluşturma işlemi gösterilmektedir.

Örnek kod ne işe yarar?

Bu örnekteki API proxy'si, basit bir JSON yanıtı döndüren bir hedef hizmeti çağırır. Java Callout politikası, hedef yanıt akışına yerleştirilir. Java kodu, yanıtın başlıklarını ve içeriğini büyük harflere dönüştürür. Bu basit örnek, Edge'deki bir API proxy'si bağlamında özel Java kodunun nasıl çalıştırılacağını gösterir.

Örneği deneyin

Projeyi indirme

İşleri kolaylaştırmak için bu projeyi GitHub'daki Apigee api-platform-samples deposundan indirebilirsiniz.

  1. api-platform-samples'ı sisteminize indirin veya klonlayın.
  2. Seçtiğiniz bir terminalde veya kod düzenleyicide api-platform-samples/doc-samples/java-cookbook projesine gidin.

Kodunuzu Maven ile derleme

Proje, Maven ile derleme yapabileceğiniz şekilde ayarlanır. javac kullanmak istiyorsanız Maven örneğini takip eden bir örnek de ekleyeceğiz.

  1. Maven'in yüklü olduğundan emin olun:
    mvn -version
  2. Komut dosyasını çalıştırın java-cookbook/buildsetup.sh. Bu komut dosyası, gerekli JAR bağımlılıklarını yerel Maven deponuza yükler.
  3. java-cookbool/callout dizinine gidin.
  4. Maven'i yürütün:
    mvn clean package
  5. İsterseniz edge-custom-policy-java-cookbook.jar JAR dosyasının java-cookbook/apiproxy/resources/java konumuna kopyalandığını doğrulayın. Bu, bir proxy ile dağıtmak istediğiniz JAR dosyaları için gerekli konumdur.

javac ile derleme

Kodu derlemek için javac kullanmak istiyorsanız aşağıdaki gibi bir işlem yapabilirsiniz (java-cookbook dizininden). Gerekli JAR dosyaları, java-cookbook/lib dizininde sizin için sağlanır.

  1. cd api-platform-samples/doc-samples/java-cookbook
  2. Yolunuzda javac olduğundan emin olun.

    javac -version
  3. Aşağıdaki javac komutunu çalıştırın:

    javac -d . -classpath ./lib/expressions-1.0.0.jar:./lib/message-flow-1.0.0.jar:. callout/src/main/java/ResponseUppercase.java
  4. JAR dosyasını apiproxy/resources/java dizinine kopyalayın. Bu, proxy ile dağıtmak istediğiniz JAR dosyaları için gerekli konumdur.

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

Proxy'yi dağıtma ve çağırma

./java-cookbook dizininde bir dağıtım komut dosyası sağlanır. Ancak çalıştırmadan önce hızlı bir kurulum yapmanız gerekir.

  1. api-platform-samples/doc-samples/java-cookbook dizinine gidin.
  2. Henüz yapmadıysanız ../../setup/setenv.sh dosyasını açın ve Apigee hesap bilgilerinizle (kullanıcı adınız, kuruluş adınız ve API yönetimi çağrıları yapmak için kullandığınız alan) belirtildiği şekilde düzenleyin. Örneğin, Edge Cloud için alan https://api.enterprise.apigee.com şeklindedir. Ancak Edge Private Cloud kullanıyorsanız alanınız farklı olabilir.
  3. setenv.sh dosyasını kaydedin.
  4. Dağıtım komut dosyasını yürütün:
    ./deploy.sh
  5. Dağıtım başarılı olursa invoke komut dosyasını çalıştırın:
    ./invoke.sh

    Invoke komut dosyası, aşağıdaki gibi bir cURL komutu çağırır:

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

Yanıt aşağıdaki gibi görünür:

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

Proxy akışı

Bu, proxy akışını gösteren izleme aracının bir görüntüsüdür:

Proxy yapısı

Bu, proxy'nin yapısıdır. apiproxy/resources/java dizininde bir JAR dosyası içerdiğini unutmayın. JAR gereklidir. Bu dosya örneği için sağlanır ancak özel bir çalışma yapıyorsanız dosyayı kendiniz oluşturup bu konuma kopyalamanız gerekir. Java çağrısı derleme ve dağıtma hakkında bilgi edinmek için Java çağrısı oluşturma başlıklı makaleyi inceleyin.

java-cookbook

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

Java kodu hakkında

Java Callout politikası, yanıt üstbilgilerini ve yanıt gövdesini büyük harfe dönüştüren aşağıdaki Java kodunu çalıştırır. Programın Apigee'ye özgü paketler kullandığını unutmayın. Bu paketler, proxy akışıyla doğrudan etkileşim kurmak için kullanabileceğiniz nesneler ve yöntemler sağlar. Akış değişkenlerini, üstbilgileri, ileti içeriğini ve daha fazlasını almanıza ve ayarlamanıza olanak tanıyan yöntemler vardır.

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

Örnek proxy'yi inceleyin

Proxy'yi açıp dosyaları incelemek size kalmıştır. Java Callout politikası aşağıda verilmiştir. Açıklama metninin, açıklama metninin yürütüldüğü sınıfa ve JAR dosyasına nasıl referans verdiğine dikkat edin. Tüm Java Callout politikaları bu kalıbı izler. Ayrıca Java Callout politikası'nı inceleyin.

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