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 di 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 seluruh permintaan dan respons HTTP. Variabel alur Edge bawaan request
, response
, dan message
merupakan jenis pesan. Untuk mempelajari variabel pesan lebih lanjut, lihat Referensi variabel.
Diagnosis
Mengidentifikasi kebijakan Info Layanan tempat error terjadi dan nama variabel yang jenisnya salah. Anda dapat menemukan kedua item ini di elemen
faultstring
respons error. Misalnya, dalamfaultstring
berikut, nama kebijakannya adalahExecuteGeocodingRequest
dan variabelnya adalahPostalCode
:"faultstring": "ServiceCallout[ExecuteGeocodingRequest]: request variable PostalCode value is not of type Message"
Dalam XML kebijakan Info Layanan yang gagal, pastikan nama variabel yang ditetapkan dalam elemen
<Request>
cocok dengan nama variabel yang diidentifikasi pada string fault (langkah #1 di atas). Misalnya, kebijakan berikut menentukan variabel permintaan bernamaPostalCode
, yang cocok dengan yang ada difaultstring
:<?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>
Tentukan apakah variabel ini berjenis pesan atau bukan:
- Cari kode dalam paket Proxy API, tempat variabel ditentukan terlebih dahulu.
- Pada umumnya, Anda akan mendapati bahwa variabel masalah dibuat dan diisi dalam kebijakan lain yang dijalankan sebelum kebijakan Info Layanan. Misalnya, kebijakan Tetapkan Pesan biasanya digunakan untuk membuat dan mengisi variabel dalam alur proxy API.
- Setelah mengetahui kebijakan tempat variabel ditetapkan dan diisi terlebih dahulu, Anda harus menentukan jenis variabel tersebut seperti berikut:
- Periksa nilai atribut
type
(jika ada). - Jika atribut
type
tidak ada, variabel tersebut dianggap sebagai string.
- Periksa nilai atribut
- Jika jenis variabel bukan pesan (seperti string), maka itulah penyebab error. Anda dapat mempelajari variabel umum dan jenisnya dalam Referensi variabel.
Sebagai contoh, asumsikan variabel PostalCode
yang dirujuk dalam kebijakan Info Layanan dibuat dalam kebijakan Tetapkan Pesan berikut. Perhatikan bahwa PostalCode
diberi nilai variabel alur request.queryparam.postalcode
. Nilai ini adalah 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>
dari kebijakan Info 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 merupakan jenis pesan (dalam contoh ini adalah string), Anda akan menerima kode error: steps.servicecallout.RequestVariableNotMessageType
.
Resolusi
Pastikan variabel yang ditetapkan di elemen <Request>
di kebijakan Info Layanan yang gagal adalah variabel alur jenis pesan yang ada. Atau, Anda dapat membuat variabel jenis pesan baru langsung di kebijakan Info 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 berjenis pesan. Misalnya, variabel GeocodingRequest
yang ditetapkan dalam kebijakan Tetapkan Pesan adalah jenis pesan, dan akan berfungsi dengan baik dalam kebijakan Info 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 variabel tersebut 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
merupakan jenis pesan. Untuk mempelajari variabel pesan lebih lanjut, lihat Referensi variabel.
Diagnosis
Identifikasi kebijakan Info Layanan tempat error terjadi dan nama variabel yang jenisnya salah. Anda dapat menemukan kedua item ini di elemen
faultstring
respons error. Misalnya, dalamfaultstring
berikut, nama kebijakannya adalahExecuteGeocodingRequest
dan variabelnya adalahvar_response
:"faultstring": "ServiceCallout[ExecuteGeocodingRequest]: request variable var_response value is not of type Message"
Dalam XML kebijakan Service Callout yang gagal, pastikan nama variabel yang ditetapkan di elemen
<Request>
cocok dengan nama variabel yang diidentifikasi dalam string error (langkah #1 di atas). Misalnya, kebijakan berikut menentukan variabel permintaan bernamavar_response
, yang cocok dengan yang ada difaultstring
:<?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>
Tentukan apakah variabel merupakan jenis pesan permintaan atau bukan:
- Cari kode dalam paket Proxy API, tempat variabel ditentukan terlebih dahulu.
- Pada umumnya, Anda akan mendapati bahwa variabel masalah dibuat dan diisi dalam kebijakan lain yang dijalankan sebelum kebijakan Info Layanan. Misalnya, kebijakan Tetapkan Pesan biasanya digunakan untuk membuat dan mengisi variabel dalam alur proxy API.
- Setelah mengetahui kebijakan tempat variabel ditetapkan dan diisi terlebih dahulu, Anda harus menentukan jenis variabel tersebut seperti berikut:
- Periksa nilai atribut
type
(jika ada). - Jika atribut
type
tidak ada, variabel tersebut dianggap sebagai string.
- Periksa nilai atribut
- Jika jenis variabel bukan jenis request message, maka itulah penyebab error. Anda dapat mempelajari variabel umum dan jenisnya dalam Referensi variabel.
Sebagai contoh, asumsikan variabel var_response
yang dirujuk dalam kebijakan Info Layanan dibuat dalam kebijakan Tetapkan Pesan berikut. Perlu diperhatikan 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 dalam elemen <Request>
pada kebijakan Info 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 merupakan jenis pesan permintaan (jenisnya adalah pesan respons), Anda akan menerima kode error: steps.servicecallout.RequestVariableNotRequestMessageType
.
Resolusi
Pastikan variabel yang ditetapkan dalam elemen <Request>
di kebijakan Info Layanan yang gagal adalah variabel jenis pesan permintaan yang ada. Atau, Anda dapat membuat variabel jenis pesan permintaan baru langsung di kebijakan Info Layanan (seperti yang dijelaskan dalam dokumentasi kebijakan) dan menggunakannya.
Untuk memperbaiki kebijakan, Anda harus mengubah elemen <Request>
untuk menentukan variabel yang sudah ada atau variabel baru yang berjenis pesan permintaan, dan akan berfungsi di kebijakan Info 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 dalam kebijakan Info Layanan salah atau memiliki nama host yang tidak valid atau tidak dapat dijangkau. |
Error server backend | Server backend akan menampilkan respons error 4XX atau 5XX. |
Penyebab: URL tidak valid atau salah format
Format URL target dalam kebijakan Info Layanan salah atau memiliki nama host yang tidak valid atau tidak dapat dijangkau.
Diagnosis
Mengidentifikasi kebijakan Info Layanan yang menyebabkan error. Nama kebijakan muncul di elemen
faultstring
respons error. Misalnya, dalamfaultstring
berikut, nama kebijakan Service Callout yang gagal adalahExecuteGeocodingRequest
."faultstring": "ServiceCallout[ExecuteGeocodingRequest]"
Dalam kebijakan Info Layanan yang gagal, periksa elemen
<URL>
. Jika formatnya salah atau nama host tidak valid atau tidak dapat dijangkau, itulah penyebab error ini. 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 protokolhttp://
, tetapi tidak memiliki nama host yang valid; oleh karena itu, kebijakan Pemanggilan 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 akan menampilkan respons error 4XX atau 5XX.
Diagnosis
Mengidentifikasi kebijakan Info Layanan yang menyebabkan error. Nama kebijakan muncul di elemen
faultstring
respons error. Misalnya, difaultstring
berikut, nama kebijakan Pemanggilan Layanan yang gagal adalahExecuteGeocodingRequest
."faultstring": "ServiceCallout[ExecuteGeocodingRequest]
Periksa
faultstring
dalam isi respons error dan periksa apakah ada kode respons 4XX atau 5XX yang tercantum diReason
. Misalnya, faultstring berikut dengan jelas menunjukkan bahwa kode respons 502 ditampilkan 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 halnya melakukan error 4XX atau 5XX. Lihat Playbook error runtime (4XX/5XX) untuk mendapatkan petunjuk tentang cara memecahkan masalah dan menyelesaikan error 4XX atau 5XX.