Вы просматриваете документацию Apigee Edge .
Перейдите к документации Apigee X. информация
Исходное сообщениенедоступно
Код ошибки
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 в конкретном прокси-сервере API, где произошел сбой. Может существовать одна или несколько политик 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 установлена переменная типа сообщения , которая существует в потоке, в котором выполняется политика.
Чтобы исправить политику, вы можете изменить элемент <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 накладывает ненужные ограничения и в элементе <shipTo>
требуется только дочерний элемент <name>
, вы можете изменить 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>
...