Pemecahan masalah error deployment kebijakan JavaCallout

Anda sedang melihat dokumentasi Apigee dan Apigee hybrid.
Lihat dokumentasi Apigee Edge.

ResourceDoesNotExist

Pesan Error

Deployment proxy API melalui UI atau API Apigee gagal dengan pesan error 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

Terjadi error saat men-deploy revisi 1 untuk pengujian.

Penyebab

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

Diagnosis

  1. Identifikasi lingkungan dan nama 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. Jika tidak, hal ini adalah penyebab error.

    • Buka tab Resource di panel Navigator editor proxy API untuk melihat semua resource yang diupload di tingkat proxy API. Dalam contoh ini, proxy API tidak memiliki resource yang diupload.

      Tab Resource editor proxy API di panel Navigator.

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

      • Untuk menentukan apakah resource ada di tingkat lingkungan, lakukan panggilan API berikut menggunakan curl:

        curl \
        "https://apigee.googleapis.com/v1/organizations/$ORG/environments/$ENV/resourcefiles/java/myresource.jar" \
        -H "Authorization: Bearer $TOKEN"

        Dengan $TOKEN ditetapkan ke token akses OAuth 2.0 Anda, seperti yang dijelaskan dalam Mendapatkan token akses OAuth 2.0. Untuk informasi tentang opsi curl yang digunakan dalam contoh ini, lihat Menggunakan curl. Untuk deskripsi variabel lingkungan yang digunakan, lihat Menetapkan variabel lingkungan untuk permintaan Apigee API.

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

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

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

Resolusi

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

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

NoResourceForURL

Pesan Error

Deployment proxy API melalui UI atau API Apigee gagal dengan pesan error 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

Error dalam deployment untuk pengujian lingkungan.

Penyebab

Error ini dapat terjadi jika file resource rusak atau diupload sebagian, meskipun file tersebut tampaknya ada di tingkat proxy atau lingkungan 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 proxy atau lingkungan API. Pada contoh di bawah, Anda dapat melihat bahwa resource myresource.jar diupload di tingkat proxy API.

    Resource proxy API.

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

    Untuk menentukan apakah resource ada di tingkat lingkungan, lakukan panggilan API berikut menggunakan curl:

    curl \
    "https://apigee.googleapis.com/v1/organizations/$ORG/environments/$ENV/resourcefiles/java/myresource.jar" \
    -H "Authorization: Bearer $TOKEN"

    Dengan $TOKEN ditetapkan ke token akses OAuth 2.0 Anda, seperti yang dijelaskan dalam Mendapatkan token akses OAuth 2.0. Untuk informasi tentang opsi curl yang digunakan dalam contoh ini, lihat Menggunakan curl.

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

Resolusi

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

    Untuk menghapus resource di tingkat proxy API, klik Hapus.

    Untuk menghapus resource di lingkungan, 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 \
    "https://apigee.googleapis.com/v1/organizations/$ORG/environments/$ENV/resourcefiles/java/myresource.jar" \
    -H "Authorization: Bearer $TOKEN"

    Dengan $TOKEN ditetapkan ke token akses OAuth 2.0 Anda, seperti yang dijelaskan dalam Mendapatkan token akses OAuth 2.0. Untuk informasi tentang opsi curl yang digunakan dalam contoh ini, lihat Menggunakan curl.

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

  4. Jika mengupload ulang resource tidak membantu, hubungi Dukungan Apigee.

JavaCalloutInstantiationFailed

Pesan Error

Deployment proxy API melalui UI atau API Apigee gagal dengan pesan error 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

Error dalam deployment untuk pengujian lingkungan.

Penyebab

Berikut adalah penyebab umum error ini

Penyebab 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 diidentifikasi dalam error rusak/diupload sebagian.
File Class tidak ada File class Java yang diidentifikasi dalam error bukan bagian dari file JAR yang ditentukan di >ResourceURL< atau file JAR dependen.
Masalah Kode Java Ada error dalam kode, seperti konstruktor yang tidak ada, masalah dependensi kode, atau masalah lainnya.

Langkah Diagnosis Umum

  1. Identifikasi nama lingkungan dan Class yang gagal diimpor. Misalnya, dalam pesan error berikut, nama lingkungan 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 (diidentifikasi pada langkah #1 di atas) dan yang tidak dapat dibuat instance-nya.
  2. Periksa apakah file JAR tertentu diupload di tingkat proxy atau lingkungan API. Jika file JAR tidak diupload ke tingkat mana pun, buka Penyelesaian.
  3. Jika file JAR diupload, buka Penyebab: File JAR Rusak.

Resolusi

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

Penyebab: File JAR rusak

Diagnosis

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

Resolusi

  1. Build ulang file JAR yang rusak dan upload file JAR) di tingkat yang sesuai (proxy API atau tingkat lingkungan.
  2. Deploy ulang proxy API.

Penyebab: File Class Tidak Ada

Diagnosis

  1. Periksa apakah file class Java tertentu (diidentifikasi pada langkah #1 di atas) adalah bagian dari file JAR yang ditentukan di >ResourceURL< atau file JAR dependen.
  2. Jika file class tidak ada di 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 JavaCallout, berarti ada masalah dengan kode Java atau class dependen yang menyebabkan error ini. Untuk mendapatkan bantuan, hubungi Dukungan Apigee.

Resolusi

  1. Build ulang JAR dengan file class yang hilang dan upload file JAR di tingkat yang sesuai (tingkat proxy atau lingkungan API).
  2. Deploy ulang Proxy API.

Mengupload file JAR

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

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

    Di tab Resource, pilih Impor file.

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

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

    curl -H "Content-Type: application/octet-stream" \
    -X POST  -H "Authorization: Bearer $TOKEN" --data-binary @{classes.jar} \
    "https://apigee.googleapis.com/v1/organizations/$ORG/environments/$ENV/resourcefiles?name=myresouce.jar&type=java"

    Dengan $TOKEN ditetapkan ke token akses OAuth 2.0 Anda, seperti yang dijelaskan dalam Mendapatkan token akses OAuth 2.0. Untuk informasi tentang opsi curl yang digunakan dalam contoh ini, lihat Menggunakan curl.

    Buat panggilan API dari direktori yang sama dengan file.

  3. Untuk menyediakan file bagi semua proxy API dalam semua lingkungan di organisasi, Anda dapat menghapus detail lingkungan di jalur dasar. Contoh:

    curl -H "Content-Type: application/octet-stream" \
    -X POST  -H "Authorization: Bearer $TOKEN" --data-binary @{classes.jar} \
    "https://apigee.googleapis.com/v1/organizations/$ORG/resourcefiles?name=myresouce.jar&type=java"

    Dengan $TOKEN ditetapkan ke token akses OAuth 2.0 Anda, seperti yang dijelaskan dalam Mendapatkan token akses OAuth 2.0. Untuk informasi tentang opsi curl yang digunakan dalam contoh ini, lihat Menggunakan curl.