Anda sedang melihat dokumentasi Apigee Edge.
Buka dokumentasi
Apigee X. info
SourceMessageNotAvailable
Kode Error
steps.messagevalidation.SourceMessageNotAvailable
Isi respons error
{ "fault": { "faultstring": "source_var_name message is not available for[policy_name]", "detail": { "Errorcode": "steps.messagevalidation.SourceMessageNotAvailable" } } }
Contoh isi respons Error
{
"fault": {
"faultstring": "request message is not available for MessageValidation: SOAP-Message-Validation-1",
"detail": {
"errorcode": "steps.messagevalidation.SourceMessageNotAvailable"
}
}
}
Penyebab
Error ini terjadi jika variabel message yang ditentukan dalam elemen <Source>
kebijakan SOAPMessageValidation adalah:
- Di luar cakupan (tidak tersedia dalam alur tertentu tempat kebijakan dijalankan) atau
- tidak dapat diselesaikan (tidak ditentukan)
Misalnya, error ini terjadi jika elemen <Source>
dalam kebijakan SOAPMessageValidation disetel ke variabel yang tidak ada dalam alur tempat kebijakan dijalankan.
Diagnosis
Identifikasi nama kebijakan SOAPMessageValidation tempat error terjadi dan nama variabel
source
dari string error. Misalnya, dalam string kesalahan berikut, nama kebijakan SOAPMessageValidation adalahSOAP-Message-Validation-1
dan variabelsource
adalahrequest
:"faultstring": "request message is not available for MessageValidation: SOAP-Message-Validation-1"
Dalam XML kebijakan SOAPMessageValidation yang gagal, pastikan nama variabel yang ditetapkan di elemen
<Source>
cocok dengan nama variabel yang diidentifikasi dalam string error (Langkah 1 di atas).Misalnya, kebijakan SOAPMessageValidation berikut menentukan variabel bernama
request
di elemen<Source>
, yang cocok dengan yang ada di string error:<MessageValidation async="false" continueOnError="false" enabled="true" name="SOAP-Message-Validation-1"> <DisplayName>SOAP Message Validation-1</DisplayName> <Properties/> <Element namespace="http://schemas.xmlsoap.org/soap/prices">GetPriceResponse</Element> <SOAPMessage/> <Source>request</Source> <ResourceURL>xsd://Script-1.xsd</ResourceURL> </MessageValidation>
Tentukan apakah variabel yang digunakan dalam elemen
<Source>
ditetapkan dan tersedia dalam alur tempat kebijakan SOAPMessageValidation dijalankan.Jika variabel adalah:
- di luar cakupan (tidak tersedia dalam alur tertentu tempat kebijakan dijalankan) atau
- tidak dapat diselesaikan (tidak ditentukan)
maka itulah penyebab error.
Sebagai contoh, misalkan kebijakan SOAPMessageValidation yang ditampilkan di atas dijalankan dalam alur respons. Namun, variabel
request
yang digunakan dalam contoh elemen<Source>
di atas hanya tersedia dalam alur permintaan.Karena variabel
request
tidak ada dalam alur respons, Anda akan menerima error berikut:"faultstring": "request message is not available for MessageValidation: SOAP-Message-Validation-1"
Resolusi
Pastikan variabel yang ditetapkan di elemen <Source>
dari kebijakan SOAPMessageValidation yang gagal ditentukan dan ada dalam alur tempat kebijakan dijalankan.
Untuk memperbaiki contoh yang ditampilkan di atas, Anda dapat mengubah elemen <Source
> untuk menggunakan
variabel response
, yang ada dalam alur respons:
<MessageValidation async="false" continueOnError="false" enabled="true" name="SOAP-Message-Validation-1">
<DisplayName>SOAP Message Validation-1</DisplayName>
<Properties/>
<Element namespace="http://schemas.xmlsoap.org/soap/prices">GetPriceResponse</Element>
<SOAPMessage/>
<Source>response</Source>
<ResourceURL>xsd://Script-1.xsd</ResourceURL>
</MessageValidation>
NonMessageVariable
Kode Error
steps.messagevalidation.NonMessageVariable
Isi respons error
{ "fault": { "faultstring": "Variable var_name does not resolve to a Message" "detail": { "errorcode": "steps.messagevalidation.NonMessageVariable" } } }
Contoh isi respons Error
{
"fault": {
"faultstring": "Variable message.content does not resolve to a Message",
"detail": {
"errorcode": "steps.messagevalidation.NonMessageVariable"
}
}
}
Penyebab
Error ini terjadi jika elemen <Source>
dalam kebijakan SOAPMessageValidation disetel ke variabel yang bukan berjenis Message.
Variabel jenis pesan mewakili seluruh permintaan dan respons HTTP. Variabel alur Apigee Edge bawaan request
, response
, dan message
berjenis Message. Untuk mempelajari variabel pesan lebih lanjut, lihat Referensi variabel.
Diagnosis
Identifikasi nama variabel yang tidak me-resolve ke jenis Message dari string error. Misalnya, dalam string error berikut, nama variabelnya adalah
message.content
:"faultstring": "Variable message.content does not resolve to a Message"
Periksa semua kebijakan SOAPMessageValidation di Proxy API tertentu tempat kegagalan terjadi. Mungkin ada satu atau beberapa kebijakan SOAPMessageValidation. Identifikasi kebijakan SOAPMessageValidation tertentu atau kebijakan yang variabelnya ditentukan dalam elemen
<Source>
cocok dengan nama variabel yang diidentifikasi dalam string error (Langkah 1 di atas).Misalnya, kebijakan berikut menetapkan elemen
<Source>
ke variabel bernamamessage.content
, yang cocok dengan yang ada dalam string error:<MessageValidation async="false" continueOnError="false" enabled="true" name="SOAP-Message-Validation-1"> <DisplayName>SOAP Message Validation-1</DisplayName> <Properties/> <Element namespace="http://schemas.xmlsoap.org/soap/prices">GetPriceResponse</Element> <SOAPMessage/> <Source>message.content</Source> <ResourceURL>xsd://Script-1.xsd</ResourceURL> </MessageValidation>
Karena variabel
message.content
bukan jenis Pesan, Anda mendapatkan error:"faultstring": "Variable message.content does not resolve to a Message"
Resolusi
Pastikan elemen <Source>
dalam kebijakan SOAPMessageValidation yang gagal disetel ke variabel jenis Message yang ada dalam alur tempat kebijakan dijalankan.
Untuk memperbaiki kebijakan, Anda dapat mengubah elemen <Source>
untuk menentukan variabel yang berjenis Message. Misalnya, dalam kebijakan SOAPMessageValidation yang gagal,
Anda dapat menentukan elemen <Source>
sebagai request
:
<MessageValidation async="false" continueOnError="false" enabled="true" name="SOAP-Message-Validation-1">
<DisplayName>SOAP Message Validation-1</DisplayName>
<Properties/>
<Element namespace="http://sample.com"> sampleObject</Element>
<SOAPMessage/>
<Source>request</Source>
<ResourceURL>xsd://Script-1.xsd</ResourceURL>
</MessageValidation>
Gagal
Kode Error
steps.messagevalidation.Failed
Isi respons error
{ "fault": { "faultstring": "Variable var_name failed with reason: \"reason [Line varline_num "detail": { "errorcode": "steps.messagevalidation.Failed" } } }
Contoh isi respons Error
{
"fault": {
"faultstring": "SOAP-Message-Validation-1 failed with reason: \"Expecting a child element but found none [Line 9]\"",
"detail": {
"errorcode": "steps.messagevalidation.Failed"
}
}
}
Penyebab
Error ini terjadi jika kebijakan SOAPMessageValidation gagal memvalidasi payload pesan input terhadap skema XSD atau definisi WSDL. Hal ini juga akan terjadi jika ada JSON atau XML yang salah format dalam pesan payload.
Berikut beberapa kemungkinan penyebab yang dapat menyebabkan error ini:
Penyebab | Deskripsi |
Payload XML tidak cocok | Payload XML input tidak mematuhi skema XSD yang ditentukan dalam kebijakan SoapMessageValidation. |
Payload SOAP yang tidak cocok | Payload SOAP input tidak mematuhi definisi WSDL yang ditentukan dalam kebijakan SoapMessageValidation. |
JSON atau XML dengan format salah | Payload SOAP input tidak berisi XML atau JSON yang dibentuk dengan baik. |
Penyebab: Payload XML tidak cocok
Error ini terjadi jika payload XML input tidak mematuhi skema XSD
yang ditentukan dalam elemen <ResourceURL>
kebijakan SoapMessageValidation.
Contoh Pesan Error
{
"fault": {
"faultstring": "SOAP-Message-Validation-1 failed with reason: \"Expecting a child element but found none [Line 9]\"",
"detail": {
"errorcode": "steps.messagevalidation.Failed"
}
}
}
Diagnosis
Identifikasi nama kebijakan SOAPMessageValidation, alasan kegagalan, dan nomor baris tempat payload XML tidak cocok dengan skema XSD. Semua informasi ini ada dalam string error. Misalnya, dalam string error berikut, nama kebijakan SOAPMessageValidation adalah
SOAP-Message-Validation-1,
alasan kegagalannya adalahExpecting a child element but found none [Line 9]
: dan nomor barisnya adalah9
."faultstring": "SOAP-Message-Validation-1 failed with reason: \"Expecting a child element but found none [Line 9]\""
Periksa kebijakan SOAPMessageValidation dan pastikan kebijakan tersebut menggunakan file definisi skema XSD untuk memvalidasi pesan. Misalnya, kebijakan SOAPMessageValidation berikut memiliki file resource XSD di elemen
<ResourceURL>
:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <MessageValidation async="false" continueOnError="false" enabled="true" name="SOAP-Message-Validation-1"> <DisplayName>SOAP Message Validation-1</DisplayName> <Properties/> <SOAPMessage/> <Source>request</Source> <ResourceURL>xsd://Script-1.xsd</ResourceURL> </MessageValidation>
Periksa payload input pada nomor baris yang diidentifikasi pada Langkah 1 di atas untuk memahami penyebab kegagalan.
Contoh payload XML Input
<?xml version="1.0"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding"> <soap:Body> <shipOrder xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"> <shipTo> <name>Karl Kalckstein</name> </shipTo> <items> <item> <title>I love APIs</title> <quantity>1</quantity> <price>2.90</price> </item> </items> </shipOrder> </soap:Body> </soap:Envelope>
Pada contoh yang ditampilkan di atas, baris 9 memiliki tag akhir
</shipTo>
.Periksa file definisi skema XML,
Script-1.xsd
, yang digunakan dalam kebijakan SOAPMessageValidation untuk melihat tampilan elemen<shipTo>
:... <xsd:element name="shipTo" type="shipAddress"/> ... <xsd:complexType name="shipAddress"> <xsd:sequence> <xsd:element name="name" type="xsd:string"/> <xsd:element name="street" type="xsd:string"/> <xsd:element name="address" type="xsd:string"/> <xsd:element name="country" type="xsd:string"/> </xsd:sequence> </xsd:complexType> ...
Menurut contoh XSD yang digunakan untuk validasi, elemen
<shipTo>
harus memiliki elemen turunan<name>
,<street>
,<address>
, dan<country>
. Namun, payload XML input hanya memiliki satu elemen turunan, yaitu<name>
. Akibatnya, Anda akan mendapatkan error:"faultstring": "SOAP-Message-Validation-1 failed with reason: \"Expecting a child element but found none [Line 9]\""
Resolusi
Ada dua cara untuk mengatasi error validasi ini:
Solusi #1
Jika menurut Anda definisi skema XSD menerapkan batasan yang tidak perlu dan hanya elemen turunan <name>
yang diperlukan dalam elemen <shipTo>
, Anda dapat mengubah Script-1.xsd
yang digunakan dalam kebijakan SOAPMessageValidation. Untuk memvalidasi contoh payload di atas, Anda dapat mengubah file XSD sebagai berikut:
...
<xsd:element name="shipTo" type="shipAddress"/>
...
<xsd:complexType name="shipAddress">
<xsd:sequence>
<xsd:element name="name" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
Solusi #2
Jika file definisi XSD sudah benar, payload XML input dapat diubah agar cocok dengan xsd
. Misalnya, Anda dapat mengubah payload untuk mematuhi xsd
sebagai berikut:
<?xml version="1.0">
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Body>
<shipOrder xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance">
<shipTo>
<name>Karl Kalckstein</name>
<street>1020 Parkway</street>
<address>Mountain View, CA 94043</address>
<country>USA</country>
</shipTo>
<items>
<item>
<title>I love APIs</title>
<quantity>1</quantity>
<price>2.90</price>
</item>
</items>
</shipOrder>
</soap:Body>
</soap:Envelope>
Penyebab: Payload SOAP tidak cocok
Error ini terjadi jika payload SOAP input tidak mematuhi definisi WSDL yang ditentukan dalam elemen <ResourceURL>
kebijakan SoapMessageValidation.
Contoh Pesan Error
{
"fault": {
"faultstring": "SOAP-Message-Validation-1 failed with reason: \"Element name mismatch. Wildcard? [Line 11]\"",
"detail": {
"errorcode": "steps.messagevalidation.Failed"
}
}
}
Diagnosis
Identifikasi nama kebijakan SOAPMessageValidation, alasan kegagalan, dan nomor baris tempat payload SOAP tidak cocok dengan definisi WSDL. Anda dapat menemukan semua informasi ini dari string error. Misalnya, dalam string error berikut, nama kebijakan SOAPMessageValidation adalah
SOAP-Message-Validation-1
, alasan kegagalannya adalah\"Element name mismatch. Wildcard? [Line 11]\""
, dan nomor barisnya adalah11
:"faultstring": "SOAP-Message-Validation-1 failed with reason: \"Element name mismatch. Wildcard? [Line 11]\""
Periksa kebijakan SOAPMessageValidation dan pastikan kebijakan tersebut menggunakan skema
wsdl
untuk memvalidasi pesan. Misalnya, kebijakan SOAPMessageValidation berikut memiliki file resourcewsdl
dalam elemen<ResourceURL>
:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <MessageValidation async="false" continueOnError="false" enabled="true" name="SOAP-Message-Validation-1"> <DisplayName>SOAP Message Validation-1</DisplayName> <Properties/> <SOAPMessage/> <Source>request</Source> <ResourceURL>wsdl://SOAP-Message-Validation-1.wsdl</ResourceURL> </MessageValidation>
Periksa payload input pada nomor baris yang diidentifikasi pada Langkah 1 untuk memahami penyebab kegagalan.
Contoh Payload SOAP Input
<?xml version="1.0"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding"> <soap:Body> <shipOrder xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"> <shipTo> <name>Karl Kalckstein</name> <street>1020 Parkway</street> <address>Mountain View, CA 94043</address> <country>USA</country> </shipTo> <items> <item> <title>I love APIs</title> <quantity>1</quantity> <price>2.90</price> </item> </items>
Pada contoh yang ditampilkan di atas, baris 11 memiliki elemen turunan
<country>
di bawah elemen<shipTo>
.Periksa file Definisi WSDL,
SOAP-Message-Validation-1.wsdl
, yang digunakan dalam kebijakan SOAPMessageValidation untuk melihat apa yang salah dengan elemen turunan<country>
pada elemen<shipTo>
:<?xml version="1.0" encoding="ISO-8859-1"?> <wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> <wsdl:types> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="shipOrder" type="order"/> <xsd:complexType name="order"> <xsd:sequence> <xsd:element name="shipTo" type="shipAddress"/> <xsd:element name="items" type="cdItems"/> </xsd:sequence> </xsd:complexType> <xsd:complexType name="shipAddress"> <xsd:sequence> <xsd:element name="name" type="xsd:string"/> <xsd:element name="street" type="xsd:string"/> <xsd:element name="address" type="xsd:string"/> </xsd:sequence> ...
Menurut definisi WSDL yang digunakan untuk validasi, elemen
<shipTo>
tidak memiliki elemen turunan<country>
. Akibatnya, Anda akan mendapatkan error:"faultstring": "SOAP-Message-Validation-1 failed with reason: \"Element name mismatch. Wildcard? [Line 11]\""
Resolusi
Ada dua cara untuk mengatasi error validasi ini:
Solusi #1
Jika Anda menentukan bahwa definisi WSDL yang digunakan salah, Anda dapat mengubah SOAP-Message-Validation-1.wsdl
yang digunakan dalam kebijakan SOAPMessageValidation. Untuk memvalidasi contoh payload di atas, Anda dapat mengubah file sebagai berikut:
...
<xsd:complexType name="shipAddress">`
...
<sequence>
<element name="name" type="xsd:string"/>
<element name="street" type="xsd:string"/>
<element name="address" type="xsd:string"/>
<element name="country" type="xsd:string"/>
</sequence>
Solusi #2
Jika definisi WSDL sudah benar, payload SOAP input dapat diubah agar cocok dengan definisi WSDL.
Misalnya, Anda dapat mengubah payload SOAP input sebagai berikut:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Body>
<shipOrder xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance">
<shipTo>
<name>Karl Kalckstein</name>
<street>1020 Parkway</street>
<address>Mountain View, CA 94043</address>
</shipTo>
<items>
<item>
<title>I love APIs</title>
<quantity>1</quantity>
<price>2.90</price>
</item>
</items>
Penyebab: JSON atau XML berformat salah
Error ini terjadi jika payload SOAP input tidak mematuhi definisi WSDL yang ditentukan dalam elemen <ResourceURL>
kebijakan SoapMessageValidation.
Contoh Pesan Error
{
"fault": {
"faultstring": "SOAP-Message-Validation-1 failed with reason: \"Expected <\/title> at line 15(possibly around char 420)\"",
"detail": {
"errorcode": "steps.messagevalidation.Failed"
}
}
}
Diagnosis
Identifikasi nama kebijakan SOAPMessageValidation, alasan kegagalan, dan nomor baris payload XML yang tidak cocok dengan definisi WSDL. Anda dapat menemukan semua informasi ini di string fault. Misalnya, dalam string error berikut, nama kebijakan SOAPMessageValidation adalah
SOAP-Message-Validation-1
, alasan kegagalannya adalahExpected </title> at line 15(possibly around char 420):
, dan nomor barisnya adalah15.
"faultstring": "SOAP-Message-Validation-1 failed with reason: \"Expected </title> at line 15(possibly around char 420)\""
Periksa payload input pada nomor baris yang diidentifikasi pada Langkah 1 di atas untuk memahami penyebab kegagalan.
Contoh Payload SOAP Input
<?xml version="1.0"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding"> <soap:Body> <shipOrder xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"> <shipTo> <name>Karl Kalckstein</name> <street>1020 Parkway</street> <address>Mountain View, CA 94043</address> <country>USA</country> </shipTo> <items> <item> <title>I love APIs</titles> <quantity>1</quantity> <price>2.90</price> </item> </items> </shipOrder> </soap:Body> </soap:Envelope>
Dalam contoh yang ditampilkan di atas, baris 15 XML input memiliki elemen
<title>
, tetapi tidak ditutup dengan tag akhir</title>
.
Resolusi
Untuk mengatasi error ini, pastikan payload input valid dan diformat dengan benar.
Misalnya, Anda dapat memodifikasi payload XML input sebagai berikut:
...
</shipTo>
<items>
<item>
<title>I love APIs</title>
<quantity>1</quantity>
<price>2.90</price>
</item>
</items>
...