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
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.
Yukarıdaki 1. adımda belirtilen kaynağı kullanan JavaAçıklama politikasını belirleyin.
Örneğin, aşağıdaki politika <
ResourceURL>
değerinimyresource.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>
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
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
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
- 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.
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"
.JAR dosyasını yükleyin) uygun düzeyde (API proxy'si, kuruluş veya ortam düzeyi).
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ı
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ı isemy.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
- Sınıfı (yukarıdaki 1. adımda tanımlanmıştır) içermesi gereken ve örneklenemeyen JAR dosyasını belirleyin.
- İ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.
- JAR dosyası yüklendiyse Neden: Bozuk JAR Dosyası bölümüne gidin.
Çözünürlük
- 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.
- API proxy'sini yeniden dağıtın.
Neden: Bozuk JAR dosyası
Teşhis
- Örneklendirilemeyen sınıfı (yukarıdaki 1. adımda tanımlanmıştır) içermesi gereken JAR dosyasını belirleyin.
- İ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.
- JAR dosyası bozuk değilse Neden: Eksik Sınıf Dosyası bölümüne gidin.
Çözünürlük
- Bozuk JAR dosyalarını yeniden oluşturun ve uygun düzeyde (API proxy'si, kuruluş veya ortam düzeyi) JAR dosyasını yükleyin.
- API proxy'sini yeniden dağıtın.
Neden: Sınıf Dosyası eksik
Teşhis
- İ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.
- Sınıf dosyası JAR dosyalarının hiçbirinde bulunmuyorsa, hatanın nedenini belirlemişsiniz demektir. Çözünürlük'e gidin.
- 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
- 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.
- 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
- İ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
). 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>
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
- Hatanın nedenine bağlı olarak, sorunu Java kodunuzda düzeltmeniz gerekebilir.
- 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.
- API Proxy'sini yeniden dağıtın.
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.
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.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.
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"