Pemecahan masalah error runtime kebijakan JavaCallout

Anda sedang melihat dokumentasi Apigee Edge.
Buka Dokumentasi Apigee X.
info

ini.

ResourceDoesNotExist

Pesan Error

Penyebaran proxy API melalui Edge UI atau Edge API pengelolaan gagal dengan pesan kesalahan ini:

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

Contoh Pesan Error

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

Contoh Screenshot Error

Penyebab

Jika resource yang ditentukan dalam elemen <ResourceURL> di kebijakan Javacallout tidak ada di tingkat organisasi, lingkungan, atau proxy API, deployment proxy API akan gagal.

Diagnosis

  1. Identifikasi nama lingkungan dan resource. Anda dapat menemukan informasi ini dalam pesan error. Misalnya, dalam error berikut lingkungannya adalah test dan nama resource yang digunakan dalam elemen <ResourceURL> adalah myresource.jar.

    Error Deploying Revision 1 to test
    Resource with name myresource.jar and type java does not exist.
    
  2. Tentukan kebijakan Javacallout yang menggunakan resource yang diidentifikasi pada langkah #1 di atas.

    Misalnya, kebijakan berikut menentukan nilai <ResourceURL> sebagai myresource.jar, yang cocok dengan nilai dalam pesan error:

    <?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. Tentukan apakah resource merupakan bagian dari proxy API yang gagal atau diupload di tingkat lingkungan atau organisasi. Jika tidak, berikut penyebab errornya.

    • Buka tab Resources pada panel Navigator editor proxy API untuk melihat semua resource yang diupload pada level proxy API. Dalam contoh ini proxy API tidak memiliki sumber daya yang diupload.

    • Resource dapat tersedia di tingkat lingkungan atau organisasi. Untuk mengetahui informasi selengkapnya, lihat File resource.

      • Untuk menentukan apakah resource ada di tingkat lingkungan, lakukan panggilan API berikut menggunakan curl: curl -v -u <strong>email </strong>"https://api.enterprise.apigee.com/v1/organizations/myorg/environments/myenv/resourcefiles/java/myresource.jar"

      • Untuk menentukan apakah resource ada pada tingkat organisasi, lakukan panggilan API berikut menggunakan curl, dengan menghilangkan detail lingkungan: curl -v -u email "https://api.enterprise.apigee.com/v1/organizations/myorg/resourcefiles/java/myresource.jar"

      Jika Anda menerima kode status 404 sebagai respons untuk API ini, berarti resource tidak ada di tingkat organisasi dan lingkungan.

    Jika resource tidak tersedia di tingkat proxy, organisasi, dan lingkungan API, error deployment akan muncul:

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

Resolusi

Pastikan resource yang ditentukan dalam elemen <ResourceURL> ada di tingkat organisasi, lingkungan, atau proxy API. Untuk mengetahui informasi selengkapnya, lihat File resource.

Untuk memperbaiki contoh kebijakan Javacallout yang ditampilkan di atas, upload file JAR di tingkat yang sesuai (tingkat lingkungan, organisasi, atau proxy API).

NoResourceForURL

Pesan Error

Penyebaran proxy API melalui Edge UI atau Edge API pengelolaan gagal dengan pesan kesalahan ini:

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>

Contoh Pesan Error

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

Contoh Screenshot Error

Penyebab

Error ini dapat terjadi jika file resource rusak atau diupload sebagian, meskipun file tersebut tampak ada di tingkat organisasi, lingkungan, atau proxy API.

Diagnosis

  1. Identifikasi lingkungan dan nama resource. Anda dapat menemukan informasi ini dalam pesan error. Misalnya, dalam error berikut, nama lingkungan adalah test dan Nama Resource yang digunakan dalam elemen <ResourceURL> adalah myresource.jar.

    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. Pastikan resource diupload di tingkat organisasi, lingkungan, atau proxy API. Pada contoh di bawah, Anda dapat melihat bahwa resource myresource.jar diupload pada level proxy API.

    Resource dapat tersedia di tingkat lingkungan atau organisasi. Untuk mengetahui informasi selengkapnya, lihat File resource.

    Untuk menentukan apakah resource ada di tingkat lingkungan, lakukan panggilan API berikut menggunakan curl: curl -v -u <strong>email </strong>"https://api.enterprise.apigee.com/v1/organizations/myorg/environments/myenv/resourcefiles/java/myresource.jar"

    Untuk menentukan apakah resource ada pada tingkat organisasi, lakukan panggilan API berikut menggunakan curl, dengan menghilangkan detail lingkungan: curl -v -u email "https://api.enterprise.apigee.com/v1/organizations/myorg/resourcefiles/java/myresource.jar"

    Jika Anda menerima kode status 404 sebagai respons untuk API ini, berarti resource tidak ada di tingkat organisasi dan lingkungan.

Resolusi

  1. Jika Anda menentukan bahwa resource ada di tingkat proxy, organisasi, atau lingkungan API, hapus resource dan upload ulang, seperti yang dijelaskan pada langkah 2. Jika tidak, lewati ke langkah 3.
  2. Untuk menghapus resource di level proxy API, buka tab Resources pada panel Navigator di editor proxy API, lalu klik tombol "X" di samping resource seperti yang ditampilkan di bawah ini.

    Untuk menghapus resource di tingkat lingkungan atau organisasi, gunakan kata kerja DELETE pada panggilan API yang digunakan sebelumnya dalam langkah diagnosis. Misalnya, untuk menghapus resource di tingkat lingkungan, masukkan perintah berikut: curl -X DELETE -v -u <strong>email </strong>"https://api.enterprise.apigee.com/v1/organizations/myorg/environments/myenv/resourcefiles/java/myresource.jar"

  3. Upload file JAR) di level yang sesuai (tingkat lingkungan, organisasi, atau proxy API.

  4. Jika mengupload ulang materi tidak membantu, Pemroses Pesan yang terpengaruh harus dimulai ulang. Jika Anda menggunakan Apigee Edge di Cloud, hubungi Dukungan Apigee. Jika Anda pengguna Private Cloud, lihat Memulai, menghentikan, memulai ulang, dan memeriksa status Apigee Edge.

JavaCalloutInstantiationFailed

Pesan Error

Penyebaran proxy API melalui Edge UI atau Edge API pengelolaan gagal dengan pesan kesalahan ini:

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>

Atau

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>

Contoh Pesan Error

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

Contoh Screenshot Error

Penyebab

Berikut adalah penyebab umum error ini

Cause Deskripsi
File JAR tidak ada File JAR yang berisi class Java yang diidentifikasi dalam error tidak diupload.
File JAR rusak File JAR yang berisi class Java yang teridentifikasi dalam error rusak/diupload sebagian.
File Kelas tidak ada File class Java yang diidentifikasi dalam error bukan merupakan bagian dari file JAR yang ditentukan di >ResourceURL< atau file JAR dependen.
Masalah Kode Java Terjadi error dalam kode, seperti konstruktor tidak ada, masalah dependensi kode, atau masalah lainnya.

Langkah Diagnosis Umum

  1. Identifikasi nama lingkungan dan Class yang gagal diimpor. Misalnya dalam nama lingkungan pesan error berikut adalah test dan Nama class adalah my.class:

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

    Penyebab: File JAR tidak ada

Diagnosis

  1. Tentukan file JAR yang seharusnya berisi class (yang diidentifikasi pada langkah #1 di atas) dan yang tidak dapat dibuat instance-nya.
  2. Periksa apakah file JAR tertentu diupload di tingkat lingkungan, organisasi, atau proxy API. Jika file JAR tidak diupload ke level mana pun, buka Resolution.
  3. Jika file JAR diupload, buka Cause: Corrupted JAR File.

Resolusi

  1. Jika file JAR rusak atau diupload sebagian, buat ulang JAR dan upload file JAR di tingkat yang sesuai (proxy API, organisasi, atau tingkat lingkungan).
  2. Deploy ulang proxy API.

Penyebab: File JAR rusak

Diagnosis

  1. Tentukan file JAR yang seharusnya berisi class (yang diidentifikasi pada langkah #1 di atas) yang tidak dapat dibuat instance-nya.
  2. Periksa apakah file JAR tertentu rusak. Misalnya, jika Anda tidak dapat membatalkan penyimpanan file karena file rusak atau diupload sebagian. Jika rusak, buka Resolusi.
  3. Jika file JAR tidak rusak, buka Cause: Missing Class File.

Resolusi

  1. Membuat ulang file JAR yang rusak dan mengupload file JAR) di tingkat yang sesuai (proxy API, organisasi, atau tingkat lingkungan.
  2. Deploy ulang proxy API.

Penyebab: File Kelas Tidak Ada

Diagnosis

  1. Periksa apakah file class Java tertentu (yang diidentifikasi pada langkah #1 di atas) adalah bagian dari file JAR yang ditentukan di >ResourceURL< atau file JAR dependen apa pun.
  2. Jika file class tidak ada dalam file JAR mana pun, Anda telah menentukan penyebab error. Buka Resolusi.
  3. Jika file class ada di salah satu file JAR yang ditentukan dalam kebijakan Java callout, pasti ada masalah dengan kode Java atau class dependen yang menyebabkan error ini. a. Jika Anda adalah pengguna Cloud Publik, hubungi Dukungan Apigee. b. Jika Anda adalah pengguna Private Cloud, lanjutkan ke Penyebab: Masalah Kode Java.

Resolusi

  1. Buat ulang JAR dengan file class yang tidak ada dan upload file JAR di level yang sesuai (tingkat lingkungan, organisasi, atau proxy API).
  2. Deploy ulang Proxy API.

Penyebab: Masalah Kode Java

Langkah-langkah Diagnostik hanya untuk Pengguna Private Cloud

Diagnosis

  1. Periksa log Pemroses Pesan (/opt/apigee/var/log/edge-message-processor/system.log dan /opt/apigee/var/log/edge-message-processor/configurations.log).
  2. Anda mungkin melihat pengecualian yang mirip dengan contoh di bawah ini:

    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. Baca pengecualian dengan cermat untuk memahami alasan kegagalan. Biasanya, hal ini bisa menunjukkan beberapa masalah pada kode Java Anda.

Resolusi

  1. Bergantung pada penyebab kegagalan, Anda mungkin harus memperbaiki masalah tersebut di kode Java.
  2. Buat ulang JAR dengan file class yang tidak ada dan upload file JAR di level yang sesuai (tingkat lingkungan, organisasi, atau proxy API).
  3. Deploy ulang Proxy API.

Mengupload file JAR

Pastikan elemen resource dengan semua class yang diperlukan ada di tingkat Proxy API, lingkungan, atau organisasi. Untuk mengetahui informasi selengkapnya, lihat File resource.

  1. Untuk mengupload resource di level proxy API, klik + (tanda plus) di tab Resources, lalu pilih Import file dan upload file dari mesin lokal Anda. Nama file harus cocok dengan >ResourceURL< , tetapi tanpa awalan java://.

  2. Jika Anda ingin resource tersedia untuk lebih dari satu proxy API di lingkungan yang sama, upload resource tersebut ke lingkungan. Anda harus menggunakan Edge API, seperti yang dijelaskan dalam File resource.

    Misalnya, masukkan panggilan API berikut dari komputer lokal untuk mengupload file yang ditentukan di tingkat lingkungan:

    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"
    

    Lakukan panggilan API dari direktori yang sama dengan file.

  3. Agar file tersedia untuk semua proxy API dalam semua lingkungan di organisasi, Anda dapat menghapus detail lingkungan di basepath. Contoh:

    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"