JavaScript politikası çalışma zamanı hatasıyla ilgili sorunları giderme

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

ResourceDoesNotExist

Hata Mesajı

API proxy'sinin Edge kullanıcı arayüzü veya Edge Management API aracılığıyla dağıtılması şu hata mesajıyla başarısız olur:

Error Deploying Revision <var>revision_number</var> to <var>environment</var>
Resource with name <var>ResourceURL</var> and type java does not exist.

Örnek Hata Mesajı

Error Deploying Revision 1 to test
Resource with name myresource.jar and type java does not exist.

Örnek Hata Ekran Görüntüsü

Neden

Javacall politikasındaki <ResourceURL> öğesinde belirtilen kaynak API proxy'si, ortam veya kuruluş düzeyinde mevcut değilse API proxy'sinin dağıtımı başarısız olur.

Teşhis

  1. Ortamı ve kaynak adını tanımlayın. Bu bilgileri hata mesajında bulabilirsiniz. Örneğin, aşağıdaki hatada ortam test ve <ResourceURL> öğesinde kullanılan kaynak adı myresource.jar şeklindedir.

    Error Deploying Revision 1 to test
    Resource with name myresource.jar and type java does not exist.
    
  2. Yukarıdaki 1. adımda tanımlanan kaynağı kullanan Java callout politikasını belirleyin.

    Örneğin, aşağıdaki politikada myresource.jar olarak <ResourceURL> değeri belirtilmektedir. Bu değer, hata mesajındaki değerle eşleşir:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JavaCallout name="hello-java">
        <ClassName>com.apigeesample.HelloJava</ClassName>
        <ResourceURL>java://myresource.jar</ResourceURL>
    </JavaCallout>
    
  3. Kaynağın, başarısız olan veya ortam ya da kuruluş düzeyinde yüklenen API proxy'sinin parçası olup olmadığını belirleyin. Aksi halde, hatanın nedeni budur.

    • API proxy'si düzeyinde yüklenen tüm kaynakları görüntülemek için API proxy düzenleyicisinin Gezgini bölmesindeki Kaynaklar sekmesine gidin. Bu örnekte, API proxy'sine yüklenmiş kaynak yoktur.

    • Kaynaklar, ortam veya kuruluş düzeyinde kullanılabilir. Daha fazla bilgi için Kaynak dosyaları bölümüne bakın.

      • Kaynağın ortam düzeyinde mevcut olup olmadığını belirlemek için curl kullanarak aşağıdaki API çağrısını gerçekleştirin: curl -v -u <strong>email </strong>"https://api.enterprise.apigee.com/v1/organizations/myorg/environments/myenv/resourcefiles/java/myresource.jar"

      • Kaynağın kuruluş düzeyinde mevcut olup olmadığını belirlemek için curl kullanarak aşağıdaki API çağrısını gerçekleştirin ve ortam ayrıntılarını atlayın: curl -v -u email "https://api.enterprise.apigee.com/v1/organizations/myorg/resourcefiles/java/myresource.jar"

      Bu API'lere yanıt olarak bir 404 durum kodu alırsanız kaynak hem kuruluş hem de ortam düzeyinde eksik demektir.

    Kaynak, API proxy'si, kuruluş ve ortam düzeyinde kullanılamıyorsa dağıtım hatası döndürülür:

    Resource with name myresource.jar and type java does not exist.
     ```
    

Çözünürlük

<ResourceURL> öğesinde belirtilen kaynağın API proxy'si, ortam veya kuruluş düzeyinde bulunduğundan emin olun. Daha fazla bilgi için Kaynak dosyaları bölümüne bakın.

Yukarıda gösterilen örnek JavaScript politikasını düzeltmek için uygun düzeyde (API proxy'si, kuruluş veya ortam düzeyi) JAR dosyasını yükleyin.

NoResourceForURL

Hata Mesajı

API proxy'sinin Edge kullanıcı arayüzü veya Edge Management API aracılığıyla dağıtılması şu hata mesajıyla başarısız olur:

Error in deployment for environment <var>environment</var>
The revision is deployed, but traffic cannot flow. Could not locate a resource with URL <var>ResourceURL</var>

Örnek Hata Mesajı

Error in deployment for environment test
The revision is deployed, but traffic cannot flow. Could not locate a resource with URL java://myresource.jar

Örnek Hata Ekran Görüntüsü

Neden

Bu hata, kaynak dosyası API proxy'si, ortam veya kuruluş düzeyinde var gibi görünmesine rağmen bozuk ya da kısmen yüklenmişse oluşabilir.

Teşhis

  1. Ortamı ve kaynak adını tanımlayın. Bu bilgileri hata mesajında bulabilirsiniz. Örneğin, aşağıdaki hatada ortam adı test, <ResourceURL> öğesinde kullanılan Kaynak Adı ise myresource.jar'dir.

    Error in deployment for environment test
    The revision is deployed, but traffic cannot flow. Could not locate a resource with URL java://myresource.jar
    
  2. Kaynağın API proxy'si, ortam veya kuruluş düzeyinde yüklendiğinden emin olun. Aşağıdaki örnekte myresource.jar kaynağının API proxy düzeyinde yüklendiğini görebilirsiniz.

    Kaynaklar, ortam veya kuruluş düzeyinde kullanılabilir. Daha fazla bilgi için Kaynak dosyaları bölümüne bakın.

    Kaynağın ortam düzeyinde mevcut olup olmadığını belirlemek için curl kullanarak aşağıdaki API çağrısını gerçekleştirin: curl -v -u <strong>email </strong>"https://api.enterprise.apigee.com/v1/organizations/myorg/environments/myenv/resourcefiles/java/myresource.jar"

    Kaynağın kuruluş düzeyinde mevcut olup olmadığını belirlemek için curl kullanarak aşağıdaki API çağrısını gerçekleştirin ve ortam ayrıntılarını atlayın: curl -v -u email "https://api.enterprise.apigee.com/v1/organizations/myorg/resourcefiles/java/myresource.jar"

    Bu API'lere yanıt olarak bir 404 durum kodu alırsanız kaynak hem kuruluş hem de ortam düzeyinde eksik demektir.

Çözünürlük

  1. Kaynağın API proxy'si, kuruluş veya ortam düzeyinde mevcut olduğunu belirlerseniz kaynağı silin ve 2. adımda açıklandığı gibi yeniden yükleyin. Aksi halde 3. adıma geçin.
  2. Kaynağı API proxy düzeyinde silmek için API proxy düzenleyicisinin Gezgin bölmesinden Kaynaklar sekmesine gidin ve aşağıda gösterildiği gibi kaynağın yanındaki "X" düğmesini tıklayın.

    Kaynağı ortam veya kuruluş düzeyinde silmek için daha önce teşhis adımlarında kullanılan API çağrılarında DELETE fiilini kullanın. Örneğin, kaynağı ortam düzeyinde silmek için aşağıdaki komutu girin: curl -X DELETE -v -u <strong>email </strong>"https://api.enterprise.apigee.com/v1/organizations/myorg/environments/myenv/resourcefiles/java/myresource.jar"

  3. JAR dosyasını yükleyin) uygun düzeyde (API proxy'si, kuruluş veya ortam düzeyi).

  4. Kaynağın yeniden yüklenmesi işe yaramazsa etkilenen İleti İşleyicilerin yeniden başlatılması gerekir. Bulutta Apigee Edge kullanıyorsanız Apigee Desteği ile iletişime geçin. Private Cloud kullanıcısıysanız Apigee Edge'i başlatma, durdurma, yeniden başlatma ve durumunu kontrol etme başlıklı makaleye bakın.

JavaCalloutInstantiationFailed

Hata Mesajı

API proxy'sinin Edge kullanıcı arayüzü veya Edge Management API aracılığıyla dağıtılması şu hata mesajıyla başarısız olur:

Error in deployment for environment <var>environment</var>
The revision is deployed, but traffic cannot flow. Failed to instantiate the JavaCallout Class <var>class_name</var>

Alternatif olarak:

Error in deployment for environment <var>environment</var>.
The revision is deployed and traffic can flow, but flow may be impaired. Failed to instantiate the JavaCallout Class <var>class_name</var>

Örnek Hata Mesajı

Error in deployment for environment test
The revision is deployed, but traffic cannot flow. Failed to instantiate the JavaCallout Class my.class

Örnek Hata Ekran Görüntüsü

Neden

Bu hatanın tipik nedenleri

Neden Açıklama
Eksik JAR dosyası Hatada tanımlanan Java sınıfını içeren JAR dosyası yüklenmedi.
Bozuk JAR dosyası Hatada tanımlanan Java sınıfını içeren JAR dosyası bozuk/kısmen yüklenmiş.
Sınıf dosyası eksik Hatada tanımlanan Java sınıfı dosyası, >ResourceURL< içinde belirtilen JAR dosyasının veya bağımlı JAR dosyalarının bir parçası değil.
Java Kodu Sorunu Kodda eksik bir oluşturucu, kod bağımlılığı sorunu veya başka bir sorun gibi bir hata vardır.

Ortak Teşhis Adımı

  1. Ortamın adını ve içe aktarılamayan Sınıfı belirleyin. Örneğin, aşağıdaki hata mesajında ortam adı test ve Sınıf adı my.class şeklindedir:

    Error in deployment for environment test
    The revision is deployed, but traffic cannot flow. Failed to instantiate the JavaCallout Class my.class
    
    

    Neden: JAR dosyası eksik

Teşhis

  1. Sınıfı (yukarıdaki 1. adımda tanımlanır) içermesi gereken ve örneklendirilemeyen JAR dosyasını belirleyin.
  2. Belirli bir JAR dosyasının API proxy'si, kuruluş veya ortam düzeyinde yüklenip yüklenmediğini kontrol edin. JAR dosyası düzeylerden hiçbirine yüklenmediyse Çözüm'e gidin.
  3. JAR dosyası yüklendiyse Cause: Bozuk JAR Dosyası bölümüne gidin.

Çözünürlük

  1. JAR dosyası bozuksa veya kısmen yüklenmişse JAR'ı yeniden oluşturun ve uygun düzeyde (API proxy'si, kuruluş veya ortam düzeyi) JAR dosyasını yükleyin.
  2. API proxy'sini yeniden dağıtın.

Neden: Bozuk JAR dosyası

Teşhis

  1. Örneklenemeyen sınıfı (yukarıdaki 1. adımda tanımlanır) içermesi gereken JAR dosyasını belirleyin.
  2. Belirli bir JAR dosyasının bozuk olup olmadığını kontrol edin. Örneğin, bozuk veya kısmen yüklenmiş olduğu için dosyanın jar dosyasını açamadıysanız. Bozuksa Çözüm'e gidin.
  3. JAR dosyası bozuk değilse Neden: Sınıf Dosyası Eksik bölümüne gidin.

Çözünürlük

  1. Bozuk JAR dosyalarını yeniden oluşturun ve uygun düzeyde (API proxy'si, kuruluş veya ortam düzeyi) JAR dosyasını yükleyin.
  2. API proxy'sini yeniden dağıtın.

Neden: Sınıf Dosyası Eksik

Teşhis

  1. Belirli Java sınıf dosyasının (yukarıdaki 1. adımda tanımlanır) >ResourceURL< içinde belirtilen JAR dosyasının veya bağımlı JAR dosyalarından herhangi birinin parçası olup olmadığını kontrol edin.
  2. Sınıf dosyası JAR dosyalarının hiçbirinde yoksa hatanın nedenini belirlediniz demektir. Çözüm'e gidin.
  3. Sınıf dosyası, Javaaçıklama politikasında belirtilen JAR dosyalarından birinde bulunuyorsa bu hataya neden olan Java koduyla veya bağımlı sınıfla ilgili bir sorun olmalıdır. a. Herkese Açık Bulut kullanıcısıysanız Apigee Destek Ekibi ile iletişime geçin. b. Private Cloud kullanıcısıysanız Neden: Java Code Sorunu bölümüne geçin.

Çözünürlük

  1. Eksik sınıf dosyalarıyla JAR'yi yeniden oluşturun ve JAR dosyasını uygun düzeyde (API proxy'si, kuruluş veya ortam düzeyi) yükleyin.
  2. API Proxy'sini yeniden dağıtın.

Neden: Java Kodu Sorunu

Yalnızca Private Cloud Kullanıcıları için Teşhis Adımları

Teşhis

  1. İleti İşleyici günlüklerini kontrol edin (/opt/apigee/var/log/edge-message-processor/system.log ve /opt/apigee/var/log/edge-message-processor/configurations.log).
  2. Aşağıdaki örneğe benzer bir istisna görebilirsiniz:

    2019-07-05 05:40:13,240 org:myorg env:staging target:/organizations/myorg/apiproxies/MyAPI/revisions/5 action:add context-id: mode: Apigee-Main-53 ERROR CONFIG-CHANGE - AbstractConfigurator.add() : Add null to Step failed, reason: {}
    com.apigee.kernel.exceptions.spi.UncheckedException: Failed to instantiate the JavaCallout Class <class name>
    at com.apigee.steps.javacallout.JavaCalloutStepDefinition.newInstance(JavaCalloutStepDefinition.java:116)
    at com.apigee.messaging.runtime.StepDefinition.getStepDefinitionExecution(StepDefinition.java:218)
    …<snipped>
    Caused by: java.lang.reflect.InvocationTargetException: null
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at com.apigee.steps.javacallout.JavaCalloutStepDefinition.access$100(JavaCalloutStepDefinition.java:41)
    at com.apigee.steps.javacallout.JavaCalloutStepDefinition$CallOutWrapper.initialize(JavaCalloutStepDefinition.java:131)
    at com.apigee.steps.javacallout.JavaCalloutStepDefinition$CallOutWrapper.<init>(JavaCalloutStepDefinition.java:126)
    ... 42 common frames omitted
    Caused by: <Reason>
    
    ...<snipped>
    
    
  3. Hatanın nedenini anlamak için istisnayı dikkatlice okuyun. Bu durum genellikle Java kodunuzdaki bir soruna işaret edebilir.

Çözünürlük

  1. Hatanın nedenine bağlı olarak sorunu Java kodunuzda düzeltmeniz gerekebilir.
  2. Eksik sınıf dosyalarıyla JAR'yi yeniden oluşturun ve JAR dosyasını uygun düzeyde (API proxy'si, kuruluş veya ortam düzeyi) yükleyin.
  3. API Proxy'sini yeniden dağıtın.

JAR dosyasını yükleyin

Gerekli tüm sınıfları içeren kaynak öğenin API Proxy'si, ortam veya kuruluş düzeyinde bulunduğundan emin olun. Daha fazla bilgi için Kaynak dosyaları bölümüne bakın.

  1. Bir kaynağı API proxy düzeyinde yüklemek için Kaynaklar sekmesinde + (artı) işaretini tıklayın, ardından Dosyayı içe aktar'ı seçin ve yerel makinenizden dosya yükleyin. Dosya adı, >ResourceURL< öğesiyle eşleşmeli ancak java:// öneki içermemelidir.

  2. Bir kaynağın aynı ortamda birden fazla API proxy'si için kullanılabilir olmasını istiyorsanız kaynağı ortama yükleyin. Kaynak dosyaları bölümünde açıklandığı gibi Edge API'yi kullanmanız gerekir.

    Örneğin, belirtilen dosyayı ortam düzeyinde yüklemek için yerel makineden aşağıdaki API çağrısını girin:

    curl -v -u email -H "Content-Type: application/octet-stream" \
    -X POST --data-binary @{classes.jar} \
    "http://{mgmt_server}:{port}/v1/organizations/myorg/environments/myenv/resourcefiles?name=myresouce.jar&type=java"
    

    Dosyayla aynı dizinden API çağrısı yayınlayın.

  3. Dosyayı kuruluştaki tüm ortamlardaki tüm API proxy'leri için kullanılabilir hale getirmek istiyorsanız temel yoldaki ortam ayrıntılarını çıkarabilirsiniz. Örneğin:

    curl -v -u email -H "Content-Type: application/octet-stream" \
    -X POST --data-binary @{classes.jar} \
    "http://{mgmt_server}:{port}/v1/organizations/myorg/resourcefiles?name=myresouce.jar&type=java"