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 şu durumlarda oluşur:
- Kapsam dışı (politikanın yürütüldüğü belirli akışta kullanılamaz) veya
- çözümlenemiyor (tanımlanmamış)
Örneğin, SOAPMessageValidation politikasındaki <Source> öğesi, politikanın yürütüldüğü akışta bulunmayan bir değişkene ayarlanırsa bu hata oluşur.
Teşhis
Hataya neden olan SOAPMessageValidation politika adını ve hata dizesindeki
sourcedeğişkeninin adını belirleyin. Örneğin, aşağıdaki hata dizesinde SOAPMessageValidation politika adıSOAP-Message-Validation-1vesourcedeğişkenirequest'dir:"faultstring": "request message is not available for MessageValidation: SOAP-Message-Validation-1"Başarısız olan SOAPMessageValidation politikası XML'sinde,
<Source>öğesinde ayarlanan değişken adının, hata dizesinde tanımlanan değişken adıyla (yukarıdaki 1. adım) eşleştiğini doğrulayın.Örneğin, aşağıdaki SOAPMessageValidation politikası,
<Source>öğesinderequestadlı bir değişken belirtir. Bu değişken, hata dizesindekiyle eşleşir:<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, SOAPMessageValidation politikasının yürütüldüğü akışta tanımlanıp tanımlanmadığını ve kullanılabilir olup olmadığını belirleyin.Değişken şu durumlarda:
- kapsam dışı (politikanın yürütüldüğü belirli akışta kullanılamaz) veya
- çözümlenemiyor (tanımlanmamış)
Bu durumda hatanın nedeni budur.
Örneğin, yukarıda gösterilen SOAPMessageValidation politikasının yanıt akışında yürütüldüğünü varsayalım. Ancak yukarıdaki
<Source>öğesi örneğinde kullanılanrequestdeğişkeni yalnızca istek akışında kullanılabilir.requestdeğişkeni yanıt akışında bulunmadığından aşağıdaki 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 olan SOAPMessageValidation politikasının <Source> öğesinde ayarlanan değişkenin tanımlandığından ve politikanın yürütüldüğü 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 oluşur.
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, Message türündedir. Mesaj değişkenleri hakkında daha fazla bilgi edinmek için Değişkenler referansı bölümüne bakın.
Teşhis
Hata dizesinden, ileti türüne çözümlenmeyen değişkenin adını belirleyin. Örneğin, aşağıdaki hata dizesinde değişkenin adı
message.content'dır:"faultstring": "Variable message.content does not resolve to a Message"Hatayı içeren API Proxy'deki 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ını belirleyin (yukarıdaki 1. adım).Örneğin, aşağıdaki politika
<Source>öğesini, hata dizesindekiyle eşleşenmessage.contentadlı 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.contentdeğişkeni Message 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 olan SOAPMessageValidation politikasındaki <Source> öğesinin, politikanın yürütüldüğü akışta bulunan bir Message türü değişkenine ayarlandığından emin olun.
Politikayı düzeltmek için <Source> öğesini değiştirerek Message türünde bir değişken belirtebilirsiniz. Örneğin, başarısız olan 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ına veya WSDL tanımına göre doğrulayamadığında oluşur. Ayrıca, yük mesajında hatalı biçimlendirilmiş JSON veya XML varsa da bu hata oluşur.
Bu hataya yol açabilecek olası nedenlerden bazıları şunlardır:
| Neden | Açıklama |
| Eşleşmeyen XML yükü | Giriş XML yükü, SoapMessageValidation politikasında belirtilen XSD şemasına uymuyor. |
| SOAP yükünün eşleşmemesi | Giriş SOAP yükü, SoapMessageValidation politikasında belirtilen WSDL tanımına uymuyor. |
| Hatalı biçimlendirilmiş JSON veya XML | Giriş SOAP yükünde iyi biçimlendirilmiş XML veya JSON yok. |
Nedeni: XML yükünün eşleşmemesi
Bu hata, giriş XML yükü SoapMessageValidation politikasının <ResourceURL> öğesinde belirtilen XSD şemasına uymadığında oluşur.
Ö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 dizesinde yer alır. Örneğin, aşağıdaki hata dizesinde SOAPMessageValidation politika adı
SOAP-Message-Validation-1,, hatanın nedeniExpecting a child element but found none [Line 9]ve satır numarası9'dir."faultstring": "SOAP-Message-Validation-1 failed with reason: \"Expecting a child element but found none [Line 9]\""SOAPMessageValidation politikasını inceleyin ve iletileri 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>Başarısızlığa neyin neden olduğunu anlamak için yukarıdaki 1. adımda belirtilen 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ıdaki örnekte 9. satırda
</shipTo>bitiş etiketi bulunmaktadır.<shipTo>öğesinin nasıl görünmesi gerektiğini görmek için SOAPMessageValidation politikasında kullanılan XML şema tanımı dosyasını (Script-1.xsd) 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 öğelerini içermelidir. Ancak giriş XML yükünde yalnızca bir alt öğe (<name>) var. Bu nedenle ş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ırlamalar getirdiğini 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 gibi 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ü xsd ile uyumlu olacak şekilde aşağıdaki gibi 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>
Nedeni: SOAP yükünün eşleşmemesi
Bu hata, giriş SOAP yükü, SoapMessageValidation politikasının <ResourceURL> öğesinde belirtilen WSDL tanımına uymadığında 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. Tüm bu bilgileri hata dizesinden bulabilirsiniz. Örneğin, aşağıdaki hata dizesinde SOAPMessageValidation politika adı
SOAP-Message-Validation-1, hatanın nedeni\"Element name mismatch. Wildcard? [Line 11]\""ve satır numarası11'dir:"faultstring": "SOAP-Message-Validation-1 failed with reason: \"Element name mismatch. Wildcard? [Line 11]\""SOAPMessageValidation politikasını inceleyin ve iletileri doğrulamak için
wsdlşemasını kullandığını onaylayın. Örneğin, aşağıdaki SOAPMessageValidation politikasının<ResourceURL>öğesinde birwsdlkaynak 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>wsdl://SOAP-Message-Validation-1.wsdl</ResourceURL> </MessageValidation>Başarısızlığın nedenini anlamak için 1. adımda belirtilen 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>öğesinin altında<country>alt öğesi bulunmaktadır.<shipTo>öğesi altındaki<country>alt öğesinde neyin yanlış olabileceğini görmek için SOAPMessageValidation politikasında kullanılan WSDL tanım dosyasını,SOAP-Message-Validation-1.wsdlinceleyin:<?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<country>alt öğesi yok. Bu nedenle ş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 öğesini değiştirebilirsiniz. Yukarıdaki yük örneğini doğrulamak için dosyayı aşağıdaki gibi 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ına uyacak ş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: Hatalı biçimlendirilmiş JSON veya XML
Bu hata, giriş SOAP yükü, SoapMessageValidation politikasının <ResourceURL> öğesinde belirtilen WSDL tanımına uymadığında 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. Tüm bu bilgilere hata dizesinden ulaşabilirsiniz. Örneğin, aşağıdaki hata dizesinde SOAPMessageValidation politika adı
SOAP-Message-Validation-1, hatanın nedeniExpected </title> at line 15(possibly around char 420):ve satır numarası15.'dir."faultstring": "SOAP-Message-Validation-1 failed with reason: \"Expected </title> at line 15(possibly around char 420)\""Başarısızlığa neyin neden olduğunu anlamak için yukarıdaki 1. adımda belirtilen 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 var ancak</title>bitiş etiketiyle kapatılmamış.
Çözünürlük
Hatayı çözmek için giriş yükünün geçerli olduğundan ve doğru şekilde oluşturulduğundan 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>
...