Pemecahan masalah error runtime Info Layanan

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

RequestVariableNotMessageType

Kode error

steps.servicecallout.RequestVariableNotMessageType

Isi respons error

{
    "fault": {
        "faultstring": "ServiceCallout[policy_name]: request variable [variable_name] value is not of type Message",
        "detail": {
            "errorcode": "steps.servicecallout.RequestVariableNotMessageType"
        }
    }
}

Penyebab

Error ini terjadi jika variabel yang ditentukan dalam elemen <Request> kebijakan Info Layanan bukan jenis pesan. Jika variabelnya berupa string atau jenis non-pesan lainnya, Anda akan melihat error ini.

Variabel jenis pesan mewakili keseluruhan permintaan dan respons HTTP. Variabel alur Edge bawaan request, response, dan message adalah jenis pesan. Untuk mempelajari variabel pesan lebih lanjut, baca artikel Referensi variabel.

Diagnosis

  1. Identifikasi kebijakan Pemanggilan Layanan tempat error terjadi dan nama variabel yang jenisnya salah. Anda dapat menemukan kedua item ini dalam elemen faultstring respons error. Misalnya, dalam faultstring berikut, nama kebijakannya adalah ExecuteGeocodingRequest dan variabelnya adalah PostalCode:

    "faultstring": "ServiceCallout[ExecuteGeocodingRequest]: request variable PostalCode value is not of type Message"

  2. Pada XML kebijakan Pemanggilan Layanan yang gagal, pastikan nama variabel yang ditetapkan dalam elemen <Request> cocok dengan nama variabel yang diidentifikasi dalam string kesalahan (langkah #1 di atas). Misalnya, kebijakan berikut menentukan variabel permintaan bernama PostalCode, yang cocok dengan yang ada di faultstring:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ServiceCallout name="ExecuteGeocodingRequest">
        <Request variable="PostalCode"/>
        <Response>GeocodingResponse</Response>
        <HTTPTargetConnection>
            <URL>http://maps.googleapis.com/maps/api/geocode/json</URL>
        </HTTPTargetConnection>
    </ServiceCallout>
    
  3. Tentukan apakah variabel ini berjenis pesan atau bukan:

    1. Temukan kode dalam paket Proxy API, tempat variabel ditentukan terlebih dahulu.
    2. Pada umumnya, Anda akan menemukan bahwa variabel masalah dibuat dan diisi dalam kebijakan lain yang dijalankan sebelum kebijakan Pemanggilan Layanan. Misalnya, kebijakan Tetapkan Pesan biasanya digunakan untuk membuat dan mengisi variabel di alur proxy API.
    3. Setelah mengetahui kebijakan yang menentukan dan mengisi variabel terlebih dahulu, Anda perlu menentukan jenis variabel tersebut sebagai berikut:
      • Periksa nilai atribut type (jika ada).
      • Jika atribut type tidak ada, variabel akan dianggap sebagai string.
    4. Jika jenis variabel bukan pesan (seperti string), itulah penyebab error. Anda dapat mempelajari variabel umum dan jenisnya di Referensi variabel.

Sebagai contoh, asumsikan variabel PostalCode yang dirujuk dalam kebijakan Pemanggilan Layanan dibuat dalam kebijakan Tetapkan Pesan berikut. Perhatikan bahwa PostalCode diberi nilai variabel flow request.queryparam.postalcode. Nilai ini berupa string karena tidak ada atribut type dalam penetapan variabel.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage name="GenerateGeocodingRequest">
        <AssignTo createNew="true" type="request">GeocodingRequest</AssignTo>
    <Set>
        <QueryParams>
            <QueryParam name="address">{request.queryparam.postalcode}</QueryParam>
            <QueryParam name="region">{request.queryparam.country}</QueryParam>
            <QueryParam name="sensor">false</QueryParam>
        </QueryParams>
        <Verb>GET</Verb>
    </Set>
    <AssignVariable>
        <Name>PostalCode</Name>
        <Ref>request.queryparam.postalcode</Ref>
    </AssignVariable>
    <AssignVariable>
        <Name>Country</Name>
        <Ref>request.queryparam.country</Ref>
    </AssignVariable>
</AssignMessage>

Sekarang, ingat kembali bahwa variabel PostalCode digunakan dalam elemen <Request> dalam kebijakan Pemanggilan Layanan:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ServiceCallout name="ExecuteGeocodingRequest">
    <Request variable="PostalCode"/>
    <Response>GeocodingResponse</Response>
    <HTTPTargetConnection>
        <URL>http://maps.googleapis.com/maps/api/geocode/json</URL>
    </HTTPTargetConnection>
</ServiceCallout>

Karena PostalCode bukan pesan jenis (ini adalah string dalam contoh ini), Anda menerima kode error: steps.servicecallout.RequestVariableNotMessageType.

Resolusi

Pastikan variabel yang ditetapkan dalam elemen <Request> di kebijakan Pemanggilan Layanan yang gagal adalah variabel alur jenis pesan yang ada atau Anda dapat membuat variabel jenis pesan baru secara langsung di kebijakan Pemanggilan Layanan (seperti yang dijelaskan dalam dokumentasi kebijakan) dan menggunakannya.

Untuk memperbaiki kebijakan, Anda harus mengubah elemen <Request> untuk menentukan variabel yang sudah ada atau baru yang merupakan jenis pesan. Misalnya, variabel GeocodingRequest yang ditetapkan dalam kebijakan Tetapkan Pesan adalah jenis pesan, dan akan berfungsi dengan baik dalam kebijakan Pemanggilan Layanan. Contoh:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ServiceCallout name="ExecuteGeocodingRequest">
    <Request variable="GeocodingRequest"/>
    <Response>GeocodingResponse</Response>
    <HTTPTargetConnection>
        <URL>http://maps.googleapis.com/maps/api/geocode/json</URL>
    </HTTPTargetConnection>
</ServiceCallout>

RequestVariableNotRequestMessageType

Kode error

steps.servicecallout.RequestVariableNotRequestMessageType

Isi respons error

{
    "fault": {
        "faultstring": "ServiceCallout[policy_name]: request variable [variable_name] value is not of type Request Message",
        "detail": {
            "errorcode": "steps.servicecallout.RequestVariableNotRequestMessageType"
        }
    }
}

Penyebab

Error ini terjadi jika variabel yang ditentukan dalam elemen <Request> kebijakan Info Layanan bukan jenis pesan permintaan. Jika variabelnya adalah jenis pesan respons, string, atau jenis lainnya, Anda akan melihat error ini.

Variabel jenis Pesan mewakili seluruh permintaan dan respons HTTP. Variabel alur Edge bawaan request, response, dan message adalah jenis pesan. Untuk mempelajari variabel pesan lebih lanjut, baca artikel Referensi variabel.

Diagnosis

  1. Identifikasi kebijakan Pemanggilan Layanan tempat error terjadi dan nama variabel yang jenisnya salah. Anda dapat menemukan kedua item ini dalam elemen faultstring respons error. Misalnya, dalam faultstring berikut, nama kebijakannya adalah ExecuteGeocodingRequest dan variabelnya adalah var_response:

    "faultstring": "ServiceCallout[ExecuteGeocodingRequest]: request variable var_response value is not of type Message"

  2. Pada XML kebijakan Pemanggilan Layanan yang gagal, pastikan nama variabel yang ditetapkan dalam elemen <Request> cocok dengan nama variabel yang diidentifikasi dalam string kesalahan (langkah #1 di atas). Misalnya, kebijakan berikut menentukan variabel permintaan bernama var_response, yang cocok dengan yang ada di faultstring:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ServiceCallout name="ExecuteGeocodingRequest">
        <Request variable="var_response"/>
        <Response>GeocodingResponse</Response>
        <HTTPTargetConnection>
            <URL>http://maps.googleapis.com/maps/api/geocode/json</URL>
        </HTTPTargetConnection>
    </ServiceCallout>
    
  3. Tentukan apakah variabel dari jenis pesan permintaan atau bukan:

    1. Temukan kode dalam paket Proxy API, tempat variabel ditentukan terlebih dahulu.
    2. Pada umumnya, Anda akan menemukan bahwa variabel masalah dibuat dan diisi dalam kebijakan lain yang dijalankan sebelum kebijakan Pemanggilan Layanan. Misalnya, kebijakan Tetapkan Pesan biasanya digunakan untuk membuat dan mengisi variabel di alur proxy API.
    3. Setelah mengetahui kebijakan yang menentukan dan mengisi variabel terlebih dahulu, Anda perlu menentukan jenis variabel tersebut sebagai berikut:
      • Periksa nilai atribut type (jika ada).
      • Jika atribut type tidak ada, variabel akan dianggap sebagai string.
    4. Jika jenis variabel bukan dari jenis pesan permintaan, berarti itulah penyebab error. Anda dapat mempelajari variabel umum dan jenisnya di Referensi variabel.

Sebagai contoh, asumsikan variabel var_response yang dirujuk dalam kebijakan Pemanggilan Layanan dibuat dalam kebijakan Tetapkan Pesan berikut. Perhatikan bahwa var_response diberi jenis response. Oleh karena itu, jenis variabel var_response adalah pesan respons.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage name="GenerateGeocodingRequest">
        <AssignTo createNew="true" type="request">GeocodingRequest</AssignTo>
    <AssignTo createNew="true" type="response">var_response</AssignTo>
    <Set>
        <QueryParams>
            <QueryParam name="address">{request.queryparam.postalcode}</QueryParam>
            <QueryParam name="region">{request.queryparam.country}</QueryParam>
            <QueryParam name="sensor">false</QueryParam>
        </QueryParams>
        <Verb>GET</Verb>
    </Set>
    <AssignVariable>
        <Name>PostalCode</Name>
        <Ref>request.queryparam.postalcode</Ref>
    </AssignVariable>
    <AssignVariable>
        <Name>Country</Name>
        <Ref>request.queryparam.country</Ref>
    </AssignVariable>
</AssignMessage>

Ingat kembali bahwa variabel var_response digunakan di elemen <Request> dalam kebijakan Pemanggilan Layanan.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ServiceCallout name="ExecuteGeocodingRequest">
    <Request variable="var_response"/>
    <Response>GeocodingResponse</Response>
    <HTTPTargetConnection>
        <URL>http://maps.googleapis.com/maps/api/geocode/json</URL>
    </HTTPTargetConnection>
</ServiceCallout>

Karena var_response bukan pesan permintaan jenis (jenisnya adalah pesan respons), Anda menerima kode error: steps.servicecallout.RequestVariableNotRequestMessageType.

Resolusi

Pastikan variabel yang ditetapkan dalam elemen <Request> di kebijakan Pemanggilan Layanan yang gagal adalah variabel jenis pesan permintaan yang ada atau Anda dapat membuat variabel jenis pesan permintaan baru secara langsung di kebijakan Pemanggilan Layanan (seperti yang dijelaskan dalam dokumentasi kebijakan) dan menggunakannya.

Untuk memperbaiki kebijakan, Anda harus mengubah elemen <Request> untuk menentukan variabel yang ada atau baru yang merupakan jenis pesan permintaan, dan variabel tersebut akan berfungsi di kebijakan Pemanggilan Layanan. Contoh:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ServiceCallout name="ExecuteGeocodingRequest">
    <Request variable="GeocodingRequest"/>
    <Response>GeocodingResponse</Response>
    <HTTPTargetConnection>
        <URL>http://maps.googleapis.com/maps/api/geocode/json</URL>
    </HTTPTargetConnection>
</ServiceCallout>

ExecutionFailed

Kode error

steps.servicecallout.ExecutionFailed

Isi respons error

{
    "fault": {
        "faultstring": "Execution of ServiceCallout [policy_name] failed. Reason: Host not reachable",
        "detail": {
            "errorcode": "steps.servicecallout.ExecutionFailed"
        }
    }
}

atau

{
    "fault": {
        "faultstring": "Execution of ServiceCallout [policy_name] failed. Reason: ResponseCode [http_code] is treated as error",
        "detail": {
            "errorcode": "steps.servicecallout.ExecutionFailed"
        }
    }
}

Kemungkinan penyebab

Kemungkinan penyebab error ini adalah:

Cause Deskripsi
URL tidak valid atau salah format Format URL target di kebijakan Info Layanan salah atau memiliki nama host yang tidak valid atau tidak dapat dijangkau.
Error server backend Server backend menampilkan respons error 4XX atau 5XX.

Penyebab: URL tidak valid atau salah format

Format URL target di kebijakan Info Layanan salah atau memiliki nama host yang tidak valid atau tidak dapat dijangkau.

Diagnosis

  1. Mengidentifikasi kebijakan Pemanggilan Layanan yang menyebabkan error. Nama kebijakan muncul dalam elemen faultstring respons error. Misalnya, dalam faultstring berikut, nama kebijakan Info Layanan yang gagal adalah ExecuteGeocodingRequest.

    "faultstring": "ServiceCallout[ExecuteGeocodingRequest]"

  2. Pada kebijakan Pemanggilan Layanan yang gagal, periksa elemen <URL>. Jika formatnya salah atau memiliki nama host yang tidak valid atau tidak dapat dijangkau, maka itulah penyebab error. Misalnya, kebijakan Info Layanan berikut menentukan <URL> yang tidak valid:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ServiceCallout name="ExecuteGeocodingRequest">
        <Request variable="GeocodingRequest"/>
        <Response>GeocodingResponse</Response>
        <HTTPTargetConnection>
            <URL>http://</URL>
        </HTTPTargetConnection>
    </ServiceCallout>
    

    Elemen <URL> hanya memiliki protokol http://, tetapi tidak memiliki nama host yang valid. Oleh karena itu, kebijakan Info Layanan gagal dengan error: Execution of ServiceCallout ExecuteGeocodingRequest failed. Reason: Host not reachable.

Resolusi

Pastikan elemen <URL> di kebijakan Info Layanan yang gagal memiliki URL yang valid dengan nama host yang dapat dijangkau.

Untuk memperbaiki kebijakan Info Layanan yang ditampilkan di atas, Anda dapat mengubah elemen <URL> untuk menentukan URL yang valid:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ServiceCallout name="ExecuteGeocodingRequest">
    <Request variable="GeocodingRequest"/>
    <Response>GeocodingResponse</Response>
    <HTTPTargetConnection>
        <URL>http://maps.googleapis.com/maps/api/geocode/json</URL>
    </HTTPTargetConnection>
</ServiceCallout>

Penyebab: Error server backend

Server backend menampilkan respons error 4XX atau 5XX.

Diagnosis

  1. Mengidentifikasi kebijakan Pemanggilan Layanan yang menyebabkan error. Nama kebijakan muncul dalam elemen faultstring respons error. Misalnya, dalam faultstring berikut, nama kebijakan Info Layanan yang gagal adalah ExecuteGeocodingRequest.

    "faultstring": "ServiceCallout[ExecuteGeocodingRequest]

  2. Periksa faultstring dalam isi respons error dan periksa apakah ada kode respons 4XX atau 5XX yang tercantum di Reason. Misalnya, faultstring berikut dengan jelas menunjukkan bahwa kode respons 502 dikembalikan dari server backend:

    "faultstring": "Execution of ServiceCallout ExecuteGeocodingRequest failed. Reason: ResponseCode 502 is treated as error"

Resolusi

Setelah menentukan kode respons error, Anda dapat memecahkan masalah ini seperti error 4XX atau 5XX. Lihat Playbook error runtime (4XX/5XX) untuk mendapatkan petunjuk tentang cara memecahkan masalah dan menyelesaikan error 4XX atau 5XX.