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

Apigee Edge belgelerini görüntülüyorsunuz.
. Git: Apigee X belgeleri.
bilgi

ResourceDoesNotExist

Hata Mesajı

API proxy'sinin Edge Kullanıcı Arayüzü veya Edge management API üzerinden dağıtılması şu hata mesajını gösterir:

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

JavaAçıklama politikasındaki <ResourceURL> öğesinde belirtilen kaynak API proxy'si, ortam veya kuruluş düzeyinde bulunmuyorsa 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.

    Error Deploying Revision 1 to test
    Resource with name myresource.jar and type java does not exist.
    
  2. Yukarıdaki 1. adımda belirtilen kaynağı kullanan JavaAçıklama politikasını belirleyin.

    Örneğin, aşağıdaki politika <ResourceURL> değerini myresource.jar olarak belirtir ve 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 bir parçası olup olmadığını belirleyin. Aksi halde hatanın nedeni budur.

    • API proxy düzeyinde yüklenen tüm kaynakları görüntülemek için API proxy düzenleyicisinin Gezinme 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ı başlıklı makaleyi inceleyin.

      • Kaynağın ortam düzeyinde olup olmadığını belirlemek için curl kullanarak aşağıdaki API çağrısını yayınlayın: 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 olup olmadığını belirlemek için ortam ayrıntılarını atlayarak curl'ü kullanarak aşağıdaki API çağrısını yayınlayın: curl -v -u email "https://api.enterprise.apigee.com/v1/organizations/myorg/resourcefiles/java/myresource.jar".

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

    Kaynak; API proxy'si, kuruluş ve ortam düzeyinde mevcut değilse 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ı başlıklı makaleyi inceleyin.

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

NoResourceForURL

Hata Mesajı

API proxy'sinin Edge Kullanıcı Arayüzü veya Edge management API üzerinden dağıtılması şu hata mesajını gösterir:

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

Kaynak dosya; API proxy'si, ortam veya kuruluş düzeyinde mevcut gibi görünmesine rağmen bozuk ya da kısmen yüklenmişse bu hata 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 ve <ResourceURL> öğesinde kullanılan Kaynak Adı 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ı başlıklı makaleyi inceleyin.

    Kaynağın ortam düzeyinde olup olmadığını belirlemek için curl kullanarak aşağıdaki API çağrısını yayınlayın: 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 olup olmadığını belirlemek için ortam ayrıntılarını atlayarak curl'ü kullanarak aşağıdaki API çağrısını yayınlayın: curl -v -u email "https://api.enterprise.apigee.com/v1/organizations/myorg/resourcefiles/java/myresource.jar".

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

Çözünürlük

  1. Kaynağın API proxy'si, kuruluş veya ortam düzeyinde olduğunu belirlerseniz kaynağı silin ve 2. adımda açıklandığı şekilde yeniden yükleyin. Kodu nasıl uygulayacağınızı öğrenmek istemiyorsanız 3. adıma geçin.
  2. Kaynağı API proxy'si düzeyinde silmek için API proxy düzenleyicisinin Gezinme bölmesindeki Kaynaklar sekmesine gidin ve aşağıda gösterildiği gibi kaynağın yanındaki "X" düğmesini tıklayın.

    Ortam veya kuruluş düzeyinde kaynak silmek için daha önce teşhis adımlarında kullanılan API çağrılarında DELETE (SİL) 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 sorunu çözmezse etkilenen İleti İşleyenlerin yeniden başlatılması gerekir. Cloud'da Apigee Edge kullanıyorsanız Apigee Destek Ekibi 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ı makaleyi inceleyin.

JavaCalloutInstantiationFailed

Hata Mesajı

API proxy'sinin Edge Kullanıcı Arayüzü veya Edge management API üzerinden dağıtılması şu hata mesajını gösterir:

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 genel nedenleri aşağıda belirtilmiştir

Neden Açıklama
JAR dosyası eksik 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< öğesinde belirtilen JAR dosyasının bir parçası değil veya bağımlı JAR dosyaları olabilir.
Java Kodu Sorunu Kodda eksik kurucu, kod bağımlılığı sorunu veya başka bir sorun gibi bir hata var.

Ortak Teşhis Adımı

  1. Ortamın adını ve içe aktarılamayan Sınıfı tanımlayın. Örneğin, aşağıdaki hata mesajındaki ortam adı test, Sınıf adı ise 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: Eksik JAR dosyası

Teşhis

  1. Sınıfı (yukarıdaki 1. adımda tanımlanmıştır) içermesi gereken ve örneklenemeyen JAR dosyasını belirleyin.
  2. İlgili JAR dosyasının API proxy'si, kuruluş veya ortam düzeyinde yüklenip yüklenmediğini kontrol edin. JAR dosyası düzeylerden herhangi birine yüklenmemişse Çözüm'e gidin.
  3. JAR dosyası yüklendiyse Neden: Bozuk JAR Dosyası bölümüne gidin.

Çözünürlük

  1. JAR dosyası bozuksa veya kısmen yüklenmişse JAR'i 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. Örneklendirilemeyen sınıfı (yukarıdaki 1. adımda tanımlanmıştır) içermesi gereken JAR dosyasını belirleyin.
  2. İlgili 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ı kaldıramıyorsanız. Bozulmuşsa Çözüm'e gidin.
  3. JAR dosyası bozuk değilse Neden: Eksik Sınıf Dosyası 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. İlgili Java sınıf dosyasının (yukarıdaki 1. adımda tanımlanır) >ResourceURL< veya bağımlı JAR dosyalarından herhangi biri.
  2. Sınıf dosyası JAR dosyalarının hiçbirinde bulunmuyorsa, hatanın nedenini belirlemişsiniz demektir. Çözünürlük'e gidin.
  3. Sınıf dosyası, JavaAçıklama politikasında belirtilen JAR dosyalarından birinde mevcutsa bu hataya neden olan Java koduyla veya bağımlı sınıfla ilgili bir sorun olması gerekir. 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 Kodu Sorunu bölümüne geçin.

Çözünürlük

  1. JAR'yi eksik sınıf dosyalarıyla 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: 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. Başarısızlığın nedenini anlamak için istisnayı dikkatlice okuyun. Bu 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. JAR'yi eksik sınıf dosyalarıyla yeniden oluşturun ve uygun düzeyde (API proxy'si, kuruluş veya ortam düzeyi) JAR dosyasını yükleyin.
  3. API Proxy'sini yeniden dağıtın.
ziyaret edin.

JAR dosyasını yükleyin

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

  1. API proxy'si düzeyinde kaynak yüklemek için Kaynaklar sekmesinde + (artı işareti) öğesini tıklayın, ardından Dosyayı içe aktar'ı seçin ve yerel makinenizden dosya yükleyin. Dosya adı, >ResourceURL< öğesi ancak java:// öneki olmadan.

  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ı başlıklı makalede açıklandığı gibi Edge API'yi kullanmanız gerekir.

    Örneğin, belirtilen dosyayı ortam düzeyinde yüklemek için yerel makineden yapılan 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"
    

    API çağrısını dosyayla aynı dizinden gönderin.

  3. Dosyayı kuruluştaki tüm ortamlardaki tüm API proxy'leri için kullanılabilir hale getirmek amacıyla 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"