Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin. info
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 biri olduğunda ortaya çıkar:
- Kapsam dışında (politikanın yürütüldüğü belirli akışta kullanılamaz) veya
- çözülemez (tanımlanmamıştır)
Örneğin, bu hata SOAPMessageValidation politikasındaki <Source>
öğesi, politikanın yürütüldüğü akışta bulunmayan bir değişkene ayarlanırsa meydana gelir.
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 politikasının adıSOAP-Message-Validation-1
,source
değişkeni iserequest
'dir:"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ı 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ılıp kullanılamadığını belirleyin.Değişken şu durumlarda:
- kapsam dışında (politikanın yürütüldüğü belirli akışta kullanılamaz) veya
- çözülemez (tanımlanmamıştır)
Bu durumda, hatanın nedeni budur.
Örnek olarak, 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ılanrequest
değişkeni yalnızca istekte kullanılabilir.Yanıt akışında
request
değişkeni bulunmadığından ş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 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 meydana gelir.
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ı bölümüne bakın.
Teşhis
Hata dizesinden bir Message türüne çözümlenmeyen değişkenin adını belirleyin. Örneğin, aşağıdaki hata dizesinde değişkenin 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ını belirleyin (yukarıdaki 1. adım).Örneğin, aşağıdaki politika
<Source>
öğesinimessage.content
adlı bir değişkene ayarlar. 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>message.content</Source> <ResourceURL>xsd://Script-1.xsd</ResourceURL> </MessageValidation>
message.content
değişkeni Message türü 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 yürütüldüğü akışta bulunan bir Message türü değişkene ayarlandığından emin olun.
Politikayı düzeltmek için <Source>
öğesini, Message türündeki 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ına veya WSDL tanımına göre doğrulayamazsa oluşur. Ayrıca, yük mesajında bozuk biçimli JSON veya XML varsa da bu hata meydana gelir.
Bu hataya yol açabilecek bazı olası nedenler şunlardır:
Neden | Açıklama |
XML yükü eşleşmiyor | Giriş XML yükü, SoapMessageValidation politikasında belirtilen XSD şemasına uymuyor. |
Eşleşmeyen SOAP yükü | Giriş SOAP yükü, SoapMessageValidation politikasında belirtilen WSDL tanımına uymuyor. |
Yanlış biçimlendirilmiş JSON veya XML | Giriş SOAP yükü düzgün biçimlendirilmiş XML veya JSON içermiyor. |
Neden: XML yükü uyuşmuyor
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 politikası adını, hatanın nedenini ve XML yayının XSD şemasıyla eşleşmediği satır numarasını belirleyin. Bu bilgilerin tümü hata dizesindedir. Ö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
."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 XSD şeması tanımı dosyası kullandığını onaylayın. Örneğin, aşağıdaki SOAPMessageValidation politikasında
<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 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ılan XML şeması 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>
öğesinde<name>
,<street>
,<address>
ve<country>
alt öğeleri bulunmalıdır. Ancak giriş XML yükü yalnızca bir alt öğeye (<name>
) sahiptir. 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 şeması tanımının gereksiz sınırlamalar getirdiğini ve <shipTo>
öğesinin 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ünüzü xsd
'ye uygun 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>
Neden: SOAP yükü uyuşmazlığı
Bu hata, giriş SOAP yükü SoapMessageValidation politikasının <ResourceURL>
öğesinde belirtilen WSDL tanımına uymuyorsa ortaya çıkar.
Ö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 politikasının adını, hatanın nedenini ve SOAP yayının WSDL tanımı ile eşleşmediği satır numarasını belirtin. Tüm bu bilgileri hata dizesinde bulabilirsiniz. Örneğin, aşağıdaki hata dizesinde SOAPMessageValidation politikasının adı
SOAP-Message-Validation-1
, hatanın nedeni\"Element name mismatch. Wildcard? [Line 11]\""
ve satır numarası11
:"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ı kullandığını onaylayın. Örneğin, aşağıdaki SOAPMessageValidation politikasının<ResourceURL>
öğesinde birwsdl
kaynak dosyası var:<?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üklü Verileri
<?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ıdaki örnekte, 11. satırda
<shipTo>
öğesinin altında<country>
alt öğesi bulunmaktadır.SOAPMessageValidation politikasında kullanılan
SOAP-Message-Validation-1.wsdl
WSDL Tanım dosyasını inceleyerek<shipTo>
öğesinin altındaki<country>
alt öğesiyle ilgili ne gibi bir sorun olabileceğini öğrenin:<?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 yoktur. Bunun sonucunda ş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 tespit ederseniz 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ına uyacak şekilde değiştirilebilir.
Örneğin, giriş SOAP yükü aşağıdaki gibi değiştirilebilir:
<?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: Yanlış biçimlendirilmiş JSON veya XML
Bu hata, giriş SOAP yükü SoapMessageValidation politikasının <ResourceURL>
öğesinde belirtilen WSDL tanımına uymuyorsa ortaya çıkar.
Ö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 XML yükünün WSDL tanımı ile eşleşmeyen satır numarasını tanımlayın. Tüm bu bilgileri 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.
'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 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ıdaki örnekte gösterilen XML'in 15. satırı
<title>
öğesini içeriyor, ancak</title>
bitiş etiketiyle kapatılmamış.
Çözünürlük
Hatayı çözmek için giriş yükü geçerli olduğundan ve doğru şekilde oluşturulduğundan emin olun.
Örneğin, giriş XML yükü aşağıdaki gibi değiştirilebilir:
...
</shipTo>
<items>
<item>
<title>I love APIs</title>
<quantity>1</quantity>
<price>2.90</price>
</item>
</items>
...