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> dari kebijakan Panggilan Layanan bukan bertipe message. Jika variabel adalah string atau jenis non-pesan lainnya, Anda akan melihat error ini.
Variabel jenis pesan merepresentasikan seluruh permintaan dan respons HTTP. Variabel alur Edge bawaan request, response, dan message berjenis pesan. Untuk mempelajari lebih lanjut variabel pesan, lihat Referensi variabel.
Diagnosis
Identifikasi kebijakan Panggilan Layanan tempat terjadinya error dan nama variabel yang jenisnya salah. Anda dapat menemukan kedua item ini di elemen
faultstringrespons error. Misalnya, dalamfaultstringberikut, nama kebijakan adalahExecuteGeocodingRequestdan variabelnya adalahPostalCode:"faultstring": "ServiceCallout[ExecuteGeocodingRequest]: request variable PostalCode value is not of type Message"Dalam XML kebijakan Panggilan 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 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 tidak:
- Cari kode dalam paket Proxy API, tempat variabel ditentukan pertama kali.
- Dalam sebagian besar kasus, Anda akan menemukan bahwa variabel masalah dibuat dan diisi dalam kebijakan lain yang dijalankan sebelum kebijakan Panggilan Layanan. Misalnya, kebijakan Tetapkan Pesan umum digunakan untuk membuat dan mengisi variabel dalam alur Proxy API.
- Setelah mengetahui kebijakan tempat variabel ditentukan dan diisi terlebih dahulu, Anda perlu menentukan jenis variabel tersebut sebagai berikut:
- Periksa nilai atribut
type(jika ada). - Jika atribut
typetidak ada, variabel dianggap sebagai string.
- Periksa nilai atribut
- Jika jenis variabel adalah non-pesan (seperti string), maka itulah penyebab error. Anda dapat mempelajari variabel umum dan jenisnya di Referensi variabel.
Sebagai contoh, asumsikan variabel PostalCode yang dirujuk dalam kebijakan Panggilan 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 bahwa variabel PostalCode digunakan dalam elemen <Request> kebijakan Service Callout:
<?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 jenis pesan (dalam contoh ini adalah string), Anda akan menerima kode error: steps.servicecallout.RequestVariableNotMessageType.
Resolusi
Pastikan bahwa kumpulan variabel yang ditetapkan dalam elemen <Request> di kebijakan Info Layanan yang gagal adalah flow variable jenis pesan yang ada atau Anda dapat membuat variabel jenis pesan baru secara 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 berjenis pesan, dan akan berfungsi dengan baik dalam kebijakan Panggilan 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> dari kebijakan Panggilan Layanan bukan berjenis pesan permintaan. Jika variabel adalah jenis pesan respons, string, atau jenis lainnya, Anda akan melihat error ini.
Variabel jenis Message merepresentasikan seluruh permintaan dan respons HTTP. Variabel alur Edge bawaan request, response, dan message berjenis pesan. Untuk mempelajari lebih lanjut variabel pesan, lihat Referensi variabel.
Diagnosis
Identifikasi kebijakan Panggilan Layanan tempat terjadinya error dan nama variabel yang jenisnya salah. Anda dapat menemukan kedua item ini di elemen
faultstringrespons error. Misalnya, dalamfaultstringberikut, nama kebijakan adalahExecuteGeocodingRequestdan variabelnya adalahvar_response:"faultstring": "ServiceCallout[ExecuteGeocodingRequest]: request variable var_response value is not of type Message"Dalam XML kebijakan Panggilan 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 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 berjenis pesan permintaan atau tidak:
- Cari kode dalam paket Proxy API, tempat variabel ditentukan pertama kali.
- Dalam sebagian besar kasus, Anda akan menemukan bahwa variabel masalah dibuat dan diisi dalam kebijakan lain yang dijalankan sebelum kebijakan Panggilan Layanan. Misalnya, kebijakan Tetapkan Pesan umum digunakan untuk membuat dan mengisi variabel dalam alur Proxy API.
- Setelah mengetahui kebijakan tempat variabel ditentukan dan diisi terlebih dahulu, Anda perlu menentukan jenis variabel tersebut sebagai berikut:
- Periksa nilai atribut
type(jika ada). - Jika atribut
typetidak ada, variabel dianggap sebagai string.
- Periksa nilai atribut
- Jika jenis variabel bukan jenis pesan permintaan, maka itulah penyebab error. Anda dapat mempelajari variabel umum dan jenisnya di Referensi variabel.
Sebagai contoh, asumsikan variabel var_response yang dirujuk dalam kebijakan Panggilan 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 bahwa variabel var_response digunakan dalam elemen <Request> kebijakan Service Callout.
<?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 berjenis pesan permintaan (jenisnya adalah pesan respons), Anda akan menerima kode error: steps.servicecallout.RequestVariableNotRequestMessageType.
Resolusi
Pastikan variabel yang ditetapkan dalam elemen <Request> di kebijakan Panggilan Layanan yang gagal adalah variabel jenis pesan permintaan yang ada atau Anda dapat membuat variabel jenis pesan permintaan baru langsung di kebijakan Panggilan 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 permintaan, dan variabel tersebut akan berfungsi 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>
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 | URL target dalam kebijakan Panggilan Layanan salah format 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
URL target dalam kebijakan Panggilan Layanan salah format atau memiliki nama host yang tidak valid atau tidak dapat dijangkau.
Diagnosis
Identifikasi kebijakan Service Callout yang menyebabkan error. Nama kebijakan muncul di elemen
faultstringrespons error. Misalnya, dalamfaultstringberikut, nama kebijakan Panggilan Layanan yang gagal adalahExecuteGeocodingRequest."faultstring": "ServiceCallout[ExecuteGeocodingRequest]"Dalam kebijakan Service Callout yang gagal, periksa elemen
<URL>. Jika formatnya salah atau memiliki nama host yang tidak valid atau tidak dapat dijangkau, maka itulah penyebab error ini. Misalnya, kebijakan Service Callout 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 Panggilan Layanan gagal dengan error:Execution of ServiceCallout ExecuteGeocodingRequest failed. Reason: Host not reachable.
Resolusi
Pastikan elemen <URL> dalam kebijakan Panggilan Layanan yang gagal memiliki URL yang valid dengan nama host yang dapat dijangkau.
Untuk memperbaiki kebijakan Panggilan 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
Identifikasi kebijakan Service Callout yang menyebabkan error. Nama kebijakan muncul di elemen
faultstringrespons error. Misalnya, dalamfaultstringberikut, nama kebijakan Panggilan Layanan yang gagal adalahExecuteGeocodingRequest."faultstring": "ServiceCallout[ExecuteGeocodingRequest]Periksa
faultstringdalam isi respons error dan periksa apakah ada kode respons 4XX atau 5XX yang tercantum dalamReason. 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 error 4XX atau 5XX lainnya. Lihat Playbook error runtime (4XX/5XX) untuk mengetahui petunjuk tentang cara memecahkan masalah dan mengatasi error 4XX atau 5XX.