Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin. bilgi
SourceMessageNotAvailable
Hata Kodu
steps.messagevalidation.SourceMessageNotAvailable
Hata yanıtı gövdesi
{ "fault": { "faultstring": "source_var_name message is not available for[policy_name]", "detail": { "Errorcode": "steps.messagevalidation.SourceMessageNotAvailable" } } }
Örnek Hata yanıtı gövdesi
{
"fault": {
"faultstring": "request message is not available for MessageValidation: SOAP-Message-Validation-1",
"detail": {
"errorcode": "steps.messagevalidation.SourceMessageNotAvailable"
}
}
}
Neden
Bu hata, SOAPMessageValidation politikasının <Source>
öğesinde belirtilen message değişkeni şunlardan biriyse ortaya çıkar:
- Kapsam dışında (politikanın yürütüldüğü belirli akışta kullanılamaz) veya
- çözülemiyor (tanımlanmadı)
Örneğin bu hata, SOAPMessageValidation politikasındaki <Source>
öğesi, politikanın uygulandığı akışta var olmayan bir değişkene ayarlanırsa ortaya çıkar.
Teşhis
Hatanın oluştuğu SOAPMessageValidation politika adını ve hata dizesindeki
source
değişkeninin adını belirleyin. Örneğin, aşağıdaki hata dizesinde SOAPMessageValidation politika adıSOAP-Message-Validation-1
,source
değişkeni iserequest
şeklindedir:"faultstring": "request message is not available for MessageValidation: SOAP-Message-Validation-1"
Başarısız SOAPMessageValidation politikası XML'inde,
<Source>
öğesinde ayarlanan değişken adının, hata dizesinde tanımlanan değişken adıyla eşleştiğini doğrulayın (yukarıdaki 1. adım).Örneğin, aşağıdaki SOAPMessageValidation politikası,
<Source>
öğesinderequest
adlı ve hata dizesindekiyle eşleşen bir değişken belirtiyor:<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>
<Source>
öğesinde kullanılan değişkenin tanımlanıp tanımlanmadığını ve SOAPMessageValidation politikasının yürütülmekte olduğu akışta kullanılabilir olup olmadığını belirleyin.Değişken şunlardan biriyse:
- kapsam dışında (politikanın yürütüldüğü belirli akışta kullanılamaz) veya
- çözülemiyor (tanımlanmadı)
hatanın nedeni budur.
Örneğin, yukarıda gösterilen SOAPMessageValidation politikasının yanıt akışında çalıştığını varsayalım. Ancak yukarıdaki
<Source>
öğesi örneğinde kullanılanrequest
değişkeni yalnızca istek akışında kullanılabilir.request
değişkeni yanıt akışında bulunmadığı için şu hatayı alırsınız:"faultstring": "request message is not available for MessageValidation: SOAP-Message-Validation-1"
Çözünürlük
Başarısız SOAPMessageValidation politikasının <Source>
öğesinde ayarlanan değişkenin tanımlandığından ve politikanın uygulandığı akışta bulunduğundan emin olun.
Yukarıda gösterilen örneği düzeltmek için <Source
> öğesini, yanıt akışında bulunan response
değişkenini kullanacak şekilde değiştirebilirsiniz:
<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
Hata Kodu
steps.messagevalidation.NonMessageVariable
Hata yanıtı gövdesi
{ "fault": { "faultstring": "Variable var_name does not resolve to a Message" "detail": { "errorcode": "steps.messagevalidation.NonMessageVariable" } } }
Örnek Hata yanıtı gövdesi
{
"fault": {
"faultstring": "Variable message.content does not resolve to a Message",
"detail": {
"errorcode": "steps.messagevalidation.NonMessageVariable"
}
}
}
Neden
Bu hata, SOAPMessageValidation politikasındaki <Source>
öğesi, Message türünde olmayan bir değişkene ayarlanırsa ortaya çıkar.
Mesaj türü değişkenleri, HTTP isteklerinin ve yanıtlarının tamamını temsil eder. Yerleşik Apigee Edge akış değişkenleri request
, response
ve message
Mesaj türündedir. Mesaj değişkenleri hakkında daha fazla bilgi edinmek için Değişkenler referansı başlıklı makaleyi inceleyin.
Teşhis
Hata dizesinden bir Mesaj türüne çözümlenmeyen değişkenin adını tanımlayın. Örneğin, aşağıdaki hata dizesinde değişken adı
message.content
şeklindedir:"faultstring": "Variable message.content does not resolve to a Message"
Hatanın oluştuğu API Proxy'sindeki tüm SOAPMessageValidation politikalarını inceleyin. Bir veya daha fazla SOAPMessageValidation politikası olabilir.
<Source>
öğesinde belirtilen değişkenin, hata dizesinde tanımlanan değişken adıyla eşleştiği belirli SOAPMessageValidation politikasını veya politikaları tanımlayın (yukarıdaki 1. adım).Örneğin, aşağıdaki politika
<Source>
öğesini, hata dizesindeki değerle eşleşenmessage.content
adlı bir değişkene ayarlar:<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>
message.content
değişkeni Mesaj türünde olmadığından şu hatayı alırsınız:"faultstring": "Variable message.content does not resolve to a Message"
Çözünürlük
Başarısız SOAPMessageValidation politikasındaki <Source>
öğesinin, politikanın uygulandığı akışta bulunan bir Message türü değişkene ayarlandığından emin olun.
Politikayı düzeltmek için <Source>
öğesini, Message türünde bir değişken belirtecek şekilde değiştirebilirsiniz. Örneğin, başarısız SOAPMessageValidation politikasında <Source>
öğesini request
olarak belirtebilirsiniz:
<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>
Başarısız
Hata Kodu
steps.messagevalidation.Failed
Hata yanıtı gövdesi
{ "fault": { "faultstring": "Variable var_name failed with reason: \"reason [Line varline_num "detail": { "errorcode": "steps.messagevalidation.Failed" } } }
Örnek Hata yanıtı gövdesi
{
"fault": {
"faultstring": "SOAP-Message-Validation-1 failed with reason: \"Expecting a child element but found none [Line 9]\"",
"detail": {
"errorcode": "steps.messagevalidation.Failed"
}
}
}
Neden
Bu hata, SOAPMessageValidation politikası, giriş mesajı yükünü XSD şeması veya WSDL tanımına göre doğrulayamazsa ortaya çıkar. Yük mesajında bozuk JSON veya XML bulunması da bu hataya neden olabilir.
Bu hataya yol açabilecek olası nedenlerden bazıları aşağıda belirtilmiştir:
Neden | Açıklama |
Eşleşmeyen XML yükü | Girilen XML yükü, SoapMessageValidation politikasında belirtilen XSD şemasına uymuyor. |
SOAP yükü eşleşmiyor | Girilen SOAP yükü, SoapMessageValidation politikasında belirtilen WSDL tanımına uymuyor. |
Kötü biçimlendirilmiş JSON veya XML | Giriş SOAP yükü iyi biçimlendirilmiş XML veya JSON içermiyor. |
Neden: Uyuşmayan XML yükü
Bu hata, giriş XML yükü SoapMessageValidation politikasının <ResourceURL>
öğesinde belirtilen XSD şemasına uymuyorsa ortaya çıkar.
Örnek Hata Mesajı
{
"fault": {
"faultstring": "SOAP-Message-Validation-1 failed with reason: \"Expecting a child element but found none [Line 9]\"",
"detail": {
"errorcode": "steps.messagevalidation.Failed"
}
}
}
Teşhis
SOAPMessageValidation politika adını, hatanın nedenini ve XML yükünün XSD şemasıyla eşleşmediği satır numarasını belirleyin. Bu bilgilerin tamamı hata dizesindedir. Örneğin, aşağıdaki hata dizesinde SOAPMessageValidation politikası adı,
SOAP-Message-Validation-1,
hatanın nedeniExpecting a child element but found none [Line 9]
, satır numarası ise9
şeklindedir."faultstring": "SOAP-Message-Validation-1 failed with reason: \"Expecting a child element but found none [Line 9]\""
SOAPMessageValidation politikasını inceleyin ve mesajları doğrulamak için bir XSD şema tanım dosyası kullandığını onaylayın. Örneğin, aşağıdaki SOAPMessageValidation politikasının
<ResourceURL>
öğesinde bir XSD kaynak dosyası vardır:<?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>
Hatanın nedenini anlamak için yukarıdaki 1. adımda tanımlanan satır numarasındaki giriş yükünü inceleyin.
Örnek Giriş XML yükü
<?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>
Yukarıda gösterilen örnekte, 9. satırda
</shipTo>
bitiş etiketi vardır.<shipTo>
öğesinin nasıl görünmesi gerektiğini görmek için SOAPMessageValidation politikasında kullanılanScript-1.xsd
XML şeması tanım dosyasını inceleyin:... <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> ...
Doğrulama için kullanılan örnek XSD'ye göre
<shipTo>
öğesi<name>
,<street>
,<address>
ve<country>
alt öğelerine sahip olmalıdır. Ancak, giriş XML yükü yalnızca bir alt öğeye (<name>
) sahiptir. Sonuç olarak, şu hatayı alırsınız:"faultstring": "SOAP-Message-Validation-1 failed with reason: \"Expecting a child element but found none [Line 9]\""
Çözünürlük
Bu doğrulama hatasını çözmenin iki yolu vardır:
1. Çözüm
XSD şema tanımının gereksiz sınırlamalara neden olduğunu ve <shipTo>
öğesi altında yalnızca <name>
alt öğesinin gerekli olduğunu belirlerseniz SOAPMessageValidation politikasında kullanılan Script-1.xsd
öğesini değiştirebilirsiniz. Yukarıdaki yük örneğini doğrulamak için XSD dosyasını aşağıdaki şekilde değiştirebilirsiniz:
...
<xsd:element name="shipTo" type="shipAddress"/>
...
<xsd:complexType name="shipAddress">
<xsd:sequence>
<xsd:element name="name" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
2. Çözüm
XSD tanım dosyası doğruysa giriş XML yükü xsd
ile eşleşecek şekilde değiştirilebilir. Örneğin, yükü aşağıdaki gibi xsd
ile uyumlu olacak şekilde değiştirebilirsiniz:
<?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>
Neden: SOAP yükü eşleşmiyor
Bu hata, giriş SOAP yükü SoapMessageValidation politikasının <ResourceURL>
öğesinde belirtilen WSDL tanımına uymuyorsa oluşur.
Örnek Hata Mesajı
{
"fault": {
"faultstring": "SOAP-Message-Validation-1 failed with reason: \"Element name mismatch. Wildcard? [Line 11]\"",
"detail": {
"errorcode": "steps.messagevalidation.Failed"
}
}
}
Teşhis
SOAPMessageValidation politika adını, hatanın nedenini ve SOAP yükünün WSDL tanımıyla eşleşmediği satır numarasını belirleyin. Bu bilgilerin tümünü hata dizesinde bulabilirsiniz. Örneğin, aşağıdaki hata dizesinde SOAPMessageValidation politikası adı
SOAP-Message-Validation-1
, hatanın nedeni\"Element name mismatch. Wildcard? [Line 11]\""
ve satır numarası11
şeklindedir:"faultstring": "SOAP-Message-Validation-1 failed with reason: \"Element name mismatch. Wildcard? [Line 11]\""
SOAPMessageValidation politikasını inceleyin ve mesajları doğrulamak için bir
wsdl
şeması kullandığını onaylayın. Örneğin, aşağıdaki SOAPMessageValidation politikasının<ResourceURL>
öğesinde birwsdl
kaynak dosyası bulunur:<?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>
Hatanın nedenini anlamak için 1. adımda tanımlanan satır numarasındaki giriş yükünü inceleyin.
Örnek Giriş SOAP Yükü
<?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>
Yukarıda gösterilen örnekte, 11. satırda
<shipTo>
öğesi altında<country>
alt öğesi bulunmaktadır.<shipTo>
öğesi altındaki<country>
alt öğesiyle ilgili sorunun ne olabileceğini görmek için SOAPMessageValidation politikasında kullanılan WSDL Tanım dosyasını (SOAP-Message-Validation-1.wsdl
) inceleyin:<?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> ...
Doğrulama için kullanılan WSDL tanımına göre
<shipTo>
öğesinin bir<country>
alt öğesi yoktur. Sonuç olarak, şu hatayı alırsınız:"faultstring": "SOAP-Message-Validation-1 failed with reason: \"Element name mismatch. Wildcard? [Line 11]\""
Çözünürlük
Bu doğrulama hatasını çözmenin iki yolu vardır:
1. Çözüm
Kullanılan WSDL tanımının yanlış olduğunu belirlerseniz SOAPMessageValidation politikasında kullanılan SOAP-Message-Validation-1.wsdl
değerini değiştirebilirsiniz. Yukarıdaki yük örneğini doğrulamak için dosyayı aşağıdaki şekilde değiştirebilirsiniz:
...
<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>
2. Çözüm
WSDL tanımı doğruysa giriş SOAP yükü, WSDL tanımıyla eşleşecek şekilde değiştirilebilir.
Örneğin, giriş SOAP yükünü aşağıdaki gibi değiştirebilirsiniz:
<?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>
Neden: Bozuk JSON veya XML
Bu hata, giriş SOAP yükü SoapMessageValidation politikasının <ResourceURL>
öğesinde belirtilen WSDL tanımına uymuyorsa oluşur.
Örnek Hata Mesajı
{
"fault": {
"faultstring": "SOAP-Message-Validation-1 failed with reason: \"Expected <\/title> at line 15(possibly around char 420)\"",
"detail": {
"errorcode": "steps.messagevalidation.Failed"
}
}
}
Teşhis
SOAPMessageValidation politika adını, hatanın nedenini ve WSDL tanımıyla eşleşmeyen XML yükünün satır numarasını belirleyin. Bu bilgilerin tümünü hata dizesinde bulabilirsiniz. Örneğin, aşağıdaki hata dizesinde SOAPMessageValidation politikası adı
SOAP-Message-Validation-1
, hatanın nedeniExpected </title> at line 15(possibly around char 420):
ve satır numarası:15.
"faultstring": "SOAP-Message-Validation-1 failed with reason: \"Expected </title> at line 15(possibly around char 420)\""
Hatanın nedenini anlamak için yukarıdaki 1. adımda tanımlanan satır numarasındaki giriş yükünü inceleyin.
Örnek Giriş SOAP Yükü
<?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>
Yukarıda gösterilen örnekte, giriş XML'sinin 15. satırında
<title>
öğesi bulunuyor, ancak bu satır bir</title>
bitiş etiketiyle kapatılmamış.
Çözünürlük
Hatayı gidermek için giriş yükünün geçerli olduğundan ve doğru şekilde biçimlendirildiğinden emin olun.
Örneğin, giriş XML yükünü aşağıdaki gibi değiştirebilirsiniz:
...
</shipTo>
<items>
<item>
<title>I love APIs</title>
<quantity>1</quantity>
<price>2.90</price>
</item>
</items>
...