أنت الآن بصدد الاطّلاع على مستندات Apigee Edge.
انتقِل إلى
مستندات Apigee X. info
SourceMessageNotAvailable
رمز الخطأ
steps.messagevalidation.SourceMessageNotAvailable
نص رد الخطأ
{ "fault": { "faultstring": "source_var_name message is not available for[policy_name]", "detail": { "Errorcode": "steps.messagevalidation.SourceMessageNotAvailable" } } }
مثال على نص ردّ الخطأ
{
"fault": {
"faultstring": "request message is not available for MessageValidation: SOAP-Message-Validation-1",
"detail": {
"errorcode": "steps.messagevalidation.SourceMessageNotAvailable"
}
}
}
السبب
يحدث هذا الخطأ إذا كان متغيّر الرسالة المحدّد في العنصر <Source> من سياسة SOAPMessageValidation إما:
- خارج النطاق (غير متوفّر في المسار المحدّد الذي يتم فيه تنفيذ السياسة) أو
- لا يمكن حلّها (لم يتم تحديدها)
على سبيل المثال، يحدث هذا الخطأ إذا تم ضبط العنصر <Source> في سياسة SOAPMessageValidation على متغيّر غير متوفّر في التدفق الذي يتم تنفيذ السياسة فيه.
التشخيص
حدِّد اسم سياسة SOAPMessageValidation التي يحدث فيها الخطأ واسم المتغيّر
sourceمن سلسلة الخطأ. على سبيل المثال، في سلسلة الخطأ التالية، يكون اسم سياسة SOAPMessageValidation هوSOAP-Message-Validation-1والمتغيرsourceهوrequest:"faultstring": "request message is not available for MessageValidation: SOAP-Message-Validation-1"في ملف XML لسياسة SOAPMessageValidation الذي تعذّر تنفيذه، تأكَّد من أنّ اسم المتغيّر الذي تم ضبطه في العنصر
<Source>يتطابق مع اسم المتغيّر المحدّد في سلسلة الخطأ (الخطوة 1 أعلاه).على سبيل المثال، تحدّد سياسة SOAPMessageValidation التالية متغيّرًا باسم
requestفي العنصر<Source>، والذي يتطابق مع ما هو موجود في سلسلة الخطأ:<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>محدّدًا ومتاحًا في التدفق الذي يتم فيه تنفيذ سياسة SOAPMessageValidationإذا كان المتغير إما:
- خارج النطاق (غير متوفّر في المسار المحدّد الذي يتم فيه تنفيذ السياسة)
- لا يمكن حلّها (لم يتم تحديدها)
عندئذٍ يكون هذا هو سبب الخطأ.
على سبيل المثال، لنفترض أنّ سياسة SOAPMessageValidation الموضّحة أعلاه يتم تنفيذها في مسار الردّ. ومع ذلك، لا يتوفّر المتغيّر
requestالمستخدَم في مثال العنصر<Source>أعلاه إلا في مسار الطلب.بما أنّ المتغيّر
requestغير متوفّر في مسار الردّ، ستتلقّى الخطأ التالي:"faultstring": "request message is not available for MessageValidation: SOAP-Message-Validation-1"
الدقة
تأكَّد من أنّ المتغيّر الذي تم ضبطه في العنصر <Source> لسياسة SOAPMessageValidation التي تعذّر تنفيذها محدّد ومتوفّر في التدفق الذي يتم فيه تنفيذ السياسة.
لتصحيح المثال الموضّح أعلاه، يمكنك تعديل العنصر <Source> لاستخدام المتغيّر response، المتوفّر في مسار الردّ:
<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
رمز الخطأ
steps.messagevalidation.NonMessageVariable
نص رد الخطأ
{ "fault": { "faultstring": "Variable var_name does not resolve to a Message" "detail": { "errorcode": "steps.messagevalidation.NonMessageVariable" } } }
مثال على نص ردّ الخطأ
{
"fault": {
"faultstring": "Variable message.content does not resolve to a Message",
"detail": {
"errorcode": "steps.messagevalidation.NonMessageVariable"
}
}
}
السبب
يحدث هذا الخطأ إذا تم ضبط العنصر <Source> في سياسة SOAPMessageValidation على متغيّر ليس من النوع Message.
تمثّل متغيرات نوع الرسالة طلبات واستجابات HTTP كاملة. تكون متغيّرات التدفق المضمّنة في Apigee Edge request وresponse وmessage من النوع Message. لمزيد من المعلومات عن متغيّرات الرسائل، يُرجى الاطّلاع على مرجع المتغيّرات.
التشخيص
حدِّد اسم المتغيّر الذي لا يتم تحويله إلى نوع رسالة من سلسلة الخطأ. على سبيل المثال، في سلسلة الخطأ التالية، يكون اسم المتغيّر
message.content:"faultstring": "Variable message.content does not resolve to a Message"افحص جميع سياسات SOAPMessageValidation في خادم وكيل واجهة برمجة التطبيقات المحدّد الذي حدث فيه الخطأ. يمكن أن تكون هناك سياسة واحدة أو أكثر من سياسات SOAPMessageValidation. حدِّد سياسة أو سياسات SOAPMessageValidation المحدّدة التي يتطابق فيها المتغيّر المحدّد في العنصر
<Source>مع اسم المتغيّر المحدّد في سلسلة الخطأ (الخطوة 1 أعلاه).على سبيل المثال، تحدّد السياسة التالية العنصر
<Source>لمتغيّر باسمmessage.content، وهو ما يتطابق مع ما هو موجود في سلسلة الخطأ:<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ليس من النوع Message، سيظهر لك الخطأ التالي:"faultstring": "Variable message.content does not resolve to a Message"
الدقة
تأكَّد من ضبط العنصر <Source> في سياسة SOAPMessageValidation التي تعذّر تنفيذها على متغيّر من النوع Message المتوفّر في التدفق الذي يتم فيه تنفيذ السياسة.
لتصحيح السياسة، يمكنك تعديل العنصر <Source> لتحديد متغيّر من النوع Message. على سبيل المثال، في سياسة SOAPMessageValidation التي تعذّر تنفيذها، يمكنك تحديد العنصر <Source> على النحو التالي: 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>
تعذّر إكمال المعالجة
رمز الخطأ
steps.messagevalidation.Failed
نص رد الخطأ
{ "fault": { "faultstring": "Variable var_name failed with reason: \"reason [Line varline_num "detail": { "errorcode": "steps.messagevalidation.Failed" } } }
مثال على نص ردّ الخطأ
{
"fault": {
"faultstring": "SOAP-Message-Validation-1 failed with reason: \"Expecting a child element but found none [Line 9]\"",
"detail": {
"errorcode": "steps.messagevalidation.Failed"
}
}
}
السبب
يحدث هذا الخطأ إذا تعذّر على سياسة SOAPMessageValidation التحقّق من صحة حمولة الرسالة المُدخَلة مقارنةً بمخطط XSD أو تعريف WSDL. سيحدث ذلك أيضًا إذا كان هناك تنسيق JSON أو XML غير صالح في رسالة الحمولة.
في ما يلي بعض الأسباب المحتملة التي يمكن أن تؤدي إلى حدوث هذا الخطأ:
| السبب | الوصف |
| عدم تطابق حمولة XML | لا يتوافق حمولة XML المدخلة مع مخطط XSD المحدّد في سياسة SoapMessageValidation. |
| عدم تطابق حمولة SOAP | لا يتوافق حمولة SOAP المُدخَلة مع تعريف WSDL المحدّد في سياسة SoapMessageValidation. |
| تنسيق JSON أو XML غير صالح | لا يحتوي حمولة SOAP المدخلة على XML أو JSON منسّق بشكل سليم. |
السبب: عدم تطابق حمولة XML
يحدث هذا الخطأ إذا لم تتوافق حمولة XML المُدخَلة مع مخطط XSD
المحدّد في العنصر <ResourceURL> من سياسة SoapMessageValidation.
مثال على رسالة الخطأ
{
"fault": {
"faultstring": "SOAP-Message-Validation-1 failed with reason: \"Expecting a child element but found none [Line 9]\"",
"detail": {
"errorcode": "steps.messagevalidation.Failed"
}
}
}
التشخيص
حدِّد اسم سياسة SOAPMessageValidation وسبب الخطأ ورقم السطر الذي لا يتطابق فيه حمولة XML مع مخطّط XSD. تتضمّن سلسلة الخطأ كل هذه المعلومات. على سبيل المثال، في سلسلة الأعطال التالية، يكون اسم سياسة SOAPMessageValidation هو
SOAP-Message-Validation-1,سبب تعذّر التنفيذ هوExpecting a child element but found none [Line 9]، ورقم السطر هو9."faultstring": "SOAP-Message-Validation-1 failed with reason: \"Expecting a child element but found none [Line 9]\""افحص سياسة SOAPMessageValidation وتأكَّد من أنّها تستخدم ملف تعريف مخطّط XSD للتحقّق من صحة الرسائل. على سبيل المثال، تحتوي سياسة SOAPMessageValidation التالية على ملف مصدر XSD في العنصر
<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>افحص حمولة الإدخال في رقم السطر المحدّد في الخطوة 1 أعلاه لمعرفة سبب الخطأ.
عيّنة عن حمولة XML للإدخال
<?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>في المثال الموضّح أعلاه، يحتوي السطر 9 على علامة الإغلاق
</shipTo>.افحص ملف تعريف مخطّط XML (
Script-1.xsd) المستخدَم في سياسة SOAPMessageValidation لمعرفة الشكل الذي يجب أن يبدو عليه العنصر<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> ...وفقًا لنموذج XSD المستخدَم للتحقّق من الصحة، يجب أن يتضمّن العنصر
<shipTo>العناصر الفرعية<name>و<street>و<address>و<country>. ومع ذلك، لا يحتوي حمولة XML المُدخَلة إلا على عنصر فرعي واحد، وهو<name>. نتيجةً لذلك، يظهر لك الخطأ:"faultstring": "SOAP-Message-Validation-1 failed with reason: \"Expecting a child element but found none [Line 9]\""
الدقة
هناك طريقتان لحلّ خطأ التحقّق من الصحة هذا:
الحلّ رقم 1
إذا تبيّن لك أنّ تعريف مخطط XSD يفرض قيودًا غير ضرورية وأنّ العنصر الفرعي <name> فقط مطلوب ضمن العنصر <shipTo>، يمكنك تعديل Script-1.xsd المستخدَم في سياسة SOAPMessageValidation. لإثبات صحة مثال الحمولة أعلاه، يمكنك تعديل ملف XSD على النحو التالي:
...
<xsd:element name="shipTo" type="shipAddress"/>
...
<xsd:complexType name="shipAddress">
<xsd:sequence>
<xsd:element name="name" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
الحلّ 2
إذا كان ملف تعريف XSD صحيحًا، يمكن تغيير حمولة XML المدخلة لتتطابق مع xsd. على سبيل المثال، يمكنك تعديل الحمولة لتتوافق مع xsd على النحو التالي:
<?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>
السبب: عدم تطابق حمولة SOAP
يحدث هذا الخطأ إذا لم تلتزم حمولة SOAP المُدخَلة بتعريف WSDL المحدّد في العنصر <ResourceURL> من سياسة SoapMessageValidation.
مثال على رسالة الخطأ
{
"fault": {
"faultstring": "SOAP-Message-Validation-1 failed with reason: \"Element name mismatch. Wildcard? [Line 11]\"",
"detail": {
"errorcode": "steps.messagevalidation.Failed"
}
}
}
التشخيص
حدِّد اسم سياسة SOAPMessageValidation وسبب تعذُّر التنفيذ ورقم السطر الذي لا تتطابق فيه حمولة SOAP مع تعريف WSDL. يمكنك العثور على كل هذه المعلومات من سلسلة الأخطاء. على سبيل المثال، في سلسلة الأعطال التالية، يكون اسم سياسة SOAPMessageValidation هو
SOAP-Message-Validation-1، وسبب الخطأ هو\"Element name mismatch. Wildcard? [Line 11]\""، ورقم السطر هو11:"faultstring": "SOAP-Message-Validation-1 failed with reason: \"Element name mismatch. Wildcard? [Line 11]\""افحص سياسة SOAPMessageValidation وتأكَّد من أنّها تستخدم مخطّط
wsdlللتحقّق من صحة الرسائل. على سبيل المثال، تحتوي سياسة SOAPMessageValidation التالية على ملف موردwsdlفي العنصر<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>افحص حمولة الإدخال في رقم السطر المحدّد في الخطوة 1 لفهم سبب الخطأ.
نموذج حمولة SOAP للإدخال
<?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>في المثال الموضّح أعلاه، يحتوي السطر 11 على العنصر الثانوي
<country>ضمن العنصر<shipTo>.افحص ملف تعريف WSDL،
SOAP-Message-Validation-1.wsdl، المستخدَم في سياسة SOAPMessageValidation لمعرفة الخطأ المحتمل في العنصر الفرعي<country>ضمن العنصر<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> ...وفقًا لتعريف WSDL المستخدَم للتحقّق من الصحة، لا يحتوي العنصر
<shipTo>على عنصر فرعي<country>. نتيجةً لذلك، يظهر لك الخطأ:"faultstring": "SOAP-Message-Validation-1 failed with reason: \"Element name mismatch. Wildcard? [Line 11]\""
الدقة
هناك طريقتان لحلّ خطأ التحقّق من الصحة هذا:
الحلّ رقم 1
إذا تبيّن لك أنّ تعريف WSDL المستخدَم غير صحيح، يمكنك تغيير SOAP-Message-Validation-1.wsdl المستخدَم في سياسة SOAPMessageValidation. لإثبات صحة مثال الحمولة أعلاه، يمكنك تعديل الملف على النحو التالي:
...
<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
إذا كان تعريف WSDL صحيحًا، يمكن تغيير حمولة SOAP للإدخال لتتطابق مع تعريف WSDL.
على سبيل المثال، يمكنك تعديل حمولة SOAP للإدخال على النحو التالي:
<?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>
السبب: تنسيق JSON أو XML غير صالح
يحدث هذا الخطأ إذا لم تلتزم حمولة SOAP المُدخَلة بتعريف WSDL المحدّد في العنصر <ResourceURL> من سياسة SoapMessageValidation.
مثال على رسالة الخطأ
{
"fault": {
"faultstring": "SOAP-Message-Validation-1 failed with reason: \"Expected <\/title> at line 15(possibly around char 420)\"",
"detail": {
"errorcode": "steps.messagevalidation.Failed"
}
}
}
التشخيص
تحديد اسم سياسة SOAPMessageValidation وسبب الخطأ ورقم سطر حمولة XML التي لا تتطابق مع تعريف WSDL يمكنك العثور على كل هذه المعلومات في سلسلة الخطأ. على سبيل المثال، في سلسلة الأعطال التالية، يكون اسم سياسة SOAPMessageValidation هو
SOAP-Message-Validation-1، وسبب الخطأ هوExpected </title> at line 15(possibly around char 420):، ورقم السطر هو15."faultstring": "SOAP-Message-Validation-1 failed with reason: \"Expected </title> at line 15(possibly around char 420)\""افحص حمولة الإدخال في رقم السطر المحدّد في الخطوة 1 أعلاه لفهم سبب حدوث الخطأ.
نموذج حمولة SOAP للإدخال
<?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>في المثال الموضّح أعلاه، يحتوي السطر 15 من ملف XML للإدخال على العنصر
<title>ولكن لم يتم إغلاقه بعلامة نهاية</title>.
الدقة
لحلّ الخطأ، تأكَّد من أنّ حمولة الإدخال صالحة وتمّ إنشاؤها بشكل صحيح.
على سبيل المثال، يمكنك تعديل حمولة XML للإدخال على النحو التالي:
...
</shipTo>
<items>
<item>
<title>I love APIs</title>
<quantity>1</quantity>
<price>2.90</price>
</item>
</items>
...