Java Açıklama Metni hatalarını işleme

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

Java çağrısı nedir?

Java çağrıları konusunda yeniyseniz Java çağrısı oluşturma başlıklı makaleyle başlamanızı öneririz.

Java çağrısındaki hataları işleme

Java çağrısı yazdığınızda Java kodunuzda özel hata işleme yapmak isteyebilirsiniz. Örneğin, Edge'deki proxy akışında özel hata mesajları ve üstbilgiler döndürmek ve/veya akış değişkenlerini hata bilgileriyle ayarlamak isteyebilirsiniz.

Temel özel hata işleme kalıplarını gösteren basit bir Java Callout örneğini inceleyelim. Örnek, bir istisna oluştuğunda özel bir hata mesajı döndürür. Ayrıca, hata yığını izlemeyi bir akış değişkenine yerleştirir. Bu, kullanışlı bir hata ayıklama tekniği olabilir.

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-error projesine gidin.

Örnek Java kodu

Hata işleme kalıpları basittir. messageContext.setVariable() yöntemini kullanarak akış değişkenlerini mevcut Edge akışı bağlamında ayarlayabilirsiniz. Özel hata bilgilerini döndürmek için bir ExecutionResult örneği oluşturun ve hata yanıtını ve üstbilgilerini ayarlamak için bu örnekte yöntemleri çağırın.

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 com.apigee.flow.execution.Action;

import org.apache.commons.lang.exception.ExceptionUtils;


public class JavaError implements Execution {
    public ExecutionResult execute(MessageContext messageContext, ExecutionContext executionContext) {

        try {

                String name = messageContext.getMessage().getHeader("username");

                if (name != null && name.length()>0) {
                        messageContext.getMessage().setContent("Hello, " + name + "!");
                        messageContext.getMessage().removeHeader("username");

                } else {
                        throw new RuntimeException("Please specify a name parameter!");
                }

                return ExecutionResult.SUCCESS;

        } catch (RuntimeException ex) {

            ExecutionResult executionResult = new ExecutionResult(false, Action.ABORT);

            //--Returns custom error message and header
            executionResult.setErrorResponse(ex.getMessage());
            executionResult.addErrorResponseHeader("ExceptionClass", ex.getClass().getName());

            //--Set flow variables -- may be useful for debugging.
            messageContext.setVariable("JAVA_ERROR", ex.getMessage());
            messageContext.setVariable("JAVA_STACKTRACE", ExceptionUtils.getStackTrace(ex));
            return executionResult;
        }
    }
}


Kodunuzu Maven ile derleme

Proje, Maven ile derleme yapabileceğiniz şekilde ayarlanır. javac kullanmak istiyorsanız örnek de ekleriz.

  1. Maven'in yüklü olduğundan emin olun:
    mvn -version
  2. Komut dosyasını çalıştırın java-error/buildsetup.sh. Bu komut dosyası, gerekli JAR bağımlılıklarını yerel Maven deponuza yükler.
  3. java-error/callout dizinine gidin.
  4. Maven'i yürütün:
    mvn clean package
  5. İsterseniz edge-custom-policy-java-error.jar JAR dosyasının java-error/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-error dizininden). Gerekli JAR dosyaları, java-error/lib dizininde sağlanır.

  1. cd api-platform-samples/doc-samples/java-error
  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/JavaProperties.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/JavaProperties.class apiproxy/resources/java

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

./java-error 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-error 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-error

    Çağrı bir "name" sorgu parametresi içermediğinden Java kodu bir çalışma zamanı hatası veriyor. Proxy, bu iletiyi ve üstbilgiyi döndürür:

  • Hata mesajı: Please specify a name parameter!
  • Başlık: ExceptionClass: java.lang.RuntimeException